MCP server exposing MeteoSwiss ICON-CH2-EPS weather forecasts for Switzerland as callable tools
Swiss Weather MCP has 5 tools with reasonable naming (verb_location patterns) and mostly complete schemas. However, descriptions vary significantly in quality and completeness. current_date_and_time lacks parameter descriptions (it has none). wind_speed has a truncated description (incomplete sentence). Output schemas are not documented anywhere in the code. Parameter constraints (min/max lead times) are mentioned in descriptions but not enforced in JSON Schema. Error handling guidance is absent. The implementation demonstrates domain understanding but lacks LLM-optimization for descriptions and proper schema structure for agent reasoning.
Get a human-readable string of the current time, weekday and date. Returns: str: A string in the format "Today is <weekday> <day>.<month>.<year> <hour>:<minute>:<second>"
Get sunshine hours for a location and offset period. Args: location (str): Location name (e.g., "Zurich"). lead_time_start_swiss (int): Start hour offset from today at 00:00 Swiss local time. Min offset time is 2 hours. lead_time_end_swiss (int): End hour offset from today at 00:00 Swiss local time. Max offset time is 121 hours. Returns: float: Predicted sunshine hours for the specified period. Examples: sunshine_hours("Zurich", 2, 24) # Total sunshine hours today sunshine_hours("Zurich", 24, 48) # Total sunshine hours tomorrow sunshine_hours("Zurich", 30, 36) # Total sunshine hours tomorrow morning sunshine_hours("Zurich", 36, 42) # Total sunshine hours tomorrow afternoon sunshine_hours("Zurich", 42, 48) # Total sunshine hours tomorrow evening
Get air temperature for a location at a specific offset time. Args: location (str): Location name (e.g., "Zurich"). lead_time_swiss (int): Hour offset from today at 00:00 Swiss local time. Min offset time is 2 hours. Max offset time is 121 hours. Returns: float: Maximum air temperature in Celsius for the given lead time. Examples: temperature("Zurich", 2) # Temperature at 02:00 Swiss local time today temperature("Zurich", 14) # Temperature at 14:00 Swiss local time today temperature("Zurich", 36) # Temperature at 12:00 Swiss local time tomorrow temperature("Zurich", 113) # Temperature at 17:00 Swiss local time in 4 days
wind_speed tool has incomplete/truncated description: 'Get predicted wind speed for a location at a specific offset time.', lacks return type, units (m/s? km/h?), and examples that other tools provide. Ambiguous which units the agent should expect.
current_date_and_time has an empty input schema {} but the description mentions return format. Input schema must be explicit and complete.
No output schema documentation visible anywhere. Tools return float, str, or implicit structures but agents cannot see what shape to expect. Per pattern:response-shaper, LLMs need documented return types to plan downstream calls.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get total rainfall for a location and offset period. Args: location (str): Location name (e.g., "Zurich"). lead_time_start_swiss (int): Start hour offset from today at 00:00 Swiss local time. Min offset time is 2 hours. lead_time_end_swiss (int): End hour offset from today at 00:00 Swiss local time. Max offset time is 121 hours. Returns: float: Total precipitation accumulation in millimeters for the given period. Examples: total_rainfall("Zurich", 2, 24) # Total rainfall today total_rainfall("Zurich", 24, 48) # Total rainfall tomorrow total_rainfall("Zurich", 24, 30) # Total rainfall tonight total_rainfall("Zurich", 30, 36) # Total rainfall tomorrow morning total_rainfall("Zurich", 36, 42) # Total rainfall tomorrow afternoon total_rainfall("Zurich", 42, 48) # Total rainfall tomorrow evening
Get predicted wind speed for a location at a specific offset time.
No error handling guidance. Tools accept location strings without validation. What happens if location='InvalidTown'? Does it return null, throw, or suggest alternatives? Per pattern:recovery-guide, errors must guide the agent on next steps.
Parameter constraints (lead_time_start_swiss min=2, max=121) are in description text only, not in JSON Schema. Per pattern:constrained-input, constraints must be formally declared so agents and validators understand them, not buried in prose.
location parameter accepts free-form strings ('Zurich', 'InvalidTown'). No enum of valid Swiss locations provided. Per pattern:constrained-input, location should be an enum or tool should validate and return helpful error suggesting available locations.
No tool annotations (readOnlyHint, idempotentHint) visible. Per current MCP spec 2026-07-28, tools should declare whether they are read-only or have side effects. All 5 tools are READ_ONLY risk markers in metadata, but not exposed via MCP tool annotations.