Skip to main content
Glama

Get FEMA Housing Assistance Data

fema_get_housing_assistance
Read-only

Retrieve Individual Assistance (IA) housing data for a disaster by disaster number. Returns owner and/or renter records aggregated by county, city, and ZIP code — valid registrations, total approved IHP amounts, repair/rental/other-needs amounts, and inspection counts (owners also carry inspected damage in USD). Narrow with state, county, or zip_code; owners_count, renters_count, and offset then count the filtered records. Use type to select owners, renters, or both (default). A page holds at most 100,000 characters of records, owners and renters cut at the same row count so one offset continues both; when records remain past it, next_offset is the offset to continue from. Use disaster_number from fema_search_disasters.

Input Schema

NameRequiredDescriptionDefault
typeNoWhich housing assistance dataset to query: owners, renters, or both (default).both
limitNoMaximum records per dataset to return (1–10000, default 100). A page also stops at 100,000 characters of owner and renter records together, cutting both datasets at the same row count; when either bound leaves matching records out, next_offset names the offset to continue from.
stateNoTwo-letter state code to narrow results when a disaster spans multiple states.
countyNoFilter by county name (e.g., Harris, dekalb). Case-insensitive substring match: harris also matches Harrison. OpenFEMA stores the county with its type, such as Harris (County) or Evangeline (Parish), and as the applicant reported it.
offsetNoPagination offset into each queried dataset (default 0). Pass the previous page’s next_offset to continue both.
zip_codeNoFilter by 5-digit ZIP code, as a string with leading zeros kept (e.g., 77084, 00609). ZIP+4 is not accepted. One ZIP can return several records, one per county and city spelling.
disaster_numberYesFEMA disaster number. Obtain from fema_search_disasters. Numbers above 32767 match no declaration.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoZero-match guidance for supplied filters and declared programs, or paging guidance: the continuation offset and whether limit or the response budget ended the page, and each queried nonzero dataset’s total and last valid offset when past its end.
ownersNoHomeowner (HousingAssistanceOwners) records. Empty when type is "renters" or no owner data exists.
rentersNoRenter (HousingAssistanceRenters) records. Empty when type is "owners" or no renter data exists.
totalCountNoTotal owner + renter records available before the per-dataset limit — exceeds the returned count when either dataset was capped.
next_offsetNoOffset of the next page, for both datasets: offset plus the larger of the owner and renter record counts returned. Present only while records remain in a queried dataset; pass it as offset to continue.
owners_countNoTotal owner records matching the disaster and any state, county, or zip_code filter, before the per-dataset limit.
county_filterNoThe county name both datasets were filtered by, trimmed, matched as a case-insensitive substring. Absent when county was not set.
renters_countNoTotal renter records matching the disaster and any state, county, or zip_code filter, before the per-dataset limit.
zip_code_filterNoThe 5-digit ZIP code both datasets were filtered by. Absent when zip_code was not set.

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. `not_found`: The disaster number is above 32767, the highest number OpenFEMA holds, so no declaration exists. `no_results`: No IA housing records found for this disaster and any state, county, or zip_code filter. `request_too_long`: The 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. `not_found`: The disaster number is above 32767, the highest number OpenFEMA holds, so no declaration exists. `request_too_long`: The 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",
      -  "not_found",
      -  "no_results",
      -  "request_too_long"
      -]New value: +[
      +  "invalid_state",
      +  "not_found",
      +  "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, and, for a queried dataset whose end the offset is at or past, its total and last valid offset."New value: +"Zero-match guidance for supplied filters and declared programs, or paging guidance: the continuation offset and whether limit or the response budget ended the page, and each queried nonzero dataset’s total and last valid offset when past its end."
  2. Changed24 schema fields changed
    • addedInput schema / properties / county
      Added value: +{
      +  "description": "Filter by county name (e.g., Harris, dekalb). Case-insensitive substring match: harris also matches Harrison. OpenFEMA stores the county with its type, such as Harris (County) or Evangeline (Parish), and as the applicant reported it.",
      +  "type": "string"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum records per dataset to return (default 100)."New value: +"Maximum records per dataset to return (1–10000, default 100). A page also stops at 100,000 characters of owner and renter records together, cutting both datasets at the same row count; when either bound leaves matching records out, next_offset names the offset to continue from."
    • changedInput schema / properties / limit / maximum
      Previous value: -1000New value: +10000
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset (default 0)."New value: +"Pagination offset into each queried dataset (default 0). Pass the previous page’s next_offset to continue both."
    • addedInput schema / properties / zip_code
      Added value: +{
      +  "anyOf": [
      +    {
      +      "const": "",
      +      "type": "string"
      +    },
      +    {
      +      "description": "5-digit ZIP code.",
      +      "pattern": "^\\d{5}$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Filter by 5-digit ZIP code, as a string with leading zeros kept (e.g., 77084, 00609). ZIP+4 is not accepted. One ZIP can return several records, one per county and city spelling."
      +}
    • addedOutput schema / properties / county_filter
      Added value: +{
      +  "description": "The county name both datasets were filtered by, trimmed, matched as a case-insensitive substring. Absent when county was not set.",
      +  "type": "string"
      +}
    • 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. `not_found`: The disaster number is above 32767, the highest number OpenFEMA holds, so no declaration exists. `no_results`: No IA housing records found for this disaster. 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. `not_found`: The disaster number is above 32767, the highest number OpenFEMA holds, so no declaration exists. `no_results`: No IA housing records found for this disaster and any state, county, or zip_code filter. `request_too_long`: The 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",
      -  "not_found",
      -  "no_results"
      -]New value: +[
      +  "invalid_state",
      +  "not_found",
      +  "no_results",
      +  "request_too_long"
      +]
    • addedOutput schema / properties / next_offset
      Added value: +{
      +  "description": "Offset of the next page, for both datasets: offset plus the larger of the owner and renter record counts returned. Present only while records remain in a queried dataset; 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 a queried dataset — names its total and last valid offset."New value: +"Paging guidance: the offset to continue from and whether limit or the response budget ended the page, and, for a queried dataset whose end the offset is at or past, its total and last valid offset."
    • addedOutput schema / properties / owners / items / properties / average_fema_inspected_damage
      Added value: +{
      +  "description": "Average damage in USD, under FEMA's inspection guidelines, of the homeowners with a completed inspection; 0 when no damage was recorded or no one was inspected (see total_inspected). Measured separately from total_damage, so it is not total_damage divided by a count. Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / owners / items / properties / no_fema_inspected_damage
      Added value: +{
      +  "description": "Number of inspected homeowner applicants whose inspector recorded no damage; 0 when there were none. Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / owners / items / properties / total_damage
      Added value: +{
      +  "description": "Total damage in USD recorded at the latest inspections: FEMA Verified Loss for real property (the home) and personal property, excluding transportation; 0 when none was recorded or no one was inspected (see total_inspected). Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / owners / items / properties / total_inspected
      Added value: +{
      +  "description": "Number of homeowner applicants who received a FEMA inspection. 0 means no one in this area was inspected, so a 0 in average_fema_inspected_damage or total_damage then means not inspected, not $0 of damage. Absent when not reported.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / owners_count / description
      Previous value: -"Total owner records available before the per-dataset limit."New value: +"Total owner records matching the disaster and any state, county, or zip_code filter, before the per-dataset limit."
    • changedOutput schema / properties / renters / items / description
      Previous value: -"Renter housing assistance aggregated by county and ZIP for one disaster."New value: +"Renter housing assistance aggregated by county and ZIP for one disaster. Renter records carry no dollar damage figures."
    • addedOutput schema / properties / renters / items / properties / repair_replace_amount
      Added value: +{
      +  "description": "Home repair and replacement assistance in USD as OpenFEMA records it for renters; 0 when none was approved, as in nearly every renter area, since FEMA's data dictionary notes renters are not eligible for it. Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / renters / items / properties / total_inspected
      Added value: +{
      +  "description": "Number of renter applicants who received a FEMA inspection; 0 when none did. Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / renters / items / properties / total_inspected_with_no_damage
      Added value: +{
      +  "description": "Number of valid renter registrations assigned no damage. Renters get a damage degree rather than a full home inspection, so this and the other degree counts count registrations and can exceed total_inspected; 0 when there were none. Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / renters / items / properties / total_with_major_damage
      Added value: +{
      +  "description": "Number of valid renter registrations assigned a major degree of damage, counted like total_inspected_with_no_damage; 0 when there were none. Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / renters / items / properties / total_with_moderate_damage
      Added value: +{
      +  "description": "Number of valid renter registrations assigned a moderate degree of damage, counted like total_inspected_with_no_damage; 0 when there were none. Absent when not reported.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / renters / items / properties / total_with_substantial_damage
      Added value: +{
      +  "description": "Number of valid renter registrations assigned a substantial degree of damage, counted like total_inspected_with_no_damage; 0 when there were none. Absent when not reported.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / renters_count / description
      Previous value: -"Total renter records available before the per-dataset limit."New value: +"Total renter records matching the disaster and any state, county, or zip_code filter, before the per-dataset limit."
    • addedOutput schema / properties / zip_code_filter
      Added value: +{
      +  "description": "The 5-digit ZIP code both datasets were filtered by. Absent when zip_code was not set.",
      +  "type": "string"
      +}
  3. Changed13 schema fields changed
    • changedOutput schema / properties / owners / items / properties / approved_for_fema_assistance / description
      Previous value: -"Number of homeowner registrations approved for any FEMA assistance. Absent when zero or not reported."New value: +"Number of homeowner registrations approved for any FEMA assistance; 0 when none were. Absent when not reported."
    • changedOutput schema / properties / owners / items / properties / other_needs_amount / description
      Previous value: -"Other needs assistance (personal property, transportation, etc.) in USD. Absent when zero or not reported."New value: +"Other needs assistance (personal property, transportation, etc.) in USD; 0 when none was approved. Absent when not reported."
    • changedOutput schema / properties / owners / items / properties / rental_amount / description
      Previous value: -"Rental assistance granted in USD. Absent when zero or not reported."New value: +"Rental assistance granted in USD; 0 when none was. Absent when not reported."
    • changedOutput schema / properties / owners / items / properties / repair_replace_amount / description
      Previous value: -"Home repair and replacement assistance in USD. Absent when zero or not reported."New value: +"Home repair and replacement assistance in USD; 0 when none was approved. Absent when not reported."
    • changedOutput schema / properties / owners / items / properties / total_approved_ihp_amount / description
      Previous value: -"Total Individuals and Households Program (IHP) assistance approved in USD. Absent when zero or not reported."New value: +"Total Individuals and Households Program (IHP) assistance approved in USD; 0 when none was. Absent when not reported."
    • changedOutput schema / properties / owners / items / properties / valid_registrations / description
      Previous value: -"Number of valid IA registrations from homeowners in this area. Absent when zero or not reported."New value: +"Number of valid IA registrations from homeowners in this area. Absent when not reported."
    • changedOutput schema / properties / owners / items / properties / zip_code / description
      Previous value: -"5-digit ZIP code. Absent when not recorded."New value: +"5-digit ZIP code; 00000 when OpenFEMA files the records under no ZIP code. Absent when not recorded."
    • changedOutput schema / properties / renters / items / properties / approved_for_fema_assistance / description
      Previous value: -"Number of renter registrations approved for any FEMA assistance. Absent when zero or not reported."New value: +"Number of renter registrations approved for any FEMA assistance; 0 when none were. Absent when not reported."
    • changedOutput schema / properties / renters / items / properties / other_needs_amount / description
      Previous value: -"Other needs assistance in USD. Absent when zero or not reported."New value: +"Other needs assistance in USD; 0 when none was approved. Absent when not reported."
    • changedOutput schema / properties / renters / items / properties / rental_amount / description
      Previous value: -"Rental assistance granted in USD. Absent when zero or not reported."New value: +"Rental assistance granted in USD; 0 when none was. Absent when not reported."
    • changedOutput schema / properties / renters / items / properties / total_approved_ihp_amount / description
      Previous value: -"Total IHP assistance approved for renters in USD. Absent when zero or not reported."New value: +"Total IHP assistance approved for renters in USD; 0 when none was. Absent when not reported."
    • changedOutput schema / properties / renters / items / properties / valid_registrations / description
      Previous value: -"Number of valid IA registrations from renters in this area. Absent when zero or not reported."New value: +"Number of valid IA registrations from renters in this area. Absent when not reported."
    • changedOutput schema / properties / renters / items / properties / zip_code / description
      Previous value: -"5-digit ZIP code. Absent when not recorded."New value: +"5-digit ZIP code; 00000 when OpenFEMA files the records under no ZIP code. Absent when not recorded."
  4. Changed4 schema fields changed
    • changedInput schema / properties / disaster_number / description
      Previous value: -"FEMA disaster number. Obtain from fema_search_disasters."New value: +"FEMA disaster number. Obtain from fema_search_disasters. Numbers above 32767 match no declaration."
    • 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`: No IA housing records found for this disaster. 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. `not_found`: The disaster number is above 32767, the highest number OpenFEMA holds, so no declaration exists. `no_results`: No IA housing records found for this disaster. 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",
      +  "not_found",
      +  "no_results"
      +]
    • 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 a queried dataset — names its total and 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": [
      +      "owners",
      +      "renters",
      +      "owners_count",
      +      "renters_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`: No IA housing records found for this disaster. 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: -[
      -  "owners",
      -  "renters",
      -  "owners_count",
      -  "renters_count"
      -]
  6. Changed1 schema field changed
    • addedOutput schema / properties / totalCount
      Added value: +{
      +  "description": "Total owner + renter records available before the per-dataset limit — exceeds the returned count when either dataset was capped.",
      +  "type": "number"
      +}
  7. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context beyond them: the 100,000-character page cap, owners and renters being cut at the same row count so a single offset continues both, and next_offset as the continuation value. Auth, rate limits, and error behavior are unaddressed, keeping this at a 4 rather than a 5.

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, then filters, then pagination, so the important material comes first and every sentence carries information. It is still dense — several clauses are packed into single sentences — which costs it the top mark but not readability.

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?

Despite an output schema existing, the description covers what an agent needs: the dataset identity, the filter set, the owners/renters/both selection, pagination continuation, and the upstream dependency on fema_search_disasters. Nothing required 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema documents only per-field — namely that offset continues both datasets and that owners_count/renters_count reflect the filtered set. That interaction between type, limit, offset, and next_offset is genuine added meaning.

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 (Retrieve) and resource (Individual Assistance housing data for a disaster by disaster number), then enumerates the returned measures (registrations, IHP amounts, inspection counts). It is clearly distinguishable from siblings like fema_get_public_assistance or fema_get_disaster by naming the IA housing dataset explicitly.

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

Usage Guidelines4/5

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

Gives concrete narrowing guidance (state, county, zip_code) and routes the agent to fema_search_disasters for the required disaster_number. It does not explicitly say when to prefer a sibling such as fema_query_dataset or fema_get_public_assistance, so the alternative-selection story is implied rather than stated.

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.