Koskamo

met-mcp

A community-built MCP server providing weather tools including geocoding, hourly forecasts, nowcasts, alerts, sun events, ocean forecasts, and historical data from MET Norway and Open-Meteo APIs.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

met-mcp logo, by trondbjoroyCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by trondbjoroy
You need:The two Frost tools need a free client ID from https://frost.met.no/auth/requestCredentials.html
MCP endpoint (Streamable HTTP)
https://met-mcp.met-mcp-worker.workers.dev/mcp
Vendor documentation

What its tools do

8 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

8 of 8 have a description · 0 of 8 declare behavior hints · 8 of 8 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Find coordinates for a place name
  • Get hourly weather forecasts worldwide
  • Retrieve radar-based precipitation nowcasts
  • Check official Norwegian weather alerts

Source and maintenance

Community listingRegistry 0.2.0
Maintenance checked

Protocol and capabilities

Server
met-weather 0.2.0
MCP protocol negotiated in check
2025-11-25
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

8 advertised

geocode_location — Geocode a place name
Advertised by the server during the last successful anonymous check.

Find latitude and longitude for a place name. Use the coordinates with the other tools.

geocode_location input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Place name, e.g. 'Bergen' or 'Oslo, Norway'"
    },
    "count": {
      "type": "integer",
      "default": 5,
      "maximum": 10,
      "minimum": 1,
      "description": "Maximum number of matches to return"
    }
  }
}
get_forecast — Get weather forecast
Advertised by the server during the last successful anonymous check.

Get an hourly weather forecast from MET Norway (Yr) for a coordinate. Works worldwide, best coverage in the Nordics.

get_forecast input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "hours": {
      "type": "integer",
      "default": 24,
      "maximum": 48,
      "minimum": 1,
      "description": "How many hours ahead to include"
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees"
    }
  }
}
get_nowcast — Get precipitation nowcast
Advertised by the server during the last successful anonymous check.

Minute-by-minute precipitation for the next 2 hours, radar-based. Nordic region only. Answers 'do I need an umbrella right now?'

get_nowcast input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees"
    }
  }
}
get_weather_alerts — Get weather alerts
Advertised by the server during the last successful anonymous check.

Official danger warnings (wind, flood, ice, forest fire...) from MET Norway. Covers Norway and its waters. Omit coordinates to get all current alerts. Alert text is in Norwegian.

get_weather_alerts input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees"
    }
  }
}
get_sun_events — Get sunrise and sunset
Advertised by the server during the last successful anonymous check.

Sunrise, sunset, and solar noon for a coordinate and date. Works worldwide.

get_sun_events input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "latitude",
    "longitude",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Date as YYYY-MM-DD"
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees"
    },
    "utc_offset": {
      "type": "string",
      "default": "+00:00",
      "pattern": "^[+-]\\d{2}:\\d{2}$",
      "description": "UTC offset for the returned times, e.g. '+02:00' for Norwegian summer time"
    }
  }
}
get_ocean_forecast — Get ocean forecast
Advertised by the server during the last successful anonymous check.

Wave height, wave direction, and sea temperature. Covers the Norwegian coast and nearby seas.

get_ocean_forecast input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "hours": {
      "type": "integer",
      "default": 24,
      "maximum": 48,
      "minimum": 1,
      "description": "How many hours ahead to include"
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees"
    }
  }
}
find_weather_stations — Find weather stations
Advertised by the server during the last successful anonymous check.

Find the nearest official weather stations (Frost). Use the station id (e.g. SN50540) with get_historical_weather.

find_weather_stations input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "count": {
      "type": "integer",
      "default": 5,
      "maximum": 20,
      "minimum": 1,
      "description": "Maximum number of stations to return"
    },
    "latitude": {
      "type": "number",
      "maximum": 90,
      "minimum": -90,
      "description": "Latitude in decimal degrees"
    },
    "longitude": {
      "type": "number",
      "maximum": 180,
      "minimum": -180,
      "description": "Longitude in decimal degrees"
    }
  }
}
get_historical_weather — Get historical weather
Advertised by the server during the last successful anonymous check.

Daily historical observations from a weather station (Frost archive, some stations go back over 100 years). Find station ids with find_weather_stations.

get_historical_weather input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "station_id",
    "from",
    "to"
  ],
  "properties": {
    "to": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "End date (exclusive), YYYY-MM-DD"
    },
    "from": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Start date, YYYY-MM-DD"
    },
    "elements": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": [
        "mean(air_temperature P1D)",
        "sum(precipitation_amount P1D)",
        "max(wind_speed P1D)"
      ],
      "description": "Frost element ids. Defaults: daily mean temperature, precipitation sum, max wind."
    },
    "station_id": {
      "type": "string",
      "pattern": "^SN\\d+$",
      "description": "Station id from find_weather_stations, e.g. SN50540"
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
252 ms
95th percentile latency
252 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 252 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http met-mcp-workers https://met-mcp.met-mcp-worker.workers.dev/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add met-mcp-workers --url https://met-mcp.met-mcp-worker.workers.dev/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable met-mcp-workers in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "met-mcp-workers": {
      "url": "https://met-mcp.met-mcp-worker.workers.dev/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "met-mcp-workers": {
      "type": "streamableHttp",
      "url": "https://met-mcp.met-mcp-worker.workers.dev/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start met-mcp-workers and inspect its tools.
VS Code configuration
{
  "servers": {
    "met-mcp-workers": {
      "type": "http",
      "url": "https://met-mcp.met-mcp-worker.workers.dev/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http met-mcp-workers https://met-mcp.met-mcp-worker.workers.dev/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://met-mcp.met-mcp-worker.workers.dev/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "met-mcp-workers": {
      "serverUrl": "https://met-mcp.met-mcp-worker.workers.dev/mcp"
    }
  }
}

Let your agent find its tools

Find servers like met-mcp from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.