fema-mcp-server
Server Details
Query FEMA disaster declarations, public assistance grants, housing aid, and NFIP claims.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- cyanheads/fema-mcp-server
- GitHub Stars
- 1
- Server Listing
- fema-mcp-server
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.5/5 across 8 of 8 tools scored.
Each tool has a distinct purpose: search vs get, specific NFIP vs generic OData, and staging/query helpers. Descriptions clarify boundaries, minimizing confusion.
All tools follow a consistent 'fema_<verb>_<target>' snake_case pattern (e.g., fema_search_disasters, fema_get_disaster). No mixed conventions or vague verbs.
With 8 tools covering search, retrieval, NFIP claims, generic OData, and data staging, the count is well-scoped for the FEMA data domain without excess or insufficiency.
The set covers core workflows (disaster search/details, housing/PA assistance, NFIP search, generic query). Minor gap: detailed NFIP claim records require the generic query with timeout risks, but overall coverage is strong.
Available Tools
8 toolsfema_dataframe_describeDescribe FEMA DataCanvas TablesARead-onlyIdempotentInspect
List tables and column schemas on a DataCanvas staged by fema_search_nfip. Call this before fema_dataframe_query to discover the exact table name, column names, and DuckDB data types needed to write valid SQL. Row count reflects what was actually staged — check truncated in the fema_search_nfip response to know whether the canvas holds the full matching set.
| Name | Required | Description | Default |
|---|---|---|---|
| canvas_id | Yes | Canvas ID from the fema_search_nfip response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tables | Yes | All tables and views available on this canvas. |
| canvas_id | Yes | Canvas ID that was described — pass to fema_dataframe_query. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, idempotentHint), the description adds valuable behavioral context: row count reflects actually staged data, and recommends checking truncation in the fema_search_nfip response. No contradictions with 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, each serving a distinct purpose: stating the action and providing usage guidance. No redundant text, front-loaded with core purpose.
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 presence of an output schema (which covers return value details), the description sufficiently covers purpose, usage order, and a behavioral note on row count. It is complete for the tool's complexity.
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 describes canvas_id with 100% coverage. The description adds context that the ID comes from fema_search_nfip response, reinforcing the parameter's usage. This extra context justifies a score above baseline 3.
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 lists tables and column schemas on a DataCanvas staged by fema_search_nfip. It distinguishes itself from the sibling fema_dataframe_query by specifying it should be called before querying to discover schema details.
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 advises calling this before fema_dataframe_query to discover table names, columns, and DuckDB types. It also mentions checking truncated in the fema_search_nfip response for completeness. It does not explicitly state when not to use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema_dataframe_queryQuery FEMA DataCanvas TableARead-onlyIdempotentInspect
Run a read-only SQL SELECT against a DataCanvas table staged by fema_search_nfip. Enables aggregation, GROUP BY, SUM/COUNT, time-series, and filtered analysis over the full NFIP claims result without re-fetching from the API. Call fema_dataframe_describe first to get the exact table name and column names needed for valid SQL. Only SELECT statements are allowed — DDL, DML, COPY, and file-reading functions are blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL SELECT statement to run against the staged table. Use the table name from fema_dataframe_describe. Results are capped at the canvas row limit; append LIMIT/OFFSET to page through additional rows, or aggregate (GROUP BY, COUNT, SUM) to summarize the full set in one query. Example: "SELECT year_of_loss, COUNT(*) AS claims, SUM(amount_paid_building) AS total_building_paid FROM df_nfip_abc123 GROUP BY year_of_loss ORDER BY year_of_loss" | |
| canvas_id | Yes | Canvas ID from the fema_search_nfip response (the canvas_id field). |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The canvas row limit that was applied when the result was capped. |
| rows | Yes | Result rows from the query. May be capped at the canvas row limit — when the truncated enrichment field is set, page the remainder with LIMIT/OFFSET (see the notice guidance). |
| shown | No | Number of rows returned in this (capped) response. |
| notice | No | Continuation guidance when capped — how to page the remainder with LIMIT/OFFSET. |
| canvas_id | Yes | Canvas ID that was queried — reuse for follow-up queries. |
| row_count | Yes | Number of rows in this response (may be capped at the canvas row limit). |
| truncated | No | True when the result was capped at the canvas row limit — more rows match than were returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. The description reinforces this by stating 'read-only SQL SELECT' and 'Only SELECT statements are allowed.' It adds extra context: results are capped at canvas row limit, and suggests LIMIT/OFFSET or aggregation to navigate limits. This goes beyond 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?
Two sentences plus an example, front-loaded with the core purpose. Every sentence adds value: purpose, prerequisites, constraints, example. No wasted words.
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 an output schema (not shown but present), the description covers prerequisites, allowed operations, limitations, and examples. For a tool of this complexity, it is complete and leaves no major gaps.
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%, so baseline is 3. The description adds significant value for the 'query' parameter: explains SQL constraints, provides an example, and notes row limits. For 'canvas_id', it merely restates the schema description. Overall, the extra context for query earns a 4.
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 this tool runs read-only SQL SELECT queries on a DataCanvas table, specifying the verb ('run'), resource ('DataCanvas table'), and scope (aggregation, GROUP BY, etc.). It distinguishes itself from siblings by enabling analysis without re-fetching data.
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 states prerequisites: call fema_search_nfip first and fema_dataframe_describe to get table name and columns. Clearly defines allowed operations (SELECT only) and blocks DDL, DML, COPY, file-reading. Provides example SQL and mentions row limits, guiding the agent on when to use aggregation vs pagination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema_get_disasterGet FEMA Disaster DetailsARead-onlyInspect
Fetch all designated-area rows for a specific FEMA disaster by disaster number (e.g., 4781). Returns every county/municipality designated under the declaration along with programs activated, incident period, and state info. Use fema_search_disasters to find disaster numbers. The returned disaster_number chains to fema_get_public_assistance and fema_get_housing_assistance.
| Name | Required | Description | Default |
|---|---|---|---|
| disaster_number | Yes | FEMA disaster number (e.g., 4781). Obtain from fema_search_disasters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | Two-letter state/territory code. |
| title | Yes | Official declaration title (e.g., "SEVERE STORMS AND FLOODING"). |
| hm_declared | Yes | True when Hazard Mitigation grants were declared. |
| ia_declared | Yes | True when the Individuals and Households Program (IHP) was declared — indicates IA housing/personal grants are available. |
| pa_declared | Yes | True when Public Assistance (infrastructure recovery grants) was declared. |
| incident_type | Yes | Type of incident (e.g., Flood, Hurricane, Severe Storm). |
| disaster_number | Yes | FEMA disaster number — use as the chain key for PA and housing assistance tools. |
| declaration_date | Yes | ISO 8601 date the declaration was signed. |
| declaration_type | Yes | Declaration type: DR (major disaster), EM (emergency), or FM (fire management). |
| designated_areas | Yes | All counties/municipalities designated for assistance under this declaration. |
| incident_end_date | No | ISO 8601 end date of the incident. Absent for ongoing or unrecorded incidents. |
| incident_begin_date | No | ISO 8601 start date of the incident. Absent when not recorded. |
| designated_area_count | Yes | Total number of designated areas in this declaration. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; description adds that the tool returns counties/municipalities, programs, incident period, and state info, plus chaining behavior. No destructive aspects disclosed, but consistent with read-only intent.
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 sentences: first specifies action and example, second provides usage flow and chaining. No redundant content, front-loaded with key 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?
Given single required parameter and existing output schema, the description adequately covers return content (designated areas, programs, incident period, state info) and integration with related tools. No gaps.
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 covers disaster_number parameter with description (e.g., 4781) and reference to fema_search_disasters. Tool description repeats the example but adds no new semantic detail beyond the parameter schema.
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?
Clearly states it fetches designated-area rows for a specific FEMA disaster by disaster number, with an example (4781). Distinguishes from sibling tools like fema_search_disasters and fema_get_public_assistance.
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 instructs to use fema_search_disasters to find disaster numbers, and describes chaining to fema_get_public_assistance and fema_get_housing_assistance. Provides clear when-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema_get_housing_assistanceGet FEMA Housing Assistance DataARead-onlyInspect
Retrieve Individual Assistance (IA) housing data for a disaster by disaster number. Returns owner and/or renter breakdowns by county and ZIP code — valid registrations, total approved IHP amounts, repair/rental amounts, and inspection data. Use type to select owners, renters, or both (default). Use disaster_number from fema_search_disasters.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Which housing assistance dataset to query: owners, renters, or both (default). | both |
| limit | No | Maximum records per dataset to return (default 100). | |
| state | No | Two-letter state code to narrow results when a disaster spans multiple states. | |
| offset | No | Pagination offset (default 0). | |
| disaster_number | Yes | FEMA disaster number. Obtain from fema_search_disasters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no results were found. |
| owners | Yes | Homeowner (HousingAssistanceOwners) records. Empty when type is "renters" or no owner data exists. |
| renters | Yes | Renter (HousingAssistanceRenters) records. Empty when type is "owners" or no renter data exists. |
| totalCount | No | Total owner + renter records available before the per-dataset limit — exceeds the returned count when either dataset was capped. |
| owners_count | Yes | Total owner records available before the per-dataset limit. |
| renters_count | Yes | Total renter records available before the per-dataset limit. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, so the description does not need to reiterate read-only behavior. The description adds context about the data fields returned (registrations, amounts, inspection data), which is transparent about the output. No behavioral contradictions.
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 that front-load the purpose, then detail outputs, then provide usage hints. Every sentence adds value with no fluff.
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 complexity (required disaster_number, optional type/state/limit/offset) and the presence of an output schema, the description covers the key points: which disaster data to use and how to filter. It does not explain pagination (offset/limit) or state filtering, but these are well-documented in the schema.
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?
All 5 parameters are fully described in the input schema (100% coverage). The description adds marginal value by explaining the type parameter's options and the disaster_number's source, but does not provide meaningful new information beyond the schema definitions.
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 explicitly states the action ('Retrieve Individual Assistance housing data'), the resource ('for a disaster by disaster number'), and the output (breakdowns by county/ZIP with specific data fields). It clearly distinguishes from sibling tools like fema_get_public_assistance (public vs. individual assistance) and fema_search_disasters (search vs. retrieve).
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 practical guidance: where to get the disaster number (fema_search_disasters) and how to use the type parameter. However, it does not explicitly mention when not to use this tool or compare it to alternatives like fema_dataframe_query or fema_get_public_assistance, which would help an agent avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema_get_public_assistanceGet FEMA Public Assistance ProjectsARead-onlyInspect
Retrieve Public Assistance (PA) funded project records for a disaster or state — shows where federal recovery money was obligated. Returns applicant, damage category, project size and status, federal share obligated, and total obligated amounts. Either disaster_number or state must be provided. Use disaster_number (from fema_search_disasters) to scope to a single declaration, or state to browse all PA projects for a state. PA projects are created only when the PA program is declared (pa_declared: true on the disaster).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of projects to return (1–1000, default 100). | |
| state | No | Two-letter state code to browse all PA projects for a state. | |
| county | No | Filter by county name substring. | |
| offset | No | Pagination offset (default 0). | |
| disaster_number | No | FEMA disaster number to scope results to a single declaration. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no results were found. |
| projects | Yes | Public assistance funded project records. |
| totalCount | No | Total matching projects before pagination — exceeds returned_count when results were capped at the limit. |
| total_count | Yes | Total matching projects before pagination. |
| returned_count | Yes | Number of projects in this response. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and description reinforces that by stating it shows obligated federal recovery money. Adds behavioral constraint that either disaster_number or state must be provided, and that PA projects require pa_declared: true. No contradictions with 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?
Four sentences, front-loaded with the main purpose, no redundant or superfluous information. Every sentence adds necessary context about usage, prerequisites, and scope.
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 that an output schema exists, the description appropriately omits return format details. It covers the core logical constraint (one of two parameters required), a key prerequisite (pa_declared), and return fields. Could briefly mention pagination (limit/offset) implicitly covered by schema, but overall complete for the tool's complexity.
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 100% schema coverage, description adds value by detailing the dependency between disaster_number and state (one must be provided), linking disaster_number to fema_search_disasters, and explaining the state parameter as browsing for a state. County filter is mentioned but not elaborated. Adds logical constraints not in schema.
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?
Description clearly identifies the tool as retrieving Public Assistance funded project records, specifying return fields (applicant, damage category, etc.) and distinguishing it from sibling tools like fema_get_housing_assistance by focusing on PA projects specifically.
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 clear guidance on when to use disaster_number vs state, referencing fema_search_disasters for disaster_number and noting that projects exist only when pa_declared is true. Lacks explicit when-not-to-use or alternative sibling tool comparisons, but still gives actionable context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema_query_datasetQuery Any OpenFEMA DatasetARead-onlyInspect
Generic OData query against any OpenFEMA v2 dataset — the escape hatch for datasets the convenience tools do not cover (e.g., FimaNfipPolicies, IndividualAssistanceHousingRegistrantsLargeDisasters, FemaWebDeclarationAreas, PublicAssistanceApplicants). Accepts raw OData filter, select, orderby, and pagination parameters. For NFIP Policies, use propertyState (not state) as the state field — always include a county or ZIP filter to avoid timeout. The dataset name must match the exact OpenFEMA v2 entity name (case-sensitive, e.g., FimaNfipClaims). Unknown dataset names return an unknown_dataset error.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum records to return (1–10000, default 100). | |
| filter | No | OData $filter expression (e.g., "state eq 'TX' and declarationDate ge '2024-01-01T00:00:00.000Z'"). String values in single quotes. | |
| offset | No | Pagination offset (default 0). | |
| select | No | Comma-separated field names to return (e.g., "disasterNumber,state,declarationDate"). | |
| dataset | Yes | OpenFEMA v2 dataset entity name (case-sensitive, e.g., FimaNfipPolicies, FemaWebDeclarationAreas, PublicAssistanceApplicants). | |
| orderby | No | OData $orderby expression (e.g., "declarationDate desc"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | Records returned from the dataset. Field names depend on the queried dataset. |
| notice | No | Guidance when no results were found. |
| dataset | Yes | The dataset that was queried. |
| totalCount | No | Total matching records before pagination — exceeds returned_count when results were capped at the limit. |
| total_count | Yes | Total matching records before pagination. |
| returned_count | Yes | Number of records in this response. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe read operation; description adds context about timeout risks, dataset name case-sensitivity, and error behavior (unknown_dataset error). Disclosure goes beyond 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?
Single cohesive paragraph logically flows from purpose to specifics to advice. Every sentence contributes value. Could be slightly improved with bullet points, but current structure is effective.
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?
Description addresses dataset selection, filtering, error handling, and performance considerations. With output schema present, return values need no further explanation. Context is fully adequate for agent use.
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 descriptions fully cover each parameter. Description adds practical detail (e.g., propertyState recommendation, filtering advice) that enhances parameter understanding without redundancy.
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?
Clearly states tool as a generic OData query against any OpenFEMA v2 dataset, positioned as an escape hatch for datasets not covered by convenience tools. Examples and structure make purpose unmistakable.
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 identifies when to use (datasets not covered by convenience tools) with examples. Provides critical usage tips like using propertyState for NFIP and adding filters to avoid timeout.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema_search_disastersSearch FEMA Disaster DeclarationsARead-onlyInspect
Search federal disaster declarations by state, incident type, declaration type, date range, and county. Returns deduplicated declaration-level summaries — each disaster number appears once with a designatedAreaCount showing how many counties/municipalities were designated. The disaster number is the chain key for fema_get_disaster, fema_get_public_assistance, and fema_get_housing_assistance. Use declaration_type to filter: DR (major disaster, most common), EM (emergency), FM (fire management). Date filters apply to the declaration date. Use fema_get_disaster to retrieve all designated-area rows for a specific declaration.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of unique disaster declarations to return (1–1000, default 50). | |
| state | No | Two-letter US state/territory code (e.g., TX, CA, FL, PR). Filters by state. | |
| county | No | Filter by designated area / county name substring (e.g., Harris, Los Angeles). Case-insensitive. | |
| offset | No | Pagination offset in declarations (default 0). Use with limit to page through results. | |
| date_to | No | End of declaration date range in ISO 8601 format (e.g., 2024-12-31). Inclusive. | |
| date_from | No | Start of declaration date range in ISO 8601 format (e.g., 2024-01-01). Inclusive. | |
| incident_type | No | Incident type filter (e.g., Flood, Hurricane, Tornado, Fire, Earthquake, Severe Storm). Case-insensitive substring match. | |
| declaration_type | No | Declaration type: DR (major disaster declaration), EM (emergency declaration), FM (fire management assistance declaration). |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Guidance when no results were found. |
| totalCount | No | Total unique disaster declarations matching the query — the unit declaration-level pagination pages over. Exceeds returned_count when the matches span more than one page. |
| declarations | Yes | Disaster declarations matching the search, one entry per unique disaster number. |
| returned_count | Yes | Number of unique deduplicated declarations in this response. |
| total_area_rows | Yes | Total matching designated-area rows from the API (raw row count, not declaration count). DisasterDeclarationsSummaries returns one row per designated area per disaster, so this is always ≥ the number of unique declarations. When total_area_rows exceeds 10 000, results are truncated to the most recent 10 000 rows — apply tighter filters to stay within this window. |
| total_declarations | Yes | Total unique disaster declarations matching the query, before offset/limit paging — the bound for declaration-level pagination (limit/offset apply to declarations, not area rows). A floor rather than the exact total when total_area_rows hits the 10,000-row overfetch cap. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description explains that results are deduplicated (one disaster number) and include a designatedAreaCount field, and that the disaster number serves as a chain key for other tools. This adds valuable behavioral context without contradicting 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 concise (three sentences), front-loaded with the core purpose, and efficiently packs essential information including deduplication behavior, key field explanation, filter usage, and cross-reference to other tools.
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, output schema present, multiple sibling tools), the description fully covers what the tool does, its unique deduplication, the relationship to other tools, and filter semantics. The presence of an output schema obviates the need to describe return fields.
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 100% schema coverage, the description adds marginal value by explaining the date filter semantics (applies to declaration date) and the declaration_type enum values. This justifies a score above the baseline of 3.
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 that the tool searches federal disaster declarations with specific filters (state, incident type, declaration type, date range, county) and returns deduplicated declaration-level summaries. This distinguishes it from sibling tools like fema_get_disaster which retrieves all rows for a specific declaration.
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 usage guidance: explains declaration_type values (DR, EM, FM) with their meanings, notes that date filters apply to declaration date, and directs users to use fema_get_disaster for detailed area-level data. While it doesn't explicitly state when not to use, it effectively directs to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema_search_nfipSearch NFIP Flood Insurance ClaimsARead-onlyInspect
Search National Flood Insurance Program (NFIP) claims data by state, county, ZIP code, and year range. Returns claim counts, amounts paid on building and contents, flood zones, and loss years. state is required — the full NFIP dataset is 2.7 million rows; unfiltered access is prohibited. When DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) and results exceed the inline preview, the full result set is staged on a canvas for SQL aggregation via fema_dataframe_query. Use fema_dataframe_describe to inspect the staged table schema before writing SQL. Without canvas, results are returned inline up to the limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum claim rows to return in the inline preview (1–10000, default 1000). When DataCanvas is enabled, the canvas stages the full matching result set regardless of this value. | |
| state | Yes | Two-letter US state code (required). NFIP dataset is 2.7M rows — state filter is mandatory. | |
| year_to | No | End year of loss, inclusive (e.g., 2023). | |
| zip_code | No | ZIP code to narrow results to a specific area (5-digit, e.g., 77002). | |
| canvas_id | No | Optional canvas ID from a prior call. Omit to create a fresh canvas. The response returns the canvas_id to pass to fema_dataframe_query. | |
| year_from | No | Start year of loss, inclusive (e.g., 2020). | |
| county_code | No | County code to narrow results within the state. Accepts the full 5-digit state+county FIPS (e.g., 48201 for Harris County TX) or the 3-digit county portion (e.g., 201) when state is provided — the server prepends the state FIPS automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| claims | Yes | Inline preview of claim records (first N rows). Full dataset available via canvas_id when spilled=true. |
| notice | No | Guidance on canvas usage or result scope. |
| spilled | Yes | True when the full result set was staged on DataCanvas; use canvas_id + fema_dataframe_query for SQL analysis. False when all results fit inline. |
| canvas_id | No | Canvas ID for the staged full result set. Pass to fema_dataframe_query and fema_dataframe_describe. Present only when spilled=true. |
| truncated | No | True when the canvas row cap (50,000) was reached before the full matching set was staged — the canvas holds a partial result. Apply tighter filters (county_code, zip_code, year range) to stage the complete set. |
| total_count | Yes | Total matching claims in the filtered dataset before the limit. |
| canvas_table | No | DuckDB table name on the canvas holding all fetched rows. Reference in SQL FROM clauses. Present when spilled=true. |
| returned_count | Yes | Number of claim records in the inline preview. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ReadOnlyHint and openWorldHint annotations are consistent with the description's read-only query behavior. The description details that results are either inline up to a limit or staged on a canvas, and that unfiltered access is blocked. No contradictions, but lacks mention of rate limits or cost implications.
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 yet informative, front-loading the core purpose and mandatory filter. Each sentence serves a purpose (purpose, constraint, canvas behavior). Could potentially be slightly shorter, but no 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?
Given the tool's complexity (7 parameters, canvas integration, output schema), the description covers mandatory filters, return fields, and post-search workflow. It doesn't detail output schema because that's handled separately. Adequate for guiding correct invocation.
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%, but the description adds context beyond the schema, e.g., explaining that limit affects inline preview but not canvas staging, and clarifying county_code's flexible format. This aids agent understanding of parameter interactions.
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 searches NFIP flood insurance claims data, specifying searchable dimensions (state, county, ZIP, year range) and return fields (claim counts, amounts paid, flood zones, loss years). This distinguishes it from siblings like fema_search_disasters by focusing on claims data rather than disaster declarations.
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 mandates a state filter due to dataset size and prohibits unfiltered access. It explains canvas workflow, directing users to fema_dataframe_describe and fema_dataframe_query for further analysis. However, it doesn't contrast with other search tools like fema_query_dataset for when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- Alicense-qualityCmaintenanceEnables querying US FEMA open data through natural language, as part of the Pipeworx MCP gateway.3MIT
- Flicense-qualityCmaintenanceMCP server that queries FEMA's National Flood Hazard Layer (NFHL) for flood zone information, including flood zone codes, Base Flood Elevation, FIRM panel numbers, and identifies LOMRs/LOMAs from provided coordinates, enabling automated flood risk lookups.
- Flicense-qualityCmaintenanceRemote MCP server exposing US Census (ACS 5-year) and FEMA flood data. Works as a connector in both Claude and ChatGPT.
- Alicense-qualityBmaintenanceAssesses natural hazard exposure (flood, wildfire, earthquake, coastal proximity) for a single US property address using only free, keyless public data.MIT
Your Connectors
Sign in to create a connector for this server.