Skip to main content
Glama
open-meteo-mcp

open-meteo-mcp

by diego-prieri

open-meteo-mcp

An MCP server that gives AI agents current weather and forecasts from the free Open-Meteo API. No API key is needed.

Tools

All tools are read-only (readOnlyHint: true) and call an external service (openWorldHint: true).

Tool

Inputs

Returns

search_locations

name, count (1–20, default 5), country_code? (2-letter ISO), language (ISO 639-1, default es)

matching places with country, admin area, coordinates and timezone; structuredContent: { results }

get_current_weather

latitude, longitude, temperature_unit (celsius | fahrenheit, default celsius), wind_speed_unit (kmh | ms | mph | kn, default kmh)

current temperature, feels-like, humidity, precipitation, wind and WMO weather description, with units and the local timezone

get_forecast

same as get_current_weather, plus days (1–16, default 7), hourly (default false), hours (1–48, default 24)

one line per day (YYYY-MM-DD: …) and, with hourly: true, one line per hour (YYYY-MM-DDTHH:MM: …)

Recommended flow: search_locations to turn a place name into coordinates, then get_current_weather or get_forecast with those coordinates. If the user already gave coordinates, the search can be skipped.

The resource weather://wmo-codes lists the meaning of the WMO weather_code values returned by the tools.

Text output is one compact line per result, always with units; the full objects are in structuredContent. Times are local to the place's timezone, which every result states. Empty searches come back as a normal result with a hint on what to try; upstream errors (4xx/5xx, timeouts) come back as isError: true with a suggestion.

Related MCP server: Weather MCP Server

Layout

src/
  backend.ts        OpenMeteoBackend interface + HttpOpenMeteoBackend (fetch) + FakeOpenMeteoBackend
  wmo.ts            WMO weather code descriptions
  tools/weather.ts  Tool definitions: zod inputs, annotations, ok()/fail() results
  server.ts         createServer(backend): tools, resource and instructions, no transport
  index.ts          stdio entry point; builds the backend from env
  http.ts           Stateless Streamable HTTP handler (used by the Vercel function)
api/
  mcp.js            Vercel function at /api/mcp, re-exports dist/http.js
test/
  server.test.ts    In-memory client ↔ server tests, no network
  http.test.ts      HTTP endpoint tests on 127.0.0.1, no network
  live.test.ts      Optional smoke test against the real API
  fixtures/         Real Open-Meteo responses captured with curl

Install and run

Requires Node.js 20 or newer.

npm install
npm run build
claude mcp add open-meteo -- node /absolute/path/to/open-meteo-mcp/dist/index.js

Any MCP client that launches stdio servers works the same way: run node dist/index.js.

npm run dev       # run from source with tsx
npm run inspect   # MCP Inspector

Hosted endpoint (Vercel)

A public instance runs on Vercel. open-meteo-mcp-eight.vercel.app is a small web app (Spanish UI, public/index.html) that searches places and shows current weather, the next 24 hours and 7 days, calling the tools through the same MCP endpoint. The endpoint itself is stateless Streamable HTTP (POST only):

claude mcp add --transport http open-meteo https://open-meteo-mcp-eight.vercel.app/api/mcp

api/mcp.js serves dist/http.js (built by npm run build, see vercel.json); public/ is the web app. To deploy your own: vercel link, then vercel deploy --prod. The OPEN_METEO_*_URL variables below can be set as Vercel environment variables.

Everyone using the hosted endpoint shares one free Open-Meteo quota from Vercel's IPs (600 calls/min, 5,000/hour, 10,000/day), and the same non-commercial terms apply. For heavy use, run your own instance.

Environment variables

Both are optional; each one is the full endpoint URL.

  • OPEN_METEO_GEOCODING_URL: geocoding endpoint (default https://geocoding-api.open-meteo.com/v1/search).

  • OPEN_METEO_FORECAST_URL: forecast endpoint (default https://api.open-meteo.com/v1/forecast).

Tests

npm test            # in-memory client ↔ server tests, no network (the live test shows as skipped)
npm run test:live   # smoke test against the real API (OPEN_METEO_LIVE=1)
npm run typecheck

Data and terms

Weather data by Open-Meteo.com (CC BY 4.0). If you publish results obtained through this server, credit Open-Meteo.

The free API is for non-commercial use only and is limited to 600 calls/min, 5,000/hour and 10,000/day. See the Open-Meteo terms for details.

This project is not affiliated with or endorsed by Open-Meteo.

License

MIT (this server's code).

Available Tools

3 tools
get_current_weatherGet current weatherA
Read-onlyIdempotent

Current conditions (temperature, feels-like, humidity, precipitation, weather code, wind, day/night) at the given coordinates, with the local time of the place. Use search_locations first if you only have a place name.

NameRequiredDescriptionDefault
latitudeYesLatitude in decimal degrees (-90 to 90), e.g. -31.4135
longitudeYesLongitude in decimal degrees (-180 to 180), e.g. -64.18105
wind_speed_unitNoWind speed unit: kmh, ms, mph or kn (default kmh)kmh
temperature_unitNoTemperature unit: celsius or fahrenheit (default celsius)celsius

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld, so the safety profile is fully covered. The description adds that a local time for the place is returned, which is genuinely useful context, but it says nothing about latency, rate limits, or data freshness for an open-world remote lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the output contract and ending with the prerequisite. Every clause carries information; nothing is redundant with the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description earns its keep by enumerating the returned fields and disclosing that local time is included. The only shortfall is not routing the agent away from this tool toward get_forecast when a future window is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — latitude/longitude have ranges and examples, and both unit params are enums with defaults documented inline. The description adds only the indirect hint that coordinates typically originate from search_locations; it gives no additional meaning about units or coordinate conventions, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (current conditions) and enumerates what is returned (temperature, feels-like, humidity, precipitation, weather code, wind, day/night) plus the local time. The word 'current' implicitly contrasts with get_forecast, but that sibling is never named, so differentiation from it relies on the agent's inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite chain: 'Use search_locations first if you only have a place name,' which resolves the most likely failure mode (calling with a name instead of coordinates). It does not state when to prefer get_forecast over this tool, which is the remaining gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_forecastGet forecastA
Read-onlyIdempotent

Daily forecast for up to 16 days (weather, min/max temperature, precipitation and its max probability, max wind) at the given coordinates and, with hourly: true, an hourly forecast for up to 48 hours (temperature, precipitation probability, weather). Times are local to the place. Use search_locations first if you only have a place name.

NameRequiredDescriptionDefault
daysNoNumber of forecast days (1–16, default 7)
hoursNoNumber of hourly steps from now (1–48, default 24); ignored if hourly is false
hourlyNoAlso return the hourly forecast (default false)
latitudeYesLatitude in decimal degrees (-90 to 90), e.g. -31.4135
longitudeYesLongitude in decimal degrees (-180 to 180), e.g. -64.18105
wind_speed_unitNoWind speed unit: kmh, ms, mph or kn (default kmh)kmh
temperature_unitNoTemperature unit: celsius or fahrenheit (default celsius)celsius

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld; the description adds genuinely non-structured context: 'Times are local to the place', which an agent cannot infer from the schema and which matters for interpreting results. It stops short of noting data source, freshness, or rate limits, and the hours/hours interplay is already in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler: scope and returns first, prerequisite routing last. Every clause carries information an agent would otherwise have to derive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by enumerating the returned fields for both daily and hourly modes plus the local-time convention. It leaves out units of the returned values and any error behavior for out-of-range coordinates, which is a minor remaining gap for a 7-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented, establishing a baseline of 3. The description adds that 'hours' only applies in hourly mode and lists which variables each mode returns, but gives no extra detail on units, defaults, or valid ranges beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Daily forecast') plus horizon (up to 16 days), the exact variables returned, and the optional hourly mode (up to 48 hours). This cleanly separates it from get_current_weather and from search_locations without either schema being opened.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rule: 'Use search_locations first if you only have a place name.', which names the sibling and the condition that selects it. It does not state when to prefer this over get_current_weather, though the daily-vs-current framing makes that largely implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_locationsSearch locationsA
Read-onlyIdempotent

Search places by name worldwide. Returns name, region, country, coordinates, timezone and id; use the coordinates with get_current_weather or get_forecast. An ambiguous name returns several results.

NameRequiredDescriptionDefault
nameYesPlace name (1–200 chars), accents optional, e.g. "Córdoba"
countNoMaximum results to return (1–20, default 5)
languageNoISO 639-1 language code (lowercase) for the place names, e.g. "en" (default "es")es
country_codeNoISO 3166-1 alpha-2 country code to filter by, e.g. "AR" (optional, any case)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world behavior, so the description is free to focus on what matters: it lists the returned fields (name, region, country, coordinates, timezone, id) despite there being no output schema, and it warns that ambiguous names yield multiple results. That ambiguity note is real behavioral context an agent would otherwise have to discover by failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler: purpose first, return shape second, chaining guidance third, ambiguity warning last. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter read-only lookup with full schema coverage and rich annotations, the description covers purpose, returns, downstream use, and the multi-result case. Minor gaps, such as whether the default of 5 results is enough for common cases, are handled by the schema and don't block correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (name, count, language, country_code) are already documented with examples, ranges, and patterns. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Search places by name worldwide") and implicitly separates this tool from its weather siblings by framing it as the geocoding step that feeds them. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear downstream usage: use the returned coordinates with get_current_weather or get_forecast, which is the real reason to call this tool. No explicit when-not-to-use or alternative-search guidance, but for a geocoder with only weather siblings there is little ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedget_current_weather
    • First observedget_forecast
    • First observedsearch_locations

TDQS

A4.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: location search, current conditions, and forecast. The descriptions explicitly guide sequencing, reducing ambiguity between current weather and forecast.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: search_locations, get_current_weather, get_forecast. The convention is predictable and readable.

Tool Count5/5

Three tools are well-scoped for a focused weather server: geocoding, current conditions, and forecast. Each tool earns its place without feeling bloated or overly thin.

Completeness4/5

The core workflow is covered: find a place, get current weather, and get a forecast. Minor gaps exist for historical weather or alerts, but the stated purpose is well served.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to fetch current weather conditions and forecasts for any city using the Open-Meteo API. Provides temperature, precipitation, and hourly forecast data through natural language queries.
    ISC
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI assistants to retrieve current weather, forecasts, and summaries for any global location using the Open-Meteo API, with no API key required.
    4 npm
    Creative Commons Zero v1.0 Universal
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides live weather data (current conditions, forecasts) and city geocoding through Open-Meteo API, enabling AI assistants to answer weather queries without an API key.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to retrieve real-time weather conditions and 7-10 day forecasts for any location via Open-Meteo, with no API key required.
    202 npm
    MIT