Typed decisions for AI agents as an MCP tool: yes/no probability (noul), choice, and score about JSON state in one fast request, with a fallback envelope that never blocks. Backed by the TypeSafe System One model; shared by pi, Claude Code, and goose.
Single tool 'judge' has a well-structured input schema with proper type definitions and descriptions for all parameters. Tool description is comprehensive (250+ chars) and explains the purpose, input types, and output envelope clearly. Schema uses Zod validation with union types, enums, and constraints (e.g., timeout_ms max 60000, payload size cap 256 KiB). However, output schema is defined but not integrated into the tool registration visible in the code snippet. Error handling returns a fallback envelope with error messages, which is good for agent recovery. The tool is read-only (no state mutation), reducing risk. Main gaps: output schema not explicitly documented in tool registration, no per-parameter descriptions in the schema itself (only in code comments), and the tool does one thing well but lacks composition patterns since it's a singleton.
Ask the TypeSafe System One model (Jev) typed questions (noul yes/no probability, choice among options, score on ordered levels) about JSON application state. All questions are answered in one fast request. Returns {answers, model, usage} on success or {fallback: true, error} on any failure.
Output schema defined in code (outputSchema Zod object) but not visible in tool registration. LLMs cannot see what fields to expect in the response, forcing them to infer structure from the description alone.
Tool name 'judge' is a generic verb that does not clearly convey the action. Better names: 'evaluate_state_questions', 'ask_typed_questions', or 'judge_application_state'. Current name requires reading the description to understand intent.
Parameter descriptions are present in Zod schema but not all are actionable. E.g., 'criteria' description says 'For noul: {true, false} descriptions. For choice: {option: description}' but does not explain when to use each type or provide examples of valid structures.
No explicit error classification or recovery guidance in the fallback envelope. When an error occurs, the LLM receives {fallback: true, error: '...'} but no hint whether to retry, ask the user, or abandon the task.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Tool accepts optional 'model' parameter for override but does not document which models are valid or what happens if an invalid model is passed. LLMs may hallucinate model names.