The widget-mcp server defines 4 tools with valid schemas and descriptions, but several critical issues limit production readiness. All tools have descriptions present (10+ chars), and schemas are defined using Zod with reasonable structure. However, naming is non-standard (lacks action verbs), descriptions are somewhat generic and include implementation examples rather than usage guidance, parameter descriptions are minimal, and error handling is absent. Most parameters lack constraints or validation guidance. The server is a UI widget toolkit, not a data-manipulation tool, which affects some pattern applicability, but even for UI tools, more rigorous parameter documentation and error guidance are expected in production systems.
Display a unit conversion widget that allows real-time conversion between multiple units. Each unit should contain a formula for each other unit in terms of the current unit. Example input: { units: [{id: 'ft', name: 'Feet', formulas: {in:'{ft} * 12'}, {id: 'in', name: 'Inches', formulas: {ft:'{in} * 12'}}], initialValue: { id: 'ft', value: 1 }}. You don't need to say anything else after answering with this tool.
Display a simple fact. Should be used when answering a users question that has a short factual answer. You don't need to say anything else after answering with this tool. Example: { description: 'The capital of France', fact: 'Paris' }
Start a stopwatch that counts up from zero. You don't need to say anything else after answering with this tool.
Start a timer. You don't need to say anything else after answering with this tool.
Tool names lack action verbs and are not self-documenting. 'timer', 'stopwatch', 'display-fact', 'conversion' do not follow verb_noun pattern. LLMs infer intent from name before reading description, these names are ambiguous about whether they start, manage, or visualize UI elements.
Parameter 'duration' in timer tool lacks validation constraints. No min/max documented, no units clarification beyond 'seconds'. LLMs may pass 0, negative, or extremely large values. Description should state: 'Duration in seconds (1-3600, integer).'
Stopwatch tool has empty inputSchema ({}). While technically valid, it provides no guidance. Should document that no parameters are accepted and explain what behavior to expect.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Tool descriptions include implementation examples ('Example: { description: ... }') rather than usage guidance. LLMs tend to reuse example values literally. Replace with concise usage intent and move examples to parameter descriptions or constraint definitions.
No error handling or recovery guidance defined. Tools return UIResource objects on success but have no documented error paths. What happens if duration is invalid? If conversion formulas are malformed? How should LLM respond?
Output schema for tools not documented. Code shows tools return { content: [resource] } but this structure is not described in tool definitions. LLMs do not know what fields to expect, making downstream reasoning difficult.
Conversion tool's 'formulas' parameter accepts arbitrary object with string values but does not validate formula syntax or guard against injection. Description should specify regex pattern for formula strings (e.g., must contain {id} placeholder, no executable code).