Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y aemet-mcp
MCP client config
{
"mcpServers": {
"aemet": {
"command": "npx",
"args": [
"-y",
"aemet-mcp"
]
}
}
}Tools for working with AEMET OpenData, the public API of Spain's State Meteorological Agency.
| Package | Description | npm |
|---|---|---|
aemet-client | Typed TypeScript SDK + CLI for AEMET OpenData. Used in production at snowy.es. | |
aemet-mcp | Model Context Protocol server: plug AEMET into Claude Desktop, Cursor, Windsurf or any MCP client. Forecasts, warnings, live observations, climate history and beach forecasts. Runs locally over stdio. |
packages/aemet-client/README.mdpackages/aemet-mcp/README.mdpackages/aemet-client/README.es.mdRequires Node.js ≥ 20.18 and pnpm ≥ 10.
pnpm install
pnpm -r build
pnpm -r test
pnpm -r typecheck
pnpm lint
To work on a single package:
pnpm --filter aemet-client test
pnpm --filter aemet-mcp dev
The E2E suite (pnpm --filter aemet-client test:e2e) hits the real AEMET
API and is skipped unless AEMET_API_KEY is set. CI runs it behind a
repository secret.
aemet-client is released by pushing a tag v<x.y.z> or
aemet-client-v<x.y.z>. The release workflow checks the tag matches
packages/aemet-client/package.json before publishing to npm via
Trusted Publishing (OIDC, no token).aemet-mcp is released by pushing a tag aemet-mcp-v<x.y.z>
using the same Trusted Publishing setup. pnpm publish rewrites the
workspace:^ dependency on aemet-client to a real semver range.See CONTRIBUTING.md for development guidelines.
MIT © Jorge Carrera