Finnish Patent and Registration Office (PRH) — YTJ open data MCP. Finland's official business register (Business Information System / YTJ). Keyless.
Two tools with complete input schemas and descriptions, but significant gaps in output documentation and error handling. Tool names follow verb_noun convention (search_, get_). Descriptions are adequate (150-200 chars) but lack actionable guidance on when to use each tool vs. the other, and do not document output structure. Parameters have types and descriptions, but lack constraints (enums, ranges, patterns). No error handling guidance visible. No tool annotations (readOnlyHint, etc.). Output schemas are undocumented, LLMs cannot plan downstream calls or extract structured data reliably.
Full register record for one Finnish company by businessId (Y-tunnus, format NNNNNNN-N). e.g. {businessId:"0112038-9"} (Nokia Oyj). Returns names[] (with history), addresses[], companyForms[], mainBusinessLine, registeredEntries[], tradeRegisterStatus, status, registrationDate, lastModified. Multi-language descriptions: languageCode 1=Finnish, 2=Swedish, 3=English.
Search the Finnish business register (PRH / YTJ) by company name and/or filters. Results under {totalResults, companies:[...]}. Each company has businessId (Y-tunnus), names[], mainBusinessLine, companyForms[], addresses[], status. e.g. {name:"Nokia"} or {name:"Oy", location:"Helsinki", companyForm:"17"}. Use businessId here for an exact single-company lookup, or call get_company.
Output schemas not documented. LLMs cannot infer what fields search_companies and get_company return, forcing them to guess at response structure and breaking downstream tool chaining.
No input validation constraints. Parameters like 'page' (number) lack min/max bounds; 'companyForm' and 'mainBusinessLine' accept free-form strings instead of enums. LLMs will pass invalid values (page=999999, companyForm='invalid').
No error handling guidance. If businessId is malformed or not found, the code throws generic errors ('PRH: 404 ...') with no recovery hints. LLMs cannot self-correct or suggest alternatives.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Tool descriptions do not clarify when to use search_companies vs. get_company. Both mention businessId; search_companies says 'Use businessId here for an exact single-company lookup, or call get_company', but this is confusing. Should be explicit: search_companies for partial/filtered search, get_company for exact lookup by Y-tunnus.
No tool annotations. Tools are read-only (safe to retry) but lack readOnlyHint annotation. This prevents agents from optimizing retry logic and understanding idempotency guarantees.