A weather-focused MCP server template demonstrating tool design principles, integrated with mcpscope-engine and a chat UI
Four weather tools with strong naming (verb_noun pattern: geocode_place, get_current_weather, get_forecast, get_historical_weather). Descriptions are detailed and contextual, ranging 150-280 chars, well above the 34-char baseline minimum. All parameters have type definitions and descriptions. Input schemas are properly structured with Zod. However, output schemas are not explicitly documented in the visible code, the tool handlers return `Promise<unknown>`, and while the code comments reference 'zipped' columnar data and decoded weather codes, the actual response structure is not formally declared. Error handling is present (Open-Meteo error reason extraction) but lacks recovery guidance for LLMs. Tool composition is clean (geocode_place is a prerequisite for weather tools, clearly documented in descriptions). No security issues detected (read-only tools, no secrets in params).
Resolve a place name to geographic coordinates. The weather tools take latitude/longitude, not names, so call this FIRST for any name-based question, then pass a match's latitude/longitude to get_current_weather, get_forecast or get_historical_weather. Pass the BARE place name (e.g. "Berlin", "Oslo") OR a postal code alone (e.g. "79290") — do NOT append the country or postcode to the name. The server automatically retries common variations.
Get the current weather at a location. Pass the latitude and longitude from geocode_place. Returns current conditions including temperature, humidity, apparent temperature, precipitation, weather code (translated to plain text in the `conditions` field), and wind speed.
Get the weather forecast for a location. Pass the latitude and longitude from geocode_place. Returns daily forecasts for today and up to 16 days ahead, with max/min temperatures, precipitation, wind speed, and weather code (translated to plain text in the `conditions` field).
Get historical weather data for a location on past dates. Pass the latitude and longitude from geocode_place, and the start and end dates in YYYY-MM-DD format. Data is available from 1940-01-01 onwards. Returns daily data with max/min temperatures, precipitation, and weather code (translated to plain text in the `conditions` field).
Output schemas not formally documented. Tool handlers return `Promise<unknown>` with no explicit response type declaration. While code comments describe 'zipped' columnar data and decoded weather codes, LLMs cannot infer the response structure from comments alone.
Error handling lacks recovery guidance. Open-Meteo errors are extracted and thrown, but error messages do not guide LLMs on next steps (e.g., 'Try a different place name' or 'Check date range'). Errors should be actionable.
get_historical_weather date parameters lack explicit format validation in descriptions. While 'YYYY-MM-DD' is stated, no mention of the ARCHIVE_START constant (1940-01-01) or what happens if dates are outside the valid range.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 86 | 2026-07-28+ | v2 |
No pagination or result limits documented. If geocode_place returns many matches or forecast returns 16+ days, the response structure and any truncation behavior should be explicit.
Tool descriptions reference 'docs/MCP-DESIGN.md' principles but those design docs are not visible in the provided source. External documentation references reduce clarity for LLMs evaluating tool selection.