io.github.trondbjoroy/met-mcp
Weather forecasts from MET Norway (Yr): geocoding plus hourly forecasts worldwide.
Open source Repository Open in the app JSON README (API)
About
Weather forecasts from MET Norway (Yr): geocoding plus hourly forecasts worldwide.
Details
- Kind
- MCP servers
- Topic
- Maps, weather & travel
- Publisher
- trondbjoroy
- Origin
- official
- Category
- ferramentas
- Transport
- http
- Version
- 0.2.0
- Last push
- 2026-08-22T19:56:40Z
- Repository state
- ativo
- Language
- TypeScript
- License
- MIT
- Added
- 2026-08-29 04:01:35
- Updated
- 2026-08-29 04:01:35
- Origin id
io.github.trondbjoroy/met-mcp
README
# met-mcp An MCP server for weather forecasts from MET Norway (Yr). Built as a learning project. Available three ways: - **npm**: [`met-mcp`](https://www.npmjs.com/package/met-mcp) — run locally over stdio - **Remote**: `https://met-mcp.met-mcp-worker.workers.dev/mcp` — Streamable HTTP on Cloudflare Workers, add it as a claude.ai connector - **MCP registry**: [`io.github.trondbjoroy/met-mcp`](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.trondbjoroy/met-mcp) ## Tools - `geocode_location(name, count)` — find coordinates for a place name. Uses the free Open-Meteo geocoder, because MET has no geocoding API. - `get_forecast(latitude, longitude, hours)` — hourly forecast from MET Locationforecast 2.0. Works worldwide, best in the Nordics. - `get_nowcast(latitude, longitude)` — radar-based precipitation for the next 2 hours. Nordics only. - `get_weather_alerts(latitude?, longitude?)` — official Norwegian danger warnings (MetAlerts). Omit coordinates for all of Norway. - `get_sun_events(latitude, longitude, date, utc_offset)` — sunrise, sunset, and solar noon. Worldwide. - `get_ocean_forecast(latitude, longitude, hours)` — wave height and sea temperature along the Norwegian coast. - `find_weather_stations(latitude, longitude, count)` — nearest official weather stations (Frost). - `get_historical_weather(station_id, from, to, elements)` — daily historical observations from the Frost archive; some stations go back over 100 years. The two Frost tools need a free client ID from https://frost.met.no/auth/requestCredentials.html, set as the `FROST_CLIENT_ID` env var (or a Cloudflare secret for the worker). The other tools need nothing. Tool definitions live in `src/tools.ts`, shared between the stdio server and the worker. ## Build and test ```bash npm install npm run build npm test ``` The test spawns the server over stdio and calls both tools against the live APIs. ## Use with Claude Code ```bash claude mcp add met-weather -- node C:\Users\trond\met-mcp\dist\index.js ``` Then ask Claude: "What is the weather in Bergen tomorrow?" ## MET terms of service - Send an identifying User-Agent with contact info. Set the `MET_USER_AGENT` env var, e.g. `met-mcp/0.1.0 you@example.com`. - Send at most 4 decimals in coordinates. The server rounds for you. - Data license: NLOD / CC BY 4.0. Credit MET Norway when you show the data. ## Remote version `worker/` holds the Cloudflare Workers deployment: the same two tools served over MCP Streamable HTTP with `createMcpHandler` (MCP SDK v2). Develop with `npm run dev`, ship with `npm run deploy` (both from `worker/`). ## How it works - `src/index.ts` is the whole server. It speaks MCP over stdio: JSON-RPC on stdin/stdout. - Each tool declares an input schema with Zod. The MCP client (Claude) reads the schema and validates arguments. - Tool results are `content` blocks. This server returns JSON as text, trimmed to what an LLM needs — the raw MET response has ~90 timesteps with far more fields. - Never write to stdout with `console.log`. It corrupts the protocol stream. Log to stderr.