Inspiration
After taking a Disaster Studies class, I became acutely aware of how time-critical environmental emergencies truly are. Current disaster evaluation methods require response teams to manually gather population data, assess meteorological conditions, identify nearby hazards, and determine severity — all under extreme pressure. This fragmented process eats into precious response time, often leaving first responders inadequately prepared for the immediate fallout. I built AeroShield to collapse that multi-step process into a single conversational interface.
What It Does
AeroShield is an AI-powered hazard assessment agent that gives emergency managers instant, data-driven situational awareness for any environmental incident in the United States. Simply describe the event — type, location, and severity — and AeroShield will:
- Geocode any location — city names, addresses, landmarks, schools, hospitals, or businesses
- Assess population at risk using 83,047 US Census tracts for neighborhood-level accuracy
- Scan for nearby hazmat facilities and rank them by risk tier
- Fetch live meteorological conditions including wind speed and direction via Open-Meteo
- Model hazard plume spread using a Gaussian dispersion algorithm, rendered as interactive GeoJSON on a Leaflet map
- Recommend evacuation routes away from the projected plume and hazmat facilities
- Surface historical incident data for similar events in the region
- Generate a structured risk report with a scored risk tier (Low / Moderate / High / Critical) and recommended evacuation radius
How We Built It
AeroShield is built on Google Cloud Agent Builder with Gemini 2.5 Flash orchestrating seven specialized tools via the Google Agent Development Kit (ADK):
| Tool | Purpose |
|---|---|
geocode_location |
Converts any place name to coordinates via OpenStreetMap Nominatim |
search_population_data |
Queries 83,047 Census tracts in Elasticsearch |
search_hazmat_facilities |
Scans hazmat infrastructure index in Elasticsearch |
search_incident_history |
Retrieves historical incidents from Elasticsearch |
get_weather_conditions |
Fetches live wind and weather from Open-Meteo |
calculate_plume_model |
Computes a Gaussian plume cone and returns GeoJSON |
calculate_risk_score |
Weighted risk formula across population, hazmat, and severity |
The risk score is computed as:
$$\text{Risk Score} = 0.40 \cdot P + 0.35 \cdot H + 0.25 \cdot S + W$$
Where \(P\) is the population exposure score, \(H\) is the hazmat proximity score, \(S \) is the event severity score, and \(W\) is a wind modifier applied to airborne hazards like wildfires and chemical spills.
Elasticsearch serves as the partner data backbone, storing three indexes: population density at the Census tract level, hazmat infrastructure, and historical incident records. All credentials are secured in GCP Secret Manager, and the full stack is deployed on Google Cloud Run with Google Cloud Build for CI/CD.
Challenges We Ran Into
Learning MCP from scratch. Coming into this project with no prior experience in MCP agents, I spent the first week deeply studying the protocol architecture before writing a single line of agent code. Understanding how tools, schemas, and orchestration fit together was a steep but rewarding curve.
Seeding 83,047 Census tracts into Elasticsearch. Ingesting the full US Census tract dataset is a slow, network-dependent process. I built a fault-tolerant ingestion script that calls the Census Bureau API state by state, tracks progress in a local JSON file, and resumes cleanly from any interruption — whether from a network failure, API timeout, or machine sleep.
Gaussian plume modeling in GeoJSON. Translating meteorological dispersion math into geographic coordinates that render correctly on a Leaflet map required careful handling of degree-per-mile conversions at varying latitudes and cone geometry that accounts for atmospheric stability at different wind speeds.
Accomplishments We're Proud Of
AeroShield is an agent that can legitimately support life-saving decisions in real emergencies. The combination of Census-tract-level population precision, live meteorological data, and Gaussian plume modeling produces assessments that are meaningfully more accurate than city-level estimates. The step-by-step thinking UI — which shows each tool firing in real time — makes the agent's reasoning transparent and trustworthy for emergency personnel.
What We Learned
- MCP agents unlock a fundamentally different paradigm for language models. They are moving from answering questions to completing multi-step, tool-driven missions with real-world data
- Google Cloud Agent Builder + ADK provides a surprisingly clean path from prototype to production-deployed agent with built-in session management, telemetry, and Cloud Run integration
- Census tract data is the right granularity for emergency population modeling — city-level figures are far too imprecise for evacuation planning, while Census block data creates latency
- Gaussian plume dispersion, while simplified here, is a credible and computationally lightweight model for first-response scenarios
What's Next for AeroShield
AeroShield's Gaussian plume foundation is a starting point, not an endpoint. The natural next steps are:
- Flood modeling using FEMA flood zone polygons and USGS elevation data for terrain-aware inundation mapping
- Tornado path prediction using historical track data and structural vulnerability scoring
- Earthquake impact modeling incorporating USGS ShakeMap data and building inventory databases
- Multi-incident support for simultaneous overlapping hazard events
- Real-time alert ingestion from FEMA IPAWS, NWS, and state emergency management feeds to trigger automatic assessments without manual input
The long-term vision is a comprehensive, always-on disaster evaluation agent that gives any emergency manager in the United States an immediate, accurate risk picture — within seconds of an incident being reported.
Built With
- elasticsearch
- fastapi
- google-cloud-agent-builder
- google-cloud-run
- open-meteo
- openstreetmap-nominatim
- python
- us-census-bureau
Log in or sign up for Devpost to join the conversation.