Skip to main content
Glama

Search FEMA Disaster Declarations

fema_search_disasters
Read-only

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 designated_area_count 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. county selects the declarations that designated a matching area; their area counts and program flags still describe the whole declaration, and matched_areas lists the matching areas with their own program flags. A search reads the most recent 10,000 designated-area rows; when more match, it returns the declarations dated after the day that window ends, sets truncated, and its notice names the date_to that continues with older declarations. A page holds at most 100,000 characters of declarations; when declarations remain past it, next_offset is the offset to continue from.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum number of unique disaster declarations to return (1–1000, default 50). A page also stops at 100,000 characters of declarations (roughly 290 declarations, about 190 with county); when either bound leaves matching declarations out, next_offset names the offset to continue from.
stateNoTwo-letter US state/territory code (e.g., TX, CA, FL, PR). Filters by state.
countyNoFilter by designated area / county name (e.g., Harris, Los Angeles, dekalb). Case-insensitive substring match: harris also matches Harrison. Selects the declarations that designated a matching area; designated_area_count and the program flags still describe the whole declaration, and matched_areas lists the matching areas.
offsetNoPagination offset in declarations (default 0). Pass the previous page’s next_offset to continue.
date_toNoEnd of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-12-31). Inclusive; equal to date_from for a single day.
date_fromNoStart of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-01-01). Inclusive; not after date_to.
incident_typeNoIncident type filter (e.g., Flood, Hurricane, Tornado, Fire, Earthquake, Severe Storm). Case-insensitive substring match: storm also matches Snowstorm and Winter Storm.
declaration_typeNoDeclaration type: DR (major disaster declaration), EM (emergency declaration), FM (fire management assistance declaration).

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoZero-match guidance for supplied filters; paging guidance with continuation or the last valid offset for nonzero totals; when truncated is true, lower-bound totals and the date_to (YYYY-MM-DD) to search next; when area_totals_unavailable is true, why full area totals could not be read.
truncatedNoTrue when more than 10,000 designated-area rows match: the search covers only the declarations dated after the day its 10,000-row window ends. Each returned declaration is complete, the totals are lower bounds, and the notice names the date_to that continues with older declarations. Absent otherwise.
totalCountNoUnique disaster declarations matching the query — the unit declaration-level pagination pages over. Exceeds returned_count when the matches span more than one page. A lower bound when truncated is true.
next_offsetNoOffset of the next page: offset plus returned_count. Present only while matching declarations remain past this page — when truncated is true, only within the declarations dated after the day the window ends. Pass it as offset to continue.
declarationsNoDisaster declarations matching the search from offset onward, one entry per unique disaster number, bounded by limit and by 100,000 characters of declarations.
returned_countNoNumber of unique deduplicated declarations in this response.
total_area_rowsNoTotal matching designated-area rows from the API (raw row count, not declaration count) — with county set, the rows of the matching areas only. DisasterDeclarationsSummaries returns one row per designated area per disaster, so this is always ≥ the number of unique declarations. When it exceeds 10,000, the search reads the most recent 10,000 rows and drops the declarations dated on the oldest day among them, so every returned declaration is complete; the notice names the date_to that continues with older declarations.
total_declarationsNoUnique disaster declarations matching the query, before offset/limit paging — the bound for declaration-level pagination (limit/offset apply to declarations, not area rows). A lower bound when truncated is true: it counts only the declarations dated after the day the 10,000-row window ends.
area_totals_unavailableNoTrue when county is set and reading the returned declarations’ full designated-area rows failed: designated_area_count and the ia/pa/hm flags then count only the areas county matched, and the notice names the cause. Absent otherwise.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_state`: The state parameter is not a valid 2-letter US state/territory code. `invalid_range`: date_from is later than date_to, so no declaration could match. `no_results`: Query returned zero disaster declarations. `request_too_long`: The incident_type or county value makes the request URL longer than the roughly 8,900 characters OpenFEMA accepts. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_state`: The state parameter is not a valid 2-letter US state/territory code. `invalid_range`: date_from is later than date_to, so no declaration could match. `request_too_long`: The incident_type or county value makes the request URL longer than the roughly 8,900 characters OpenFEMA accepts. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_state",
      -  "invalid_range",
      -  "no_results",
      -  "request_too_long"
      -]New value: +[
      +  "invalid_state",
      +  "invalid_range",
      +  "request_too_long"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Paging guidance: the offset to continue from and whether limit or the response budget ended the page; when offset is at or past the end of the matching declarations, the total and the last valid offset; when truncated is true, that the totals are lower bounds and the date_to (YYYY-MM-DD) to search next for older declarations; when area_totals_unavailable is true, why the area totals could not be read."New value: +"Zero-match guidance for supplied filters; paging guidance with continuation or the last valid offset for nonzero totals; when truncated is true, lower-bound totals and the date_to (YYYY-MM-DD) to search next; when area_totals_unavailable is true, why full area totals could not be read."
  2. Changed18 schema fields changed
    • changedInput schema / properties / county / description
      Previous value: -"Filter by designated area / county name substring (e.g., Harris, Los Angeles). Case-insensitive."New value: +"Filter by designated area / county name (e.g., Harris, Los Angeles, dekalb). Case-insensitive substring match: harris also matches Harrison. Selects the declarations that designated a matching area; designated_area_count and the program flags still describe the whole declaration, and matched_areas lists the matching areas."
    • changedInput schema / properties / date_from / description
      Previous value: -"Start of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-01-01). Inclusive."New value: +"Start of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-01-01). Inclusive; not after date_to."
    • changedInput schema / properties / date_to / description
      Previous value: -"End of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-12-31). Inclusive."New value: +"End of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-12-31). Inclusive; equal to date_from for a single day."
    • changedInput schema / properties / incident_type / description
      Previous value: -"Incident type filter (e.g., Flood, Hurricane, Tornado, Fire, Earthquake, Severe Storm). Case-insensitive substring match."New value: +"Incident type filter (e.g., Flood, Hurricane, Tornado, Fire, Earthquake, Severe Storm). Case-insensitive substring match: storm also matches Snowstorm and Winter Storm."
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of unique disaster declarations to return (1–1000, default 50)."New value: +"Maximum number of unique disaster declarations to return (1–1000, default 50). A page also stops at 100,000 characters of declarations (roughly 290 declarations, about 190 with county); when either bound leaves matching declarations out, next_offset names the offset to continue from."
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset in declarations (default 0). Use with limit to page through results."New value: +"Pagination offset in declarations (default 0). Pass the previous page’s next_offset to continue."
    • addedOutput schema / properties / area_totals_unavailable
      Added value: +{
      +  "description": "True when county is set and reading the returned declarations’ full designated-area rows failed: designated_area_count and the ia/pa/hm flags then count only the areas county matched, and the notice names the cause. Absent otherwise.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / declarations / description
      Previous value: -"Disaster declarations matching the search, one entry per unique disaster number."New value: +"Disaster declarations matching the search from offset onward, one entry per unique disaster number, bounded by limit and by 100,000 characters of declarations."
    • changedOutput schema / properties / declarations / items / properties / designated_area_count / description
      Previous value: -"Number of counties/municipalities designated — use fema_get_disaster for the full area list."New value: +"Number of counties/municipalities the whole declaration designated, also when county is set — use fema_get_disaster for the full area list."
    • changedOutput schema / properties / declarations / items / properties / hm_declared / description
      Previous value: -"True when Hazard Mitigation grants were declared."New value: +"True when Hazard Mitigation grants were declared for any area of the declaration, also when county is set."
    • changedOutput schema / properties / declarations / items / properties / ia_declared / description
      Previous value: -"True when the Individuals and Households Program (IHP) was declared — indicates IA housing/personal grants are available."New value: +"True when the Individuals and Households Program (IHP) was declared for any area of the declaration — indicates IA housing/personal grants are available. Describes the whole declaration also when county is set; matched_areas carries each matched area’s own flag."
    • addedOutput schema / properties / declarations / items / properties / matched_areas
      Added value: +{
      +  "description": "The designated areas of this declaration that county matched, each with the programs declared for that area — which can differ from the declaration: an area designated for PA and HM only has ia_declared false. Present only when county is set.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One designated area that county matched, with its own program flags.",
      +    "properties": {
      +      "area": {
      +        "description": "Name of the designated area, as stored (e.g., \"Bexar (County)\").",
      +        "type": "string"
      +      },
      +      "fips_county_code": {
      +        "description": "3-digit county FIPS code. Absent when not recorded.",
      +        "type": "string"
      +      },
      +      "fips_state_code": {
      +        "description": "2-digit state FIPS code. Absent when not recorded.",
      +        "type": "string"
      +      },
      +      "hm_declared": {
      +        "description": "True when Hazard Mitigation was declared for this area.",
      +        "type": "boolean"
      +      },
      +      "ia_declared": {
      +        "description": "True when IHP was declared for this area.",
      +        "type": "boolean"
      +      },
      +      "pa_declared": {
      +        "description": "True when Public Assistance was declared for this area.",
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "area",
      +      "ia_declared",
      +      "pa_declared",
      +      "hm_declared"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / declarations / items / properties / pa_declared / description
      Previous value: -"True when Public Assistance (infrastructure recovery grants) was declared."New value: +"True when Public Assistance (infrastructure recovery grants) was declared for any area of the declaration, also when county is set."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_state`: The state parameter is not a valid 2-letter US state/territory code. `no_results`: Query returned zero disaster declarations. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_state`: The state parameter is not a valid 2-letter US state/territory code. `invalid_range`: date_from is later than date_to, so no declaration could match. `no_results`: Query returned zero disaster declarations. `request_too_long`: The incident_type or county value makes the request URL longer than the roughly 8,900 characters OpenFEMA accepts. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_state",
      -  "no_results"
      -]New value: +[
      +  "invalid_state",
      +  "invalid_range",
      +  "no_results",
      +  "request_too_long"
      +]
    • addedOutput schema / properties / next_offset
      Added value: +{
      +  "description": "Offset of the next page: offset plus returned_count. Present only while matching declarations remain past this page — when truncated is true, only within the declarations dated after the day the window ends. Pass it as offset to continue.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Paging guidance: when offset is at or past the end of the matching declarations, the total and the last valid offset; when truncated is true, that the totals are lower bounds and the date_to (YYYY-MM-DD) to search next for older declarations."New value: +"Paging guidance: the offset to continue from and whether limit or the response budget ended the page; when offset is at or past the end of the matching declarations, the total and the last valid offset; when truncated is true, that the totals are lower bounds and the date_to (YYYY-MM-DD) to search next for older declarations; when area_totals_unavailable is true, why the area totals could not be read."
    • changedOutput schema / properties / total_area_rows / description
      Previous value: -"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 it exceeds 10,000, the search reads the most recent 10,000 rows and drops the declarations dated on the oldest day among them, so every returned declaration is complete; the notice names the date_to that continues with older declarations."New value: +"Total matching designated-area rows from the API (raw row count, not declaration count) — with county set, the rows of the matching areas only. DisasterDeclarationsSummaries returns one row per designated area per disaster, so this is always ≥ the number of unique declarations. When it exceeds 10,000, the search reads the most recent 10,000 rows and drops the declarations dated on the oldest day among them, so every returned declaration is complete; the notice names the date_to that continues with older declarations."
  3. Changed5 schema fields changed
    • changedOutput schema / properties / notice / description
      Previous value: -"Paging guidance when offset is at or past the end of the matching declarations — names the total and the last valid offset."New value: +"Paging guidance: when offset is at or past the end of the matching declarations, the total and the last valid offset; when truncated is true, that the totals are lower bounds and the date_to (YYYY-MM-DD) to search next for older declarations."
    • changedOutput schema / properties / totalCount / description
      Previous value: -"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."New value: +"Unique disaster declarations matching the query — the unit declaration-level pagination pages over. Exceeds returned_count when the matches span more than one page. A lower bound when truncated is true."
    • changedOutput schema / properties / total_area_rows / description
      Previous value: -"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."New value: +"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 it exceeds 10,000, the search reads the most recent 10,000 rows and drops the declarations dated on the oldest day among them, so every returned declaration is complete; the notice names the date_to that continues with older declarations."
    • changedOutput schema / properties / total_declarations / description
      Previous value: -"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."New value: +"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 lower bound when truncated is true: it counts only the declarations dated after the day the 10,000-row window ends."
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when more than 10,000 designated-area rows match: the search covers only the declarations dated after the day its 10,000-row window ends. Each returned declaration is complete, the totals are lower bounds, and the notice names the date_to that continues with older declarations. Absent otherwise.",
      +  "type": "boolean"
      +}
  4. Changed7 schema fields changed
    • addedInput schema / properties / date_from / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "Calendar date, YYYY-MM-DD.",
      +    "format": "date",
      +    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / date_from / description
      Previous value: -"Start of declaration date range in ISO 8601 format (e.g., 2024-01-01). Inclusive."New value: +"Start of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-01-01). Inclusive."
    • removedInput schema / properties / date_from / type
      Removed value: -"string"
    • addedInput schema / properties / date_to / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "Calendar date, YYYY-MM-DD.",
      +    "format": "date",
      +    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / date_to / description
      Previous value: -"End of declaration date range in ISO 8601 format (e.g., 2024-12-31). Inclusive."New value: +"End of the declaration date range as a calendar date in YYYY-MM-DD format (e.g., 2024-12-31). Inclusive."
    • removedInput schema / properties / date_to / type
      Removed value: -"string"
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no results were found."New value: +"Paging guidance when offset is at or past the end of the matching declarations — names the total and the last valid offset."
  5. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "declarations",
      +      "total_declarations",
      +      "total_area_rows",
      +      "returned_count"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_state`: The state parameter is not a valid 2-letter US state/territory code. `no_results`: Query returned zero disaster declarations. Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "invalid_state",
      +            "no_results"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "declarations",
      -  "total_declarations",
      -  "total_area_rows",
      -  "returned_count"
      -]
  6. Changed3 schema fields changed
    • changedOutput schema / properties / totalCount / description
      Previous value: -"Total matching designated-area rows from the API — exceeds the returned declaration count when results were capped at the overfetch limit."New value: +"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."
    • addedOutput schema / properties / total_declarations
      Added value: +{
      +  "description": "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.",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "declarations",
      -  "total_area_rows",
      -  "returned_count"
      -]New value: +[
      +  "declarations",
      +  "total_declarations",
      +  "total_area_rows",
      +  "returned_count"
      +]
  7. Changed1 schema field changed
    • addedOutput schema / properties / totalCount
      Added value: +{
      +  "description": "Total matching designated-area rows from the API — exceeds the returned declaration count when results were capped at the overfetch limit.",
      +  "type": "number"
      +}
  8. Changed4 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of declarations to return (1–1000, default 50)."New value: +"Maximum number of unique disaster declarations to return (1–1000, default 50)."
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset (default 0). Use with limit for paging through results."New value: +"Pagination offset in declarations (default 0). Use with limit to page through results."
    • changedOutput schema / properties / declarations / items / properties / ia_declared / description
      Previous value: -"True when Individual Assistance (housing/personal grants) was declared."New value: +"True when the Individuals and Households Program (IHP) was declared — indicates IA housing/personal grants are available."
    • changedOutput schema / properties / total_area_rows / description
      Previous value: -"Total matching designated-area rows from the API before pagination. DisasterDeclarationsSummaries returns one row per designated area per disaster — this count is higher than the number of unique declarations in `declarations`."New value: +"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."
  9. First observed

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnlyHint and openWorldHint, but the description adds substantial behavior: results are deduplicated to one row per disaster number with designated_area_count, the scan window caps at the most recent 10,000 designated-area rows and sets truncated when exceeded, and a page holds at most 100,000 characters of declarations with next_offset for continuation. This is exactly the kind of non-obvious truncation/pagination behavior an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sibling routing, and every clause carries operational information. The later sentences are long and dense, and the county/pagination details partly duplicate the schema text, so it is slightly over-explained rather than lean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return shape need not be documented, and the description still covers the tricky parts an agent would otherwise get wrong: deduplication semantics, chain-key relationships, the row-window truncation with the notice naming the continuing date_to, and the character-based page cap with next_offset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 real meaning by clarifying that date filters apply to the declaration date and that county matching is not the same as the declaration's full scope ('their area counts and program flags still describe the whole declaration, and matched_areas lists the matching areas'). It does repeat some county semantics already present in the schema, which keeps it from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search federal disaster declarations') plus the filterable dimensions, and distinguishes itself from siblings by naming fema_get_disaster, fema_get_public_assistance, and fema_get_housing_assistance and explaining the disaster number as the chain key. An agent can tell this is the discovery/listing tool versus the per-declaration detail tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes: 'Use fema_get_disaster to retrieve all designated-area rows for a specific declaration,' and explains when to use declaration_type (DR/EM/FM) and what county filtering does versus what the declaration-level counts mean. The condition selecting each alternative is stated rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.