Skip to main content
Glama
cmendezs

mcp-einvoicing-ae

mcp-einvoicing-ae 🇦🇪

English | العربية

PyPI version Python License mcp-einvoicing-ae MCP server


Introduction

mcp-einvoicing-ae is an MCP (Model Context Protocol) server that exposes tools for United Arab Emirates electronic invoicing. It is part of the mcp-einvoicing-* family of country-specific servers, all built on mcp-einvoicing-core, which provides the shared validation engine, EN 16931 abstractions, and Peppol network utilities.

Generated PINT AE invoices are structurally conformant: cbc:UUID, cbc:ProfileExecutionID, per-line cac:ItemPriceExtension, and trade_license_number are all emitted, and round-trip back through parse_invoice_ae. The 5.00% standard VAT rate is enforced by a model validator, and a Peppol participant-lookup tool is exposed. validate_invoice_ae checks core's shared CEN EN16931 base Schematron only, not the PINT AE jurisdiction overlay; validate_tdd_ae currently reports "unavailable" — see Supported standards and Available tools below.

The UAE Peppol Authority's PINT AE (billing) specialization is at Status: Final, version 1.0.4 (2026-06-02); the Peppol AE Tax Data Document (TDD) is at Status: Final, version 1.0.4 (2026-07-23). Full citations: specs/README.md.

Related MCP server: mcp-fattura-elettronica-it

Supported standards

  • PINT AE (billing) — UBL 2.1, CustomizationID: urn:peppol:pint:billing-1@ae-1, ProfileID: urn:peppol:bis:billing. Version 1.0.4 (2026-06-02).

  • PINT AE (self-billing)CustomizationID: urn:peppol:pint:selfbilling-1@ae-1, ProfileID: urn:peppol:bis:selfbilling.

  • Peppol AE TDD (Tax Data Document) — the 5th-corner reporting document sent to the FTA; its own XML namespace (urn:peppol:schema:taxdata:1.0), not a UBL invoice. Version 1.0.4 (2026-07-23).

The UAE programme is a decentralized Peppol 5-corner model routed through Accredited Service Providers, adding a tax-authority reporting leg (the TDD above) beyond the 4-corner exchange used elsewhere in this family. The invoice-tree pathway is confirmed EN16931Invoice (PINT AE is a UBL 2.1 CIUS of EN 16931-1:2017) — no JSON binding was found in the supplied specifications.

AEInvoice serializes via mcp_einvoicing_ae.wire_formats.AEUBLSerializer, which layers the AE-specific elements (cbc:ProfileExecutionID, PartyLegalEntity/CompanyID with schemeAgencyID="TL" for trade_license_number) on top of core's EN16931UBLSerializer — the latter now emits cbc:UUID (from document_uuid) and per-line cac:ItemPriceExtension natively (mcp-einvoicing-core v1.25.0), since profile/business_process already hold the real Peppol URNs. AEParty.vat_id carries the 15-digit TRN, format-validated via TaxIdentifier.validate_ae_trn() (core v1.22.0); the Peppol participant ID (TIN) is auto-derived as its first 10 digits. AETaxDataDocument models the TDD's mandatory fields but is not a UBL invoice and is not built on AEInvoice. parse_invoice_ae re-extracts the AE-specific elements from the raw XML and re-validates the result as AEInvoice, so parsing re-applies the same TRN and tax-rate checks a fresh construction gets — see Available tools for what's covered and what isn't. The TDD transport channel (same AS4 channel as the invoice, or a separate one) remains an open documentation question, not a code gap. Full detail: specs/README.md.

Validation scope, as of v0.2.0: validate_invoice_ae checks the CEN EN16931 base Schematron only (structural + arithmetic/totals rules, shared with mcp-einvoicing-be/mcp-ksef-pl) — not the PINT AE jurisdiction overlay (ibr-*-ae rules). BR-CO-09 (VAT identifier must carry an ISO 3166-1 alpha-2 prefix) is expected to fire on every genuine AE invoice, since UAE TRNs carry no country prefix; this is disclosed in every result, not a defect in your data. validate_tdd_ae currently has no validation available at all. v0.1.0 bundled five self-compiled files derived from OpenPeppol's PINT AE and TDD Schematron/XSD sources with no confirmed redistribution rights — removed in v0.2.0. See CHANGELOG.md.

Installation

Requirements

Using uvx (recommended)

uvx mcp-einvoicing-ae

Using uv

uv add mcp-einvoicing-ae

From source

git clone https://github.com/cmendezs/mcp-einvoicing-ae.git
cd mcp-einvoicing-ae
uv sync --all-extras

Configuration

Environment variables

Variable

Required

Default

Description

LOG_LEVEL

No

INFO

Logging level: DEBUG, INFO, WARNING, or ERROR

Country-specific variables (transport endpoints, credentials, environment switches) are added once the specification documents them. See .env.example. This server needs no credentials to run today.

Claude Desktop integration

To use this server with Claude, add this configuration to your claude_desktop_config.json file:

{
  "mcpServers": {
    "einvoicing-ae": {
      "command": "uvx",
      "args": ["mcp-einvoicing-ae"]
    }
  }
}

Cursor integration

Cursor supports MCP servers via stdio. Add the configuration in:

  • Global (all projects): ~/.cursor/mcp.json

  • Project (this repository only): .cursor/mcp.json

{
  "mcpServers": {
    "einvoicing-ae": {
      "command": "uvx",
      "args": ["mcp-einvoicing-ae"]
    }
  }
}

Reload the Cursor window (Ctrl+Shift+P then Reload Window) to apply the changes.

Kiro integration

Kiro supports MCP servers via its dedicated configuration file. Two levels are available:

  • Global (all projects): ~/.kiro/settings/mcp.json

  • Workspace (this repository only): .kiro/settings/mcp.json

{
  "mcpServers": {
    "einvoicing-ae": {
      "command": "uvx",
      "args": ["mcp-einvoicing-ae"],
      "disabled": false,
      "autoApprove": []
    }
  }
}

The file is automatically reloaded on save. You can also open the config via the command palette (Cmd+Shift+P / Ctrl+Shift+P) then MCP.

Available tools

Tool

Description

generate_invoice_ae

Generate a PINT AE UBL 2.1 invoice XML (billing or self-billing) from structured data via AEUBLSerializer. Emits every unconditionally-mandatory PINT AE element: cbc:UUID, cbc:ProfileExecutionID, per-line cac:ItemPriceExtension, and PartyLegalEntity/CompanyID (trade_license_number, when set).

validate_invoice_ae

Validate a PINT AE UBL 2.1 invoice against core's shared CEN EN16931 base Schematron (structural + arithmetic/totals rules only — not the PINT AE jurisdiction overlay). Requires the xslt2 extra.

validate_tdd_ae

Always returns an explicit "unavailable" result — no licensed validation artifact is currently available for the Peppol AE Tax Data Document (TDD).

parse_invoice_ae

Parse a PINT AE UBL 2.1 invoice XML into a structured dict. Re-extracts document_uuid, profile_execution_id, and trade_license_number from the raw XML and re-validates the result as AEInvoice — TRN format and tax-rate/category checks are re-applied to parsed content, not just fresh constructions.

Peppol participant lookup (core's register_peppol_tools plugin, TIN-based id adapter — scheme 0235, first 10 digits of the TRN):

Tool

Description

peppol_lookup_participant

Check whether a business is registered on the Peppol network; returns registration status and supported document types

peppol_get_service_endpoint

Fetch the AS4 endpoint for a participant's document type

resolve_peppol_dns

DNS-only (SML) diagnostic, independent of SMP reachability

peppol_send

Transmit a UBL/CII invoice via AS4

generate_invoice_ae/validate_invoice_ae/parse_invoice_ae require mcp-einvoicing-ae[xslt2] (bundles saxonche) for the base Schematron validator to load; without it, validate_invoice_ae returns an explicit "unavailable" result rather than a silent pass.

The tool reference in docs/TOOLS.md is generated from the running server:

uv run python scripts/gen_tool_reference.py

Vendor neutrality

This server implements the standard itself: it builds, validates, and signs the document locally. It is not a client for a commercial invoicing platform, and your signing keys and credentials never leave your own infrastructure.

A Peppol access point is required for PINT AE / Peppol AE TDD, but any accredited access point speaks the same AS4 profile, so switching providers is a configuration change, not a code change.

Contributing

See CONTRIBUTING.md for development setup, the test and lint commands, and the pull request checklist. Security issues follow the private disclosure process in SECURITY.md.

Other e-invoicing MCP servers

Country

Server

🌍 Global

mcp-einvoicing-core

🇧🇪 Belgium

mcp-einvoicing-be

🇧🇷 Brazil

mcp-nfe-br

🇫🇷 France

mcp-facture-electronique-fr

🇩🇪 Germany

mcp-einvoicing-de

🇮🇳 India

mcp-einvoicing-in

🇮🇹 Italy

mcp-fattura-elettronica-it

🇲🇽 Mexico

mcp-cfdi-mx

🇵🇱 Poland

mcp-ksef-pl

🇸🇬 Singapore

mcp-invoicenow-sg

🇪🇸 Spain

mcp-facturacion-electronica-es

🇦🇪 United Arab Emirates

mcp-einvoicing-ae

License

This project is licensed under the Apache 2.0 license — see LICENSE for details. For the full version history, see CHANGELOG.md.

Available Tools

17 tools
check_document_type_id_in_codelistB

Check whether a (scheme, value) pair is a recognized Peppol document type identifier.

Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes). Searches all entries regardless of state, so a historical (deprecated or removed) document type is still reported as found.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
schemeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 burden of behavioral disclosure. It adds useful context: the search includes deprecated/removed entries and requires a dedicated environment variable. However, it does not disclose the return shape (e.g., boolean), error behavior, or performance characteristics, so transparency is partial.

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?

The description is two sentences with no filler. The core purpose is the first clause, followed by a prerequisite and a behavioral nuance. Every sentence earns its place, and the structure is conventionally front-loaded.

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 existence check, the description covers the essential semantics, an environmental prerequisite, and a non-obvious behavioral detail. Yet because there is no output schema and no annotation, the description still omits the exact return format and error conditions, which are the kind of details an agent would need to invoke it correctly in a broader workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only refers to the pair as '(scheme, value)' without explaining each parameter's format, allowed values, or relationship. An agent can infer that scheme is the identifier scheme and value is an ID, but the description does not compensate for the absence of any property descriptions in the schema.

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 states a specific verb ('check') and a clear resource ('Peppol document type identifier') against a codelist, which immediately distinguishes it from sibling check_* tools such as check_process_id_in_codelist and check_document_name_code. The subject-verb-object structure is unambiguous and front-loaded.

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?

The description gives a prerequisite (EINVOICING_PEPPOL_CODELIST_DIR) and a cross-reference to list_participant_id_schemes, but it never says when to use this tool versus the many adjacent check_* and list_* tools. No when-not or alternative guidance is provided, leaving tool selection to inference from the name.

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

check_participant_id_scheme_in_codelistA

Check whether a 4-digit ISO 6523 ICD code (e.g. "0208") is a recognized Peppol scheme.

Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).

ParametersJSON Schema
NameRequiredDescriptionDefault
icdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/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 behavioral disclosure burden. It does reveal an important prerequisite (EINVOICING_PEPPOL_CODELIST_DIR) and implies a read-only boolean check, but it doesn't describe error behavior, return format, or side effects. The presence of an output schema reduces the need to document return values, but the description alone is still fairly 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 sentences with no filler. The core action and input format are front-loaded, and the prerequisite/environment-variable note is placed separately and clearly.

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 predicate with an output schema, the description covers the input format and the key prerequisite. The reference to `list_participant_id_schemes` is slightly vague but still provides a path for an agent to discover more context. It is adequate but not exhaustive.

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 schema only says `icd` is a string, but the description adds that it must be a 4-digit ISO 6523 ICD code with the example `0208`. This compensates for the 0% schema description coverage and gives enough format information for an agent to construct a valid argument.

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 action and resource: checking whether a 4-digit ISO 6523 ICD code is a recognized Peppol scheme. This is clear and more specific than generic ICD checks like `check_icd_code`, though it doesn't explicitly name an alternative to distinguish itself from siblings.

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 intended use is clear: validate a participant identifier scheme code against the Peppol codelist. It adds a prerequisite (environment variable) and points to the companion `list_participant_id_schemes` tool, giving an agent useful context for when to invoke this tool, though it doesn't explicitly state when not to use it.

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

check_process_id_in_codelistB

Check whether a (scheme, value) pair is a recognized Peppol process identifier.

Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
schemeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It usefully discloses an environment prerequisite, but does not state whether the check is read-only, what its return behavior looks like, or how failures are signaled. The output schema may cover return values, but the description itself is thin on side effects and error behavior.

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 sentences with no filler; the purpose is front-loaded and the prerequisite is the only additional information. Every sentence earns its place.

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?

The tool is simple (two string params, output schema exists), so this description is mostly adequate for selecting and invoking it. However, given the directory requirement, the agent would benefit from a pointer to where process identifiers can be listed (e.g., list_process_ids) to fill valid values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the parameter definitions. It only says that scheme and value form a pair to be checked, adding little beyond their names; it never defines valid schemes/values or references list_process_ids for valid process identifiers.

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 action ('Check whether') on a specific resource: a (scheme, value) pair as a Peppol process identifier. This clearly distinguishes it from the list_* siblings, though it does not explicitly call out check_participant_id_scheme_in_codelist as its closest sibling.

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 only usage guidance is the prerequisite EINVOICING_PEPPol_CODELIST_DIr and a pointer to list_participant_id_schemes for that context. It does not say when to prefer this over other check_* tools or list_process_ids, nor what to do when the pair is not recognized.

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

generate_invoice_aeA

Generate a PINT AE UBL 2.1 e-invoice XML document from structured data.

Applies the correct CustomizationID (BT-24) and ProfileID (BT-23) for the selected variant. All unconditionally-mandatory PINT AE elements are emitted: cbc:UUID, cbc:ProfileExecutionID, per-line cac:ItemPriceExtension, and PartyLegalEntity/CompanyID (AEParty.trade_license_number, when set).

Returns a dict with:

  • xml: the generated UBL 2.1 XML string

  • customization_id: the CustomizationID applied (BT-24)

  • profile_id: the ProfileID applied (BT-23)

ParametersJSON Schema
NameRequiredDescriptionDefault
variantNoPINT AE profile variant: 'billing' (default) or 'selfbilling'billing
invoice_dataYesInvoice fields matching the AEInvoice schema

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full disclosure burden. It goes well beyond a basic statement by specifically describing the output dict keys, the IDs applied, and the mandatory UBL elements emitted. It does not cover error handling or validation failure behavior, but provides strong insight into the tool's transformation behavior.

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?

The description is well-structured and efficient. It front-loads the core purpose, then adds meaningful technical details, and ends with a clear bulleted return contract. Every sentence contributes useful information without repetition or filler.

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 tool with two parameters, full schema coverage, and an explicit output dict description, the description is sufficiently complete. It tells the agent what the generated document contains and what the tool returns. It could mention validation of the input data before generation, but the receipt is minor given the provided schema and output description.

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 baseline is 3. The description adds value by explaining that variant drives the selected CustomizationID/ProfileID and that invoice_data should match the AEInvoice schema, including a specific nested field (AEParty.trade_license_number). This clarifies how the parameters relate to the generated XML.

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 the specific action 'generate', the artifact 'PINT AE UBL 2.1 e-invoice XML document', and the input 'structured data'. It also names the key distinguishing behaviors — applying CustomizationID (BT-24) and ProfileID (BT-23) — which separates it from sibling parse/validate tools.

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?

Clear context: use this tool when structured invoice data must be turned into a PINT AE UBL XML. It explains the variant selects billing vs selfbilling profiles, giving practical usage direction. It does not explicitly state when not to use it versus parse or validate, but the generation purpose is unambiguous.

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

get_peppol_codelist_versionA

Report the OpenPeppol eDEC code list release version(s) currently configured locally.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral transparency burden. It clearly signals a read-only reporting action ('Report') and discloses that the value is based on local configuration rather than a remote source. It does not detail return shape, but the output schema can cover that.

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?

The description is a single sentence with no filler, and the key subject ('OpenPeppol eDEC code list release version(s)') is front-loaded. Every word 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-parameter, local read-only status check, the description is nearly complete. It correctly frames what is being reported and where the data comes from, and the output schema can document the exact return structure. The only minor gap is not explicitly contrasting it with the EN16931 codelist version sibling.

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 accepts zero parameters, so the schema is fully self-describing and there are no parameter semantics to explain. The baseline of 4 for zero-parameter tools applies, and the description adds no contradictory or unnecessary parameter information.

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?

Description states a clear verb ('Report'), a specific resource ('OpenPeppol eDEC code list release version(s)'), and the local scope ('currently configured locally'). It is easy to distinguish from the sibling get_en16931_codelist_version because the description explicitly names the eDEC code list.

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 intended use case—checking the locally configured eDEC code list version—is clear from the description and the tool name. It does not explicitly offer when-not-to-use guidance or point to the similar EN16931 tool, but the OpenPeppol eDEC mention gives enough context to select it appropriately.

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

list_document_type_idsA

List Peppol document type identifiers from the OpenPeppol eDEC code list.

Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoWhen True (default), omit deprecated/removed entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral context. It discloses an important environment requirement, which is useful. However, it does not explicitly state that this is a read-only listing operation or describe any other behavioral traits such as error conditions or performance characteristics.

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 concise sentences with no filler. The main purpose is front-loaded, and the prerequisite is clearly separated in the second sentence. Every sentence contributes useful 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?

Given the tool's low complexity, a single optional parameter, an existing output schema, and the environment prerequisite being mentioned, the description is mostly complete. The only notable gap is lack of explicit guidance on when to use this tool versus a sibling like check_document_type_id_in_codelist.

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?

The schema already fully describes the only parameter (`active_only`) with a clear default and meaning. The description adds no additional semantic value for parameters, 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?

The description uses a specific verb ('List') and a clear resource ('Peppol document type identifiers from the OpenPeppol eDEC code list'). It is distinguishable from many sibling codelist tools, though it does not explicitly contrast with similar tools like list_document_name_codes or check_document_type_id_in_codelist.

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 intended use is implied by the name and description, but there is no explicit when-to-use guidance or mention of alternatives. The prerequisite note about EINVOICING_PEPPOL_CODELIST_DIR provides useful context and points to a sibling for setup, but it does not explain when to choose this tool over another.

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

list_participant_id_schemesA

List Peppol participant identifier (ICD) schemes from the OpenPeppol eDEC code list.

Requires EINVOICING_PEPPOL_CODELIST_DIR to point at a local copy of the eDEC "Participant Identifier Schemes" GeneriCode export (not bundled with this package, no confirmed redistribution rights, see mcp_einvoicing_core.peppol.codelists module docstring).

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoWhen True (default), omit deprecated/removed entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It reveals that the data source is a local, non-bundled eDEC GeneriCode export, that an environment variable is required, and that redistribution rights are uncertain. This adds meaningful operational context beyond the input schema.

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?

The description is front-loaded with the purpose and follows with essential setup context. There is no redundant text; every sentence contributes necessary information, including the source, prerequisite, and licensing caveat.

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 list tool with an output schema, the description covers the data source, prerequisite, and licensing context. It does not mention alternative tools, but the main operational requirements are present, making it sufficiently complete.

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?

The single parameter, 'active_only', is already fully described in the schema with its type, default, and behavior. The description adds no additional parameter semantics, so the baseline of 3 for high schema description coverage is appropriate.

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 clearly states a specific verb and resource: 'List Peppol participant identifier (ICD) schemes from the OpenPeppol eDEC code list.' This distinguishes the tool's subject matter, though it does not explicitly differentiate it from the similarly named sibling 'list_icd_codes'.

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 provides a concrete prerequisite: EINVOICING_PEPPOL_CODELIST_DIR must point to a local eDEC GeneriCode export. However, it gives no guidance on when to prefer this tool over alternatives such as list_icd_codes or check_participant_id_scheme_in_codelist.

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

list_process_idsA

List Peppol process identifiers from the OpenPeppol eDEC code list.

Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoWhen True (default), omit deprecated/removed entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 burden of explaining prerequisites. It does disclose that EINVOICING_PEPPOL_CODELIST_DIR is required, which is useful and non-obvious. However, it does not describe error behavior, return structure, or the read-only nature beyond the verb 'List', leaving some behavioral gaps.

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?

The description is two sentences, front-loaded with the core purpose, and includes only necessary prerequisite information. Every sentence earns its place with no repetition or filler.

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?

The tool has a simple schema, a single optional parameter, and an output schema, so minimal description is needed. The environment variable requirement is an important addition that makes the tool usable. It could be more complete by noting the relationship to the check counterpart, but this is a minor gap for a straightforward listing 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% for the single boolean parameter active_only, so the schema already fully documents its meaning. The description adds no additional parameter semantics, which is acceptable given the baseline of 3 when schema coverage is high.

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 clearly states the action ('List'), the resource ('Peppol process identifiers'), and the source ('OpenPeppol eDEC code list'). It differentiates from sibling tools like check_process_id_in_codelist by indicating that this tool returns a list rather than validating a single identifier.

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 mentions the required environment variable and points to list_participant_id_schemes for reference, but it does not explicitly explain when to use this tool versus the sibling check_process_id_in_codelist. The usage context is partially implied by the name and sibling list, but not fully stated.

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

list_spis_use_case_idsA

List Peppol SPIS use case identifiers from the OpenPeppol eDEC code list.

Requires EINVOICING_PEPPOL_CODELIST_DIR (see list_participant_id_schemes).

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoWhen True (default), omit deprecated/removed entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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 burden of behavioral disclosure. It does disclose a significant dependency: the EINVOICING_PEPPOL_CODELIST_DIR environment variable. But it does not mention what happens if that directory is missing, whether the data is read locally, or any ordering/filtering behavior, so the behavioral picture is incomplete.

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?

The description is two concise sentences: one states the purpose, the second states a requirement and points to a sibling for setup. There is no fluff and the most important information is front-loaded.

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 list-only tool with one optional parameter and an output schema, the description covers the essentials: the data source and the required environment variable. It does not explain when to prefer it over related codelist tools, but it is otherwise complete enough for an agent to invoke correctly.

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?

The only parameter, active_only, is fully documented in the schema with its default value and effect. The description adds no parameter-specific meaning beyond that, so the schema already does the heavy lifting.

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 clearly states a specific verb and resource: it lists 'Peppol SPIS use case identifiers' sourced from the OpenPeppol eDEC code list. It is unambiguous, though it does not explicitly distinguish itself from sibling list tools such as list_process_ids or list_document_type_ids.

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 by naming the resource, and it adds a key prerequisite by requiring EINVOICING_PEPPOL_CODELIST_DIR, even pointing to list_participant_id_schemes for setup. However, it does not state when to use this tool versus alternatives or when not to use it, leaving some selection guidance to inference.

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

parse_invoice_aeA

Parse a PINT AE UBL 2.1 XML invoice into a structured dict.

Accepts a PINT AE billing or self-billing UBL 2.1 document (Invoice or CreditNote root), extracts the EN 16931 core field set plus the AE extensions (document_uuid, profile_execution_id, trade_license_number), and re-validates the merged result as an AEInvoice — so TRN format and tax-rate/category consistency are re-checked on parsed content, not just on freshly constructed invoices.

Returns {"success": true, "invoice": {...}} on success, or {"success": false, "error": "..."} on parse or validation failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
xml_contentYesRaw PINT AE UBL 2.1 XML invoice content

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that the tool extracts EN 16931 fields plus AE extensions, re-validates as an AEInvoice, re-checks TRN format and tax-rate/category consistency, and returns a structured success/failure envelope.

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?

The description is well-structured and front-loaded: purpose, accepted input scope, behavioral detail, then return format. Each sentence adds distinct information with no filler or redundancy.

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?

For a single-parameter parse tool with an output schema and no annotations, the description is complete. It covers accepted document types, extracted fields, validation behavior, and the exact success/error response shape, leaving no operational gap for an agent choosing or calling the tool.

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% for the single xml_content parameter, so the baseline is 3. The description adds valuable semantic detail beyond the schema by specifying that billing and self-billing documents are accepted and that both Invoice and CreditNote roots are valid, which helps the agent understand what content to pass.

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 opening sentence states a specific verb and resource: parse a PINT AE UBL 2.1 XML invoice into a structured dict. The description further distinguishes this from sibling generate/validate tools by clarifying it extracts fields and re-validates parsed content, leaving no ambiguity about its role.

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 description gives clear context on acceptable inputs: PINT AE billing or self-billing UBL 2.1 documents with Invoice or CreditNote roots. It does not explicitly name alternatives or state when not to use the tool, but the accepted-input scope and parse-focused behavior make the usage context clear.

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

peppol_get_service_endpointA

Fetch the AS4 endpoint for a Peppol participant's document type.

Resolves the SMP hostname via DNS, then fetches service metadata for document_type_id. If the SMP returns a redirect, the result's redirect_url is set and endpoint_url is None; callers must not follow more than one redirect hop (SMP 1.4.0 §3.2).

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesPeppol participant ID or adaptable national identifier.
environmentNo"production" or "test".production
document_type_idNoPeppol document type identifier URN (default: BIS Billing 3.0 invoice).urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations provided, the description carries full behavioral disclosure responsibility. It details the internal workflow (DNS resolution then service metadata fetch) and precisely describes the redirect edge case: `redirect_url` set, `endpoint_url` None, and a hard limit of one redirect hop per SMP 1.4.0 §3.2. This is explicit, operational context that goes well beyond the schema.

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?

The description is two sentences with the primary action front-loaded and the critical redirect caveat placed immediately after. Every clause adds relevant information; there is 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 tool with three parameters and an output schema, the description covers the full workflow and a significant non-obvious edge case (redirect handling). It does not mention error behavior when DNS resolution or SMP fetching fails, but given the output schema exists and the parameter schema is complete, the core operational knowledge needed to invoke correctly is present.

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?

The input schema already documents all three parameters with 100% coverage, so the baseline is 3. The description references `document_type_id` in the workflow and contextualizes it as the target of metadata fetching, but adds no new parameter-level syntax or format details beyond what the schema provides.

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: 'Fetch the AS4 endpoint for a Peppol participant's document type.' It clearly states the tool's objective and distinguishes itself from sibling tools like resolve_peppol_dns by mentioning the DNS resolution step, making the tool's scope unambiguous.

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 purpose sentence implies the tool is for endpoint discovery, and the technical detail about DNS resolution suggests how it works. However, it does not explicitly name alternatives or state when to prefer this tool over similar siblings like resolve_peppol_dns or peppol_lookup_participant. A short 'use this when...' phrase would elevate it.

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

peppol_lookup_participantA

Check whether a business is registered on the Peppol network.

Performs a DNS-over-HTTPS U-NAPTR lookup followed by an SMP service-group request to determine registration status and the list of supported document type identifiers.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesPeppol participant ID ("<scheme>:<value>") or a bare national identifier this server knows how to adapt (e.g. a VAT number, if a national identifier adapter is configured).
environmentNo"production" or "test".production

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It does well by revealing that the tool performs network lookups (DNS-over-HTTPS and SMP requests) to determine registration status and document type identifiers, implying a read-only, non-mutating operation.

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?

The description is concise and front-loaded: the first sentence states the purpose, and the second sentence explains the operational flow. Every sentence adds necessary information without repetition or filler.

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?

Given the presence of an output schema and full parameter documentation, the description is largely complete: it states the purpose, the lookup method, the determined outcome, and the identifier scope. It could be slightly more complete by noting when to prefer this over related Peppol lookup tools, but that is not a critical gap.

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?

The input schema provides 100% coverage of both parameters: identifier and environment, each with clear descriptions. The tool description adds no additional parameter-level meaning beyond what the schema already states, so the baseline score of 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?

The description opens with a specific verb and resource: 'Check whether a business is registered on the Peppol network.' It also clarifies the mechanism (DNS-over-HTTPS U-NAPTR lookup + SMP service-group request), making it easy to distinguish from siblings like resolve_peppol_dns or peppol_directory_search.

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 intended use case is clear from the description: verify Peppol registration status and supported document types. However, it does not explicitly contrast itself with sibling tools such as peppol_get_service_endpoint, resolve_peppol_dns, or peppol_directory_search, so an agent must infer when this tool is the right choice.

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

peppol_sendA

Send a UBL/CII invoice to a Peppol participant via AS4.

Looks up the recipient's AS4 endpoint (SMP), builds the ebMS3/AS4 envelope, and transmits it using the supplied signing credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
sender_idYesPeppol AP identifier of the sender.
environmentNo"production" or "test".test
certificate_pathYesPath to the PEM-encoded signing certificate.
document_type_idNoPeppol document type identifier URN (default: BIS Billing 3.0 invoice).urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1
private_key_pathYesPath to the PEM-encoded private key.
invoice_xml_base64YesBase64-encoded UBL or CII invoice XML.
private_key_passwordNoOptional password for the private key.
recipient_identifierYesPeppol participant ID or adaptable national identifier of the receiver.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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. It goes beyond a simple 'sends an invoice' by disclosing the steps: SMP lookup, ebMS3/AS4 envelope construction, and credential use. It does not mention irreversibility or delivery side effects, but the transmission intent is explicit, making this reasonably transparent.

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 clear sentences with no wasted words. The first sentence gives the essential purpose, and the second adds meaningful operational process detail. The description is well front-loaded and appropriately sized for the tool's complexity.

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?

The tool is a high-stakes external transmission operation with 8 parameters. An output schema exists, so return values are covered, but the description omits useful preconditions such as SMP discoverability, environment selection, and the relationship between sender_id and the signing credentials. It also does not connect to related lookup tools like peppol_lookup_participant or peppol_get_service_endpoint, which could be prerequisite steps.

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?

The schema documents all 8 parameters with descriptions, so the baseline is 3. The description adds no parameter-level detail beyond referencing the supplied signing credentials, which map to certificate and private key params. It does not need to compensate for missing schema coverage because coverage is 100%.

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: 'Send a UBL/CII invoice to a Peppol participant via AS4.' It clearly identifies the operation and distinguishes it from invoice creation, validation, and lookup tools among the siblings.

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 intended use is clear from the description: use this when an invoice document needs to be transmitted to a Peppol participant. It does not explicitly state when not to use it or name alternatives, but none of the sibling tools perform this exact sending function, so the context is sufficient.

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

resolve_peppol_dnsA

Resolve the SMP hostname for a Peppol participant via DNS only.

Performs the raw U-NAPTR (SML) lookup without fetching the SMP service group, useful for diagnosing whether a participant is registered in the SML independently of SMP reachability.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesPeppol participant ID or adaptable national identifier.
environmentNo"production" or "test".production

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden and does well: it discloses that the tool is DNS-only, performs a raw U-NAPTR lookup, and explicitly does not fetch the SMP service group. This gives the agent an accurate model of side effects and limitations, though it does not discuss network dependency or error behavior.

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?

The description is two tightly scoped sentences: the first states the core action, the second adds the key behavioral distinction and use case. No filler or repetition exists.

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 two-parameter tool with an output schema, the description is largely complete: it explains the operation, its scope, and its diagnostic purpose. It could slightly improve by naming a sibling alternative, but this is not required for correctness.

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 both parameters well. The description reinforces what 'identifier' refers to implicitly via 'participant', but does not add new parameter-level detail beyond the schema. 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?

The description names a specific verb ('Resolve'), resource ('SMP hostname for a Peppol participant'), and method ('via DNS only'). It further distinguishes itself from sibling tools by clarifying it performs the raw U-NAPTR lookup without fetching the SMP service group.

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 description clearly implies when to use it: for diagnosing SML registration independently of SMP reachability. It does not explicitly name alternative tools or when not to use it, but the context is strong enough that an agent can infer the appropriate scenario.

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

validate_invoice_aeA

Validate a PINT AE UBL 2.1 invoice against the CEN EN16931 base Schematron.

Checks the CEN EN16931 base rules (structural + arithmetic/totals, ~50 BR-* rules) via core's bundled, licensing-clean Schematron. Does NOT check the PINT-AE jurisdiction overlay (ibr-*-ae rules) — the result's metadata.scope is "en16931-base-only", and EN16931_BASE_ONLY_SCOPE_WARNING is always included. BR-CO-09 is expected to fire on every genuine AE invoice (see EN16931_BASE_KNOWN_LIMITATIONS_WARNING, always included) since UAE TRNs carry no ISO country prefix. This is not a full PINT AE conformance check; a document that passes may still be rejected by a real Peppol Access Point (no confirmed OpenPeppol redistribution rights for the overlay rules). Returns a structured result with per-rule error and warning messages. The variant parameter is accepted for interface stability with v0.1.0 but does not change which rules run — the CEN base rules are identical for both billing and self-billing profiles.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlYesRaw PINT AE UBL 2.1 XML invoice content
variantNoPINT AE profile variant: 'billing' (default) or 'selfbilling'billing

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so richly: it discloses the returned metadata.scope value, that EN16931_BASE_ONLY_SCOPE_WARNING and a known-limitations warning are always included, that BR-CO-09 fires on every genuine AE invoice, and that the variant parameter is inert. This is exactly the non-obvious behavioral context an agent needs.

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?

Purpose and scope are stated first, then caveats, then the return note and variant clarification. It is long but every sentence carries a distinct caveat (never-checked overlay, always-included warnings, expected BR-CO-09 firing), so little reads as 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?

An output schema exists, so return values need not be narrated, and the description fills the remaining gaps: scope of validation, guaranteed warnings, expected false positives, downstream acceptance limits, and variant behavior. Nothing material to correct invocation 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 real meaning beyond the schema by explaining that 'variant' is accepted only for interface stability and does not change which rules run. That is a substantive semantic clarification the schema default does not convey.

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 first sentence states a specific verb and resource with scope: validating a PINT AE UBL 2.1 invoice against the CEN EN16931 base Schematron. It distinguishes itself from siblings like validate_tdd_ae and generate_invoice_ae by naming exactly which rule set runs and which overlay is excluded.

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 clearly frames when the result is authoritative (base rules) and when it is not (PINT-AE jurisdiction overlay, real Access Point acceptance), which steers usage decisions. However, it never explicitly names an alternative tool or the condition that would route the agent elsewhere, leaving that to inference.

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

validate_tdd_aeA

Validate a Peppol AE Tax Data Document (TDD).

Always returns an explicit "unavailable" result — see module docstring and _TDD_VALIDATION_UNAVAILABLE for why no TDD validation is currently available.

ParametersJSON Schema
NameRequiredDescriptionDefault
xmlYesRaw Peppol AE Tax Data Document (TDD) XML content

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, the description carries the full burden of behavioral disclosure, and it clearly discloses the non-obvious trait that this tool always returns an explicit 'unavailable' result. This prevents an agent from expecting a real validation outcome and gives the reason why. There is no annotation contradiction.

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?

The description is only two sentences, front-loads the purpose, and immediately warns about the stub behavior. Every sentence earns its place and there is no filler.

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 tool with full schema coverage and an output schema, the description provides the essential behavioral context: it always returns unavailable. It does not mention sibling validate_invoice_ae for comparative routing, but nothing about how to invoke the tool or what outcome to expect 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?

The schema already fully describes the single xml parameter as 'Raw Peppol AE Tax Data Document (TDD) XML content' at 100% coverage. The description's 'Raw' and TDD wording adds no meaningful semantics beyond the schema, 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?

The description names a specific operation and resource: validating a Peppol AE Tax Data Document (TDD), which is distinct from the sibling validate_invoice_ae. The second sentence clarifies the actual available behavior (always returns unavailable), so there is no ambiguity about what the tool is for.

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 does not explicitly state when to use this tool instead of alternatives, nor does it name validate_invoice_ae as the route for Peppol invoice validation. However, the explicit note that no TDD validation is currently available implies an agent should not expect real validation from this tool, which is an implicit usage signal.

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. 17 tool updatesv0.3.0
    • First observedcheck_document_type_id_in_codelist
    • First observedcheck_participant_id_scheme_in_codelist
    • First observedcheck_process_id_in_codelist
    • First observedgenerate_invoice_ae
    • First observedget_peppol_codelist_version
    • First observedlist_document_type_ids
    • First observedlist_participant_id_schemes
    • First observedlist_process_ids
    • First observedlist_spis_use_case_ids
    • First observedparse_invoice_ae
    • First observedpeppol_directory_search
    • First observedpeppol_get_service_endpoint
    • First observedpeppol_lookup_participant
    • First observedpeppol_send
    • First observedresolve_peppol_dns
    • First observedvalidate_invoice_ae
    • First observedvalidate_tdd_ae

TDQS

A3.6/5.0

Scored across 17 tools

Disambiguation4/5

The three network lookup tools (resolve_peppol_dns, peppol_lookup_participant, peppol_get_service_endpoint) layer on the same DNS/SMP pipeline and could be confused, though descriptions clearly delineate DNS-only vs registration vs endpoint retrieval. The codelist list_*/check_* families and the generate/parse/validate/send invoice tools are otherwise cleanly separated.

Naming Consistency4/5

All names use snake_case, but the convention varies: most tools follow verb_noun (list_document_type_ids, check_process_id_in_codelist), while several network tools use a peppol_ prefix (peppol_send, peppol_get_service_endpoint) or a noun_verb order (peppol_directory_search). Overall readable and mostly predictable with minor deviations.

Tool Count3/5

17 tools sits just above the ideal range and includes redundant families: three list_* and three check_* codelist tools that could be parameterized, plus three overlapping DNS/SMP lookup tools. Each tool is individually defensible, but the set feels heavier than necessary for this domain.

Completeness3/5

Core generate/parse/validate/send lifecycle is covered, but AE-specific validation is explicitly incomplete (no PINT-AE jurisdiction overlay rules, TDD validation always returns unavailable), and there is no inbound AS4 receipt or message handling. These are notable gaps for a full AE e-invoicing surface.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Model Context Protocol (MCP) server for French Electronic Invoicing (NF XP Z12-013). Provide tools to validate, generate, and explore API specifications for PDP/OD interoperability.
    2
    34
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Model Context Protocol (MCP) server for Italian Electronic Invoicing (FatturaPA / SDI). Provide tools to validate, generate, and explore API specifications for Sistema di Interscambio (SDI) interoperability.
    43
    1
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Model Context Protocol (MCP) server for Belgian Electronic Invoicing (Peppol BIS 3.0 / PINT-BE / Mercurius). Provides tools to validate, generate, and transform UBL 2.1 e-invoices, and look up BCE/KBO enterprise data and Peppol participants.
    50
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Model Context Protocol (MCP) server for Polish Electronic Invoicing (KSeF / FA(2)). Provides tools to validate, generate, and explore API specifications for KSeF interoperability.
    10
    181 PyPI
    3
    Apache 2.0