disaster-wire
Autonomous Global Disaster Intelligence Wire & MCP Server
An autonomous, 100% hands-off natural disaster intelligence wire engineered specifically for consumption by AI Agents, Large Language Models (LLMs), and automated RAG pipelines via the Model Context Protocol (MCP).
The pipeline monitors physical crisis telemetry (earthquakes, tsunamis, floods, tropical cyclones, volcanic eruptions, and severe weather), strips metaphorical news using semantic LLM triage, calculates spatial geohashes, cross-references proximity to critical supply chain infrastructure, and exposes structured tools for downstream AI assistants.
🛠️ Model Context Protocol (MCP) Tools
This repository implements the Model Context Protocol (MCP) specification to provide real-time tool calling for Claude Desktop, Cursor, and custom agent runtimes.
1. list_active_disasters
Query active natural disaster events within the rolling 24–48 hour window with deterministic property filtering.
Arguments:
event_type(string, optional): Filter by event category (earthquake,tsunami,flood,cyclone,wildfire,volcanic_eruption,severe_weather).severity(string, optional): Filter by alert level (minor,moderate,severe,catastrophic).country(string, optional): Filter by target jurisdiction (e.g.,Japan,Philippines,United States).limit(integer, optional): Max incidents to return (default:10, max:50).
Returns: JSON object containing matched incidents, coordinates, geohashes, lifecycle phases, and recommended autonomous action playbooks.
2. get_disaster_by_id
Retrieve the full deterministic telemetry, impact stats, and source citations for a specific incident.
Arguments:
event_id(string, required): The unique incident identifier (e.g.,usgs_nc75001234,gdacs_1002341, ornews_a1b2c3d4).
Returns: Full JSON payload including raw sensor readings, depth, wind speed, casualty counts, and exposed infrastructure hubs.
3. find_disasters_near_coordinates
Performs geospatial radial queries using the Haversine great-circle distance formula to detect active threats around specific target locations.
Arguments:
latitude(float, required): Target latitude between-90.0and90.0.longitude(float, required): Target longitude between-180.0and180.0.radius_km(float, optional): Radial search perimeter in kilometers (default:500.0).
Returns: Sorted list of active disasters ordered by proximity to the query coordinates, annotated with calculated distance in kilometers.
Related MCP server: datto-bcdr-mcp
📦 Client Configuration
Connecting Claude Desktop (Remote SSE)
Add the following to your claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"disaster-wire": {
"url": "[https://sukriramli-disaster-wire-mcp.hf.space/gradio_api/mcp/sse](https://sukriramli-disaster-wire-mcp.hf.space/gradio_api/mcp/sse)"
}
}
}Available Tools
3 toolsfind_disasters_near_coordinatesARead-onlyIdempotent
Locate active natural disasters within a radial distance (km) of target latitude and longitude coordinates. Use when evaluating geographic hazard exposure for specific facilities, cities, ports, or data centers at known coordinates. Do not use for country-wide or categorical queries (use list_active_disasters instead) or if you already hold an event_id (use get_disaster_by_id instead). Calculates great-circle distance via Haversine formula. Results are sorted ascending by distance_from_query_km. Returns {'matched_count': 0, 'results': []} if no incidents fall within radius.
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | Yes | Target latitude in decimal degrees (-90.0 to 90.0, WGS-84 standard). | |
| longitude | Yes | Target longitude in decimal degrees (-180.0 to 180.0, WGS-84 standard). | |
| radius_km | No | Radial search perimeter measured in kilometers (km) from target coordinates (1.0 to 5000.0, defaults to 500.0 km). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe/read-only/idempotent profile, so the description's added value is the algorithm (Haversine great-circle), result ordering (ascending distance_from_query_km), and the explicit empty-result shape. It stops short of noting pagination or result caps, but the behavioral picture is strong for a bounded read-only query.
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: purpose first, then usage conditions, then algorithm, then output ordering and empty-case. No filler, and the most decision-relevant information (when to use / when not to) is front-loaded.
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 3-parameter, read-only spatial query with no output schema, the description covers purpose, routing, computation method, sort order, and the zero-match response contract. An agent has everything needed to call it and interpret the result.
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 100% and each parameter already documents units, ranges, and defaults. The description reinforces unit (km) and the radial nature of radius_km but adds no syntax or semantics beyond the schema, which is the expected baseline when the schema does the heavy lifting.
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 (Locate) plus resource (active natural disasters) and scope (radial distance in km from coordinates). An agent can distinguish it from list_active_disasters and get_disaster_by_id purely from the text, without opening any schema.
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?
Explicitly gives the use case (hazard exposure for facilities, cities, ports, data centers at known coordinates) and two named exclusions with the alternative tool to use instead in each case (country-wide/categorical, or known event_id). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_disaster_by_idARead-onlyIdempotent
Retrieve comprehensive technical telemetry, impact metrics, casualty estimates, and exposed infrastructure for a specific disaster ID. Use exclusively when you already hold a valid event_id obtained from list_active_disasters or find_disasters_near_coordinates. Do not use to browse or discover active disasters (use list_active_disasters instead) or for coordinate proximity queries (use find_disasters_near_coordinates instead). Pure read-only lookup. If the requested event_id is not in the active pool, returns an {'error': '...'} JSON object without raising exceptions.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Unique incident identifier string (e.g., 'usgs_nc75001234', 'gdacs_1002341', or 'news_e5f6g7h8'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context beyond those annotations by stating that an inactive or unknown event_id returns an error JSON object without raising exceptions.
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?
The description is front-loaded with the tool's purpose, then moves efficiently through usage constraints, exclusions, alternatives, and error behavior. There is no filler or repetition that detracts from the key guidance.
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 single-parameter read-only lookup with no output schema, the description is complete enough: it covers what data is returned, how to obtain a valid event_id, when not to use the tool, and how errors are surfaced. Nothing essential for correct invocation 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?
Schema description coverage is 100%, so the event_id type and examples are already documented. The description adds meaningful semantics by requiring a valid event_id obtained from the sibling tools and by clarifying the active-pool constraint and error behavior for invalid IDs.
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 uses a specific verb, 'Retrieve,' and names the exact resource, a disaster by event_id. It also distinguishes the tool from both siblings by naming list_active_disasters and find_disasters_near_coordinates as alternatives for browsing and proximity queries.
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?
It explicitly states when to use the tool: only when the caller already holds a valid event_id from list_active_disasters or find_disasters_near_coordinates. It also gives clear when-not-to-use cases for browsing and coordinate proximity queries, naming the correct sibling in each case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_disastersARead-onlyIdempotent
List and filter real-time global natural disasters from the active 24-48 hour monitoring pool. Use to discover ongoing hazards, search by nation, or filter by hazard type or severity level. Do not use if you already possess a specific event_id (use get_disaster_by_id instead) or to evaluate coordinate proximity (use find_disasters_near_coordinates instead). Pure read-only operation with zero side effects. Returns {'matched_count': 0, 'events': []} when no incidents match filter criteria without raising errors.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of disaster records to return in payload (integer between 1 and 50, defaults to 10). | |
| country | No | Case-insensitive country name substring (e.g., 'Japan', 'Philippines', 'United States'). Default is null (worldwide). | |
| severity | No | Alert severity level. Allowed values: 'minor', 'moderate', 'severe', 'catastrophic'. Default is null (all severities). | |
| event_type | No | Natural hazard category. Allowed values: 'earthquake', 'tsunami', 'flood', 'cyclone', 'wildfire', 'volcanic_eruption', 'severe_weather'. Default is null (all types). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the 'pure read-only, zero side effects' line is largely redundant. However, it adds genuinely new behavior beyond the annotations: the empty-result contract ({'matched_count': 0, 'events': []} with no raised error) and the temporal scope of the monitoring pool.
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 sentences, front-loaded with purpose then routing then return behavior; each earns its place. The 'pure read-only operation with zero side effects' clause is the only mild redundancy given the annotations already state it.
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?
No output schema exists, and the description partially compensates by describing the empty-match return shape, which is the highest-risk return case for an agent. It does not describe the populated event object's fields, but that is a minor gap for a filtered-list read tool.
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 100%, so all four parameters (including the enums for severity and event_type) are already fully documented in the schema. The description's mention of nation, hazard type, and severity maps to those params but adds no format or semantics beyond them, making the baseline 3 appropriate.
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 (list/filter), resource (real-time global natural disasters), and scope (active 24-48 hour monitoring pool). It explicitly names both siblings it is not and the conditions that select them, so an agent can distinguish it without opening any schema.
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 explicit when-to-use ('discover ongoing hazards, search by nation, or filter by hazard type or severity') plus two when-not-to-use cases with named alternatives (get_disaster_by_id for a known event_id, find_disasters_near_coordinates for proximity). Routing is unambiguous.
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.
3 tool updates
v0.1.4- Changed
find_disasters_near_coordinates15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / latitude / descriptionAdded value: +"Target latitude in decimal degrees (-90.0 to 90.0, WGS-84 standard)." - added
Input schema / properties / latitude / maximumAdded value: +90 - added
Input schema / properties / latitude / minimumAdded value: +-90 - removed
Input schema / properties / latitude / titleRemoved value: -"Latitude" - added
Input schema / properties / longitude / descriptionAdded value: +"Target longitude in decimal degrees (-180.0 to 180.0, WGS-84 standard)." - added
Input schema / properties / longitude / maximumAdded value: +180 - added
Input schema / properties / longitude / minimumAdded value: +-180 - removed
Input schema / properties / longitude / titleRemoved value: -"Longitude" - added
Input schema / properties / radius_km / descriptionAdded value: +"Radial search perimeter measured in kilometers (km) from target coordinates (1.0 to 5000.0, defaults to 500.0 km)." - added
Input schema / properties / radius_km / maximumAdded value: +5000 - added
Input schema / properties / radius_km / minimumAdded value: +1 - removed
Input schema / properties / radius_km / titleRemoved value: -"Radius Km" - removed
Input schema / titleRemoved value: -"find_disasters_near_coordinatesArguments" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "find_disasters_near_coordinatesOutput", - "type": "object" -}New value: +null
- Changed
get_disaster_by_id5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / event_id / descriptionAdded value: +"Unique incident identifier string (e.g., 'usgs_nc75001234', 'gdacs_1002341', or 'news_e5f6g7h8')." - removed
Input schema / properties / event_id / titleRemoved value: -"Event Id" - removed
Input schema / titleRemoved value: -"get_disaster_by_idArguments" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_disaster_by_idOutput", - "type": "object" -}New value: +null
- Changed
list_active_disasters24 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / country / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / country / defaultRemoved value: -null - added
Input schema / properties / country / descriptionAdded value: +"Case-insensitive country name substring (e.g., 'Japan', 'Philippines', 'United States'). Default is null (worldwide)." - removed
Input schema / properties / country / titleRemoved value: -"Country" - added
Input schema / properties / country / typeAdded value: +"string" - removed
Input schema / properties / event_type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / event_type / defaultRemoved value: -null - added
Input schema / properties / event_type / descriptionAdded value: +"Natural hazard category. Allowed values: 'earthquake', 'tsunami', 'flood', 'cyclone', 'wildfire', 'volcanic_eruption', 'severe_weather'. Default is null (all types)." - added
Input schema / properties / event_type / enumAdded value: +[ + "earthquake", + "tsunami", + "flood", + "cyclone", + "wildfire", + "volcanic_eruption", + "severe_weather" +] - removed
Input schema / properties / event_type / titleRemoved value: -"Event Type" - added
Input schema / properties / event_type / typeAdded value: +"string" - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of disaster records to return in payload (integer between 1 and 50, defaults to 10)." - added
Input schema / properties / limit / maximumAdded value: +50 - added
Input schema / properties / limit / minimumAdded value: +1 - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / severity / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / severity / defaultRemoved value: -null - added
Input schema / properties / severity / descriptionAdded value: +"Alert severity level. Allowed values: 'minor', 'moderate', 'severe', 'catastrophic'. Default is null (all severities)." - added
Input schema / properties / severity / enumAdded value: +[ + "minor", + "moderate", + "severe", + "catastrophic" +] - removed
Input schema / properties / severity / titleRemoved value: -"Severity" - added
Input schema / properties / severity / typeAdded value: +"string" - removed
Input schema / titleRemoved value: -"list_active_disastersArguments" - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "list_active_disastersOutput", - "type": "object" -}New value: +null
3 tool updates
v0.1.0- First observed
find_disasters_near_coordinates - First observed
get_disaster_by_id - First observed
list_active_disasters
TDQS
Scored across 3 tools
Each tool has a distinct purpose: discovery/filtering (list_active_disasters), single-event detail lookup (get_disaster_by_id), and spatial proximity search (find_disasters_near_coordinates). Descriptions explicitly guide when to use each and when not to, preventing misselection.
All tool names use snake_case with a leading verb and clear resource description, following a consistent verb_noun pattern. The slight variation in prepositional phrases (by_id, near_coordinates) remains predictable and readable.
Three tools is on the low end but well matched to the narrow read-only active-disaster monitoring scope. Each tool is necessary and non-redundant, though the surface could arguably host a few more query variants without bloat.
The tools cover the full read-only lifecycle for active disaster monitoring: discovery with filtering, detailed telemetry retrieval by ID, and geospatial exposure queries. No write operations are needed for this stated purpose, and minor extras like pagination or bulk retrieval are not essential.
Maintenance
Related MCP Connectors
Verifiable Earth ground truth for AI agents: water, hazard, ground stability, resource, with proof.
Real-time AI intelligence signals and temporal knowledge graph for agent economy
Decision-assurance for AI agents: an auditable action boundary + receipt before it acts.
Paid intelligence tools for AI agents across risk, finance, property, logistics and more.
Related MCP Servers
- AlicenseAqualityDmaintenanceGeopolitical conflict risk data for AI agents311 PyPI2MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server for Datto BCDR (Business Continuity and Disaster Recovery), enabling management of backup jobs, restore points, and disaster recovery operations through Datto's API.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives AI agents grounded access to US natural-hazard data — weather alerts, forecasts, earthquakes, and FEMA flood zones — from free, keyless US government APIs.MIT
- AlicenseAqualityBmaintenanceEnables AI agents to query Earth observation data, satellite imagery, active fires, and weather via natural language, returning interactive maps and briefs.12MIT