Glendale GIS MCP Server
Provides access to Glendale, California hazard and city GIS data sourced from public ArcGIS services, including mapped hazards at an address, nearby community resources, zoning, parcels, and other city layers.
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., "@Glendale GIS MCP Serverwhat hazards are at 613 E Broadway?"
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.
Glendale GIS MCP Server
An MCP server that gives hackathon teams, and their AI agents, easy access to the hazard maps and city GIS data for Glendale, California: which mapped hazards apply at an address, what community resources are nearby, and the City of Glendale layers behind them.
It was built for Jewel City Hacks 5, for teams working on emergency preparedness: helping residents understand the hazards where they live and how to prepare.
Jewel City Hacks 5
When | Saturday, September 26, 2026, 8:00 AM – 8:00 PM |
Where | Glendale Community College, Math Discovery Center, 1500 N Verdugo Rd, Glendale, CA 91208 |
Theme | "Think Globally, Build Locally": create technology that makes cities smarter, more connected, and more inclusive |
Hosts | Hacker Fund and Glendale Tech, with the City of Glendale Economic Development Division and the GCC Computer Science Club |
Teams | 1–4 people; students, professionals and residents welcome. High school students must be 14 or older, and anyone under 18 needs parental consent. |
Register |
Schedule: check-in 8:00 AM · project submission closes 6:00 PM · demo expo 6:15 PM (5-minute presentations) · closing ceremony and winners 7:15 PM · check-out by 8:00 PM.
Judging: technical execution 40%, social/local impact 20%, presentation 15%, feasibility 15%, creativity 10%. Prizes: Grand Champion, Best Hardware Hack, Best Software Hack, and Top 5 Hackathon Hackers.
Event details are from hacker.fund/jewelcityhacks and the Luma page as of September 18, 2026. Check there for changes. Questions about the event: team [at] hacker.fund.
Related MCP server: mcp-arcgis-tucson
What this server gives you
It finds, queries and normalizes authoritative data. It doesn't interpret risk, rank hazards or give advice; that's what teams build.
Ask | Tool |
Which hazards apply at an address or point? |
|
Nearest fire stations, police, hospitals, schools, libraries, parks, bus stops? |
|
Zoning or parcel at a location, schools of a type, bus stops on a route, any layer by attribute or area? |
|
What data is there, and what do the fields mean? |
|
Is this a valid Glendale address? |
|
What can this server do? Where's live emergency information? |
|
Every tool takes a location as a street address ({"address": "613 E Broadway"}) or coordinates ({"lat": 34.1466, "lon": -118.2483}). Results cite their source, and each feature carries a ref for fetching the full live record.
Data (21 datasets):
Hazards: CAL FIRE Fire Hazard Severity Zones (2025), California Geological Survey fault rupture, liquefaction and landslide zones, FEMA flood zones, DWR dam inundation areas, and USGS post-fire debris-flow assessments.
City of Glendale: city boundary, fire stations and districts, police station, hospitals, schools, libraries, parks, Beeline bus stops, ZIP codes, neighborhood zones, zoning, streets, and parcels (queried live).
Most data comes from an offline snapshot of the public ArcGIS services (about 35 MB), so queries are fast and don't load the city's servers.
Not included: real-time information (active fires, evacuation orders, weather warnings, earthquakes). See Real-Time Emergency Information for the official sources and feeds to use instead.
Try it
You need Python 3.10 or later. On first run the server downloads the data snapshot (about 6 MB) from this repository's releases, checks its SHA-256, and caches it. Pick one of the two ways to install it.
Option A: uv (recommended)
uv runs the server without a permanent install:
uvx --from git+https://github.com/HackerFund/GlendaleGisMcp glendale-gis-mcp --fetch-snapshotThat downloads and verifies the snapshot, then exits, so your client doesn't wait for it later.
Claude Desktop: in claude_desktop_config.json (Settings → Developer → Edit Config), then quit and reopen Claude Desktop. Use the full path to uvx (find it with which uvx), since Claude Desktop doesn't see your shell's PATH:
{
"mcpServers": {
"glendale-gis": {
"command": "/full/path/to/uvx",
"args": ["--from", "git+https://github.com/HackerFund/GlendaleGisMcp", "glendale-gis-mcp"]
}
}
}Claude Code:
claude mcp add glendale-gis -- uvx --from git+https://github.com/HackerFund/GlendaleGisMcp glendale-gis-mcpOption B: pip
Install into a virtual environment of its own:
python3 -m venv ~/glendale-gis-mcp
source ~/glendale-gis-mcp/bin/activate # Windows: %USERPROFILE%\glendale-gis-mcp\Scripts\activate
pip install git+https://github.com/HackerFund/GlendaleGisMcp
glendale-gis-mcp --fetch-snapshot # download and verify the dataThe server command is then ~/glendale-gis-mcp/bin/glendale-gis-mcp (Windows: %USERPROFILE%\glendale-gis-mcp\Scripts\glendale-gis-mcp.exe). Clients need its full path; echo ~/glendale-gis-mcp/bin/glendale-gis-mcp shows it.
Claude Desktop:
{
"mcpServers": {
"glendale-gis": {
"command": "/Users/you/glendale-gis-mcp/bin/glendale-gis-mcp"
}
}
}Claude Code:
claude mcp add glendale-gis -- ~/glendale-gis-mcp/bin/glendale-gis-mcpTo update later, force a reinstall (the version number doesn't change between commits, so a plain upgrade may skip it):
pip install --force-reinstall --no-deps git+https://github.com/HackerFund/GlendaleGisMcpTry a question
Ask, for example: "Is 613 E Broadway in Glendale in a flood zone?" or "What's the nearest fire station to 1000 W Glenoaks Blvd?" Ask "What can the Glendale GIS server do?" for a tour.
From source (to change the code)
git clone https://github.com/HackerFund/GlendaleGisMcp.git && cd GlendaleGisMcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytestThe published snapshot is used by default. To build your own (about 1.5 minutes; it queries the live agency servers), run python scripts/build_snapshot.py and point the server at it with GLENDALE_GIS_SNAPSHOT_PATH=$PWD/snapshot.
Docs
Reading the Snapshot Data: GeoJSON, fields, each layer, and how to read each hazard
Real-Time Emergency Information: official alerts and live data feeds
Inside a connected client, call
read_guide("about")for the full tour.
Please read
The hazard layers are regulatory maps, not site-specific assessments. Being outside a mapped zone doesn't mean there's no hazard. For example, CAL FIRE "NonWildland" means unzoned, not safe from wildfire.
City of Glendale GIS data is for general information and is not a substitute for legal descriptions or surveys.
This server has no real-time data. In an emergency, follow official alerts.
License
Copyright (C) 2026 Ryan Gates
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE for details.
The data comes from public agency services and keeps their terms and disclaimers.
Available Tools
12 toolsdam_inundationARead-onlyIdempotent
DWR dam inundation areas at a location: where water could flood if a dam failed. One dam can have several features (failure scenarios or structures); all are returned. HazardCl rates the consequences of a failure, not its likelihood. Federally owned dams are not included. Not an evacuation map.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Where to look: {"address": "613 E Broadway"} for a street address in Glendale, or {"lat": 34.1466, "lon": -118.2483}. Coordinates skip geocoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| notes | No | |
| title | Yes | |
| reason | No | Why the result is unavailable |
| status | Yes | |
| dataset | Yes | |
| matches | No | Every feature that contains the point, including classes the source defines as unzoned (e.g. wildfire NonWildland), which don't count toward in_zone |
| nearest | No | Nearest zone feature (0 m when inside); unclassed layers only |
| location | No | Set when the result is returned on its own |
| disclaimer | Yes | |
| class_field | No | Attribute the classes come from |
| nearest_by_class | No | Nearest zone feature for each class, for classed layers (wildfire, flood) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with strong annotations (readOnlyHint, idempotentHint), the description adds significant behavioral detail: multiple features per dam are all returned, HazardCl measures consequence rather than likelihood, federal dams are omitted, and the output is not an evacuation map. This goes well beyond what annotations or the schema convey.
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 compact and front-loaded. The first sentence states the core purpose; subsequent sentences each add meaningful caveats about multiple features, HazardCl interpretation, federal exclusions, and non-evacuation use. No sentence is wasted.
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?
Given the output schema and annotations, the description covers all essential behavioral context: what the tool reports, how to interpret HazardCl, what is excluded, and what the results are not. The location input is fully documented in the schema, so nothing critical is missing for an agent to invoke 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 100%, and the Location schema already explains address vs. coordinates and the geocoding shortcut. The tool description only says 'at a location' and does not add parameter-level meaning beyond what the schema provides, so the baseline score of 3 is 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?
The description clearly identifies the resource as DWR dam inundation areas and explains the concept: 'where water could flood if a dam failed.' It distinguishes itself from more general flood/hazard tools by focusing on dam failure, but it is phrased as a noun phrase rather than an explicit verb-driven action such as 'returns' or 'lists,' so it stops just short of top marks.
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 useful context: it covers dam-failure inundation, excludes federally owned dams, and warns 'Not an evacuation map.' However, it never explicitly states when to use this tool versus siblings like flood_zone or hazards_at_location, nor does it name alternatives or give clear when-not-to-use conditions beyond the evacuation caveat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debris_flowARead-onlyIdempotent
USGS post-fire debris-flow assessments at a location. USGS only assesses recently burned areas, and none currently covers Glendale, so this usually returns not_in_zone; that does not mean there is no debris-flow risk.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Where to look: {"address": "613 E Broadway"} for a street address in Glendale, or {"lat": 34.1466, "lon": -118.2483}. Coordinates skip geocoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| notes | No | |
| title | Yes | |
| reason | No | Why the result is unavailable |
| status | Yes | |
| dataset | Yes | |
| matches | No | Every feature that contains the point, including classes the source defines as unzoned (e.g. wildfire NonWildland), which don't count toward in_zone |
| nearest | No | Nearest zone feature (0 m when inside); unclassed layers only |
| location | No | Set when the result is returned on its own |
| disclaimer | Yes | |
| class_field | No | Attribute the classes come from |
| nearest_by_class | No | Nearest zone feature for each class, for classed layers (wildfire, flood) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: the tool's coverage limitation (only recently burned areas), the typical not_in_zone result for unburned areas, and the important caveat that not_in_zone does not imply no risk. This goes beyond the annotations by explaining the tool's real-world behavior and interpretation of 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?
The description is two sentences with zero waste. The first sentence states the purpose and scope; the second delivers the critical caveat about not_in_zone. Every word earns its place, and the most important behavioral caveat is front-loaded in the second sentence.
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?
The tool has a single parameter fully documented in the schema, an output schema exists, and annotations cover the safety profile. The description adds the only missing context: coverage limitations and interpretation of the not_in_zone result. An agent has everything needed to call this tool correctly and interpret its response.
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 schema already documents the location parameter thoroughly, including the address/lat-lon alternatives and the note that coordinates skip geocoding. The description doesn't add parameter-level detail beyond what the schema provides, but it doesn't need to. Baseline 3 is appropriate since the schema carries the full burden.
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 clearly states the tool's purpose: USGS post-fire debris-flow assessments at a location. It specifies the resource (USGS post-fire debris-flow assessments), the action (returns assessments at a location), and distinguishes it from generic hazard tools by noting the USGS only assesses recently burned areas. This is a specific verb+resource combination that differentiates it from siblings like flood_zone or seismic_zones.
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 explicitly tells the agent when to use this tool and what to expect: it only covers recently burned areas, and it gives a concrete example (Glendale) where it will usually return not_in_zone. It also warns that a not_in_zone result does not mean no debris-flow risk, which is critical for correct interpretation. This is explicit usage guidance beyond what the schema provides.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_datasetARead-onlyIdempotent
Describe one dataset: every field with its type, meaning and coded values (inferred meanings are flagged), record count, freshness (fetched_at, source_last_edit), the area the snapshot covers, the source URL and disclaimer. Read this before filtering with query_dataset, and to interpret attributes returned by other tools (e.g. FEMA FLD_ZONE codes, CAL FIRE FHSZ codes).
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset id from list_datasets |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| clip | Yes | Area the snapshot copy covers: the city plus this buffer |
| docs | Yes | |
| _meta | Yes | |
| title | Yes | |
| access | Yes | |
| fields | Yes | |
| category | Yes | |
| geometry | Yes | |
| id_field | Yes | |
| available | Yes | |
| layer_url | Yes | |
| disclaimer | Yes | |
| fetched_at | Yes | When the snapshot copy was fetched |
| class_field | Yes | |
| description | Yes | |
| feature_count | Yes | |
| source_agency | Yes | |
| unzoned_classes | Yes | |
| source_last_edit | Yes | When the source says it last changed |
| unavailable_reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description discloses valuable behavioral details: inferred meanings are explicitly flagged, freshness includes fetched_at and source_last_edit, and the output includes the covered area, source URL, and disclaimer. This helps the agent trust and interpret the data correctly.
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?
Two dense sentences with no filler: the first front-loads the primary purpose and output contents, the second gives actionable usage guidance. Every clause 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 simple single-parameter tool with a rich output schema and safety annotations, the description provides everything needed: what the tool returns, how to interpret its outputs, and when to call it relative to sibling tools. No important context 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 input schema already fully documents the single parameter. The tool description itself does not add much parameter-level detail beyond 'Describe one dataset,' but no compensation is needed because the schema already provides the meaning.
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, 'Describe one dataset,' and enumerates exactly what the output contains: fields, types, meanings, coded values, record count, freshness, coverage, source URL, and disclaimer. It clearly distinguishes itself from list_datasets by focusing on a single dataset and from query_dataset by positioning itself as the interpretive precursor.
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 explicitly tells the agent when to use this tool: 'Read this before filtering with query_dataset, and to interpret attributes returned by other tools.' It even gives concrete examples such as FEMA FLD_ZONE codes and CAL FIRE FHSZ codes, making the routing decision unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flood_zoneARead-onlyIdempotent
FEMA flood zone at a location (National Flood Hazard Layer), with the nearest zone of each FLD_ZONE class. Every FEMA zone counts as in_zone, including X (minimal or 0.2%-annual-chance hazard); read FLD_ZONE, ZONE_SUBTY and SFHA_TF (T = Special Flood Hazard Area). Zone D means not studied, not safe.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Where to look: {"address": "613 E Broadway"} for a street address in Glendale, or {"lat": 34.1466, "lon": -118.2483}. Coordinates skip geocoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| notes | No | |
| title | Yes | |
| reason | No | Why the result is unavailable |
| status | Yes | |
| dataset | Yes | |
| matches | No | Every feature that contains the point, including classes the source defines as unzoned (e.g. wildfire NonWildland), which don't count toward in_zone |
| nearest | No | Nearest zone feature (0 m when inside); unclassed layers only |
| location | No | Set when the result is returned on its own |
| disclaimer | Yes | |
| class_field | No | Attribute the classes come from |
| nearest_by_class | No | Nearest zone feature for each class, for classed layers (wildfire, flood) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive, but the description adds important interpretation beyond those: every FEMA zone counts as in_zone including X, SFHA_TF should be read, and Zone D means not studied and not safe. This prevents misleading conclusions and adds genuine behavioral context.
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 dense, purposeful sentences with no filler. The core resource and behavior are front-loaded, and the caveats about zone classes are packed efficiently into the remaining sentences.
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 tool with an output schema and robust annotations, the description is complete. It covers the core query, the result semantics, and the critical safety interpretation, leaving no major gap for an agent to call and use 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 100%, with the Location object fully explaining address vs. lat/lon usage and noting that coordinates skip geocoding. The tool description itself adds no additional parameter detail, so the baseline of 3 is 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?
The description identifies a specific resource (FEMA National Flood Hazard Layer), a clear operation (look up flood zone at a location), and the key output concept (nearest zone of each FLD_ZONE class). It distinguishes itself from hazard siblings by name and content, making the tool's purpose unambiguous.
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 clearly establishes when this tool applies: for FEMA flood zone information at a location, including how to interpret zones. It does not explicitly name alternatives or exclusions, but the context is strong enough that an agent can route flood-specific requests here without confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocode_addressARead-onlyIdempotent
Find a Glendale street address with the City of Glendale geocoder. Returns the matched address, coordinates and score, or several candidates when the address is ambiguous (e.g. '613 Broadway' matches both E and W Broadway). Addresses outside the city limits (the geocoder also knows Burbank and unincorporated La Crescenta) return an error. Unit numbers are ignored and place names aren't supported. Other tools accept an address directly, so call this only to check or disambiguate one.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | A street address in Glendale |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | |
| notes | No | |
| status | Yes | |
| location | No | The confident match; null when ambiguous |
| candidates | Yes | Matches inside Glendale, best first (duplicates removed) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, but the description adds valuable behavioral detail: it returns a matched address, coordinates and score, may return multiple candidates for ambiguous addresses, errors on outside-city addresses, and ignores unit numbers. Nothing in the description contradicts the annotations.
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 compact and front-loaded, with every sentence contributing useful information: what it does, what it returns, error behavior, input limitations, and when to use it. There is no filler or redundancy.
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 tool with an output schema and rich annotations, this description is fully adequate. It covers invocation, return shape, edge cases, and explicit usage guidance without needing to restate structured data.
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?
The schema already documents the single 'address' parameter fully, so the baseline is 3. The description adds useful interpretive meaning beyond the schema by explaining ambiguity handling, unsupported place names, and ignored unit numbers, making the tool's input behavior much clearer.
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 and resource: it finds a Glendale street address via a city geocoder, and tells the agent exactly what the tool returns. It also differentiates itself from other tools that accept an address directly, so an agent can identify this tool's unique role.
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 explicitly states when to call this tool: 'call this only to check or disambiguate one' and notes that other address-accepting tools make this unnecessary in normal flows. It also gives boundary conditions such as outside-city-limit errors and unsupported inputs like place names or unit numbers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hazards_at_locationARead-onlyIdempotent
All mapped hazards at one location in one call: wildfire (CAL FIRE), flood (FEMA), fault rupture, liquefaction and earthquake-induced landslide (CGS), dam inundation (DWR) and post-fire debris flow (USGS). Each has a status (in_zone, not_in_zone or unavailable), the zones containing the point, the nearest zone with its distance, and notes on how to read it. These are regulatory maps of mapped hazard, not current conditions or a safety assessment; for active fires, evacuations and alerts call read_guide("real_time_sources"). Use the single-hazard tools when only one is needed.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Where to look: {"address": "613 E Broadway"} for a street address in Glendale, or {"lat": 34.1466, "lon": -118.2483}. Coordinates skip geocoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fault | Yes | |
| flood | Yes | |
| location | Yes | |
| wildfire | Yes | |
| landslide | Yes | |
| debris_flow | Yes | |
| liquefaction | Yes | |
| dam_inundation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark this as read-only, idempotent, and non-destructive, the description adds meaningful behavioral context: these are regulatory maps, not current conditions or safety assessments, and each hazard result includes status, containing zones, nearest zone distance, and reading notes. This goes well beyond what annotations alone provide.
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 compact, front-loads the core value proposition, and every sentence earns its place: the hazard list, the output contents, the important regulatory caveat, and the routing to alternatives. No fluff or redundancy exists.
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 multi-hazard lookup tool with a rich output schema and annotations covering safety and idempotency, the description is complete. It covers what the tool returns, distinguishes itself from real-time safety products, and directs the agent to alternatives, leaving no critical decision unresolved.
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 the schema already thoroughly documents the location parameter, including examples and the note that coordinates skip geocoding. The tool description does not need to add much about parameters; it contributes little beyond the schema, so baseline 3 is 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?
The description states a specific purpose: retrieving all mapped hazards at a single location in one call, then enumerates exactly which hazard types and agencies are included. It clearly contrasts with sibling single-hazard tools by presenting itself as the consolidated option.
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 explicit when-to-use guidance: use this for consolidated hazard-zone data, use single-hazard tools when only one hazard is needed, and use read_guide('real_time_sources') for active fires, evacuations, and alerts. This is strong routing behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsARead-onlyIdempotent
List every dataset this server can query: id, source agency, category (hazard, resource or reference), whether it comes from the offline snapshot or live, and its feature count. Start here to find dataset ids for describe_dataset and query_dataset. For hazards or resources at a location, the dedicated tools (hazards_at_location, nearest_resources) are simpler.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| datasets | Yes | |
| snapshot_built_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe, non-mutating operation. The description adds the 'offline snapshot or live' distinction as part of the output, but does not discuss performance, pagination, or any other behavioral nuance. Given the strong annotation coverage, a 3 is appropriate – the description adds modest context without contradicting the annotations.
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 two sentences, front-loaded with the core function and output fields, followed by usage guidance and alternatives. Every sentence earns its place; there is no fluff or redundancy. It is an exemplary model of conciseness.
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 list tool with an output schema (as signaled by has_output_schema=true), the description fully covers what the tool does, what it returns, how to use it, and when to use alternatives. Nothing an agent needs 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?
The tool has zero parameters, and the schema coverage is 100% (empty schema). Per the rubric, a tool with no parameters gets a baseline of 4. The description does not need to explain parameters because there are none, and it does not introduce any misleading parameter references.
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: 'List every dataset this server can query' and enumerates the returned fields (id, source agency, category, snapshot/live, feature count). It clearly distinguishes itself from sibling tools like describe_dataset, query_dataset, hazards_at_location, and nearest_resources by stating its role as the entry point for dataset discovery.
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 explicitly states when to use this tool ('Start here to find dataset ids for describe_dataset and query_dataset') and when not to ('For hazards or resources at a location, the dedicated tools (hazards_at_location, nearest_resources) are simpler'). It names the alternatives and the conditions that select them, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nearest_resourcesARead-onlyIdempotent
Nearest community resources to a location: fire stations, police station, hospitals, schools, libraries, parks and Beeline bus stops, with name, address and distance. Distances are straight-line meters, not travel distance or time, and only resources inside Glendale are included (neighboring cities' facilities may be closer). For other filters (e.g. only high schools) use query_dataset.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | Which kinds to include; default all | |
| limit | No | Results per kind, 1-25 | |
| location | Yes | Where to look: {"address": "613 E Broadway"} for a street address in Glendale, or {"lat": 34.1466, "lon": -118.2483}. Coordinates skip geocoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| groups | Yes | |
| location | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds critical behavioral details: distances are straight-line meters (not travel distance/time) and only resources inside Glendale are included, even if neighboring cities are closer. This goes beyond annotations and is essential for correct interpretation.
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 the primary purpose, followed by essential caveats and a routing instruction. No wasted words; 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?
Given the tool's complexity (multiple resource kinds, location input, limit, and output fields), the description covers the key nuances: Glendale-only scope, straight-line distances, and a clear pointer to an alternative for different filters. The agent has all necessary context to invoke the tool 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 100%, so all parameters are well-documented in the schema (e.g., location accepts address or lat/lon, kinds has enum, limit has default and range). The description does not add new parameter semantics beyond what the schema already provides. Baseline of 3 applies because the schema carries the burden.
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 states a clear verb ('Nearest') and resource ('community resources') with an explicit list of types and output fields. It also distinguishes itself from query_dataset by name, making it easy for an agent to select the right tool.
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 instructs when to use an alternative: 'For other filters (e.g. only high schools) use query_dataset.' It also clarifies the scope (only Glendale) and the distance metric, setting clear expectations for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_datasetARead-onlyIdempotent
Search one dataset with attribute filters, a location (near) or a bounding box, with paging. Use it for questions the dedicated tools don't cover: zoning or the parcel at a location, schools of a type, bus stops on a route, all dams affecting an area. Results carry total, next_offset for the next page, and a ref for each feature. Geometry is off by default to save context. Parcels are queried live from the city; everything else comes from the offline snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Spatial filter: [min_lon, min_lat, max_lon, max_lat] | |
| near | No | Spatial filter: {"lat", "lon", "radius_m"} (radius up to 5000 m). radius_m 0 returns features containing the point, e.g. the zoning or parcel at a location. Results are sorted by distance. | |
| limit | No | Page size, 1-100 | |
| fields | No | Attributes to return (default all); the object ID is always kept | |
| offset | No | Skip this many results (paging) | |
| dataset | Yes | Dataset id from list_datasets | |
| filters | No | Attribute conditions, all of which must match. Each is {"field", "op", "value"}; op is eq, ne, lt, lte, gt, gte, in (value is a list), contains, starts_with, is_null or not_null. Field names are case-sensitive (see describe_dataset); text comparisons ignore case. Example: [{"field": "School_typ", "op": "eq", "value": "High School"}] | |
| include_geometry | No | Return GeoJSON geometry; very large shapes are left out |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | |
| notes | No | |
| total | Yes | Features matching the query |
| offset | Yes | |
| dataset | Yes | |
| features | Yes | |
| returned | Yes | |
| next_offset | Yes | Offset for the next page; null on the last |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive nature. The description adds valuable behavioral details: geometry is off by default to save context, results include total and next_offset for paging, and data source differences (live vs snapshot). This goes beyond the structured annotations and helps the agent set expectations.
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 concise (three sentences) and front-loaded with the primary purpose. It efficiently conveys scope, usage guidance, and key behavioral traits without repetition or fluff. Every sentence contributes meaning.
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?
Given the tool's complexity (8 parameters, nested objects) and that an output schema exists, the description covers all essential aspects: how to use it, when to use it, pagination behavior, geometry default, and data freshness. No critical information an agent needs to invoke 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?
Schema description coverage is 100%, so the schema thoroughly documents all parameters (near, bbox, filters, limit, offset, fields, include_geometry, dataset). The description adds no new parameter semantics beyond what the schema already provides—it references paging but doesn't elaborate on parameter syntax. Thus baseline 3 applies.
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 starts with a clear verb+resource: 'Search one dataset' with attribute filters, location, bbox, and paging. It distinguishes itself from the sibling dedicated tools by providing concrete example queries (zoning, schools, bus stops, dams) that this generic tool covers, making its purpose unambiguous.
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 instructs to use this tool for questions the dedicated tools don't cover and gives examples. It also discloses the data freshness distinction (live parcels vs offline snapshot), which is essential for choosing this tool over specialized ones. No exclusions are listed, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_guideARead-onlyIdempotent
Read one of the server's guides (Markdown). Call "about" first if you're unsure what this server can do. Call "real_time_sources" whenever someone asks about current conditions (active fires, evacuations, warnings, earthquakes, outages): this server has no real-time data, and the guide lists the official sources to send them to.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | about: what this server does, every tool, how results work. datasets: every dataset with sources and dates. real_time_sources: where to find active fires, evacuations, alerts and other live information. snapshot_data: how to read the data and each hazard. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| topic | Yes | |
| content | Yes | Markdown |
| resource_uri | Yes | The same content as an MCP resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds valuable context beyond annotations by warning that the server has no real-time data and that the guide lists official sources to direct users to. This helps agents avoid incorrectly expecting live data.
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 three sentences with no filler. The core purpose is front-loaded, and the two following sentences provide high-value routing guidance that directly helps correct invocation.
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 one-parameter tool with a fully described enum, output schema, and safety annotations, the description is complete. It covers the primary caveat (no real-time data) and tells agents how to handle common unsure/current-conditions requests.
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 coverage is 100% and the single 'topic' parameter has a self-explanatory enum with descriptions. The description reinforces the real_time_sources topic in its usage guidance but adds no new parameter-level semantics beyond what the schema already provides.
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 states a specific verb and resource: 'Read one of the server's guides (Markdown).' This clearly differentiates the tool from sibling data-access tools like query_dataset or hazards_at_location, since this is the only guide-reading tool.
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 explicit when-to-use guidance: call 'about' first if unsure what the server can do, and call 'real_time_sources' whenever current conditions are requested. It does not explicitly name sibling alternatives, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seismic_zonesARead-onlyIdempotent
California Geological Survey earthquake zones at a location: Alquist-Priolo fault rupture, liquefaction and earthquake-induced landslide. Being inside a zone is the hazard signal; the attributes only describe the map (quadrangle, release date, report links). Outside a zone does not mean no earthquake hazard: all of Glendale can shake.
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Where to look: {"address": "613 E Broadway"} for a street address in Glendale, or {"lat": 34.1466, "lon": -118.2483}. Coordinates skip geocoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| fault | Yes | |
| location | Yes | |
| landslide | Yes | |
| liquefaction | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: being inside a zone is the hazard signal, attributes only describe the map, and absence from a zone does not guarantee safety. This directly supports the openWorldHint and helps the agent avoid misinterpreting negative 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?
The description is three sentences with no filler. It front-loads the core resource and zone types, then adds two crucial interpretive caveats that prevent misuse of the result. 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?
Given the output schema exists and annotations already convey the read-only, idempotent, open-world nature of the call, the description supplies the remaining decision-critical context: what constitutes a hazard and what absence means. Nothing needed 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?
Schema description coverage is 100%, and the input schema already documents address versus lat/lon usage, including that coordinates skip geocoding. The description adds no parameter-level detail beyond 'at a location,' so the baseline score of 3 is 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?
The description identifies the specific resource ('California Geological Survey earthquake zones') and enumerates the zone types: Alquist-Priolo fault rupture, liquefaction, and earthquake-induced landslide. It implies a location-based lookup rather than an explicit verb, but the intent is clear and distinguishable from the non-seismic sibling hazard tools.
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 implies the tool is used to check earthquake-related zones at a location, but it does not explicitly say when to choose this over alternatives like hazards_at_location, wildfire_zone, or flood_zone. No when-not-to-use guidance is provided beyond the interpretive caveat about zones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wildfire_zoneARead-onlyIdempotent
CAL FIRE Fire Hazard Severity Zone at a location (2025 map), with the nearest zone of each class (Very High, High, Moderate, NonWildland). The zones rate the long-term hazard of the landscape, not the risk to a building. NonWildland is unzoned, not safe from wildfire. Not an evacuation map; for active fires call read_guide("real_time_sources").
| Name | Required | Description | Default |
|---|---|---|---|
| location | Yes | Where to look: {"address": "613 E Broadway"} for a street address in Glendale, or {"lat": 34.1466, "lon": -118.2483}. Coordinates skip geocoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | No | |
| notes | No | |
| title | Yes | |
| reason | No | Why the result is unavailable |
| status | Yes | |
| dataset | Yes | |
| matches | No | Every feature that contains the point, including classes the source defines as unzoned (e.g. wildfire NonWildland), which don't count toward in_zone |
| nearest | No | Nearest zone feature (0 m when inside); unclassed layers only |
| location | No | Set when the result is returned on its own |
| disclaimer | Yes | |
| class_field | No | Attribute the classes come from |
| nearest_by_class | No | Nearest zone feature for each class, for classed layers (wildfire, flood) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds significant interpretive context beyond those: it clarifies that zones rate hazard, not building risk, and that 'NonWildland is unzoned, not safe from wildfire' – a crucial caveat that prevents misinterpretation. It also states it is not an evacuation map, which is a behavioral limitation. These disclosures add real value beyond the structured annotations and align with them (no contradiction).
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 three sentences, each with a distinct purpose: the first states the core function and output, the second clarifies the hazard-versus-risk distinction, and the third provides the NonWildland caveat and the evacuation-map exclusion with a pointer to read_guide. It is front-loaded with the main purpose and every sentence earns its place. No fluff or redundancy.
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 location lookup, the description covers the purpose, the output classes, and key interpretive caveats. It does not explicitly describe the output schema structure, but an output schema is present and will carry that detail. It also does not mention geocoding behavior, but the schema does. The only minor gap is that it doesn't explicitly state that the tool returns data for a specific location (though that is implied). Overall, it is nearly complete for an agent 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 100% – the input schema already provides a full description of the 'location' parameter, including how to give either an address or coordinates and that coordinates skip geocoding. The tool description itself does not discuss parameters, but since the schema carries the burden, the baseline of 3 applies. The description adds no extra parameter-level meaning, so it stays at the baseline.
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 starts with a specific verb-resource pair: 'CAL FIRE Fire Hazard Severity Zone at a location', and immediately clarifies what is returned (nearest zone of each class). It distinguishes itself from sibling hazard tools (flood_zone, seismic_zones) by naming the exact hazard type. The mention of '2025 map' adds temporal precision, and the phrase 'rate the long-term hazard of the landscape, not the risk to a building' further specifies the tool's scope.
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 provides an explicit exclusion: 'Not an evacuation map; for active fires call read_guide("real_time_sources")'. This tells the agent when NOT to use this tool and points to a concrete alternative. It does not explicitly state when to use this tool over other hazard tools, but the purpose is clear enough that the agent can infer it. The exclusion is the most valuable guidance and earns a high score, though a fuller 'use this when...' statement would make it a 5.
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.
12 tool updates
v0.1.0- First observed
dam_inundation - First observed
debris_flow - First observed
describe_dataset - First observed
flood_zone - First observed
geocode_address - First observed
hazards_at_location - First observed
list_datasets - First observed
nearest_resources - First observed
query_dataset - First observed
read_guide - First observed
seismic_zones - First observed
wildfire_zone
TDQS
Scored across 12 tools
Every tool has a clearly distinct purpose: listing datasets, reading guides, describing schemas, querying data, geocoding, and specific hazard lookups per type (wildfire, flood, seismic, dam, debris) plus resource search. The aggregate hazards_at_location is explicitly differentiated from single-hazard tools.
All tool names use lowercase snake_case with a consistent style, mostly verb_noun (list_datasets, read_guide, describe_dataset, query_dataset, geocode_address) or resource nouns (wildfire_zone, flood_zone, seismic_zones). The pattern is uniform and predictable.
12 tools is well within the ideal 3-15 range. Each tool covers a distinct aspect of the GIS domain (hazards, resources, querying, geocoding) without redundancy, and the count matches the server's comprehensive scope.
The tool surface provides complete coverage for the stated purpose: listing available datasets, describing schema, flexible querying (attribute, location, bbox), geocoding, all major hazard types, and community resources. No obvious gaps; read-only GIS queries are fully supported.
Maintenance
Related MCP Connectors
US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.
US weather & geo for AI agents: forecasts, alerts, earthquakes, elevation, geocoding. No keys.
Flood, wildfire, earthquake, and coastal-storm hazard lookup for a US property.
Zoning, ADU eligibility, flood zone, setbacks, and buildability intelligence for U.S. parcels.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search and query Los Angeles County open geospatial datasets (parcels, parks, etc.) via ArcGIS Feature Services.3 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables users to search and query City of Tucson GIS open geospatial datasets (zoning, parcels, public safety, transport, city services) through natural language.4 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and querying City of Henderson open geospatial datasets (parcels, zoning, public works) via natural language or direct tool calls.3 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables search and query of City of Peoria, Arizona open geospatial datasets (parcels, zoning, public works) via ArcGIS feature services, allowing AI agents to access GIS data through natural language.3 npmMIT