A complete MCP server example demonstrating Resources, Prompts, Tools, and user elicitation capabilities
This server has 4 tools with mixed quality. Naming is generally acceptable (verb-noun style), but descriptions lack depth and parameter documentation is incomplete. Schema quality is low, only 2 of 4 tools have explicit input schemas with typed parameters. The collect_user_info tool claims to use elicitation but the feature flag is false, creating a credibility gap. Output schemas are not documented. Error handling is absent. The server demonstrates basic capability but falls short of production quality.
Herramienta básica que suma dos números. Las tools son funciones que el cliente puede invocar. Args: a: Primer número b: Segundo número Returns: La suma de a y b
Recopila información del usuario mediante prompts interactivos. Usa elicitation para obtener nombre y edad del usuario. Returns: Mensaje con la información recopilada o estado de la operación
Herramienta simple que devuelve el texto de entrada. Args: text: Texto a hacer eco Returns: El texto de entrada
Devuelve información sobre las capacidades del servidor. Returns: Información sobre el servidor y sus características
collect_user_info has no input schema despite accepting a Context parameter and claiming to use elicitation. The tool description mentions elicitation but the server feature flag reports elicitation=false, creating a mismatch.
server_info has no input schema (empty {} in source) and no documented output schema. Returns a dict with nested structure but LLMs have no guidance on the response fields. Schema score = 0.
Descriptions are generic and lack LLM-optimization guidance. Example: 'Devuelve información sobre las capacidades del servidor. Returns: Información sobre el servidor y sus características' (49 chars), vague about when/why to call vs other tools. Baseline for A+ tools is 50 - 200 chars with clear differentiators.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
No error handling documented. Tools return success/dict responses but no recovery guidance if operations fail. E.g., calculate_sum silently returns NaN/Infinity if given invalid input; collect_user_info may timeout on elicitation but no guidance on retry strategy.
No input validation. calculate_sum accepts any float; no minimum/maximum bounds. Server does not reject absurd values (e.g., sum of 1e308 and 1e308 → infinity). Baseline: 100% of A+ tools constrain numeric ranges.
Tool naming 'collect_user_info' is ambiguous, does it create a user, update a profile, or just gather preferences? Baseline: names must convey the side effect clearly. 'gather_user_preferences' or 'request_user_details' would be clearer.
Elicitation feature is claimed in collect_user_info docstring but server reports elicitation=false in header. Code uses ctx.elicit() which may not be invoked if the capability is not negotiated. Creates runtime uncertainty.