MCP server - Polish KRS registry (Krajowy Rejestr Sadowy) via official MS API
Three tools with identical parameter structure (single 'krs' string param). All have descriptions present but minimal (10-30 chars), below the 50-200 char LLM-optimized baseline. Input schemas visible and properly typed, but lack validation constraints (no regex pattern, length bounds, or enum). No output schemas documented, LLMs cannot infer response structure. No error handling guidance. Tool names follow verb_noun pattern (get_*) which is correct, but descriptions are too terse to guide LLM selection or explain when to use get_entity vs get_entity_full vs get_board.
skrocona reprezentacja: zarzad + sposob reprezentacji
odpis aktualny (kto, gdzie, NIP/REGON, status)
odpis pelny (z historia wpisow)
Tool descriptions are too short (10-30 chars). LLM cannot determine when to use get_entity vs get_entity_full vs get_board. Baseline is 50-200 chars with WHAT, WHEN, and WHAT-IT-RETURNS.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields (e.g., does get_entity return 'nip' or 'identyfikatory.nip'?). Responses are unstructured from the agent's perspective.
Input parameter 'krs' lacks validation constraints. Description says '10 cyfr, akceptuje mysłniki' but no regex pattern, minLength, or maxLength in schema. Code validates at runtime (normalizeKrs), but LLM has no machine-readable constraint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2025-06-18+ | v2 |
No error handling guidance. Code throws 'Nieprawidlowy numer KRS' on invalid input, but tool definition does not document what errors are possible or how LLM should recover (e.g., 'Try search_entities() first').
Tool composition unclear. Three tools operate on same resource (KRS entity) with identical input. Descriptions do not explain the semantic difference: get_entity returns current snapshot, get_entity_full includes history, get_board returns board summary. LLM must guess which to call.