Skip to main content
Glama

LIHTC Atlas: income limits, QCT/DDA and LIHTC properties

LIHTC income and rent limits

get_income_limits
Read-onlyIdempotent

HUD FY2026 MTSP income limits for a county (town in New England): every level from 20% to 80% of area median for 1 to 8 persons, HERA Special limits where HUD lists them, the area median family income, and the maximum gross rent by bedroom count at each level (IRS Pub. 5913 method). Give state + county, or fips.

Input Schema

NameRequiredDescriptionDefault
fipsNo5-digit county FIPS (48201) or HUD's 10-digit area code (county + county subdivision, e.g. 2502507000 for Boston)
stateNoTwo-letter state or territory code (CA, DC, PR) or name
countyNoCounty name, e.g. "Harris County" or "Harris"; in New England, a town ("Boston"). Use fips when a name is ambiguous.
ami_levelNoOnly this level (percent of AMI)
household_sizeNoOnly this household size

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), so the description's job is data provenance — and it delivers: HUD FY2026 vintage, MTSP dataset, HERA Special "where HUD lists them," and the IRS Pub. 5913 rent-derivation method. It only lacks failure behavior (e.g., what happens on ambiguous or non-covered counties).

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?

Two sentences, front-loaded with the data vintage and scope, and the location-input instruction is separated out where it is easy to find. The first sentence is a dense enumeration but every clause names a distinct returned dataset, so nothing is padding.

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?

With no output schema, the description carries the return-value burden and does so completely: levels, household sizes, HERA variants, AMI, and rent by bedroom. An agent knows exactly what it gets back and whether to supply names or a FIPS code.

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 still adds value by framing the defaults — the full 20-80% range across 1-8 persons is returned unless narrowed — which explains the optional ami_level and household_size filters. It also restates the state+county-or-fips input pattern that the schema documents separately per field.

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 (HUD FY2026 MTSP income limits for a county/town) and then enumerates the exact contents: 20%-80% AMI levels, 1-8 persons, HERA Special, AMI, and max gross rent by bedroom. That enumeration distinguishes it from calculate_max_rent and get_applicable_percentages, which compute rather than retrieve.

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

Usage Guidelines3/5

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

"Give state + county, or fips" covers how to supply location, but there is no explicit when-to-use guidance and no routing away from overlapping siblings such as calculate_max_rent or get_applicable_percentages. Usage is inferable from the payload list 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.

Resources