This server provides weather and time tools for querying current weather conditions and local time for given locations.
The server defines 2 tools with explicit schemas and basic descriptions. Tool names follow verb_noun convention (get_weather, get_local_time), which is correct. Input schemas are present and well-formed with required fields and type definitions. However, descriptions are minimal (under 50 chars each), parameter descriptions lack context and constraints, and output schemas are not documented. Error handling exists but lacks recovery guidance. The implementation uses rmcp framework with SSE transport and proper async/await patterns. No tool annotations (readOnlyHint, etc.) are present despite both tools being read-only operations.
Get local time
Get current weather
Tool descriptions are too brief (under 50 chars). 'Get current weather' and 'Get local time' provide minimal context for LLM tool selection. No guidance on when to use each tool, what prerequisites exist (API key requirements), or what the response structure looks like.
Parameter descriptions are present but lack detail. 'City name', 'Country name', and 'Temperature unit (C or F)' do not explain format constraints, expected values, or validation rules.
Output schemas are not documented. The code shows responses are returned as Content::json() but the schema structure (fields, types, required properties) is not visible in tool definitions. Agents cannot plan downstream operations without knowing response shape.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 47 | 2024-11-05+ | v1 |
No tool annotations despite read-only semantics. Both tools should declare readOnlyHint=true to signal to clients that these operations are safe. This follows MCP 2026-07-28 tool annotation pattern but is absent.
Error handling returns generic McpError::internal_error() with unstructured messages. Example: 'WEATHER_API_KEY environment variable not set' and 'Failed to fetch time data' lack actionable guidance.
API key injection via environment variables is correct per pattern:secret-injection, but no documentation warns the LLM that these tools require external API keys. Tool description should note 'Requires WEATHER_API_KEY and IP_GEOLOCATION_API_KEY to be configured by the server administrator.'
The 'unit' parameter in get_weather has a default value ('C') but no enum constraint. LLMs may pass 'K' (Kelvin) or 'F_CELSIUS' or other invalid variants. Should declare as enum: ["C", "F"] with explicit validation.