hazardwatch-mcp
Provides tools for querying NASA FIRMS active-fire hotspots and NASA EONET natural events — hotspot searches by point/radius or bounding box, filters by country, day range, and satellite source, and retrieval of EONET events by category, status, date range, or bbox, plus a combined nearby-hazards lookup.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hazardwatch-mcpfind open natural events and fires within 100 km of Los Angeles"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hazardwatch-mcp (Hazardwatch MCP connector)
hazardwatch is a Model Context Protocol server for NASA FIRMS active-fire hotspots and NASA EONET natural events. FIRMS calls need a free MAP_KEY. EONET calls do not.
The data is not for safety-of-life decisions. Read Attribution and terms before you rely on a result.
Set up the connector
npm install
npm run ci # typecheck, lint, test, build
npm start # stdio
npm run start:http # Streamable HTTP at http://localhost:3000/mcp and /health
node scripts/live-check.mjsRequest a FIRMS MAP_KEY at https://firms.modaps.eosdis.nasa.gov/api/map_key/. Export it as FIRMS_MAP_KEY. The variable is optional. Without it, eonet_events, eonet_event, and eonet_categories still work. fires_near and fires_by_country return a [config] error that includes the signup URL. nearby_hazards returns the EONET events and puts that explanation in firms_note.
Claude Desktop, or any stdio client:
{
"mcpServers": {
"hazardwatch": {
"command": "node",
"args": ["/workspace/connectors/hazardwatch/dist/index.js"],
"env": {
"FIRMS_MAP_KEY": "...",
"HAZARDWATCH_CONTACT": "you@example.com"
}
}
}
}Docker serves HTTP with no authentication. Keep it on localhost.
docker build -t hazardwatch .
docker run -p 3000:3000 -e FIRMS_MAP_KEY -e HAZARDWATCH_CONTACT=you@example.com hazardwatchDo not bake the MAP_KEY into the image. docker run -e FIRMS_MAP_KEY forwards the variable from the shell when it is set.
Related MCP server: mcp-gdacs
Tools
Register every tool with registerConnectorTool. Each tool returns JSON text plus structuredContent. Errors use isError and a prefix: [config], [input], [not-found], [rate-limit], [upstream], or [timeout].
Tool | What it returns |
| FIRMS hotspots for a point plus |
| FIRMS hotspots for an ISO 3166-1 alpha-3 code. The live country endpoint is marked unavailable. See Limits. |
| EONET events. Filters are |
| One EONET event by id. |
| Open EONET events and FIRMS hotspots within |
| EONET category ids. Pass an id to |
A point query and a bbox are alternatives. Pass one of them. radius_km is greater than 0 and at most 2500. A radius that crosses the antimeridian is rejected. Split that search into two bboxes with west less than east.
Hotspot fields
Each hotspot has latitude, longitude, acq_date, acq_time, acquired_at, satellite, instrument, confidence, frp, brightness, and daynight. brightness comes from bright_ti4 on VIIRS rows and from brightness on MODIS rows. confidence stays the upstream text, so VIIRS can be n and MODIS can be 73.
acq_time is UTC HHMM as four digits. FIRMS omits leading zeros, so the connector turns 7 into 0007 and 848 into 0848. A blank time, a non-numeric time, an hour above 23, or a minute above 59 is null.
acquired_at is UTC YYYY-MM-DDTHH:MM:00Z when both the date and the time are valid. acquired_at is null when either one is missing, when the time is invalid, or when the date is not a real YYYY-MM-DD calendar day. An invalid date is still returned in acq_date.
A point query sets area to point. Each returned hotspot then has distance_km, the great-circle distance from the query point in kilometers, rounded to one decimal place. Hotspots farther than radius_km are dropped. The rest are sorted nearest first. count is the number inside the radius. bbox_count is the number of hotspots in the square sent to FIRMS, before that filter. returned is the number of hotspots in this response. truncated is true when count is greater than returned.
A bbox query sets area to bbox, or to world for the whole globe. Those hotspots stay in FIRMS CSV order and do not include distance_km or bbox_count. fires_by_country sets area to country and uses that same shape.
nearby_hazards runs the point query, then keeps at most limit of the nearest hotspots. firms.count and firms.bbox_count still describe the full circle and the square. firms.returned and firms.truncated follow the limit. Every fire report and nearby_hazards include the safety caveat. The data is not for safety-of-life decisions.
EONET's bbox query is ordered west, north, east, south. This connector accepts west, south, east, north on every tool and translates the order for EONET.
Environment
Variable | Default | Role |
| unset | 32 letters or digits. Placed only in the FIRMS path. Redacted from results, errors, and logs. |
|
| Origin only. No userinfo, query, or hash. |
|
| EONET v3 origin. No key. |
|
| Contact inside the User-Agent. Must not contain the MAP_KEY. |
|
| Local cap. Cannot be set above 5000. |
|
| Local EONET sliding window. |
|
| TTL for successful responses. |
|
| Upstream timeout. |
|
|
|
|
| HTTP listen port. |
Invalid values are reported by field name and issue code. The rejected value is not included in the error.
Requests send hazardwatch/0.1.0 (<HAZARDWATCH_CONTACT>).
Limits
Checked against the live FIRMS area page and API index on 2026-10-17 (API 4.2.0).
Area URL shape:
/api/area/csv/{MAP_KEY}/{SOURCE}/{west,south,east,north|world}/{DAY_RANGE}and an optional/{DATE}.Country URL shape, for when NASA turns it back on:
/api/country/csv/{MAP_KEY}/{SOURCE}/{ISO3}/{DAY_RANGE}and an optional/{DATE}.DAY_RANGEon the area page is 1 to 5. Values outside that range are rejected here. An older note of 1 to 10 does not match the current page.Sensors:
VIIRS_SNPP_NRT,VIIRS_NOAA20_NRT,VIIRS_NOAA21_NRT,VIIRS_SNPP_SP,VIIRS_NOAA20_SP,MODIS_NRT,MODIS_SP,LANDSAT_NRT.LANDSAT_NRTis US and Canada only. NASA Earthdata says new Suomi-NPP observations cease on 2026-11-02 (https://www.earthdata.nasa.gov/data/alerts-outages/suomi-npp-observations-cease-november-2-2026). A FIRMS news item says data products cease on 2026-11-01 (https://firms.modaps.eosdis.nasa.gov/content/notifications/firms/news.html). Prefer NOAA-21 or NOAA-20.The MAP_KEY budget is 5000 transactions per 10 minutes. A call can count as more than one transaction. The area page script charges VIIRS as 2 and other sensors as 0.5. Area cells are 60 degrees on a side. A country call in that script is
ceil(weight[iso3] * 20 * sensor * days). The per-countryweighttable is not in the public area HTML, and the country page returns HTTP 400, so this connector uses weight 1 and also charges at least a world query. A country whose unpublished weight is above 1 would be under-counted.The API index lists
countryandcountriesas not available.GET /api/country/returned HTTP 400 with the bodyInvalid API call.fires_by_countrystill builds the documented URL. A 400 becomes an[upstream]message that names the outage. A CSV body is parsed, so the tool works again if NASA restores the endpoint.At most 500 hotspots are returned from one FIRMS query. For a point query,
countis the number inside the radius and the 500 are the nearest.truncatedis true when that count is larger thanreturned.nearby_hazardsthen keeps at mostlimitof those nearest hotspots. Response bodies larger than 1,000,000 characters are rejected.FIRMS and EONET each have their own cache and their own limiter. A cache hit does not spend the limiter.
HTTP mode has no authentication.
Attribution and terms
NASA Earthdata data-use guidance says that, unless a product is marked with another restriction, data from a NASA-led mission are licensed as Creative Commons Zero (CC0). Cite the data. See https://www.earthdata.nasa.gov/engage/open-data-services-software-policies/data-use-guidance.
We acknowledge the use of data and/or imagery from NASA's Fire Information for Resource Management System (FIRMS) (https://earthdata.nasa.gov/firms), part of NASA's Land, Atmosphere Near real-time Capability for Earth observations (LANCE) (https://earthdata.nasa.gov/lance) and NASA's Earth Science Data and Information System (ESDIS).
EONET metadata is from NASA's Earth Observatory Natural Event Tracker (https://eonet.gsfc.nasa.gov/).
No NASA endorsement is implied. This project does not use the NASA insignia, the NASA logotype, or the NASA seal. NASA media guidance says those marks are not in the public domain (https://www.nasa.gov/nasa-brand-center/images-and-media/).
Risks
These pages were read on 2026-10-17.
LANCE, GIBS, Worldview, and FIRMS data are provided as is. Users bear the responsibility for their use. The disclaimer says the data are not advised for tactical decision-making or for conditions at a local scale. https://www.earthdata.nasa.gov/data/projects/lance/disclaimer
FIRMS detections are near real time. NASA EOSDIS describes real time as available within 60 minutes of the satellite overpass, and FIRMS ultra real time as under 60 seconds for much of the US and Canada. Standard processing replaces near-real-time data later. The FIRMS FAQ describes false alarms over bright roofs, sun glint, and other hot surfaces, and it says MODIS confidence and VIIRS confidence are not the same scale. https://firms.modaps.eosdis.nasa.gov/api/area/ and https://www.earthdata.nasa.gov/data/tools/firms/faq
EONET says its metadata and services are for visualization and general information only, and that spatial and temporal extents are approximations from multiple sources. https://eonet.gsfc.nasa.gov/what-is-eonet
Each EONET event links to the curator that supplied it. Those third-party pages keep their own licenses. A link in
sourcesis not a NASA CC0 grant.The NASA name and insignia cannot be used to imply endorsement. Do not describe this connector as NASA-approved or as an official NASA service.
NASA Earthdata says new Suomi-NPP observations cease on 2026-11-02. The FIRMS news page says data products cease on 2026-11-01. Both pages link the same Earthdata alert, which currently redirects to the November 2 observations notice. Default sensor is
VIIRS_NOAA21_NRT. https://www.earthdata.nasa.gov/data/alerts-outages/suomi-npp-observations-cease-november-2-2026 and https://firms.modaps.eosdis.nasa.gov/content/notifications/firms/news.html
License
MIT, see LICENSE. This is an independent, unofficial connector and is not endorsed by the Hazardwatch project or its owners.
Available Tools
6 toolseonet_categoriesARead-onlyIdempotent
List NASA EONET v3 category ids and titles. Pass a category id to eonet_events. No API key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered structurally. The description adds one genuinely useful behavioral fact — 'No API key' — but says nothing about response shape, size of the category list, or caching. With annotations doing most of the work, this is a modest addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: what it returns, where the output goes, and the auth constraint. Front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema lookup tool, the description covers what comes back (ids and titles), how to use the result, and the auth requirement. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; the description correctly implies no input is needed and instead directs the returned values onward to eonet_events. There is no parameter ambiguity to resolve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List NASA EONET v3 category ids and titles'), making it immediately distinguishable from the event-oriented siblings like eonet_events and fires_near. An agent knows this is the taxonomy/lookup endpoint without opening anything else.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Pass a category id to eonet_events' explicitly names the downstream consumer and the workflow, which is strong routing guidance. It stops short of stating when not to call this (e.g., if the agent already knows the category id), so it lacks an explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eonet_eventARead-onlyIdempotent
One NASA EONET v3 event by id, including categories, sources, and geometries. No API key. Not for safety-of-life decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld and non-destructive, so the bar is lower. The description still adds two things the annotations don't: 'No API key' (an auth prerequisite) and 'Not for safety-of-life decisions' (a data-reliability caveat), which meaningfully shapes how an agent should present results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, front-loaded with the core action and with zero filler. Every sentence (what it returns, auth requirement, disclaimer) carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work by naming the returned sections (categories, sources, geometries). Minor gaps remain around error behavior for a malformed or unknown id, but nothing blocks a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 0% schema description coverage; the schema only supplies a regex pattern. The description says 'by id', which confirms what the parameter is, but adds nothing about where an id comes from or what an invalid id produces.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: fetch one NASA EONET v3 event by id, and lists the payload sections returned (categories, sources, geometries). The singular 'one event by id' implicitly separates it from the sibling list tool eonet_events, though the sibling is never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the 'by id' framing — an agent can infer this is the lookup path once an id is known from eonet_events or nearby_hazards, but no alternative is named and no when-not-to-use condition is given. The safety caveat is a disclaimer, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eonet_eventsARead-onlyIdempotent
Natural-event metadata from NASA EONET v3. Filter with category id, status open, closed, or all, start and end as YYYY-MM-DD, limit, and an optional west, south, east, north bbox. No API key. Events link to third-party sources with their own licenses. Not for safety-of-life decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| east | No | ||
| west | No | ||
| limit | No | ||
| north | No | ||
| south | No | ||
| start | No | ||
| status | No | open | |
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world and non-destructive behavior, and the description adds useful context beyond them: no API key required, third-party source licensing caveats, and a safety disclaimer. It doesn't disclose pagination behavior or result-set semantics for the limit parameter, which keeps it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with no filler, front-loaded with the resource and followed by filters, operational notes, and the safety caveat in descending order of importance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-optional-parameter tool with no output schema, the description should say something about the shape of returned events (list vs. single, geometry fields) and pagination behavior; it only says events link to third-party sources. Adequate for calling the tool, but incomplete for interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry parameter meaning, and it names all 9: category id, status values (open/closed/all), date format YYYY-MM-DD, limit, and the west/south/east/north bbox. It doesn't state defaults (status=open, limit=20) or ranges (1-100, ±180/±90), but those constraints are visible in the schema, so the semantic gap is mostly filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: listing natural-event metadata from NASA EONET v3. It's clearly distinguishable from eonet_categories or fires_* siblings, but it never says how it differs from the singular eonet_event sibling, leaving a small ambiguity about list vs. single-record retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The filter enumeration implies the intended usage (query events by category/status/date/bbox) and 'Not for safety-of-life decisions' provides a genuine when-not exclusion. However, there's no explicit when-to-use guidance relative to eonet_event or nearby_hazards, so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fires_by_countryBRead-onlyIdempotent
Active fire hotspots from NASA FIRMS for one ISO 3166-1 alpha-3 country code. day_range is 1 to 5. The FIRMS country endpoint is marked unavailable on the API index and this tool reports that upstream failure until NASA restores it. Requires FIRMS_MAP_KEY. Not for safety-of-life decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| source | No | VIIRS_NOAA21_NRT | |
| country | Yes | ||
| day_range | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, and the description adds genuinely non-redundant behavior: the upstream country endpoint is flagged unavailable and the tool surfaces the failure, an API key is required, and it is explicitly not for safety-of-life use. These are meaningful operational facts an agent needs; only the return/error shape is left unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with the resource scope front-loaded and the critical unavailability warning prominent. Every sentence carries information; no filler, though the guidance could be marginally more organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the operational essentials (key requirement, current outage, non-safety-of-life caveat) but, with 0% schema coverage and no output schema, omits the meaning of the source enum and date parameter that an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, yet it only addresses country (ISO alpha-3) and day_range (1-5). It says nothing about the date format or the 8-value source enum, leaving half the parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource (active fire hotspots from NASA FIRMS) scoped to a single ISO alpha-3 country, which implicitly distinguishes it from the nearby-geography sibling fires_near. Clear enough to select without opening the schema, though the contrast with fires_near is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides useful constraints (day_range 1-5, requires FIRMS_MAP_KEY) and an important warning that the upstream endpoint is currently unavailable, but never names when to use this instead of fires_near or nearby_hazards. Usage is implied by scope rather than explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fires_nearARead-onlyIdempotent
Active fire hotspots from NASA FIRMS. Pass latitude, longitude, and radius_km (kilometers, greater than 0 and at most 2500), or west, south, east, and north in degrees. A point query keeps hotspots within radius_km, nearest first. day_range is an integer from 1 to 5. source defaults to VIIRS_NOAA21_NRT. Suomi-NPP deliveries are scheduled to stop on 2026-11-02. Requires FIRMS_MAP_KEY. Not for safety-of-life decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| east | No | ||
| west | No | ||
| north | No | ||
| south | No | ||
| source | No | VIIRS_NOAA21_NRT | |
| latitude | No | ||
| day_range | No | ||
| longitude | No | ||
| radius_km | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower, and the description adds real operational context: it requires FIRMS_MAP_KEY, results are ordered nearest-first, Suomi-NPP deliveries stop 2026-11-02, and it is 'Not for safety-of-life decisions.' It does not say what a hotspot record contains, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then parameter mechanics, then operational caveats — a sensible ordering with essentially no filler sentences. Minor waste in restating schema constraints verbatim ('greater than 0 and at most 2500', 'integer from 1 to 5').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, no-output-schema tool this covers the essentials an agent needs to call it correctly: auth requirement, mode selection, ordering, source default and deprecation, and a suitability caveat. It omits the date filter and gives no hint of the response shape, which for a tool with no output schema is a notable but not disqualifying gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and mostly does: it explains both coordinate groups, radius_km units and bounds, day_range's 1-5 range, and source's default plus a deprecation note. The 'date' parameter (YYYY-MM-DD) is never mentioned in the description and is only inferable from the schema pattern, and the source enum values are not characterized.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource with provenance ('Active fire hotspots from NASA FIRMS') and immediately defines the two query geometries (point radius vs. bounding box), which implicitly separates it from the country-scoped sibling fires_by_country. It stops short of naming any sibling explicitly, so an agent must infer the routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear invocation guidance for two modes ('Pass latitude, longitude, and radius_km ... or west, south, east, and north') and explains point-query behavior, but never says when to prefer this over fires_by_country, nearby_hazards, or eonet_events. Usage is implied by parameter shape rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nearby_hazardsARead-onlyIdempotent
Open EONET events and FIRMS hotspots within radius_km of a latitude and longitude. limit is an integer from 1 to 50 and caps both the events and the hotspots. Hotspots are the nearest ones. If FIRMS_MAP_KEY is unset or FIRMS fails, events are still returned and firms_note explains why. day_range is 1 to 5. Not for safety-of-life decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| source | No | VIIRS_NOAA21_NRT | |
| latitude | Yes | ||
| day_range | No | ||
| longitude | Yes | ||
| radius_km | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: graceful degradation when FIRMS_MAP_KEY is unset or FIRMS fails, with a firms_note explaining why, plus the fact that limit caps both result sets and hotspots are returned nearest-first. It does not describe result ordering for events or response shape, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and tight overall, with every clause carrying operational meaning except 'day_range is 1 to 5', which merely restates the schema's minimum and maximum. Minor redundancy, but the ordering is sensible and there is no filler prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations-led return description beyond the mention of firms_note. For a tool that merges two heterogeneous sources (EONET events vs FIRMS hotspots) with six parameters, the description should say something about what each source's records look like or how to tell them apart in the response. Adequate for calling, incomplete for interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies limit's dual capping behavior and day_range's 1-5 window, and latitude/longitude/radius_km are self-evident from naming. The source parameter with its eight-item VIIRS/MODIS/LANDSAT enum is left entirely unexplained — the single most consequential omission for a caller choosing a satellite dataset.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-and-resource statement: 'Open EONET events and FIRMS hotspots within radius_km of a latitude and longitude.' That makes the combined-source nature clear enough that an agent can distinguish it from single-source siblings like fires_near and eonet_events. It stops short of explicitly naming the siblings as alternatives, so a 5 is not warranted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a genuine exclusion ('Not for safety-of-life decisions') and explains the FIRMS fallback, which is useful usage context. However, it never states when to prefer this tool over sibling tools such as fires_near or eonet_events, nor any prerequisites such as FIRMS_MAP_KEY being needed up front. Usage is implied rather than directed.
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.
6 tool updates
v0.1.0- First observed
eonet_categories - First observed
eonet_event - First observed
eonet_events - First observed
fires_by_country - First observed
fires_near - First observed
nearby_hazards
TDQS
Scored across 6 tools
Each tool targets a distinct resource or filter: point/bbox fires, country fires, EONET list, EONET by id, categories, and the composite proximity view. The main soft spot is nearby_hazards, which overlaps conceptually with fires_near plus eonet_events, though its documented combined/limited semantics make it distinguishable.
All snake_case with a domain-prefix convention (fires_*, eonet_*) plus a domain-less composite nearby_hazards. The pattern is readable and predictable, with the singular/plural eonet_event vs eonet_events pair being the only slight wrinkle.
Six tools is well-scoped for a hazard-watch server, and each earns its place by covering a distinct query shape (point, bbox, country, event list, event detail, categories, combined proximity).
Covers the core lifecycle of both upstream sources plus a convenience composite, with sensible FIRMS-key fallback behavior. The notable gap is fires_by_country, which is documented as broken upstream (a dead end) and there is no alternate country-level path or source-selection tool.
Maintenance
Related MCP Connectors
NASA FIRMS MCP — active-fire / thermal-anomaly detections from MODIS and VIIRS.
Discover, verify, and access NASA Earth science datasets via the Common Metadata Repository (CMR)
Flood, wildfire, earthquake, and coastal-storm hazard lookup for a US property.
Wildfire events and aggregates across global, U.S., and Canada sources. Paid via x402 USDC.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceDetects, monitors, and analyzes potential wildfires globally using NASA FIRMS, OpenWeatherMap, and Google Earth Engine data.2-
- AlicenseNot gradedqualityBmaintenanceEnables querying global disaster alerts from GDACS including earthquakes, tropical cyclones, floods, volcanoes, droughts, and wildfires. Supports listing events, getting details, and retrieving GeoJSON or RSS feeds.14 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables querying NASA's Earth Observatory Natural Event Tracker (EONET) for natural events, categories, sources, and visualization layers.9 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables querying Sentinel-1/2, Landsat Collection 2, NAIP, and Copernicus DEM imagery by area and date, returning item IDs, footprints, cloud cover, and cloud-optimized GeoTIFF URLs.0MIT