French Enterprise Data Integration. MCP server providing unified access to INSEE, Banque de France, and INPI APIs for comprehensive French business data.
Firmia defines 6 tools with consistent naming (verb_noun pattern: search_, get_) and reasonable descriptions (100-150 chars). All tools have input schemas with types and enums. However, output schemas are not documented anywhere in the source, LLMs cannot predict what fields to expect from responses. Parameter descriptions are present but generic (e.g., 'Enterprise name or SIREN/SIRET number' lacks guidance on when to use which). No error handling guidance visible. Tools are read-only (good for safety) but lack idempotent/readonly annotations. Schemas use proper JSON Schema with regex patterns and enums, which is solid. Missing: output documentation, error recovery guidance, and tool annotations.
Check the status and rate limits of connected APIs
Get beneficial ownership information for a French enterprise (INPI only)
Get company publications and legal documents (INPI only)
Get recent company changes and updates (INPI only)
Get detailed information about a French enterprise by SIREN
Search for French enterprises across multiple data sources
No output schemas documented. LLMs cannot predict response structure, forcing them to guess what fields are available for downstream tool calls or data extraction.
Parameter descriptions lack actionable guidance. 'Enterprise name or SIREN/SIRET number' does not explain when to use each, format constraints, or what happens if both are provided.
No error handling or recovery guidance visible. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Tool annotations missing. All tools are read-only but lack readOnlyHint annotation. This prevents clients from optimizing caching or safety policies.
Pagination parameters (pageSize, searchAfter in get_differential_updates) lack documentation of total count or next_cursor behavior. LLMs cannot determine when pagination is exhausted.