MCP server for searching and retrieving company information from the OpenRegister API, including company details, shareholders, and historical data.
OpenRegister MCP provides three tools for company data lookup with decent naming conventions and generally clear descriptions. All tools follow verb_noun pattern (search_, get_). Descriptions range from 94-207 characters, mostly within acceptable bounds. Input schemas are present with proper JSON Schema structure and most parameters have descriptions. However, there are moderate issues: (1) descriptions include example IDs which can bias LLM behavior (e.g., 'DE-HRB-F1103-267645' in get_company_info), (2) enum constraints are missing for several filter parameters (register_type, legal_form, active should be enums), (3) output schemas are not documented, LLMs cannot plan downstream operations without knowing response structure, (4) error handling is minimal with generic fallback messages that provide no recovery guidance, (5) parameter dependencies and constraints are underspecified (e.g., no mention that search_companies requires at least one filter parameter). Overall, solid foundation but lacks production-grade polish in parameter validation, output documentation, and error guidance.
Get detailed information about a company using its unique ID. Args: company_id: Unique company identifier (e.g., "DE-HRB-F1103-267645") history: Include historical company data when set to true financials: Include financial data when set to true documents: Include document metadata when set to true
Retrieve the shareholders of a company. Args: company_id: Unique company identifier (e.g., "DE-HRB-F1103-267645") Note: This endpoint currently only supports companies with the legal form GmbH. The request can take up to 60 seconds to complete.
Search for companies based on various criteria. Args: query: Text search query to find companies by name (e.g., "Descartes Technologies UG") register_number: Company register number for exact matching (e.g., "230633") register_type: Type of register to filter results (e.g., "HRB", "HRA", "PR", "GnR", "VR") register_court: Court where the company is registered (e.g., "Berlin (Charlottenburg)") active: Filter for active or inactive companies (default: true) legal_form: Legal form of the company (e.g., "gmbh", "ag", "ug")
Example IDs embedded in descriptions bias LLM behavior. 'DE-HRB-F1103-267645' and '230633' in parameter descriptions may cause LLMs to reuse these literal values instead of adapting to actual data, leading to incorrect API calls.
Missing enum constraints for categorical parameters. register_type (HRB, HRA, PR, GnR, VR), legal_form (gmbh, ag, ug), and active (true/false) should be declared as enums in the input schema, not as free-form strings in descriptions. This prevents hallucinated invalid values.
Output schemas are not documented. LLMs cannot determine what fields are returned (e.g., does search_companies return [{ company_id, name, register_number, court }] or something else?). Without output schema, agents cannot chain tools or extract required IDs for downstream calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
Error handling provides no recovery guidance. Generic messages like 'Unable to fetch company data' tell the agent nothing actionable. Should indicate: is this retryable? Should the user correct the input? Is the API down? Per pattern:recovery-guide, errors must guide next steps.
Missing parameter constraints and dependencies. search_companies accepts multiple optional filters but does not state if at least one is required, or which combinations are valid. get_company_shareholders does not formally document the 60-second timeout or GmbH-only limitation as a constraint, they appear only in prose.
Missing pagination guidance. search_companies likely returns multiple results but no page, offset, limit, or next_cursor parameters are visible. Without pagination, large result sets will exhaust context window. Must implement and document limit + offset or cursor-based pagination.
Timeout handling is basic. The code sets a 30-second httpx timeout, but get_company_shareholders documents a 60-second completion window, potential for premature timeout errors. Must either increase timeout to 60+ seconds or implement proper timeout error messages with retry guidance.