
meteo-mcp-rs
io.github.gohyperdev/meteo-mcp-rs
Rust-native Open-Meteo MCP server with an interactive MCP App weather & air quality dashboard
Documentation
meteo-mcp-rs
A fast, zero-API-key Model Context Protocol (MCP) weather server written in Rust, featuring an interactive MCP App (ui://meteo/dashboard) powered by the Open-Meteo API.
▶ Live demo — the real dashboard running in your browser against live Open-Meteo data.
Ask Claude (or any MCP Apps–capable host) for the weather and get an interactive dashboard with current telemetry, European Air Quality Index (PM2.5/PM10), a 24-hour temperature & precipitation chart, and a 7-day forecast — rendered directly inside the conversation with zero API keys or external Node/Python runtimes.
Features
- Single self-contained binary:
ui/dashboard.htmlis embedded at compile time (include_str!), zero runtime asset dependencies. - No API keys required: Uses Open-Meteo's free Geocoding, Forecast, and Air Quality APIs.
- MCP Apps (
2026-01-26) compliant:- Serves UI resource
ui://meteo/dashboardwith MIME typetext/html;profile=mcp-app. - Attaches
_meta.ui.resourceUriand_meta.ui.visibilitymetadata to tools. - Supports host theme variables (
light/dark),ResizeObserverauto-sizing, and inline/fullscreen display modes.
- Serves UI resource
- Interactive UI-to-Server refreshes:
get_weather_dashboard(visibility: ["model", "app"]): Geocodes a city name and returns full weather + air quality telemetry.refresh_by_coords(visibility: ["app"]): App-only hidden tool for instant coordinate-based refreshes and city preset pills without cluttering the LLM's tool list.
- Graceful degradation: If air quality telemetry is temporarily unavailable, the weather forecast still succeeds.
Architecture
┌──────────────────────────────┐ stdio (JSON-RPC) ┌──────────────────────────────┐
│ MCP Host (Claude / IDE) │ ◄────────────────────────────► │ meteo-mcp-rs │
│ │ │ │
│ ┌────────────────────────┐ │ tools/call + structuredData │ • OpenMeteoClient (reqwest) │
│ │ ui://meteo/dashboard │ │ ◄────────────────────────────► │ • MeteoServer (rmcp 3.10) │
│ │ (Sandboxed Iframe) │ │ resources/read (MCP App HTML) │ • Embedded ui/dashboard.html│
│ └────────────────────────┘ │ └──────────────┬───────────────┘
└──────────────────────────────┘ │ HTTPS (rustls)
▼
Open-Meteo Public APIs
(Geocoding / Forecast / Air Quality)
Quick Start
Homebrew (macOS / Linux)
brew install gohyperdev/tap/meteo-mcp-rs
Download prebuilt binaries
Grab the latest archive for your platform from GitHub Releases (each release also includes SHA256SUMS.txt):
| Platform | Architecture | Archive |
|---|---|---|
| macOS | Apple Silicon (arm64) | meteo-mcp-rs-<version>-aarch64-apple-darwin.tar.gz |
| macOS | Intel (x86_64) | meteo-mcp-rs-<version>-x86_64-apple-darwin.tar.gz |
| Linux | x86_64 | meteo-mcp-rs-<version>-x86_64-unknown-linux-gnu.tar.gz |
| Linux | arm64 (aarch64) | meteo-mcp-rs-<version>-aarch64-unknown-linux-gnu.tar.gz |
| Windows | x86_64 | meteo-mcp-rs-<version>-x86_64-pc-windows-msvc.zip |
Example install on macOS / Linux (replace <version> & <target>):
curl -fsSL "https://github.com/gohyperdev/meteo-mcp-rs/releases/latest/download/meteo-mcp-rs-v0.1.1-aarch64-apple-darwin.tar.gz" | tar -xz
sudo mv meteo-mcp-rs-v0.1.1-aarch64-apple-darwin/meteo-mcp-rs /usr/local/bin/
On macOS, if Gatekeeper blocks an unsigned downloaded binary:
xattr -d com.apple.quarantine /usr/local/bin/meteo-mcp-rs
Build from source
Requires Rust toolchain (rustc 1.88+ / edition 2024).
git clone https://github.com/gohyperdev/meteo-mcp-rs.git
cd meteo-mcp-rs
cargo build --release
The binary is compiled to target/release/meteo-mcp-rs.
Install via Cargo
From crates.io (compiles from source, requires the Rust toolchain; --locked builds with the exact dependency versions the release was tested against):
cargo install --locked meteo-mcp-rs
With cargo-binstall (downloads the prebuilt binary from GitHub Releases, no compilation):
cargo binstall meteo-mcp-rs
Or straight from the repository:
cargo install --git https://github.com/gohyperdev/meteo-mcp-rs
Configure in Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"meteo": {
"command": "/absolute/path/to/meteo-mcp-rs"
}
}
}
Configure in Claude Code
claude mcp add meteo /absolute/path/to/meteo-mcp-rs
Test with MCP Inspector
npx @modelcontextprotocol/inspector ./target/release/meteo-mcp-rs
Tools & Resources
Tools
| Tool | Visibility | Arguments | Description |
|---|---|---|---|
get_weather_dashboard | ["model", "app"] | city: string | Geocodes a city and returns current weather, 24h hourly, 7-day forecast, and EU AQI telemetry. |
refresh_by_coords | ["app"] | name: string, latitude: number, longitude: number | App-only tool used by the interactive UI to refresh or switch preset cities without geocoding. |
Resources
| URI | MIME Type | Description |
|---|---|---|
ui://meteo/dashboard | text/html;profile=mcp-app | Self-contained HTML/CSS/SVG/JS interactive weather dashboard (include_str!). |
Development
# Check formatting
cargo fmt --all -- --check
# Lint
cargo clippy --all-targets -- -D warnings
# Run unit & mock-HTTP integration tests
cargo test
# Run with debug logs (written to stderr; stdout stays reserved for MCP JSON-RPC)
RUST_LOG=meteo_mcp_rs=debug cargo run
Links
- GitHub Releases — prebuilt binaries +
SHA256SUMS.txt - crates.io
- MCP Registry name:
mcp-name: io.github.gohyperdev/meteo-mcp-rs - Homebrew tap
- Live demo (GitHub Pages)
License
MIT — see LICENSE.
meteo-mcp-rscargo install meteo-mcp-rs