An MCP server that exposes Klerk Framework state machine events as tools and provides resources for listing managed models
Two dynamically-generated tools with significant definition gaps. Tool 1 (dynamic_event_tools) has a generic description that doesn't explain WHEN to use it or what each generated tool does. Tool 2 (dynamic_list_tools) lacks any description entirely. Parameter descriptions are minimal ('Event-specific parameters derived from...' is vague). No output schema documented. No error handling guidance. No indication of which operations are destructive vs. safe. Tool names follow a pattern but lack action verbs (should be 'execute_event' or 'trigger_event', not just the event name). The dynamic nature makes it impossible to verify individual tool quality without runtime inspection.
Dynamically generated tools for each external event in managed state machines. Tool names follow pattern: {model_name}_{event_name}. Each tool executes the corresponding event on a Klerk model instance.
Dynamically generated tools for listing all instances of each managed model. Tool names follow pattern: {model_name}_list. Returns all model instances as JSON array.
Tool descriptions lack WHEN/WHY context. 'Dynamically generated tools for each external event' doesn't explain when an LLM should call a specific event tool vs. another. Descriptions should state prerequisites, side effects, and use cases.
No output schema documented. LLMs cannot plan downstream calls or extract data without knowing what fields to expect. dynamic_event_tools returns CommandResult (Success/Failure) but structure is not documented.
Parameter descriptions are generic. 'Event-specific parameters derived from the event's parameter class' doesn't explain what values are valid, ranges, or formats.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 32 | <=2025-11-25 | v2 |
No error handling guidance. If a modelID is invalid or an event fails, the LLM receives a raw error with no recovery path. Should return 'Model not found. Call {model_name}_list to see available IDs.'