mcp-facture-electronique-fr
This MCP server enables AI agents to manage French electronic invoicing (e-invoicing) workflows by interfacing with Approved Platforms (PA/PDP) according to the AFNOR XP Z12-013 standard.
Flow Service โ Invoice & E-Reporting Management:
Submit invoices or e-reporting (
submit_flow): Send electronic invoices (Factur-X, UBL, CII), lifecycle statuses, or e-reporting data (B2B, B2C, international) to an Approved Platform.Search flows (
search_flows): Find invoices, statuses, and e-reportings using filters such as type, status, tracking ID, and date range with pagination support.Retrieve a flow (
get_flow): Get full details of a specific flow including metadata, original/converted document, or a human-readable PDF view.Submit lifecycle status (
submit_lifecycle_status): Emit processing statuses on received invoices (e.g., Approved, Refused, Disputed, Cashed, Cancelled) with optional reason and payment details.Healthcheck (
healthcheck_flow): Verify the availability of the Approved Platform's Flow Service.
Directory Service โ PPF Company & Address Management:
Search/get companies (
search_company,get_company_by_siren): Find VAT-registered companies in the PPF directory by name, SIREN, or status.Search/get establishments (
search_establishment,get_establishment_by_siret): Find business establishments by SIRET, parent SIREN, or administrative status.Manage routing codes (
search_routing_code,create_routing_code,update_routing_code): Search, create, and update routing codes to direct invoices to specific departments or services within a company.Manage directory lines (
search_directory_line,get_directory_line,create_directory_line,update_directory_line,delete_directory_line): Search, create, update, and delete electronic invoice receiving addresses for taxable entities, specifying SIREN, SIRET, routing code, and Approved Platform.
mcp-facture-electronique-fr ๐ซ๐ท
A Python MCP server exposing the standardized AFNOR XP Z12-013 APIs for the French e-invoicing reform (effective September 1, 2026). This project enables AI agents (Claude, IDEs) to interact natively with the Approved Platform (PA/PDP) ecosystem as a Compatible Solution (SC).
Introduction
This package is built on top of mcp-einvoicing-core, a shared base library for European e-invoicing MCP servers. It provides the OAuth2 HTTP client, token cache, shared models, logging utilities, and exception hierarchy used by this package.
mcp-einvoicing-core is installed automatically as a transitive dependency, no extra step is needed.
For contributors:
pip install -e ".[dev]"installs the base package from PyPI automatically.
This server operates in Compatible Solution (CS) mode as defined by the French e-invoicing reform. The CS acts as an intermediary between the company's information system and an Approved Platform (AP/PDP). This means:
No profile validation of caller-supplied payloads. The server transmits the invoice file (Factur-X PDF/A-3, UBL 2.1, or CII XML) as provided. Structural and business-rule validation (NF XP Z12-012 profiles, Schematron rules) is performed by the receiving Approved Platform, not by this server.
No e-reporting payload validation beyond schema-level XSD. Transaction reports (Flux 10.1/10.3) and payment reports (Flux 10.2/10.4) are validated against the DGFiP v3.2 XSD schema when
validate_ereporting_xmlis called, but deeper business-rule checks (e.g. coherence between declared amounts and invoice totals) are the responsibility of the AP.No PDF/A-3 envelope generation. The caller must produce the conformant Factur-X PDF/A-3 file with embedded CII XML. This server transmits the finished binary.
The Approved Platform performs final validation and may reject non-conformant submissions with an error code and message.
Related MCP server: mcp-einvoicing-de
Installation
Via PyPI (recommended)
pip install mcp-facture-electronique-frOr without prior installation using uvx:
uvx mcp-facture-electronique-frFor Factur-X Schematron validation (validate_facturx, requires the XSLT 2.0 /
Saxon-HE backend โ see FR-XSLT2-1 in Available tools below):
pip install mcp-facture-electronique-fr[xslt2]From source
# Clone the repository
git clone https://github.com/cmendezs/mcp-facture-electronique-fr.git
cd mcp-facture-electronique-fr
# Create the virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install in editable mode
pip install -e ".[dev]"# Initial configuration
cp .env.example .env
# Edit .env with the credentials provided by your PA/PDPConfiguration (.env)
The server requires the following variables to authenticate with an Approved Platform (PA):
Variable | Description |
| Base URL of the PA Flow Service |
| Deprecated โ no longer read; see |
| Base URL of the PPF Annuaire service (defaults to the production swagger |
| OAuth2 Client ID |
| OAuth2 Client Secret |
| Authentication server URL |
| Organization identifier for multi-tenant AP (optional) |
| Request timeout (default: 30s) |
| PPF party GlobalID for the CDAR second |
| schemeID for |
| Name for the PPF |
| RoleCode for the PPF |
Claude Desktop integration
To use this server with Claude, add this configuration to your claude_desktop_config.json file:
{
"mcpServers": {
"facture-electronique-fr": {
"command": "uvx",
"args": ["mcp-facture-electronique-fr"],
"env": {
"PA_BASE_URL_FLOW": "https://api.votre-pdp.fr/flow",
"PPF_ANNUAIRE_BASE_URL": "https://aife.economie.gouv.fr/ppf/annuaire-public/v1",
"PA_CLIENT_ID": "votre-id",
"PA_CLIENT_SECRET": "votre-secret",
"PA_TOKEN_URL": "https://auth.votre-pdp.fr/oauth/token"
}
}
}
}Cursor integration
Cursor supports MCP servers via stdio. Add the configuration in:
Global (all projects):
~/.cursor/mcp.jsonProject (this repository only):
.cursor/mcp.json
{
"mcpServers": {
"facture-electronique-fr": {
"command": "uvx",
"args": ["mcp-facture-electronique-fr"],
"env": {
"PA_BASE_URL_FLOW": "https://api.votre-pdp.fr/flow",
"PPF_ANNUAIRE_BASE_URL": "https://aife.economie.gouv.fr/ppf/annuaire-public/v1",
"PA_CLIENT_ID": "votre-id",
"PA_CLIENT_SECRET": "votre-secret",
"PA_TOKEN_URL": "https://auth.votre-pdp.fr/oauth/token"
}
}
}
}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.jsonWorkspace (this repository only):
.kiro/settings/mcp.json
{
"mcpServers": {
"facture-electronique-fr": {
"command": "uvx",
"args": ["mcp-facture-electronique-fr"],
"env": {
"PA_BASE_URL_FLOW": "https://api.votre-pdp.fr/flow",
"PPF_ANNUAIRE_BASE_URL": "https://aife.economie.gouv.fr/ppf/annuaire-public/v1",
"PA_CLIENT_ID": "votre-id",
"PA_CLIENT_SECRET": "votre-secret",
"PA_TOKEN_URL": "https://auth.votre-pdp.fr/oauth/token"
},
"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.
Kiro security tip: rather than writing secrets in plain text, use the syntax
"PA_CLIENT_SECRET": "${PA_CLIENT_SECRET}", Kiro resolves shell environment variables at startup.
Available tools
Service | Domain | Standard | MCP Tools |
Flow Service | Invoice flows and e-reporting | Annex A, v1.2.0 | 5 tools |
PPF Annuaire (directory) | Central directory (SIREN/SIRET/routing/addressing) | PPF swagger v1.11.0 | 20 tools |
Webhook Service | Event notification subscriptions | Annex A, v1.2.0 | 5 tools |
Factur-X Service | CII XML validation (Schematron) | Factur-X 1.09.2 | 1 tool |
Text bumped to June 2026 (v1.2.0 swagger current) โ AFNOR resupplied the XP Z12-013 narrative text in June 2026 without an updated swagger; the server continues to implement the v1.2.0 wire contract.
Note (FR-XSLT2-1, resolved): the bundled Factur-X 1.09.2 Schematron stylesheets require XSLT 2.0, which
lxml/libxslt(XSLT 1.0 only) cannot compile โ the same root cause as theDE-XSLT2-1gap tracked for ZUGFeRD.validate_facturxnow runs real Schematron validation via Saxon-HE. Install the optionalxslt2extra for this to work:pip install mcp-facture-electronique-fr[xslt2]. Without it, the tool degrades gracefully tolevel="unavailable".
Note (FR-FLUX11-2026-06, PPF Annuaire): the directory tools are wired directly against the bundled PPF-platform swagger
ppf-openapi-annuaire-api-public-1.11.0-openapi.jsonโ this is a PPF-platform-specific interface, not a PDP-agnostic Annex B abstraction. Per the swagger's own description, these endpoints are subject to change and require prior PISTE application publication before use.
Flow Service (Flow management)
submit_flow: Submit invoices (Factur-X, UBL, CII) or e-reporting data.search_flows: Multi-criteria search of sent or received flows using the standard filters.submit_lifecycle_status: Update the lifecycle status (e.g., Made available, Collected, Dispute).get_flow: Retrieve the full details and attachments of a specific flow.healthcheck_flow: Test the connectivity and availability of the PA Flow API.
PPF Annuaire (directory)
Wired directly against the bundled PPF-platform swagger
ppf-openapi-annuaire-api-public-1.11.0-openapi.json โ see the note above.
search_company/get_company_by_siren/get_company_by_id_instance: Look up legal units (SIREN).search_establishment/get_establishment_by_siret/get_establishment_by_id_instance: Look up establishments (SIRET).search_routing_code/get_routing_code_by_siret_and_code/get_routing_code_by_id_instance/create_routing_code/update_routing_code/replace_routing_code: Manage routing codes (code-routage).search_directory_line/get_directory_line_by_code/get_directory_line/create_directory_line/update_directory_line/replace_directory_line/delete_directory_line: Manage directory lines (ligne-annuaire), the electronic-invoice receiving addresses.check_ppf_annuaire_health: Check availability of the PPF Annuaire service.
Webhook Service (Webhook management)
list_webhooks: List all webhook subscription IDs for the current token holder.get_webhook: Retrieve the full details of a webhook subscription.create_webhook: Subscribe to flow event notifications (filter by flow type, direction, processing rule).update_webhook: Update a webhook's technical parameters (authentication, signature).delete_webhook: Unsubscribe from a webhook.
Architecture
The server acts as an intelligent communication interface between your AI agent and the technical infrastructure of the reform:
[ ERP / Business IS ] <--> [ MCP Server ] <--> [ Approved Platform (PA/PDP) ]
^ |
| v
[ AI Agent (Claude) ] <--- (XP Z12-013 Standard)Supported standards
AFNOR XP Z12-012: Invoice message formats, profiles, and lifecycle statuses (v1.4, June 2026 edition).
AFNOR XP Z12-013: Service interface specifications (June 2026 edition; v1.2.0 wire contract).
AFNOR XP Z12-014: Technical implementation guide for business use cases (v1.4, June 2026 edition).
France B2B reform: Mandatory rollout schedule (2024-2026).
Tests
# Run the unit and integration test suite
pytest tests/ -vContributing
Contributions are welcome โ see CONTRIBUTING.md for guidelines.
Other e-invoicing MCP servers
Country | Server |
๐ Global | |
๐ง๐ช Belgium | |
๐ง๐ท Brazil | |
๐ซ๐ท France | |
๐ฉ๐ช Germany | |
๐ฎ๐น Italy | |
๐ต๐ฑ Poland | |
๐ธ๐ฌ Singapore | |
๐ช๐ธ Spain | |
๐ฆ๐ช United Arab Emirates |
License
This project is distributed under the Apache 2.0 license. See the LICENSE file for details. For the full version history, see CHANGELOG.md.
Available Tools
34 toolscheck_ppf_annuaire_healthA
Check the availability of the PPF Annuaire service (GET /healthcheck). Use before a directory-management session to ensure the service is reachable.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the HTTP method (GET) and the endpoint (/healthcheck), and clarifies that the tool is non-destructive (checking availability). This is transparent enough for a simple health check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler. The first sentence states the purpose, the second provides usage guidance. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists (covering return format), the description is complete. It tells the agent when to use the tool (before directory-management sessions) and what it does (check availability).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (0), so the baseline is 4. The description does not add parameter information, but none is needed. The schema coverage is 100% trivially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Check the availability' and the resource 'PPF Annuaire service (GET /healthcheck)'. It distinguishes the tool from siblings, which are CRUD operations, by positioning this as a health check for the directory service.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states to use it 'before a directory-management session to ensure the service is reachable', providing clear context. It does not explicitly mention when not to use it or alternatives, but the sibling list includes a similar 'healthcheck_flow' tool, so some differentiation would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_directory_lineA
Create a directory line (electronic invoice receiving address) (POST /ligne-annuaire).
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | SIREN of the taxable entity creating this receiving address. | |
| siret | No | Specific establishment SIRET. If absent, applies to the whole SIREN. | |
| date_fin_effet | No | Effective end date, ISO YYYY-MM-DD, if known. | |
| date_debut_effet | Yes | Effective start date, ISO YYYY-MM-DD (dateDebutEffet). | |
| suffixe_adressage | No | Addressing suffix (suffixeAdressage). | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call. | |
| identifiant_routage | No | Routing-code identifier to refine the address. | |
| matricule_plateforme | Yes | 4-digit Approved Platform registration number receiving the invoices. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly explains the human-in-the-loop requirement, the two-step process (call without token, then with token), and implies it is a creation operation. This is comprehensive for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely conciseโthree lines including the endpoint and critical human-in-the-loop note. Every sentence serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters (3 required), an output schema, and a human-in-the-loop pattern, the description covers the essential workflow adequately. It does not explain error handling or output details, but the output schema exists. The description is sufficiently complete 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.
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 all parameters. The description adds no additional meaning beyond what is in the schema, meeting the baseline. No extra constraints or clarifications are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create a directory line (electronic invoice receiving address)' and includes the specific HTTP method and endpoint. This distinguishes it from sibling tools like search_directory_line, get_directory_line, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool vs alternatives. It mentions the human-in-the-loop workflow but lacks guidance on when to prefer create_directory_line over replace_directory_line or update_directory_line. Implicit from context, but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_routing_codeA
Create a routing code (POST /code-routage).
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| siret | Yes | Establishment SIRET (14 digits) this routing code belongs to. | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call. | |
| etat_administratif | No | 'A' (active) or 'F' (closed). | A |
| identifiant_routage | Yes | Routing-code identifier to create (max 100 chars, pattern [-_/@a-zA-Z0-9]). | |
| libelle_code_routage | Yes | Human-readable label for the routing code. | |
| nature_etablissement | Yes | Whether the establishment is private or public. | |
| type_identifiant_routage | Yes | 4-digit type code for the routing-code identifier (typeIdentifiantRoutage). | |
| gestion_engagement_juridique | No | Whether a legal-commitment number (engagement juridique) is mandatory. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the key behavioral trait (human-in-the-loop requirement) and the two-step invocation pattern. However, does not mention side effects, permissions, or the fact that the first call returns a confirmation token (though implied).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus a procedural note. Purpose is front-loaded, and every sentence adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the critical human-in-the-loop workflow. The output schema exists, so return values need not be in the description. Could mention that creation is immediate or provide error handling hints, but overall sufficient for a tool with 8 parameters and a two-step process.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents parameters. The description adds value only for the confirmation_token parameter in terms of usage, not semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Create a routing code' with the HTTP method, distinguishing it from sibling tools like update_routing_code and replace_routing_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the two-step human-in-the-loop process: call without confirmation_token, show summary, then call with token. This provides clear, actionable usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookA
Subscribe to webhook notifications from the Approved Platform.
The AP will POST event payloads to the callback URL whenever a flow matching the specified filters (flow type, direction, processing rule, ack status) is created or updated.
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| auth_type | No | Authentication type for the callback: BASIC or OAUTH2. | |
| flow_type | Yes | Flow type to subscribe to: CustomerInvoice, SupplierInvoice, CustomerInvoiceLC, SupplierInvoiceLC, AggregatedCustomerTransactionReport, UnitaryCustomerTransactionReport, AggregatedCustomerPaymentReport, UnitaryCustomerPaymentReport, UnitarySupplierTransactionReport, MultiFlowReport, StateInvoice, StateCustomerInvoiceLC, StateSupplierInvoiceLC. | |
| ack_status | No | Optional acknowledgement status filter: Pending, Ok, Error. | |
| auth_user_id | No | User ID for BASIC authentication on the callback URL. | |
| callback_url | Yes | URL the Approved Platform will POST notifications to. Must be HTTPS and reachable from the AP network. | |
| signature_key | No | Base64-encoded signing key for webhook payload verification. | |
| auth_client_id | No | Client ID for OAUTH2 authentication on the callback. | |
| auth_token_url | No | Token URL for OAUTH2 authentication on the callback. | |
| flow_direction | Yes | Direction filter: 'In' for incoming flows (from PDP to OD), 'Out' for outgoing flows (from OD to PDP). | |
| signature_algo | No | Signature algorithm: RS256, HS256, ECDSA, EDDSA_25519, RSA_PSS, EDDSA_448. | |
| processing_rule | No | Optional processing rule filter: B2B, B2BInt, B2C, B2G, etc. | |
| auth_client_secret | No | Client secret for OAUTH2 authentication on the callback. | |
| auth_user_password | No | Password for BASIC authentication on the callback URL. | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call; supply on the second call to execute. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool triggers webhook notifications (a side effect) and crucially explains the two-step human-in-the-loop confirmation process, which is significant behavioral information. However, it does not mention authentication requirements for the tool itself or potential side effects like overwriting existing subscriptions, but for a creation tool, the confirmation flow is the key behavior and is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded. The first sentence states the core purpose, the second explains the event triggering, and the final paragraph clearly outlines the confirmation flow. No redundant words or irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (14 parameters, 100% schema coverage, and an output schema), the description provides sufficient context for an agent to use the tool correctly. It explains the behavioral trigger, the confirmation requirement, and the purpose of the callback URL. The absence of return-value details is acceptable because the output schema exists. The description is complete for a subscription-creation tool with these structures in place.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some conceptual context by mentioning the filter criteria (flow type, direction, processing rule, ack status) but does not explain any parameter in greater depth than the schema already does. It repeats the callback URL's purpose but adds no new syntactic or semantic information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Subscribe to webhook notifications') and the resource (the Approved Platform), and specifies that the AP will POST event payloads to the callback URL on flow creation/update. This distinguishes it from sibling tools like list_webhooks, update_webhook, and delete_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and the trigger conditions (flow matches filters), but it does not provide explicit guidance on when to use this tool versus alternatives (e.g., update_webhook for modifying an existing subscription, or list_webhooks to enumerate). No exclusions or comparisons are mentioned, so the usage context remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_directory_lineA
Delete a directory line (DELETE /ligne-annuaire/id-instance:{id-instance}).
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the directory line to delete. WARNING: this action is permanent. After deletion, senders will no longer be able to send invoices via this address. | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It correctly identifies this as a user-confirmation-required action and explains the two-step process. The permanent nature of deletion is noted in the schema for id_instance, but the description itself could mention it. Overall, it adds significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences covering the action and the user-confirmation workflow. No unnecessary words, and the critical guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (delete with confirmation) and the presence of an output schema (context signal), the description is largely complete. It explains the required workflow. It could add a note about what the summary contains, but the output schema likely covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add extra information about parameters beyond what the schema already provides. The schema itself includes descriptions and warnings, so the tool definition is adequate without redundance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Delete a directory line'. It also specifies the HTTP DELETE endpoint, making the action unambiguous. The name and description together distinguish it from sibling tools like update_directory_line and create_directory_line.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage instructions: requires user confirmation, call without confirmation_token first, then call again with the token. It does not explicitly contrast with alternatives, but the context of deletion is clear among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookA
Delete (unsubscribe from) a webhook. After deletion, the AP will stop sending notifications to the callback URL.
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_uid | Yes | UUID of the webhook subscription to delete. | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call; supply on the second call to execute. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the two-step confirmation requirement, that deletion stops notifications, and the need for user confirmation. This is thorough and accurate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise paragraphs: purpose first, then procedure. Every sentence adds value. No redundancy or fluff. Well-structured for quick reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no annotations, the description fully explains the two-step process and the effect (stop notifications). Output schema exists but is not needed. The description is complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and describes both parameters. The description adds meaning by explaining the two-step flow for confirmation_token, which enhances understanding beyond the schema. Baseline 3 with added context warrants a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes (unsubscribes from) a webhook, distinguishing it from sibling tools like create_webhook or update_webhook. The verb 'Delete' and resource 'webhook' are specific, and the scope is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and how-to-use guidance: the two-step human-in-the-loop process. It instructs the agent to first call without confirmation_token, show summary, then call with token. This is a model example of usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_by_id_instanceA
Look up a legal unit by directory instance ID (GET /siren/id-instance:{id-instance}).
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the legal unit, from a previous search. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'look up', which implies read-only, but no details on prerequisites, failure modes, or other behavioral traits. Minimal but sufficient for a simple lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with exactly 12 words. No fluff, front-loaded with purpose, and includes the endpoint for developer reference. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema present), the description is complete enough. It specifies the identifier type and action. Minor improvement could mention its use after a search, but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter is already described in the schema. The description adds no additional meaning beyond restating the parameter's purpose, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Look up a legal unit' and specifies the unique identifier type 'directory instance ID'. It includes the exact GET endpoint, making the purpose unambiguous. It distinguishes from siblings that use different identifiers (SIREN, SIRET).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like get_company_by_siren or get_establishment_by_id_instance. The parameter description hints at 'from a previous search', but the main description lacks usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_by_sirenA
Look up a legal unit by SIREN (GET /siren/code-insee:{siren}).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | Yes | Exact SIREN (9 digits, no spaces). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only mentions it is a GET request, implying idempotent read, but does not disclose authentication needs, error handling, rate limits, or other behavioral traits beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core purpose and endpoint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return format is handled. The tool is simple (1 required param) and the description provides enough to invoke it correctly. Minor gap: no mention of potential 404 or error responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter with 100% description, and the description adds format constraints ('Exact SIREN (9 digits, no spaces)') that go beyond the basic string type, reducing ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (look up) and resource (legal unit by SIREN), and the use of 'SIREN' distinguishes it from siblings like get_establishment_by_siret which uses SIRET.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a SIREN, but it does not explicitly state when to use this tool vs alternatives like search_company or get_establishment_by_siret, nor does it include any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directory_lineA
Look up a directory line by directory instance ID (GET /ligne-annuaire/id-instance:{id-instance}).
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the directory line. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It implies a read-only, non-destructive operation via 'Look up' and the HTTP GET method in the endpoint. However, it does not disclose potential errors, rate limits, or required permissions explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loads the core purpose, and includes the endpoint. Every word is necessary and contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple signature with one parameter and an output schema. The description covers the essential lookup action. It omits error handling or edge cases, but given the output schema exists, the description is sufficiently complete for this straightforward tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The parameter id_instance is fully described in the input schema (100% coverage). The description adds no additional semantic details beyond restating the purpose, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Look up' and the resource 'directory line' with the specific identifier 'directory instance ID'. It distinguishes from siblings like get_directory_line_by_code by specifying the lookup key. Including the HTTP endpoint adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use this tool: to retrieve a directory line by its instance ID. While it does not explicitly state when not to use it or mention alternatives, the context from the tool name and sibling names implies the distinction (e.g., use get_directory_line_by_code for code-based lookup).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_directory_line_by_codeA
Look up a directory line by addressing code (GET /ligne-annuaire/code:{identifiant-adressage}).
| Name | Required | Description | Default |
|---|---|---|---|
| identifiant_adressage | Yes | Addressing identifier (identifiantAdressage). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes a 'look up' operation, implying read-only behavior, but does not disclose any other traits such as authentication requirements, rate limits, or error handling. The existence of an output schema helps, but the description itself lacks behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that clearly states the verb, resource, and filtering criterion. It includes the HTTP endpoint for extra context. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description need not cover return values. The tool is simple with one parameter, and the description is sufficient for basic usage. Minor missing elements like error cases are acceptable for this level of simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description mentions 'addressing code' but adds little beyond the parameter's schema description. No additional semantic value is provided for the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'look up' and resource 'directory line' with a clear filtering criterion 'by addressing code'. It also provides the HTTP endpoint, distinguishing it from siblings like 'get_directory_line' or 'search_directory_line'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for looking up a directory line by a specific code, but does not explicitly state when to use it versus alternatives, nor does it provide exclusions or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_establishment_by_id_instanceB
Look up an establishment by directory instance ID (GET /siret/id-instance:{id-instance}).
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the establishment, from a previous search. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions it's a GET request (read-only), but fails to specify authentication requirements, rate limits, or what happens if the ID is not found. The existence of an output schema is not leveraged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the verb and resource. It is concise with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup with one parameter and an output schema, the description is minimally adequate. However, it lacks guidance on error cases (e.g., missing establishment) and does not differentiate from sibling lookup tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already provides a clear description of id_instance (from a previous search). The main description adds the HTTP path indicating the parameter is used in the URL, but this adds marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Look up an establishment' and specifies the key 'by directory instance ID', including the HTTP GET path pattern. This distinguishes it from siblings like get_establishment_by_siret and get_company_by_id_instance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives like get_establishment_by_siret or search_establishment. It only implies usage when an id_instance is available, but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_establishment_by_siretB
Look up an establishment by SIRET (GET /siret/code-insee:{siret}).
| Name | Required | Description | Default |
|---|---|---|---|
| siret | Yes | Exact SIRET (14 digits, no spaces). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral traits. It only mentions a GET request, implying read-only, but does not disclose authentication needs, rate limits, or other behaviors. This is insufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise. However, including the full HTTP endpoint ('GET /siret/code-insee:{siret}') is somewhat redundant and could be omitted for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with one parameter and an output schema, the description covers the core purpose. However, it lacks usage guidance and behavioral details, making it adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema provides clear parameter description (exact SIRET, 14 digits, no spaces). The description adds the HTTP endpoint but no semantic value beyond the schema. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Look up' and the resource 'establishment by SIRET', which is specific and distinct. The sibling tools such as get_company_by_siren and search_establishment use different identifiers or broader scope, so this tool's purpose is well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like get_company_by_siren or search_establishment. It implies usage when a SIRET is available, but lacks explicit guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flowA
Retrieve a flow by its identifier. docType allows choosing between JSON metadata (Metadata), the original document (Original), the converted document (Converted), or the readable representation (ReadableView). By default, returns the JSON metadata (status, dates, identifiers).
| Name | Required | Description | Default |
|---|---|---|---|
| flow_id | Yes | Flow identifier assigned by the Approved Platform (returned by submit_flow or search_flows, maxLength 36). | |
| doc_type | No | Document type to retrieve: Metadata (default, returns the flow's JSON metadata โ recommended), Original (original submitted document, returned as base64), Converted (document converted by the AP, returned as base64), ReadableView (human-readable PDF representation, returned as base64). | Metadata |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description bears full behavioral burden. It discloses that the tool returns JSON metadata by default and explains the return format (base64 for other docTypes). It does not mention error handling or auth, but the read-only nature is clear and well-explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences convey all necessary information, front-loading the core action. Every word serves a purposeโno fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description sufficiently covers what the agent needs: retrieval by ID, parameter meanings, and return format variations. No gaps for a single-resource read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by explaining docType options, default behavior, and clarifying flow_id origin ('assigned by Approved Platform'), improving understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a flow by identifier, specifying the action and resource. It also explains the docType parameter, making the purpose unambiguous and distinct from siblings like search_flows or submit_flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a flow identifier and need to retrieve its metadata or document, but does not explicitly contrast with alternatives (e.g., search_flows for listing). No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routing_code_by_id_instanceB
Look up a routing code by directory instance ID (GET /code-routage/id-instance:{id-instance}).
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the routing code. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description should disclose behavioral traits. It only mentions the HTTP method (GET), implying read-only, but fails to describe authentication, error handling, or any side effects. With no annotations, more detail is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with the URL pattern, no redundant information. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return value details are covered. However, given the complexity of sibling tools and lack of usage context, the description feels minimal. It provides basic purpose but not enough for an agent to confidently select it over similar lookup tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for id_instance. The description adds the URL pattern showing how the parameter is used, but does not significantly enhance understanding beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Look up a routing code by directory instance ID', specifying the action and resource. The tool name already implies the lookup, and the description reinforces it with the URL pattern, distinguishing it from siblings that use different identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_routing_code_by_siret_and_code or search_routing_code. The description does not mention exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routing_code_by_siret_and_codeA
Look up a routing code by SIRET and code (GET /code-routage/siret:{siret}/code:{identifiant-routage}).
| Name | Required | Description | Default |
|---|---|---|---|
| siret | Yes | Establishment SIRET (14 digits). | |
| identifiant_routage | Yes | Routing-code identifier (identifiantRoutage). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states 'Look up' which implies a read-only operation, but no explicit behavioral traits are disclosed (e.g., authentication needs, rate limits, side effects). With no annotations, the description carries the full burden and provides minimal transparency beyond the HTTP method hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the purpose. It includes the HTTP path for context. No redundant words, making it efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which explains return values) and the simple nature of a two-key lookup, the description is largely complete. It covers the input parameters and the action. Minor missing details like error conditions or uniqueness are acceptable for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for both 'siret' and 'identifiant_routage'. The description does not add additional semantics beyond what the schema provides (e.g., examples, constraints). Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Look up') and the resource ('routing code') with specific identifiers (SIRET and code). It includes the HTTP method and path, adding specificity. While it doesn't explicitly differentiate from siblings, the name and description together uniquely identify the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like search_routing_code or get_routing_code_by_id_instance. However, the description implies it is for a direct lookup by two specific keys, which provides some context. A score of 3 reflects the lack of exclusions or alternative suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_webhookA
Retrieve the full details of a webhook subscription: callback URL, authentication mode, signature configuration, and metadata filters (flow type, direction, processing rule, ack status).
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_uid | Yes | UUID of the webhook subscription to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation ('Retrieve') but provides no explicit assurance of non-destructiveness or details on error conditions, permissions, or rate limits. Without annotations, the description carries the burden but is adequate for a simple get.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and lists the key returned items, with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description adequately explains what will be returned. The tool has only one required parameter and no nested objects, making the description sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter 'webhook_uid' is well-defined in the schema. The tool description adds no additional semantics to the parameter beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the resource 'webhook subscription', and lists specific details returned (callback URL, authentication mode, etc.), distinguishing it from sibling tools like 'list_webhooks' which likely return a summary list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose is clear and the tool's name indicates retrieving a single webhook, but the description does not explicitly state when to use this tool versus alternatives (e.g., list_webhooks for a collection).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthcheck_flowA
Check the availability of the Approved Platform's Flow Service. Returns the operational status of the service (ok/degraded/unavailable). Use before an invoice submission session to ensure the AP is reachable.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool returns operational status (ok/degraded/unavailable), which is transparent about the output and non-destructive nature. It does not cover error behavior or rate limits, but the core behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose, second states return value and usage context. No redundant information, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple health check with zero parameters and an output schema (implied by context signals), the description provides all needed information: what it does, what it returns, and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description does not need to add parameter info. Schema coverage is 100% vacuously, and baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool checks availability of the Flow Service, using a specific verb and resource. No sibling tool has a health-check function, so it is clearly distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use before an invoice submission session to ensure the AP is reachable,' providing a clear use case. It does not mention when not to use, but 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.
list_webhooksA
List all webhook subscription IDs owned by the current OAuth2 token holder.
Returns a list of webhook UUIDs. Use get_webhook with each ID to retrieve the full subscription details (callback URL, filters, authentication).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds value by specifying the authentication owner and that it returns UUIDs. It implies a read-only operation (list). No side effects are mentioned, but none expected for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no waste. Purpose is stated first, followed by additional details. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description needn't detail return values; it mentions UUIDs. It also provides next-step guidance. No critical gaps for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the description does not need to elaborate on them. Per guidelines, 0 params baseline is 4. The description adds no parameter info because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists webhook subscription IDs, scoped to the current OAuth2 token holder. It distinguishes from sibling tools like get_webhook (which retrieves details) and create_webhook (which creates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (to get list of IDs) and suggests following up with get_webhook for details. It doesn't explicitly mention when not to use or compare with other sibling tools, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_directory_lineA
Fully replace a directory line (PUT /ligne-annuaire/id-instance:{id-instance}).
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the directory line. | |
| date_fin_effet | No | Effective end date, ISO YYYY-MM-DD, if any. | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call. | |
| matricule_plateforme | Yes | Approved Platform registration number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. It discloses the confirmation requirement and that it is a full replacement. However, it lacks details on side effects (e.g., overwrites all fields?, permissions needed) and doesn't describe return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences. First sentence communicates purpose, second gives usage guidance. No wasted words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and full parameter coverage, the description is fairly complete. It covers the core behavior and the confirmation flow. However, it does not explain what 'fully replace' entails in terms of field behavior (e.g., null handling).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in schema. The description adds no further parameter-specific meaning beyond the schema, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('replace') and resource ('directory line'), and the endpoint method. It distinguishes from siblings like update_directory_line, though 'replace' vs 'update' could be explicitly contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the two-step human-in-the-loop process: call first without confirmation_token, show summary to user, then call again with token. This is strong usage guidance, though it doesn't specify when not to use this tool or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_routing_codeA
Fully replace a routing code (PUT /code-routage/id-instance:{id-instance}). Unlike update_routing_code, all fields are required and replace the existing object entirely.
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the routing code. | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call. | |
| etat_administratif | Yes | 'A' (active) or 'F' (closed). | |
| libelle_code_routage | Yes | Label for the routing code. | |
| type_identifiant_routage | Yes | 4-digit type code (typeIdentifiantRoutage). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description effectively discloses key behavioral traits: it performs a full replacement (overwrites existing object), requires a two-step confirmation process, and mandates all fields. While it doesn't cover auth or rate limits, the workflow and destructive nature are well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences covering purpose and contrast, followed by a clear workflow explanation. It is front-loaded and efficient, though some minor structural improvements could be made, such as separating the workflow into bullet points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters (4 required), an output schema exists, and the description covers the operation type, workflow, and distinguishes from a sibling. It is complete enough for an agent to understand how to invoke it correctly, though additional details about response or error handling are not needed due to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning to the parameters beyond what the schema already provides, except for clarifying the confirmation_token workflow (first call omit, second call include). This is acceptable but doesn't elevate the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fully replace a routing code' with HTTP method PUT, and explicitly distinguishes it from the sibling 'update_routing_code' by noting that all fields are required and replace the existing object entirely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit instructions on when and how to use the tool: call without confirmation_token first to get a summary, then call again with the token for user confirmation. It also contrasts with update_routing_code, guiding the agent to use this for full replacement instead of partial update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companyA
Search legal units (SIRENs) in the PPF Annuaire (POST /siren/recherche).
A company must appear here before its establishments (SIRETs) or directory lines (ligne-annuaire) can be resolved. Prefer get_company_by_siren when the exact SIREN is already known.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | No | Exact SIREN (9 digits, no spaces). | |
| limite | No | Maximum number of results (limite). | |
| ignorer | No | Number of results to skip for pagination (ignorer). | |
| type_entite | No | Entity type filter (typeEntite). | |
| raison_sociale | No | Legal/trade name (partial match). Use when the SIREN is unknown. | |
| etat_administratif | No | Administrative status filter (etatAdministratif). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It identifies the tool as a SEARCH operation (POST /siren/recherche) and adds prerequisire context, but does not disclose auth needs, rate limits, or response behavior. With an output schema available, some transparency gaps remain, but the prerequisite info is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding distinct value (purpose, prerequisite, sibling alternative). No wasted words; front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 6 optional parameters and available output schema, the description is fairly complete. It covers purpose, prerequisite, and sibling alternative. It could mention pagination behavior, but the schema already covers limit and ignorer, so the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed parameter descriptions. The description adds no additional parameter semantics beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches legal units (SIRENs) via a POST endpoint. It distinguishes from the sibling get_company_by_siren by noting the preferred use case when the exact SIREN is known.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use get_company_by_siren when the exact SIREN is known, and provides prerequisite context that a company must appear here before its establishments can be resolved. This helps the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_directory_lineA
Search directory lines (electronic invoice receiving addresses) (POST /ligne-annuaire/recherche).
Call before sending an invoice to verify the recipient has a registered line and to identify their Approved Platform.
| Name | Required | Description | Default |
|---|---|---|---|
| siren | No | SIREN (9 digits). | |
| siret | No | SIRET (14 digits). | |
| limite | No | Maximum number of results (limite). | |
| ignorer | No | Number of results to skip for pagination (ignorer). | |
| identifiant_routage | No | Routing-code identifier. | |
| matricule_plateforme | No | 4-digit Approved Platform registration number. | |
| identifiant_adressage | No | Exact addressing identifier (identifiantAdressage). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the operation as a search, implying it is read-only and safe, but does not explicitly disclose behavioral traits such as authentication requirements, rate limits, or the fact that it uses a POST method. More detail would be needed for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and a parenthetical endpoint. It front-loads the purpose and then provides usage context. Every sentence adds value, and there is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 optional parameters and the presence of an output schema, the description provides sufficient context for the primary use case. It lacks detail on default behavior when no parameters are supplied, but overall is adequate for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add additional meaning beyond what the schema already provides for each parameter. It mentions the overall purpose but does not clarify which parameters are most relevant for the stated use case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches directory lines (electronic invoice receiving addresses) and explicitly mentions the use case: verifying a recipient's registered line and Approved Platform before sending an invoice. This distinguishes it from sibling tools like create, get, or delete directory lines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call before sending an invoice to verify the recipient has a registered line and to identify their Approved Platform,' providing clear when-to-use guidance. However, it does not explicitly state when not to use or suggest alternative tools, though the context implies usage for verification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_establishmentB
Search establishments (SIRETs) in the PPF Annuaire (POST /siret/recherche).
| Name | Required | Description | Default |
|---|---|---|---|
| siren | No | Parent SIREN (9 digits). Lists all establishments. | |
| siret | No | Exact SIRET (14 digits, no spaces). | |
| limite | No | Maximum number of results (limite). | |
| ignorer | No | Number of results to skip for pagination (ignorer). | |
| denomination | No | Establishment name (partial match). | |
| etat_administratif | No | Administrative status filter (etatAdministratif). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the HTTP method and endpoint but does not disclose behavioral traits such as pagination details, rate limits, what happens on empty results, or any side effects. The description repeats the endpoint name but adds little behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at one sentence. No redundancy. However, it sacrifices necessary context for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters and no annotations, the description is too brief. It does not explain the purpose of common filters (e.g., siren vs siret), pagination, or the output schema (though output schema exists). Lacks completeness for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond what is in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search establishments (SIRETs)') and the resource ('PPF Annuaire') with a specific endpoint ('POST /siret/recherche'). It distinguishes from sibling tools like 'search_company' which search for companies, not establishments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., 'search_company'), no prerequisites, and no scenarios where another tool would be preferred. It simply states the endpoint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_flowsA
Search flows (invoices, statuses, e-reportings) in the Approved Platform by criteria: flow type, status, processingRule, period, trackingId. Pagination via updatedAfter: use the 'nextUpdatedAfter' field from the response as the updated_after parameter value to get the next page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of flows to return (1-500, default 50). | |
| status | No | Filter by flow status. Examples: Deposited, Processing, Delivered, Rejected, Approved, Refused. Refer to the AP documentation for the complete list. | |
| flow_type | No | Filter by flow type: Invoice, CreditNote, EReportingB2B, EReportingB2C, LifecycleStatus, etc. | |
| tracking_id | No | Filter by trackingId (sender free-form identifier, maxLength 36). | |
| updated_after | No | Pagination: only return flows updated after this date/time (ISO 8601 format, e.g. 2024-09-01T00:00:00Z). Use the 'nextUpdatedAfter' value from the previous response to paginate. | |
| processing_rule | No | Filter by processing rule: B2B, B2BInt, B2C, OutOfScope, ArchiveOnly, NotApplicable. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It mentions pagination behavior and the nextUpdatedAfter field, but does not disclose whether the operation is read-only, required permissions, or potential side effects. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and criteria, followed by pagination instruction. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 optional parameters, pagination, output schema), the description covers purpose, main filters, and pagination. It could mention default limit or that it returns a list, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all parameters have descriptions). The tool description adds value by explaining pagination (using nextUpdatedAfter), but otherwise summarizes what's already in the schema. Baseline 3 with marginal improvement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches flows (invoices, statuses, e-reportings) by specific criteria. It uses the verb 'search' matching the name and distinguishes from sibling tools like get_flow (single flow) and submit_flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use: to search flows by criteria. It provides pagination guidance but does not explicitly exclude alternatives or state when not to use. Still, the context is clear for a search tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_routing_codeC
Search routing codes (POST /code-routage/recherche).
| Name | Required | Description | Default |
|---|---|---|---|
| siret | No | Establishment SIRET (14 digits). | |
| limite | No | Maximum number of results (limite). | |
| ignorer | No | Number of results to skip for pagination (ignorer). | |
| etat_administratif | No | 'A' (active) or 'F' (closed). | |
| identifiant_routage | No | Exact routing-code identifier (identifiantRoutage). | |
| libelle_code_routage | No | Routing code label (partial match). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only provides the endpoint and action, but does not state that the tool is read-only, whether it requires authentication, or any side effects. The input schema provides parameter details but no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately conveys the core action and endpoint. It is concise, front-loaded, and contains no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and complete parameter descriptions in the schema, the description is too sparse for a search tool with six optional parameters and pagination. It does not summarize filtering capabilities or expected results, and lacks behavioral context due to absent annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, meaning all parameters have descriptions in the schema. The tool description adds no additional parameter information beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'routing codes', and includes the specific HTTP endpoint, distinguishing it from sibling tools like create or get routing codes. However, it lacks elaboration on what routing codes are, which would enhance clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_routing_code_by_siret_and_code or search_directory_line. The description does not mention use cases, prerequisites, or 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.
submit_flowA
Submit an electronic invoice, e-reporting, or lifecycle status to the Approved Platform.
Scope: Compatible Solution (CS) mode, no payload validation. See README "Scope" section.
This is the primary action for sending B2B invoices (Factur-X, UBL, CII), B2BInt/B2C e-reportings, or CDAR lifecycle status messages.
HUMAN-IN-THE-LOOP: This tool requires explicit user confirmation. Call without confirmation_token first; show the returned summary to the user; then call again with the provided token to execute the submission.
BEHAVIOR:
Submission is asynchronous: the AP returns a flowId and an initial status (typically 'Deposited'), not the final delivery status. Poll get_flow(flow_id) or search_flows to track processing.
Returns an error dict (with 'error' key) if the base64 encoding is invalid.
The AP may reject the flow synchronously (e.g. malformed XML, unknown recipient, quota exceeded); in that case the response contains an error code and message.
If processing_rule is B2B, the recipient must be registered in the PPF directory with an active directory line; verify with get_directory_line before submitting.
RESPONSE on success: includes flowId (AP-assigned identifier), trackingId (echoed back), status (initial processing status), and submittedAt timestamp.
USAGE GUIDELINES:
Always call get_directory_line (or search_directory_line) first to confirm the recipient is reachable and to identify their Approved Platform before submitting a B2B invoice.
Set a meaningful tracking_id (invoice number or UUID) to simplify later retrieval via search_flows.
After submission, use get_flow(flow_id, doc_type='Metadata') to monitor the flow status.
For lifecycle statuses on received invoices (Refused, Approved, etc.), prefer submit_lifecycle_status which provides structured status fields and handles mandatory PPF transmissions.
Call healthcheck_flow before a batch submission to confirm the AP is available.
| Name | Required | Description | Default |
|---|---|---|---|
| file_name | Yes | File name with extension (e.g. 'invoice_2024_001.xml', 'invoice_2024_001.pdf'). The AP uses the extension to detect the format when flow_syntax is ambiguous. | |
| flow_type | Yes | Business type of the submitted flow. Common values: Invoice, CreditNote, DebitNote, EReportingB2B, EReportingB2C, LifecycleStatus. Refer to your Approved Platform's documentation for the exhaustive list. | |
| file_base64 | Yes | File content encoded in base64. Accepted formats: Factur-X (PDF/A-3 with embedded XML), UBL 2.1 (XML), UN/CEFACT CII D22B (XML). Maximum file size is defined by the Approved Platform (typically a few MB). | |
| flow_syntax | Yes | Syntax/format of the submitted file (required). Common values: FacturX โ PDF/A-3 with embedded Factur-X XML; UBL โ UBL 2.1 XML invoice or credit note; CII โ UN/CEFACT CII D22B XML invoice; CDAR โ XML lifecycle status document; EReporting โ B2B or B2C e-reporting flow. | |
| tracking_id | No | Sender-assigned tracking identifier (free-form, maxLength 36). Recommended: use the invoice number or an internal UUID. Allows retrieving this specific flow later via search_flows(tracking_id=...). | |
| processing_rule | Yes | Processing rule that determines routing and PPF transmission obligations. B2B: domestic invoice between French VAT-registered entities (routed + reported to PPF). B2BInt: international invoice or cross-border e-reporting. B2C: invoice to a non-taxable entity or B2C e-reporting. B2G: invoice to a public-sector entity (v1.2.0). B2GInt: international invoice to a public-sector entity (v1.2.0). B2GOutOfScope: public-sector transaction outside reform scope (v1.2.0). OutOfScope: transaction outside the reform scope (archived only). ArchiveOnly: archiving without routing to recipient. NotApplicable: used for lifecycle status (CDAR) flows. | |
| confirmation_token | No | Confirmation token returned by a previous call to this tool. Required to actually submit; omit on the first call to receive a summary and token for user approval. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, but description covers async submission, error cases (base64, AP rejection), B2B recipient requirements, success response fields, and confirmation token flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (HUMAN-IN-THE-LOOP, BEHAVIOR, RESPONSE, USAGE GUIDELINES). Every sentence adds value; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 params, 100% schema coverage, and presence of output schema, description covers all necessary context: prerequisites, async behavior, error handling, alternative tools, and human-in-the-loop process.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage, but description adds usage context (e.g., confirmation_token flow, tracking_id recommendation) beyond schema explanations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it submits invoices, e-reportings, or lifecycle statuses, specifies scope (CS, no validation), and distinguishes from sibling tools like submit_lifecycle_status and healthcheck_flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (B2B pre-check with get_directory_line, setting tracking_id, human-in-the-loop flow) and when not to (prefer submit_lifecycle_status for lifecycle statuses, call healthcheck_flow before batch).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_lifecycle_statusA
Emit a processing status on a received invoice: Refused, Approved, PartiallyApproved, Disputed, Suspended, Cashed, PaymentTransmitted, Cancelled. Refused and Cashed are mandatory transmissions to PPF. Reason is mandatory for Refused, Disputed, PartiallyApproved, and Suspended.
Builds a real CDAR (CrossDomainAcknowledgementAndResponse, XP Z12-014 v1.4) document โ see mcp_facture_electronique_fr.clients.flow_client for the MDT-* field mapping this depends on.
HUMAN-IN-THE-LOOP: Requires user confirmation. Call without confirmation_token first, show the summary to the user, then call again with the token.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Status reason (CDAR MDT-114), mandatory per XP Z12-014 Annex A for Refused, Disputed, PartiallyApproved, and Suspended. Free text. | |
| currency | No | ISO 4217 currency code for payment_amount (default EUR). | EUR |
| invoice_id | Yes | BT-1 invoice number of the referenced invoice (CDAR MDT-87). | |
| reason_code | No | Coded reason (CDAR MDT-113) from the per-status motif list in XP Z12-014 Annex A 'Tableau des motifs de STATUTS' (e.g. TX_TVA_ERR, DOUBLON). Not validated against that list. | |
| status_code | Yes | Lifecycle status code to emit. Values defined in XP Z12-014 v1.4 (June 2026): Refused (transmitted to PPF), Approved, PartiallyApproved, Disputed, Suspended, Cashed (transmitted to PPF), PaymentTransmitted, Cancelled. Refused and Cashed are mandatory transmissions to PPF. | |
| payment_date | No | Payment date (ISO 8601 format: YYYY-MM-DD). Provided for Cashed and PaymentTransmitted statuses. | |
| included_note | No | Free-text note (CDAR IncludedNote/Content) per the bundled Rejetee worked example. | |
| recipient_uri | No | Counterparty's electronic address on the CEF network, if known (CDAR MDT-73). | |
| payment_amount | No | Payment amount (decimal string, e.g. '1250.00'). Provided for Cashed and PaymentTransmitted statuses. | |
| issuer_party_id | Yes | GlobalID (e.g. SIREN) of the party emitting this status โ you or the counterparty, whichever this MCP server acts on behalf of (CDAR MDT-38). | |
| party_id_scheme | No | schemeID attribute shared by both party GlobalIDs (default '0002' = SIRENE, per every bundled AFNOR worked example). | 0002 |
| issuer_role_code | Yes | Role of the emitting party: SE (seller) or BY (buyer) (CDAR MDT-40). | |
| receipt_datetime | No | Original receipt timestamp of the referenced invoice, ISO 8601 (CDAR MDT-95). Defaults to the current time if omitted โ supply the real value when known for an accurate audit trail. | |
| requested_action | No | Free-text requested action (CDAR MDT-122). | |
| invoice_type_code | No | BT-3 invoice type code (CDAR MDT-91, default '380' = Invoice). | 380 |
| issuer_party_name | Yes | Name of the emitting party (CDAR MDT-39). | |
| confirmation_token | No | Confirmation token from a previous call. Omit on the first call; supply on the second call to execute. | |
| invoice_issue_date | Yes | BT-2 invoice date, ISO 8601 (YYYY-MM-DD) (CDAR MDT-100). | |
| recipient_party_id | Yes | GlobalID of the counterparty receiving this status (CDAR MDT-57). | |
| referenced_flow_id | Yes | Identifier of the invoice flow to which this status applies (flowId returned upon receipt, maxLength 36). Used only for the platform's own flow tracking (flowInfo.trackingId) โ not part of the CDAR document content. | |
| recipient_role_code | Yes | Role of the counterparty โ opposite of issuer_role_code (CDAR MDT-59). | |
| recipient_party_name | Yes | Name of the counterparty (CDAR MDT-58). | |
| requested_action_code | No | Coded requested action (CDAR MDT-121), e.g. 'CNF' ('Crรฉer un Avoir total') per the bundled En_litige worked example. Typically used with Disputed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that Refused and Cashed are mandatory to PPF, reason mandatory for certain statuses, and the two-call confirmation pattern. It omits error handling but covers key behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, front-loaded with core action, lists statuses clearly, and provides a concise two-call procedure. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (23 parameters, enums, workflow), the description covers core logic, mandatory fields, and references standards. It could mention error handling but is fairly complete, and output schema exists so return values are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining which statuses require reason and the confirmation flow, going beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool emits a processing status on an invoice, lists all allowed statuses, and notes mandatory transmissions to PPF. It distinguishes from sibling tools like submit_flow which handle initial invoice submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when to use (after receiving an invoice) and includes a two-call human-in-the-loop procedure. However, it does not explicitly state when not to use or compare to alternatives like submit_flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_payment_reportB
Submit a DGFiP Flux 10.2 / 10.4 payment e-reporting flow.
Scope: Compatible Solution (CS) mode, no payload validation. See README "Scope" section.
Builds a FRR XML payload conforming to DGFiP Spรฉcifications Externes v3.2 (payment.xsd / ereporting.xsd) and submits it to the Approved Platform via POST /v1/flows with flowSyntax="FRR".
Use for:
International B2B payment reporting (processing_rule=B2BInt, flow_type=UnitaryCustomerPaymentReport)
B2C individual payment reporting (processing_rule=B2C, flow_type=UnitaryCustomerPaymentReport)
Aggregated B2C payment reporting (processing_rule=B2C, flow_type=AggregatedCustomerPaymentReport)
| Name | Required | Description | Default |
|---|---|---|---|
| flow_type | Yes | XP Z12-013 FlowType for this payment report: UnitaryCustomerPaymentReport โ Flux 10.2 unit payment AggregatedCustomerPaymentReport โ Flux 10.4 aggregated B2C payment | |
| issuer_id | Yes | TT-13: SIREN or SIRET of the French declarant. | |
| sender_id | Yes | TT-8: Identifier of the CS/PDP platform submitting the report. | |
| type_code | Yes | TT-4: Transmission type code, e.g. '380'. | |
| period_end | Yes | TT-90: Report period end date (ISO 8601, e.g. '2025-01-31'). | |
| issuer_name | Yes | TT-14: Legal name of the declarant. | |
| sender_name | Yes | TT-9: Legal name of the sender platform. | |
| tracking_id | No | Optional external tracking identifier for this flow. | |
| period_start | Yes | TT-89: Report period start date (ISO 8601, e.g. '2025-01-01'). | |
| invoices_json | Yes | JSON array of payment records. Each invoice in the `invoices` JSON list must have: Required fields: invoice_id TT-91 Invoice number (reference to the original invoice) issue_date TT-102 Invoice issue date (ISO 8601) payment_date TT-92 Payment date (ISO 8601) subtotals TT-93..95 List of payment breakdown objects subtotals list entries: tax_percent TT-93 VAT rate (decimal, e.g. "20.0") amount TT-95 Collected amount at this rate (decimal string) currency_code TT-94 (optional) Currency code (e.g. "EUR") | |
| issue_datetime | Yes | TT-3: Transmission creation timestamp, e.g. '20250115T120000+0100'. | |
| processing_rule | Yes | B2BInt for international B2B payments, B2C for B2C payments. | |
| transmission_id | Yes | TT-1: Unique identifier for this transmission (generated by sender). | |
| issuer_id_scheme | Yes | TT-12: ID scheme for issuer: 'SIREN' or 'SIRET'. | |
| issuer_role_code | Yes | TT-15: Issuer role: 'MOA' or 'OD'. | |
| sender_id_scheme | Yes | TT-7: ID scheme for sender, e.g. 'SIREN', 'SIRET'. | |
| sender_role_code | Yes | TT-10: Sender role code: 'CS', 'PDP', 'OD', or 'MOA'. | |
| transmission_name | No | TT-2: Optional human-readable name for the transmission. | |
| confirmation_token | No | Confirmation token returned by a prior pending response. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions building an FRR XML payload and submitting to an Approved Platform, and notes no payload validation. But it lacks details on side effects, authentication requirements, rate limits, or what happens on failure. Without annotations, more behavioral context is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with sections for scope and use cases. It uses bullet points effectively. Referencing a README is acceptable but slightly reduces standalone clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 19 parameters (16 required) and an existing output schema, the description covers high-level behavior and use cases. However, it lacks details on prerequisites, error handling, and full process flow, which are important for a complex submission tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant meaning beyond the schema for parameters; it mostly provides high-level context. The reference to README is external.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it submits a DGFiF Flux 10.2/10.4 payment e-reporting flow and lists specific use cases. However, it does not explicitly differentiate from sibling tools like submit_flow or submit_transaction_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists three specific use cases with processing_rule and flow_type combinations, implying when to use. However, it does not provide exclusions or direct comparisons to alternatives like submit_flow or submit_transaction_report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_transaction_reportA
Submit a DGFiP Flux 10.1 / 10.3 transaction e-reporting flow.
Scope: Compatible Solution (CS) mode, no payload validation. See README "Scope" section.
Builds a FRR XML payload conforming to DGFiP Spรฉcifications Externes v3.2 (transaction.xsd / ereporting.xsd) and submits it to the Approved Platform via POST /v1/flows with flowSyntax="FRR".
Use for:
International B2B outbound sales (processing_rule=B2BInt, flow_type=IndividualCustomerTransactionReport)
International B2B inbound purchases (processing_rule=B2BInt, flow_type=UnitarySupplierTransactionReport)
B2C individual transactions (processing_rule=B2C, flow_type=IndividualCustomerTransactionReport)
Aggregated B2C reports (processing_rule=B2C, flow_type=AggregatedCustomerTransactionReport)
| Name | Required | Description | Default |
|---|---|---|---|
| flow_type | Yes | XP Z12-013 FlowType for this e-reporting submission: IndividualCustomerTransactionReport โ Flux 10.1 individual B2C or intl B2B AggregatedCustomerTransactionReport โ Flux 10.3 aggregated B2C UnitarySupplierTransactionReport โ Flux 10.1 intl B2B purchases MultiFlowReport โ mixed flow types | |
| issuer_id | Yes | TT-13: SIREN or SIRET of the French taxable entity (dรฉclarant). | |
| sender_id | Yes | TT-8: Identifier of the CS/PDP platform submitting the report. | |
| type_code | Yes | TT-4: Transmission type code, e.g. '380' (invoice report). | |
| period_end | Yes | TT-18: Report period end date in ISO 8601 format (e.g. '2025-01-31'). | |
| issuer_name | Yes | TT-14: Legal name of the declarant. | |
| sender_name | Yes | TT-9: Legal name of the sender platform. | |
| tracking_id | No | Optional external tracking identifier for this flow. | |
| period_start | Yes | TT-17: Report period start date in ISO 8601 format (e.g. '2025-01-01'). | |
| invoices_json | Yes | JSON array of invoice transaction records. Each invoice in the `invoices` JSON list must have: Required fields: id TT-19 Invoice number / identifier issue_date TT-20 Issue date (ISO 8601, e.g. "2025-01-15") type_code TT-21 Invoice type: "380" (invoice), "381" (credit note), "389" (self-billed) currency_code TT-22 ISO 4217 currency code (e.g. "EUR", "USD") business_process_id TT-28 Business process ID (e.g. "A1", "A2") business_process_type_id TT-29 Process type: "EREP" (e-reporting), "EINV" (e-invoicing) seller_company_id TT-33 Seller identifier (SIREN, SIRET, VAT number, etc.) seller_company_id_scheme TT-33-1 Scheme: "SIREN", "SIRET", "0088" (GLN), "TVA", etc. monetary_total_tax_amount TT-52 Total VAT amount (decimal string, e.g. "200.00") monetary_total_currency TT-202 Currency code for the tax amount (e.g. "EUR") tax_subtotals TT-54..59 List of VAT breakdown objects (see below) Optional fields: due_date TT-201 Payment due date (ISO 8601) tax_due_date_type_code TT-24 VAT due date code ("3" cash, "4" invoice date, "5" delivery) tax_exclusive_amount TT-51 Total amount excluding VAT seller_tax_registration_id TT-34 Seller VAT number (e.g. "FR12345678901") seller_tax_registration_id_qualifier TT-34-0 Qualifier (default "VA") seller_country TT-35 ISO 3166-1 alpha-2 country code buyer_company_id TT-36 Buyer identifier (for international B2B) buyer_company_id_scheme TT-37 Buyer ID scheme buyer_tax_registration_id TT-38 Buyer VAT number buyer_tax_registration_id_qualifier TT-38-0 Qualifier (default "VA") buyer_country TT-39 Buyer country code tax_subtotals list entries: taxable_amount TT-54 Tax base amount (decimal string) tax_amount TT-55 VAT amount for this category (decimal string) tax_percent TT-57 VAT rate (decimal, e.g. "20.0", "5.5", "0.0") code TT-56 (optional) VAT category code: "S" standard, "Z" zero, "E" exempt exemption_reason TT-58 (optional) Exemption reason text exemption_reason_code TT-59 (optional) Exemption reason code โ free-form, not enforced by this server; see VATEX_CODES_EU and VATEX_CODES_FR (NF XP Z12-012 Annex A v1.4, June 2026) for the accepted code list | |
| issue_datetime | Yes | TT-3: Transmission creation timestamp, e.g. '20250115T120000+0100'. | |
| processing_rule | Yes | XP Z12-013 ProcessingRule: B2BInt โ international B2B e-reporting B2C โ B2C e-reporting | |
| transmission_id | Yes | TT-1: Unique identifier for this transmission (generated by sender). | |
| issuer_id_scheme | Yes | TT-12: ID scheme for issuer, typically 'SIREN' or 'SIRET'. | |
| issuer_role_code | Yes | TT-15: Issuer role code. Use 'MOA' (assujetti / declarant) or 'OD' (obligataire dรฉlรฉgant). | |
| sender_id_scheme | Yes | TT-7: ID scheme for sender, e.g. 'SIREN', 'SIRET', 'TVA', '0088'. | |
| sender_role_code | Yes | TT-10: Sender role code. Use 'CS' (Compatible Solution), 'PDP', 'OD' (obligataire dรฉlรฉgant), or 'MOA' (assujetti). | |
| transmission_name | No | TT-2: Optional human-readable name for the transmission. | |
| confirmation_token | No | Confirmation token returned by a prior pending response. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It mentions building an XML payload conforming to spec, submission via POST to Approved Platform, and that no payload validation is performed. However, it does not cover error handling, authentication requirements, or rate limits, which would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but front-loaded with the purpose. It uses clear sections and bullet points. Some redundancy exists (e.g., repeating 'B2C' and 'B2B' cases) but overall it remains well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (19 parameters, 16 required, nested invoices_json structure), the description is thorough. It covers the XML spec, use cases, parameter details, and refers to external documentation. The existence of an output schema means return values are assumed documented, so no gap there.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the description still adds value by explaining the required fields for invoices_json and clarifying the processing_rule and flow_type enums. This goes beyond the schema's structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it submits a DGFiP Flux 10.1/10.3 transaction e-reporting flow, specifies scope (CS mode, no payload validation), and lists four specific use cases. It distinguishes itself from sibling tools like submit_payment_report and submit_lifecycle_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when-to-use conditions (international B2B outbound, inbound, B2C individual/aggregated) and implies exclusions via sibling tool names. It references a README for scope details, giving clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_directory_lineA
Partially update a directory line (PATCH /ligne-annuaire/id-instance:{id-instance}). Only provided fields are modified.
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the directory line. | |
| date_fin_effet | No | New effective end date, ISO YYYY-MM-DD. | |
| matricule_plateforme | No | New Approved Platform registration number. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It declares the PATCH method and the partial update behavior ('Only provided fields are modified'). This is adequate for a simple update tool, though it omits details like idempotency or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the action and key behavior. It is front-loaded with the verb and resource, containing no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, presence of an output schema, and adequate parameter descriptions, the description covers the essential aspects. It could be slightly more explicit about the use of id_instance, but overall it is complete enough for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive names and descriptions for each parameter. The description adds meaning beyond the schema by clarifying that provided fields are updated, which is essential semantic context for using the optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Partially update a directory line', including the HTTP method and path. It distinguishes from sibling tools like replace_directory_line by specifying that only provided fields are modified, making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (for partial updates) versus a full replace, but does not explicitly mention sibling tools or provide when-not-to-use guidance. It gives clear context but lacks exclusionary instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_routing_codeA
Partially update a routing code (PATCH /code-routage/id-instance:{id-instance}). Only provided fields are modified.
| Name | Required | Description | Default |
|---|---|---|---|
| id_instance | Yes | Directory instance ID (idInstance) of the routing code. | |
| etat_administratif | No | New status. Omit to leave unchanged. | |
| libelle_code_routage | No | New label. Omit to leave unchanged. | |
| type_identifiant_routage | No | New 4-digit type code. Omit to leave unchanged. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses partial update behavior ('Only provided fields are modified') but omits details like authorization, side effects, error handling, or HTTP method (though implied by PATCH in endpoint). Adequate but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. First sentence provides endpoint and method, second sentence clarifies behavior. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values are covered. Description covers the core behavioral trait (partial update). However, lacks prerequisites (e.g., routing code must exist) or potential error conditions. Moderate completeness for a simple update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds minimal extra meaning beyond 'Omit to leave unchanged' already in schema. No new insights about parameter formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb 'update' and resource 'routing code', and specifies it is a partial update (PATCH). It distinguishes from sibling 'replace_routing_code' which would be a full replacement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly clarifies when to use (partial update) but does not explicitly state when not to use or suggest alternatives like 'replace_routing_code'. Sibling context helps but description lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_webhookA
Update a webhook subscription's technical parameters (authentication, signature, custom headers). Metadata filters (flow type, direction) cannot be changed; delete and recreate the webhook instead.
Only provided fields are modified (PATCH semantics).
| Name | Required | Description | Default |
|---|---|---|---|
| auth_type | No | New authentication type for the callback: BASIC or OAUTH2. | |
| webhook_uid | Yes | UUID of the webhook subscription to update. | |
| auth_user_id | No | User ID for BASIC authentication. | |
| signature_key | No | New base64-encoded signing key. | |
| auth_client_id | No | Client ID for OAUTH2 authentication. | |
| auth_token_url | No | Token URL for OAUTH2 authentication. | |
| signature_algo | No | New signature algorithm. | |
| auth_client_secret | No | Client secret for OAUTH2 authentication. | |
| auth_user_password | No | Password for BASIC authentication. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses PATCH semantics and the constraint on metadata filters. However, it does not mention potential side effects (e.g., whether updates affect active callbacks) or required permissions. Still, it is transparent about the update behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, efficiently conveying scope, constraints, and update semantics without unnecessary words. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters (1 required) and an output schema, the description is adequate. It covers what can be updated, what cannot, and the update semantics. It does not need to explain return values as the output schema exists. Could mention that the webhook must exist, but that is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters have descriptions). The description groups parameters into categories (authentication, signature, custom headers) but does not add significant detail beyond the schema. The mention of 'custom headers' may be slightly misleading as no such parameter exists in the schema. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates technical parameters of a webhook subscription, specifies which parameters (authentication, signature, custom headers), and explicitly notes what cannot be changed (metadata filters), with a directive to delete and recreate instead. This distinguishes it from sibling tools like create_webhook and delete_webhook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool vs. alternatives: it clarifies that metadata filters cannot be changed and directs users to delete and recreate the webhook for such changes. It also specifies PATCH semantics, so only provided fields are modified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_ereporting_xmlA
Validate a DGFiP e-reporting (Flux 10) FRR XML payload.
Scope: XSD schema validation only, no business-rule checks. See README "Scope" section.
Checks the XML against the DGFiP Spรฉcifications Externes v3.2 ereporting.xsd. Returns validation result with errors if any. Use this before submitting to catch structural problems early.
Validation levels (in order of preference):
xsd โ full schema validation
wellformedness โ XML failed to parse (malformed or unsafe input)
none โ XSD files not found on disk
| Name | Required | Description | Default |
|---|---|---|---|
| xml_content | Yes | FRR XML content to validate. Must be a complete Report document per DGFiP Spรฉcifications Externes v3.2 ereporting.xsd. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses validation behavior, returns validation result with errors, and describes three validation levels (xsd, wellformedness, none). Does not mention side effects, but as a validation tool, it's clearly read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concisely structured with multiple sentences, front-loading the purpose and scope, then providing details on validation levels. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple validation tool with one parameter and an output schema (implied), the description covers all necessary aspects: what it validates, against what specification, return type, and validation levels. No critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'xml_content' is fully described in schema (100% coverage) and tool description adds context about XML format and validation scope. Description also details validation levels, enhancing understanding of parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool validates a DGFiP e-reporting XML payload against XSD schema, specifying scope (XSD only, no business rules) and version (v3.2). It distinguishes from sibling tools like validate_facturx by targeting a specific XML format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises use 'before submitting to catch structural problems early' and mentions validation levels. Implies alternatives for business rule checks but doesn't explicitly list when not to use; references README for scope details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_facturxA
Validate a Factur-X CII XML document against its profile's Schematron ruleset.
Scope: Schematron (SVRL) business-rule validation only, no XSD structural check. Returns is_valid, errors, and warnings (rule_id, location, text). Use this before embedding the XML into a PDF/A-3 or submitting via submit_flow.
Requires the optional saxonche extra (FR-XSLT2-1, resolved in
mcp-einvoicing-core 1.14.0): the bundled Factur-X 1.09.2 Schematron
stylesheets require XSLT 2.0, which lxml/libxslt (XSLT 1.0 only) cannot
compile. Install with pip install mcp-facture-electronique-fr[xslt2].
If it is missing, this tool returns level="unavailable" with
is_valid=None instead of raising.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Factur-X profile to validate against. One of: MINIMUM, BASICWL, BASIC, EN16931, EXTENDED, EXTENDED-CTC-FR. EXTENDED-CTC-FR is validated against the generic EXTENDED ruleset only โ AFNOR has not published a CTC-FR-specific Schematron; French-specific rules beyond EXTENDED are not checked. | |
| xml_content | Yes | Factur-X CII XML content to validate (the embedded XML, not the PDF/A-3). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the fallback behavior when the optional saxonche extra is missing: returns level='unavailable' with is_valid=None instead of raising. Also states the return structure (is_valid, errors, warnings) which is not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but each sentence adds meaningful information. It could be condensed slightly, but the structure flows logically from purpose to usage to dependency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Includes scope, return fields, usage guidance, and dependency installation. Complete for a validation tool given the rich parameter descriptions and assumed output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers both parameters fully (100%), but the description adds nuance: xml_content is the embedded XML (not the PDF) and the profile parameter clarifies the limitation of EXTENDED-CTC-FR. This exceeds baseline value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it validates Factur-X CII XML against Schematron rules, with explicit scope (no XSD). Distinguishes from sibling validate_ereporting_xml by format and target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use before embedding into PDF/A-3 or submitting via submit_flow. Also clarifies it's only Schematron, implying when not to use (e.g., for structural checks).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have distinct purposes: lookup/search for companies, establishments, routing codes, directory lines; submission and validation for flows; CRUD for webhooks. Potential overlaps exist between submit_flow and the specific submit_transaction_report/payment_report, but descriptions clarify their scopes. The by-ID vs by-code variants are clearly differentiated.
Snake_case verb_noun pattern dominates (get_company_by_siren, search_establishment, create_routing_code). Minor inconsistencies: healthcheck_flow vs check_ppf_annuaire_health, and validate_facturx vs validate_ereporting_xml use different structures, but the overall pattern is predictable.
With 34 tools, this exceeds the 25-tool threshold for 'too many'. Many tools are CRUD variations for similar resources (routing codes, directory lines, webhooks), making the surface heavy for an MCP server. While the domain is complex, consolidation or grouping could streamline the set.
The tool surface covers comprehensive lifecycle operations: search/get for lookup, create/update/delete for directory lines and routing codes, flow submission and retrieval, validation, webhooks, and health checks. Minor gaps exist (e.g., no direct update for flows), but core workflows are well covered.
Maintenance
Related MCP Connectors
MCP Spec Compliance MCP โ audits any MCP server.json against the official Model Context Protocol
MCP server for French (BOAMP) + EU (TED) public procurement data via TenderAPI.
MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseAqualityAmaintenanceModel 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.431Apache 2.0
- AlicenseAqualityAmaintenanceModel Context Protocol (MCP) server for German Electronic Invoicing (ZUGFeRD 2.x / XRechnung 3.x). Provides tools to validate, generate, parse, and convert invoices compliant with EN 16931 and KoSIT.502Apache 2.0
- AlicenseAqualityBmaintenanceModel Context Protocol (MCP) server for Polish Electronic Invoicing (KSeF / FA(2)). Provides tools to validate, generate, and explore API specifications for KSeF interoperability.102Apache 2.0
- AlicenseBqualityAmaintenanceModel Context Protocol (MCP) server for Spanish Electronic Invoicing. Provides tools to generate, validate, and submit invoices across VERI\*FACTU, Facturae/FACe, SII, TicketBAI, and Crea y Crece B2B.202Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cmendezs/mcp-facture-electronique-fr'
If you have feedback or need assistance with the MCP directory API, please join our Discord server