Skip to main content
Glama
cmendezs

mcp-facture-electronique-fr

search_company

Search legal units (SIRENs) in the French PPF directory by legal name, SIREN, or filters. Use to resolve SIRETs and directory lines.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sirenNoExact SIREN (9 digits, no spaces).
limiteNoMaximum number of results (limite).
ignorerNoNumber of results to skip for pagination (ignorer).
type_entiteNoEntity type filter (typeEntite).
raison_socialeNoLegal/trade name (partial match). Use when the SIREN is unknown.
etat_administratifNoAdministrative status filter (etatAdministratif).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv0.7.0
    • addedInput schema / properties / etat_administratif
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Administrative status filter (etatAdministratif)."
      +}
    • addedInput schema / properties / ignorer
      Added value: +{
      +  "default": 0,
      +  "description": "Number of results to skip for pagination (ignorer).",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedInput schema / properties / limit
      Removed value: -{
      -  "default": 50,
      -  "description": "Maximum number of results per page (1-500, default 50).",
      -  "maximum": 500,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • addedInput schema / properties / limite
      Added value: +{
      +  "default": 50,
      +  "description": "Maximum number of results (limite).",
      +  "maximum": 500,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • removedInput schema / properties / name
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Company name or trade name (partial match accepted). Example: 'Dupont' returns all entities whose name contains 'Dupont'. Use when you know the name but not the SIREN."
      -}
    • addedInput schema / properties / raison_sociale
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Legal/trade name (partial match). Use when the SIREN is unknown."
      +}
    • changedInput schema / properties / siren / description
      Previous value: -"Company SIREN number (9 digits, no spaces). Example: '123456789'. Use for an exact lookup; prefer get_company_by_siren when the SIREN is known."New value: +"Exact SIREN (9 digits, no spaces)."
    • removedInput schema / properties / status
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Registration status of the legal unit in the PPF directory. Active: registered and reachable for e-invoicing. Inactive: deregistered; cannot receive invoices. Pending: registration in progress."
      -}
    • addedInput schema / properties / type_entite
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Entity type filter (typeEntite)."
      +}
    • removedInput schema / properties / updated_after
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Pagination cursor: only return entries updated after this date/time (ISO 8601, e.g. 2024-09-01T00:00:00Z). Use the 'nextUpdatedAfter' field from the previous response to fetch the next page."
      -}
  2. Changed5 schema fields changedv0.2.3
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of results (1-500)."New value: +"Maximum number of results per page (1-500, default 50)."
    • changedInput schema / properties / name / description
      Previous value: -"Company name or trade name (partial search accepted). Example: 'Dupont' will return all entities whose name contains 'Dupont'."New value: +"Company name or trade name (partial match accepted). Example: 'Dupont' returns all entities whose name contains 'Dupont'. Use when you know the name but not the SIREN."
    • changedInput schema / properties / siren / description
      Previous value: -"Company SIREN number (9 digits, no spaces). Example: '123456789'."New value: +"Company SIREN number (9 digits, no spaces). Example: '123456789'. Use for an exact lookup; prefer get_company_by_siren when the SIREN is known."
    • changedInput schema / properties / status / description
      Previous value: -"Legal unit status in the PPF directory. Possible values: Active, Inactive, Pending."New value: +"Registration status of the legal unit in the PPF directory. Active: registered and reachable for e-invoicing. Inactive: deregistered; cannot receive invoices. Pending: registration in progress."
    • changedInput schema / properties / updated_after / description
      Previous value: -"Pagination: only return entries updated after this date/time (ISO 8601 format, e.g. 2024-09-01T00:00:00Z)."New value: +"Pagination cursor: only return entries updated after this date/time (ISO 8601, e.g. 2024-09-01T00:00:00Z). Use the 'nextUpdatedAfter' field from the previous response to fetch the next page."
  3. First observedv0.2.0

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.