aemet-mcp
MCP server that exposes public weather data from AEMET (Agencia Estatal de Meteorología, Spain) to AI agents and MCP-compatible clients.
Three tools, well-typed, backed by AEMET's official OpenData API:
get_municipality_forecast— daily forecast (up to 7 days) for a Spanish municipality, by INE code.get_station_observation— last ~12h of hourly observation data (temperature, wind, precipitation…) from a weather station.get_weather_warnings— active weather warnings (CAP alerts) for a region or all of Spain.
Prerequisites
- Node.js 20+
- A free AEMET OpenData API key: request one at https://opendata.aemet.es/centrodedescargas/altaUsuario
Installation
No install needed — run it directly with npx:
npx -y @mmillan76/aemet-mcp
The server communicates over stdio, so it's meant to be launched by an MCP client rather than run standalone in a terminal.
Configuration
The server reads the API key from the AEMET_API_KEY environment variable.
It exits with an error at startup if it's missing.
Claude Desktop / Claude Code
Add to your MCP client config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"aemet": {
"command": "npx",
"args": ["-y", "@mmillan76/aemet-mcp"],
"env": {
"AEMET_API_KEY": "your-api-key-here"
}
}
}
}
Any other MCP client that supports stdio servers works the same way — point
it at npx -y @mmillan76/aemet-mcp with AEMET_API_KEY set in the environment.
Local development
git clone https://github.com/mmillan76/aemet-mcp.git
cd aemet-mcp
npm install
cp .env.example .env # fill in AEMET_API_KEY
npm run build
Test tool calls interactively with the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.js
(the Inspector reads AEMET_API_KEY from your shell environment, so export
it — or source .env — before running the command above)
Notes on the AEMET API
AEMET OpenData uses a two-step pattern on every endpoint: the first request
returns a JSON envelope with a datos URL, not the actual data; a second
request to that URL returns the real payload. This server hides that detail
— tools just return the final data. Rate limits apply per API key; if you
hit them, the tool returns a clear error instead of retrying silently.
License
MIT — see LICENSE.