erup-mcp demonstrates solid tool definition quality with consistent naming, present schemas, and reasonable descriptions. All 8 tools follow verb_noun convention (search_, get_, list_). Input schemas are complete with proper JSON Schema structure including types, enums, and constraints. However, several parameter descriptions lack depth, and output schemas are not explicitly documented in the source code. Error handling is present but generic. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are visible despite all tools being read-only operations. Parameter descriptions average ~30-40 chars vs. production baseline of 72 chars.
Get full details of a single e-RUP entity.
Get agents associated with an entity.
Get branches associated with an entity.
Get status history for an e-RUP entity.
Get payment service authorizations for an entity.
Return only the count of entities matching optional filters.
List all entity type codes and descriptions from KNF taxonomy.
Output schemas not documented in source code. Tool implementations include summarize functions but return type structure and fields are not formally declared. LLMs cannot plan downstream operations without knowing response field names and types.
Parameter descriptions are sparse and generic. E.g., 'Entity ID from search results' (23 chars) vs. baseline 72 chars. Descriptions lack guidance on when to use each parameter, valid ranges beyond enums, and dependencies between parameters.
No tool annotations present despite all operations being read-only. Missing readOnlyHint in tool definitions. This omission forces LLMs to infer safety semantics, increasing risk of unsafe retry assumptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 59 | - | v1 |
Search and filter entities in the KNF e-RUP registry.
Error handling in index.ts catches errors generically via formatErrorMessage() but source does not show structured error categorization (retryable vs. user-fixable vs. fatal). Agents cannot distinguish transient failures from permanent issues.
Tool descriptions do not clarify prerequisites or discovery order. E.g., search_entities returns entity_id, but it's not obvious to an LLM that entity_id is required for get_entity, get_entity_services, etc. No dependency hints present.