MCP server that serves WeatherFlow Tempest weather data over MCP stdio, providing live conditions, forecasts, and archived historical weather observations
TempestKeep has 12 tools with consistent naming (verb_noun pattern: current_conditions, list_stations, forecast, etc.) and reasonable descriptions (avg ~120 chars). Parameter descriptions are present but sparse (e.g., 'station_id' lacks range/format guidance). Output schemas are undocumented, LLMs cannot plan downstream calls. Error handling is absent; no recovery guidance or actionable error messages visible. The query_sql tool exposes arbitrary SQL execution without input validation or permission gates, creating injection risk. Tool composition is reasonable (single responsibility), but missing pagination on list_stations and forecast limits.
Return the current state of the archive
Fetch historical observations from the API and append them to the archive. Resumable: call repeatedly while has_more is true.
Return the latest conditions. Live data is preferred when a token is configured. An archive supplies fallback data and a 3-hour pressure trend.
Return daily summaries from the archive
Return current, hourly, and daily forecast data. Temperature uses °F and wind uses mph. hours cannot exceed 240. days cannot exceed 10.
Query observations from the archive with optional bucketing
7 of 12 tools have empty input schemas (current_conditions, list_stations, station_info, get_observations, wind_rose, backfill_archive, sync_archive, archive_status). LLMs cannot infer parameter types or constraints.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., station_id from list_stations to pass to forecast). Violates pattern:tool and mxe:include-chaining-ids.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
List stations and devices available to the configured token. Results include location and timezone.
Execute arbitrary SQL queries against the archive
Return station metadata, coordinates, elevation in meters, timezone, and connected devices.
Return archive coverage. Include station metadata when live access is configured.
Fetch the latest observations from the API and append them to the archive
Analyze wind direction distribution from the archive
query_sql tool accepts arbitrary SQL with no input validation, sanitization, or permission gates. Exposes SQL injection risk and allows unrestricted data access. Violates pattern:tool-gateway and pattern:permission-gate.
No error handling or recovery guidance visible. Tools lack actionable error messages (e.g., 'Invalid station_id: must be integer 1-999' or 'Station not found. Available: [list]'). Violates pattern:recovery-guide.
Parameter descriptions lack format/range guidance. 'station_id' (integer) and 'hours'/'days' (integers) have no min/max bounds stated. 'bucket_minutes' and 'max_days' lack constraints. Violates pattern:constrained-input.