An MCP server that provides weather tools (current weather and forecasts) via Open-Meteo API, deployed on Cloudflare Workers
Two tools with clear verb-noun naming (get_current_weather, get_forecast) and basic descriptions. Schemas are present with Zod validation and parameter descriptions. However, descriptions are minimal (34-50 chars, below the 50-200 char LLM-optimized baseline), output schemas are not documented, and error handling lacks recovery guidance. Tool definitions are visible in weather-mcp/src/index.ts with explicit registration via this.server.tool().
Get current weather for a city. Returns temperature in Celsius and conditions.
Get a multi-day weather forecast for a city.
Tool descriptions are too brief (34-50 chars vs 50-200 char baseline). 'Get current weather for a city. Returns temperature in Celsius and conditions.' lacks context on when to use this vs get_forecast, what fields are returned, and prerequisites.
Output schemas are not documented. Callers cannot predict the structure of returned JSON (e.g., does get_current_weather return {location, temperature_c, temperature_f, conditions, wind_kph, humidity_pct} or a different shape?). LLMs must infer structure from unstructured text responses.
Error handling lacks recovery guidance. When geocoding fails ('Could not find location: {location}'), the response does not suggest alternatives (e.g., 'Try a more specific location like "London, UK" or "Austin, TX"'). LLMs receive no actionable next step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
get_forecast parameter 'days' has min/max constraints (1-7) in Zod schema but description does not explicitly state the range. LLMs may not parse Zod constraints from code; descriptions must be self-contained.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Both tools are read-only and idempotent, but this is not declared in the MCP schema, forcing clients to infer safety properties.