MCP Server providing weather and news tools via JSON-RPC 2.0 over stdio
This MCP server has two tools with basic but incomplete definitions. Both tools have action-verb names (get_weather, get_news) which follows naming conventions. Descriptions are present but brief (under 100 chars), meeting minimum requirements. Input schemas are explicitly defined with proper JSON Schema format including types and parameter descriptions. However, there are significant gaps: output schemas are NOT documented (tools return structured responses but LLMs cannot see the expected fields), error handling is minimal and non-instructive (generic error messages like 'Weather API error: ...' without recovery guidance), no tool annotations (readOnlyHint, destructiveHint, etc.), and parameter constraints lack depth. The get_news tool accepts an optional 'country' parameter but does not document valid country codes or format requirements. Tool implementations call external APIs with hardcoded timeouts and basic error wrapping, but responses are returned as plain JSON text rather than structured objects. The server does not guide LLMs on how to recover from errors or what to do if an API key is missing.
Get latest news articles about a topic
Get current weather for a city
Output schemas are not documented. Tools return structured JSON (e.g., temperature, humidity, articles) but the tool definition does not specify what fields the LLM should expect. This forces LLMs to discover output structure at runtime and makes downstream tool chaining unpredictable.
Error messages are non-instructive. Responses like 'Weather API error: Connection timeout' do not tell the LLM what to do next (retry, ask user, try different city, etc.). Per the rubric, error responses must guide recovery.
Missing tool annotations. Neither tool declares readOnlyHint (both are read-only operations). This prevents clients from determining if a tool is safe to call repeatedly or has side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | 2024-11-05+ | v1 |
Parameter 'country' in get_news is optional but underdocumented. No enum of valid country codes, no format specification (ISO 3166-1 alpha-2?), no example of behavior when the country is invalid. LLMs will guess.
Responses wrapped in text/json fields rather than structured objects. The handle_tools_call function wraps all results in {"type": "text", "text": json.dumps(...)} which requires LLMs to parse JSON from a text field. Modern patterns return structured content.
No result limits documented or enforced. The get_news tool returns up to 5 articles (hardcoded in the implementation) but the tool description does not state this limit. Users and LLMs cannot predict response size.