Educational demonstration of the Anthropic SDK with tool use, MCP server integration, prompt caching, observability, and streaming patterns.
Two tools with minimal documentation. create_ticket has a basic schema (title, priority with default) but lacks parameter descriptions and output schema documentation. get_weather has only a location parameter with minimal context. Both descriptions are in Spanish and under 100 chars, providing insufficient context for LLM tool selection. No error handling guidance, no output schemas documented, no parameter constraints (enums, ranges). Tool definitions are partially inferred from code rather than explicitly registered with full metadata.
Crea un ticket en el sistema interno. Devuelve {id, url}.
Obtiene la temperatura actual de una ciudad.
Missing parameter descriptions in both tools. create_ticket's 'priority' parameter lacks explanation of valid values (only 'normal' shown as default). get_weather's 'location' parameter has minimal guidance ('Ciudad y país' is too vague, does it accept 'Madrid, Spain' or 'Madrid, ES'?).
No output schema documentation. create_ticket returns {id, url, title, priority} but LLM has no formal schema to plan downstream calls. get_weather returns a free-text string ('21C, despejado en...'), unstructured output forces LLM parsing and wastes tokens.
No error handling or recovery guidance. If create_ticket fails (invalid priority, API down), the LLM receives no actionable error message. If get_weather fails (invalid location), no suggestion for alternatives or retry strategy.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Missing parameter constraints. 'priority' parameter in create_ticket has no enum or validation, LLM may pass invalid values like 'critical' or 'p0'. No min/max for numeric params, no regex patterns for strings.
Tool definitions partially inferred from code. get_weather is defined inline in app/main.py as a dict, not via FastMCP decorator or explicit registration. This makes the tool harder to discover and maintain.