by weather-mcp
Provides AI assistants with real‑time and historical weather data through 17 dedicated tools, covering forecasts, alerts, air quality, marine conditions, lightning, rivers, wildfires and more—without requiring API keys or sign‑up.
Weather MCP Server delivers live and archival weather information to AI assistants via a Model Context Protocol (MCP) endpoint. It aggregates free public data sources (NOAA, Open‑Meteo, USGS, NIFC, NASA FIRMS, RainViewer, Blitzortung.org) and exposes 17 tool functions such as get_forecast, get_current_conditions, get_alerts, get_air_quality, get_wildfire_info, etc.
npx command:
npx -y @dangahagan/weather-mcp@latest
For other MCP clients, add the command to the client’s mcpServers configuration.Q: Do I need any API keys to get started? A: No. All default tools operate without keys. Optional keys only unlock richer data for specific regions.
Q: Which regions have the most detailed data? A: The United States receives the richest NOAA data (detailed forecasts, station observations, fire‑weather indices). Elsewhere, Open‑Meteo provides global coverage with slightly less granularity.
Q: How many requests can I make? A: Free public APIs allow up to 10,000 requests per day from Open‑Meteo. Built‑in caching typically keeps usage far below this limit.
Q: Can I run the server locally?
A: Yes. The npx command launches the server on your machine, and queries go directly from the client to the upstream public APIs.
Q: What if I want radar or lightning data but want a smaller install?
A: Install with --omit=optional to skip the mqtt dependency used by the lightning tool. Radar imagery remains available; lightning will return an informative error until the optional dependency is added.
Q: How do I enable all 17 tools?
A: Set the environment variable ENABLED_TOOLS=all or customize the list in your .env/MCP config.
Q: Is the data suitable for safety‑critical decisions? A: The server provides helpful context, but always verify with official government warnings and forecasts before acting on safety‑critical information.
Give your AI assistant real weather data — 17 tools, zero API keys, zero signup, zero cost.
Weather MCP is a Model Context Protocol server that connects AI assistants (Claude, Cursor, Cline, Zed, and any other MCP client) to live weather data: forecasts, current conditions, alerts, air quality, marine conditions, lightning, radar, rivers, wildfires, and 85+ years of historical weather. It's built entirely on free public data sources — NOAA, Open-Meteo, USGS, NIFC, NASA FIRMS, RainViewer, and Blitzortung.org — so there is nothing to sign up for and no key to paste in. (A few optional keys unlock extras — see Optional API keys — but no tool ever requires one.)
claude mcp add weather -- npx -y @dangahagan/weather-mcp@latest
That's the whole install for Claude Code. For any other MCP client, add this to its MCP config:
{
"mcpServers": {
"weather": {
"command": "npx",
"args": ["-y", "@dangahagan/weather-mcp@latest"]
}
}
}
Then just ask:
"What's the weather in Tokyo this weekend?" "Is there any lightning near the lake right now?" "How does today compare to normal for this time of year?" "Are there wildfires within 50 miles of my cabin?" "Will there be a full moon this weekend?" "Is this a record high for today?" "How bad is the pollen in Berlin today?" "What was the weather in Paris on June 6, 1944?"
👉 See it in action — real prompts like these with the answers they produced, and the raw server output behind them.
📦 Listed in the Official MCP Registry as io.github.dgahagan/weather-mcp.
✅ The official package is @dangahagan/weather-mcp, published from this repository via npm trusted publishing. Every release carries a signed provenance attestation tying the tarball to the exact commit and workflow that built it — verify any version without installing it:
npm view @dangahagan/weather-mcp@latest dist.attestations
Republished copies of this server exist under other npm scopes. They are MIT-licensed forks, which the license permits, but they are not maintained here and are usually many versions behind. This issue tracker covers @dangahagan/weather-mcp only — for anything installed from another scope, please report it to that package's publisher.
There are excellent commercial weather MCPs backed by paid APIs and full-time teams. If you need SLA-backed data, minute-level nowcasting, or premium global station coverage, they're worth a look — this project won't pretend otherwise.
Choose this one if you want:
The tradeoff is honest: US data (NOAA) is richer than international data (Open-Meteo), some tools are US-only, and free APIs come with fair-use rate limits. See Coverage & Limitations.
All 17 tools, documented in detail in docs/TOOLS.md:
| Tool | What it does | Coverage |
|---|---|---|
get_forecast |
Daily/hourly forecasts up to 16 days by coordinates, saved location, or city name; sunrise/sunset, UV, precipitation probability, optional climate-normals comparison, optional moon phase & twilight almanac, optional five-model agreement comparison | 🌍 Global |
get_current_conditions |
Current weather: temperature, wind, humidity, pressure; NOAA station observations in the US (plus heat index/wind chill, snow depth, optional NOAA fire-weather indices), Open-Meteo model data elsewhere (with an optional computed Fosberg fire-weather index), or real airport station observations worldwide with source="metar". Always states the observation's age, and automatically falls back to a fresher nearby station when the nearest one has gone dark. In extreme conditions automatically adds frostbite time-to-onset (computed wind chill) or heat-stress context (estimated WBGT) |
🌍 Global |
get_alerts |
Active watches, warnings, and advisories sorted by severity; official national warnings for the US (NOAA), Canada (ECCC), 38 European countries (MeteoAlarm), India (NDMA SACHET), the Philippines (PAGASA), and Indonesia (BMKG) | 🇺🇸 🇨🇦 🇪🇺 🇮🇳 🇵🇭 🇮🇩 |
get_historical_weather |
Hourly/daily observations from 1940 to present | 🌍 Global |
get_weather_summary |
One-call overview combining current conditions, forecast, and alerts (optionally air quality and lightning) | 🌍 Global |
search_location |
Geocode place names to coordinates ("Paris" → 48.85, 2.35) | 🌍 Global |
get_air_quality |
AQI (US/European scales), pollutants, UV index, health guidance; current pollen levels for European locations (or worldwide with an optional key); optional day-grouped forecast up to 7 days with per-day peak AQI and UV | 🌍 Global |
get_marine_conditions |
Wave height, swell, ocean currents, Douglas Sea Scale — includes Great Lakes and major US bays; forecast up to 16 days | 🌍 Global |
get_weather_imagery |
Precipitation radar (static or 2-hour animated loops) + GOES satellite imagery; composite: true returns a finished radar map over a base map as an image |
🌍 Global |
get_lightning_activity |
Real-time strike detection with 4-level proximity safety assessment | 🌍 Global |
get_river_conditions |
US: NWPS gauge levels, flood stages, streamflow, rise/fall trends, forecast series. Elsewhere: GloFAS modeled discharge snapped to the nearest river channel, with ensemble forecast | 🌍 Global |
get_wildfire_info |
US: named incidents with containment, size, and safety guidance from the nearest uncontained fire. Elsewhere: NASA FIRMS satellite heat detections (VIIRS, near real-time), clustered with distance, bearing, and intensity | 🌍 Global |
check_service_status |
Health checks for all upstream APIs plus cache statistics | — |
save_location |
Save places as aliases ("home", "cabin") with optional activity tags | — |
list_saved_locations |
List all saved locations | — |
get_saved_location |
Details for one saved location | — |
remove_saved_location |
Delete a saved location | — |
Default preset: with no configuration, the server exposes 17 tools led by
get_weather_summary(one call covers most "what's the weather?" questions), plusforecast,current_conditions,alerts,search_location, andcheck_service_status. Enable everything with one environment variable — see Tool Selection.
Consistent location input: every location-based tool accepts the same three forms —
latitude+longitude, a savedlocation_name(e.g."home"), or a free-textcity_name(e.g."Bend, Oregon", geocoded automatically). When a name is used, the response echoes the resolved place and coordinates.
Output verbosity: high-volume tools (
get_forecast,get_alerts,get_weather_imagery,get_river_conditions,get_wildfire_info,get_lightning_activity) acceptdetail: "summary" | "standard" | "full"(defaultstandard) to trade completeness for token cost — e.g.fullreturns the complete alert text, uncapped hourly forecast, every radar animation frame, and up to 25 nearby gauges/fires/strikes instead of the default 5-10.
get_alerts routes by country: NOAA in the US, Environment and Climate Change Canada alerts in Canada, the official national warnings of 38 European countries via EUMETNET MeteoAlarm, and the national CAP feeds of India (NDMA SACHET), the Philippines (PAGASA) and Indonesia (BMKG) — shown unmodified, with the issuing service credited. Where a feed publishes geometry inline, warnings are matched to your exact point by the alert's own polygon rather than to the whole country (the Philippines and Indonesia today; Europe remains country-level). Border cities like Toronto get the right country's alerts, not the nearest bounding box's.get_current_conditions will read the nearest airport's METAR (source="metar"): a genuine instrument reading anywhere on earth, with the station, its distance, and the observation age always stated. Outside the US this is the difference between a measurement and a model estimate.compare_models=true compares five global models (GFS, ECMWF, ICON, GEM, UKMO) in one request, summarizing where they agree and where they split rather than dumping five forecasts. Spread across models is a proxy for uncertainty, not a guarantee — a tight spread can still be wrong, and the output says so.ensemble_spread=true summarizes ECMWF ENS's 50 perturbed members — per-day High/Moderate/Low confidence, interquartile temperature bands, and how many members produce rain — instead of one deterministic forecast. Member fractions are raw model output, not calibrated probabilities: a confident ensemble can still be wrong, and the output says so. Mutually exclusive with compare_models; the two answer different questions.~/.weather-mcp/locations.json and can be tagged with activities ("boating", "skiing") so the AI highlights what matters to you.include_astronomy). Computed locally — accurate to the arcminute, works at the poles, costs zero API calls: "when does it get fully dark?"WEATHER_UNITS) or per request (units: "metric"), with fine-grained overrides (wind in knots, pressure in hPa, 24-hour clock). Defaults to imperial. See Units & Localization.All free, all public, no authentication required:
| Source | Provides | Coverage |
|---|---|---|
| NOAA Weather API | US forecasts, current conditions, alerts, fire weather | US |
| Open-Meteo | Global forecasts, historical data (1940+), air quality, marine, geocoding, climate normals, fire-weather inputs | Global |
| NOAA NWPS | River levels, streamflow, flood stages | US |
| RCC ACIS | Daily record high/low temperatures | US |
| EUMETNET MeteoAlarm | Official national weather warnings (38 European countries) | Europe |
| MSC GeoMet | Environment and Climate Change Canada weather alerts | Canada |
| NDMA SACHET | Official Indian warnings (CAP; polygon geometry served from a separate endpoint, so alerts are matched at country level) — public domain | India |
| PAGASA | Official Philippine warnings (CAP, inline polygons) — CC BY 4.0 | Philippines |
| BMKG | Official Indonesian nowcast warnings (CAP, inline polygons) — attribution required | Indonesia |
| NIFC WFIGS | Active wildfire perimeters and incidents | US |
| NASA FIRMS | Satellite fire detections (VIIRS, near real-time) | Global |
| RainViewer | Precipitation radar imagery | Global |
| NASA GIBS | GOES GeoColor satellite imagery; base map for composited radar | Western Hemisphere (satellite), Global (base map) |
| Blitzortung.org | Community lightning detection network | Global |
Open-Meteo allows 10,000 requests/day for non-commercial use; caching keeps typical AI usage far below that. Please respect the upstream providers' fair-use terms.
Composited radar maps (get_weather_imagery with composite: true) carry the acknowledgment NASA requests for GIBS imagery, alongside the RainViewer radar credit:
Imagery provided by services from NASA's Global Imagery Browse Services (GIBS), part of NASA's Earth Science Data and Information System (ESDIS).
Recommended — npx (always latest, nothing to manage):
# Claude Code
claude mcp add weather -- npx -y @dangahagan/weather-mcp@latest
Or in any MCP client's configuration:
{
"mcpServers": {
"weather": {
"command": "npx",
"args": ["-y", "@dangahagan/weather-mcp@latest"]
}
}
}
Global install:
npm install -g @dangahagan/weather-mcp
From source:
git clone https://github.com/weather-mcp/weather-mcp.git
cd weather-mcp
npm install
npm run build
Then point your MCP client at node /absolute/path/to/weather-mcp/dist/index.js.
Requires Node.js 18+. No API keys, tokens, or accounts needed — see Optional API keys for the three that add optional extras, and Optional dependency if you want a smaller install.
Claude Desktop, Claude Code, Cline, Cursor, Zed, VS Code (GitHub Copilot), LM Studio, Postman — any client that speaks MCP. Per-client setup instructions: docs/CLIENT_SETUP.md.
@latest always fetches the newest version.npm install -g @dangahagan/weather-mcp@latestgit pull && npm install && npm run buildRestart your MCP client after upgrading. See CHANGELOG.md for release notes.
Most users need zero configuration. Everything below is optional.
Settings can go in a .env file (see .env.example) or directly in your MCP client config:
{
"mcpServers": {
"weather": {
"command": "npx",
"args": ["-y", "@dangahagan/weather-mcp@latest"],
"env": {
"ENABLED_TOOLS": "all",
"CACHE_MAX_SIZE": "2000",
"LOG_LEVEL": "1"
}
}
}
}
Control which tools are exposed to reduce context overhead:
| Preset | Tools |
|---|---|
basic (default) |
weather_summary, forecast, current_conditions, alerts, search_location, check_service_status |
standard |
basic + historical_weather, air_quality, and saved-location tools |
full |
everything — standard + marine, imagery, lightning, rivers, wildfire (same as all) |
all |
all 17 tools |
ENABLED_TOOLS=all # Use a preset
ENABLED_TOOLS=forecast,current,alerts,aqi # Specific tools only
ENABLED_TOOLS=basic,+historical,+air_quality # Add to a preset
ENABLED_TOOLS=all,-marine # Remove from a preset
Short aliases are supported: forecast, current, alerts, historical, status, search, aqi, marine, radar, lightning, and more.
Output defaults to imperial (°F, mph, inHg, miles) and can be switched to metric (°C, km/h, hPa, km) server-wide or per request. Precedence: a per-call parameter beats a per-unit env override, which beats the WEATHER_UNITS system default.
WEATHER_UNITS=metric # switch everything to metric
WEATHER_WIND_SPEED_UNIT=kn # ...but wind in knots
WEATHER_TIME_FORMAT=24h # 24-hour clock
Or per call — the AI can honor "in Celsius" on the fly:
{ "latitude": 47.6, "longitude": -122.3, "units": "metric" }
{ "latitude": 47.6, "longitude": -122.3, "wind_speed_unit": "kn", "pressure_unit": "hPa" }
Supported on get_forecast, get_current_conditions, and get_historical_weather. Wind accepts mph/kmh/ms/kn; pressure inHg/hPa. Domain-specialized readings (fire-weather heights, river gauge stage, and the marine tool's dual-unit wave output) keep their conventional units.
| Variable | Default | Purpose |
|---|---|---|
ENABLED_TOOLS |
basic |
Tool preset or list (see above) |
WEATHER_UNITS |
imperial |
Default unit system: imperial or metric |
WEATHER_TEMPERATURE_UNIT … |
— | Per-unit overrides: _TEMPERATURE_(F/C), _WIND_SPEED_(mph/kmh/ms/kn), _PRECIPITATION_(inch/mm), _PRESSURE_(inHg/hPa), _DISTANCE_(mi/km), _TIME_FORMAT(12h/24h) |
CACHE_ENABLED |
true |
Enable/disable response caching |
CACHE_MAX_SIZE |
1000 |
Max cache entries (100–10000) |
API_TIMEOUT_MS |
30000 |
Upstream API timeout (5000–120000) |
WEATHER_LIGHTNING_PREWARM |
true |
Subscribe saved locations' geohashes at startup so get_lightning_activity has coverage before the first query. Set false to skip this and avoid the persistent MQTT connection at startup. No effect when the lightning tool is disabled. |
LOG_LEVEL |
1 |
0/DEBUG, 1/INFO, 2/WARN, 3/ERROR — number or name, names case-insensitive. An unrecognized value warns on stderr and falls back to INFO. Logs go to stderr |
NCEI_API_TOKEN |
— | Optional free NCEI token for official NOAA climate normals (US); falls back to Open-Meteo automatically. See Optional API keys |
FIRMS_MAP_KEY |
— | Optional free FIRMS key for targeted wildfire queries and up to 5 days of detection history. See Optional API keys |
GOOGLE_POLLEN_API_KEY |
— | Optional key for pollen outside Europe (incl. the US). Requires a Google Cloud billing account — free tier is 5,000 lookups/month. See Optional API keys and the setup guide |
GOOGLE_WEATHER_API_KEY |
— | Optional key for official weather alerts beyond the US, Canada, Europe, India, the Philippines, and Indonesia (~45+ more territories). Requires a Google Cloud billing account. See Optional API keys and the setup guide |
For caching architecture details, see .github/CACHING.md.
The default is the product. Every one of the 17 tools works with zero keys, zero signup, and zero cost — that is the configuration this project is built around and the one most people should use. If that's you, you can skip this section entirely.
Four optional keys each unlock one extra. Without them the corresponding tool still works; it just returns the keyless answer.
| Variable | What it costs | What it adds | Without it |
|---|---|---|---|
NCEI_API_TOKEN |
Free registration (email) | Official NOAA station climate normals for US locations | Normals are computed from the Open-Meteo reanalysis archive — global, and the path virtually every user is already on |
FIRMS_MAP_KEY |
Free registration (email) | Targeted wildfire bbox queries with 1–5 days of detection history | Keyless 24-hour regional detection files — get_wildfire_info still works globally |
GOOGLE_POLLEN_API_KEY |
Free tier, but requires a Google Cloud billing account (credit card on file) — 5,000 lookups/month free, ~$10/1,000 after. Setup guide | Grass/tree/weed Universal Pollen Index outside Europe, including the US (65+ countries) | European pollen via CAMS still works keyless; elsewhere no pollen section renders |
GOOGLE_WEATHER_API_KEY |
Free tier, but requires a Google Cloud billing account (credit card on file) — the Weather API bills under a Maps Platform Essentials SKU; check Google's current allowance. Setup guide | Official weather alerts for ~45+ more territories — Australia, Japan, Brazil, Mexico and others (Google's coverage list is authoritative) | US, Canadian, European, Indian, Philippine, and Indonesian alerts still work keyless; elsewhere get_alerts returns today's not-covered message |
The NCEI and FIRMS keys are true free registrations. The two Google keys are not — each has a free usage tier, but Google requires a billing account with a payment method to issue them at all. That's why they aren't described as simply "free" anywhere in these docs, and why they stay strictly optional. They are separate variables on purpose: the recommended console restriction ties a key to one specific API, so a Pollen-restricted key cannot serve alerts and vice versa. If you prefer one unrestricted key, put the same string in both.
So the "genuinely free" promise above stays meaningful, this project holds to three rules:
Everything above installs by default and nothing here needs configuring — this section only matters if you want a smaller install.
One dependency, mqtt, exists for a single tool: get_lightning_activity streams live strikes
from Blitzortung.org over MQTT, and nothing else in the server uses that transport. It is declared
as an optionalDependency, so a normal install still includes it and lightning works exactly as
described above. You can decline it:
npm install -g @dangahagan/weather-mcp --omit=optional
That installs 121 packages instead of 163 — 42 fewer, mqtt and its transitive tree.
What you give up, on both paths that reach lightning:
get_lightning_activity returns an error naming the package and how to get it back, rather than
a result. It never reports "no strikes" — a missing dependency rendering as an all-clear on
lightning is precisely the kind of confidently wrong safety answer this project treats as its
worst failure.get_weather_summary still works, but its optional lightning section renders as
## lightning (unavailable) with the same message. Every other section is unaffected.Nothing else changes: all 16 remaining tools behave identically, and get_lightning_activity still
appears in tools/list.
To get lightning back, reinstall without the flag.
Source builds still use a plain
npm install. TypeScript needsmqtt's bundled type declarations at build time even though the emitted server loads the package only when lightning is actually requested, so--omit=optionalbelongs to the published package, not to a build from a clone.
Being honest about what free public data can and can't do:
| Capability | Global | US-only |
|---|---|---|
| Forecasts (up to 16 days) | ✅ | Richer detail via NOAA |
| Historical weather (1940+) | ✅ (>7 days old) | Station-level detail for last 7 days |
| Air quality, marine, radar, lightning | ✅ | — |
| Current conditions | ✅ (model data, or real station observations via source="metar") |
Station observations via NOAA (richer detail) |
| Weather alerts | ✅ US, Canada, 38 European countries, India, the Philippines, and Indonesia keyless; ~45+ more territories with an optional key | NWS zone-level precision; Europe and India country-level; Philippines and Indonesia polygon-level |
| River conditions | ✅ (GloFAS modeled discharge) | Gauge observations + official flood stages via NWPS |
| Wildfires | ✅ (FIRMS satellite detections) | Named incidents with acreage + containment via NIFC |
| Fire weather | ✅ (computed Fosberg index + dryness context) | NOAA-published Haines, grassland, red-flag indices |
| Pollen | 🇪🇺 Europe keyless (CAMS, grains/m³); elsewhere needs an optional key | Universal Pollen Index with GOOGLE_POLLEN_API_KEY |
GOOGLE_WEATHER_API_KEY; without one get_alerts says plainly that the region isn't covered rather than guessing. With a key, Google aggregates official national feeds for roughly 45 more territories — Australia, Japan, Brazil and Mexico among them, with Google's coverage page as the authoritative list. Matching is by provider polygon, so coverage alignment may not be exact and an empty answer means "no alerts found", not a guarantee of coverage; the output says so both ways. Alert text appears in the publisher's source language. The US, Canada, Europe, India, the Philippines, and Indonesia never contact Google — those authorities stay first choice, key or no key — and a key failure surfaces loudly rather than degrading to a possibly-false all-clear.source="metar" returns a real instrument reading instead — but from the nearest airport, which may be tens of km away and up to an hour old. The output always names the station, its distance and bearing, and the observation age, so the tradeoff is visible rather than assumed. METAR coverage follows airports, so remote land and open ocean have real gaps.FIRMS_MAP_KEY unlocks targeted queries and up to 5 days of detection history (day_range).GOOGLE_POLLEN_API_KEY fills the gap for 65+ countries including the US, as a grass/tree/weed Universal Pollen Index (0–5) rather than per-species counts. Europe keeps the richer keyless data and never contacts Google.npm run build # Compile TypeScript
npm run dev # Run in development mode
npm test # Run all 2,809 tests
npm run test:coverage # Coverage report
npm run audit # Dependency vulnerability scan
Quality bar: TypeScript strict mode, no any types, 100% test coverage on critical utilities (cache, validation, unit conversion, errors), 100% pass rate, minimal runtime dependencies.
Project structure, patterns, and contribution guidance:
To report a vulnerability, see SECURITY.md.
Contributions are welcome — this is a single-maintainer project and issues, PRs, and feedback genuinely help. See CONTRIBUTING.md.
MIT — free to use, modify, and distribute.
Weather data provided by NOAA, Open-Meteo, USGS, NIFC, RainViewer, and Blitzortung.org. This project is not affiliated with or endorsed by any of these providers. Do not rely on this server as your sole source for safety-critical decisions — always consult official warnings and forecasts.
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by mindsdb
Enables humans, AI agents, and applications to retrieve highly accurate answers across large‑scale data sources, unifying heterogeneous databases, warehouses, and SaaS platforms.
by mckinsey
Build high-quality data visualization apps quickly using a low-code toolkit that leverages Plotly, Dash, and Pydantic.
by antvis
Offers over 25 AntV chart types for automated chart generation and data analysis, callable via MCP tools, CLI, HTTP, SSE, or streamable transports.
by dbt-labs
Provides a Model Context Protocol server that exposes a rich set of dbt‑related tools—SQL execution, semantic‑layer queries, discovery APIs, dbt CLI commands, admin operations, code generation, lineage analysis, and product documentation retrieval—so AI agents can safely interact with dbt projects and platforms.
by reading-plus-ai
A versatile tool that enables interactive data exploration through prompts, CSV loading, and script execution.
by Canner
Provides a semantic engine that lets MCP clients and AI agents query enterprise data with contextual understanding, precise calculations, and built‑in governance.
by surendranb
Provides natural‑language access to Google Analytics 4 data via MCP, exposing over 200 dimensions and metrics for Claude, Cursor and other compatible clients.
by OpenLabs-so
Provides privacy‑first, cookieless web analytics with revenue attribution and an MCP server, enabling self‑hosted tracking without cookies or cross‑site identifiers.
by ergut
Provides secure, read‑only access to BigQuery datasets, allowing large language models to query and analyze data through a standardized interface.
{
"mcpServers": {
"weather": {
"command": "npx",
"args": [
"-y",
"@dangahagan/weather-mcp@latest"
],
"env": {
"NCEI_API_TOKEN": "<YOUR_NCEI_TOKEN>",
"FIRMS_MAP_KEY": "<YOUR_FIRMS_MAP_KEY>",
"GOOGLE_POLLEN_API_KEY": "<YOUR_GOOGLE_POLLEN_KEY>",
"GOOGLE_WEATHER_API_KEY": "<YOUR_GOOGLE_WEATHER_KEY>"
}
}
}
}claude mcp add weather npx -y @dangahagan/weather-mcp@latest