Skip to main content
Glama

Housing Rental Analysis

housing_rental_analysis
Read-onlyIdempotent

Evaluate rental investment potential by address and zip code. Returns estimated rent, fair market rents, and CPI rent trends.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
_blsKeyNoBLS registration key (optional — raises the shared quota; https://data.bls.gov/registrationEngine/)
_hudKeyNoHUD API token (optional — needed for fair market rents)
address1YesStreet address (e.g., "4529 Winona Court")
address2YesCity, state ZIP (e.g., "Denver, CO 80212")
_attomKeyYesATTOM API key
state_codeYesTwo-letter state code for HUD FMR lookup (e.g., "CO")

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rent_cpi_trendNo
area_fair_market_rentNo
property_rent_estimateNo

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • addedInput schema / properties / _blsKey
      Added value: +{
      +  "description": "BLS registration key (optional — raises the shared quota; https://data.bls.gov/registrationEngine/)",
      +  "type": "string"
      +}
  2. Changed5 schema fields changed
    • changedOutput schema / properties / area_fair_market_rent / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "areas": {
      -        "items": {
      -          "properties": {
      -            "1br": {
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "2br": {
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "3br": {
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "4br": {
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            },
      -            "area_name": {
      -              "type": [
      -                "string",
      -                "null"
      -              ]
      -            },
      -            "efficiency": {
      -              "type": [
      -                "number",
      -                "null"
      -              ]
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "type": "string"
      -      },
      -      "total_areas": {
      -        "type": "number"
      -      },
      -      "year": {
      -        "type": [
      -          "number",
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "1br": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "2br": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "3br": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "4br": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      },
      -      "area_name": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "efficiency": {
      -        "type": [
      -          "number",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "error": {
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "areas": {
      +        "description": "List of metro/county FMR data (up to 10)",
      +        "items": {
      +          "properties": {
      +            "1br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "2br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "3br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "4br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "area_name": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "efficiency": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "State code",
      +        "type": "string"
      +      },
      +      "total_areas": {
      +        "description": "Total number of areas in the state",
      +        "type": "number"
      +      },
      +      "year": {
      +        "description": "FMR year",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "error": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • changedOutput schema / properties / property_rent_estimate / properties / annual_yield / description
      Previous value: -"Estimated annual yield (null if property value unavailable)"New value: +"Annual yield percentage (if available)"
    • changedOutput schema / properties / property_rent_estimate / properties / monthly / description
      Previous value: -"Estimated monthly rent"New value: +"Estimated monthly rent (USD)"
    • changedOutput schema / properties / rent_cpi_trend / oneOf
      Previous value: -[
      -  {
      -    "items": {
      -      "properties": {
      -        "date": {
      -          "type": "string"
      -        },
      -        "value": {
      -          "type": "number"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "properties": {
      -      "error": {
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "properties": {
      +        "date": {
      +          "description": "ISO date",
      +          "type": "string"
      +        },
      +        "value": {
      +          "description": "Rent CPI value",
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "properties": {
      +      "error": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  }
      +]
    • removedOutput schema / required
      Removed value: -[
      -  "property_rent_estimate",
      -  "area_fair_market_rent",
      -  "rent_cpi_trend"
      -]
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "area_fair_market_rent": {
      +      "oneOf": [
      +        {
      +          "properties": {
      +            "areas": {
      +              "items": {
      +                "properties": {
      +                  "1br": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "2br": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "3br": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "4br": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "area_name": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "efficiency": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "state": {
      +              "type": "string"
      +            },
      +            "total_areas": {
      +              "type": "number"
      +            },
      +            "year": {
      +              "type": [
      +                "number",
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "properties": {
      +            "1br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "2br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "3br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "4br": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "area_name": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "efficiency": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "properties": {
      +            "error": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "property_rent_estimate": {
      +      "properties": {
      +        "annual_yield": {
      +          "description": "Estimated annual yield (null if property value unavailable)",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "error": {
      +          "type": "string"
      +        },
      +        "monthly": {
      +          "description": "Estimated monthly rent",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "rent_cpi_trend": {
      +      "oneOf": [
      +        {
      +          "items": {
      +            "properties": {
      +              "date": {
      +                "type": "string"
      +              },
      +              "value": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "properties": {
      +            "error": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "property_rent_estimate",
      +    "area_fair_market_rent",
      +    "rent_cpi_trend"
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "_attomKey": "your-housing-intel-api-key",
      +    "address1": "4529 Winona Court",
      +    "address2": "Denver, CO 80212",
      +    "state_code": "CO"
      +  },
      +  {
      +    "_attomKey": "your-housing-intel-api-key",
      +    "_hudKey": "your-housing-intel-api-key",
      +    "address1": "1450 Peachtree Street",
      +    "address2": "Atlanta, GA 30309",
      +    "state_code": "GA"
      +  }
      +]
  5. First observed

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds output details but does not disclose additional behavioral traits such as dependence on third-party APIs (ATTOM/HUD/BLS) or rate limits. It does not contradict annotations, but it contributes only marginal behavioral context beyond the structured metadata.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose, and includes a concise list of outputs. There is no fluff or repetition of schema information. Every word earns its place, making it highly efficient and easy to parse.

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

Completeness4/5

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

Given the tool's complexity (6 parameters, multiple API keys, output schema present) and rich annotations, the description adequately covers the core purpose and outputs. It lacks explicit contextual differentiation from sibling tools and does not mention that outputs may vary based on optional keys, but the schema and annotations fill those gaps. Overall, it is sufficient for an agent to invoke correctly, though slightly under-specified in usage context.

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

Parameters3/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. The description's mention of 'address and zip code' slightly reinforces the address parameters but adds no syntax or formatting details beyond the schema. It does not clarify that fair market rents require _hudKey or that CPI trends require _blsKey, though the schema already covers this. Thus the description adds no significant value over the schema.

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?

The description clearly states the tool's function: 'Evaluate rental investment potential by address and zip code.' It also lists specific outputs (estimated rent, fair market rents, CPI rent trends), making it distinct from sibling tools like housing_market_snapshot or housing_property_report. The verb 'evaluate' plus the resource 'rental investment potential' is specific and unambiguous.

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?

The description implies the intended use case: when you need rental investment metrics for a property. It does not explicitly name alternatives or exclusions, but the context is clear enough given the specific outputs. Since there are many housing sibling tools, a more explicit 'use this when...' statement would improve it, but it is not misleading.

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.

TDQS

A3.6/5.0
Disambiguation2/5

Several tools intentionally overlap: ask_pipeworx, ask_pipeworx_beta, and ask_pipeworx_grounded share the same router, with the beta variant explicitly matching stable behavior right now. entity_profille/recent_changes/compare_entities and the multiple polymarket scanning tools also cover closely related jobs, so an agent must read carefully to avoid picking the wrong variant.

Naming Consistency3/5

All tools use lowercase snake_case, which is a consistent base style. However, the naming grammar is mixed: proper verb_noun tools like compare_entities and validate_claim sit beside noun-phrase/domain tools like housing_market_screen and polymarket_edges, plus the awkward compound case_shiller_metro_compare. The housing_ and polymarket_ prefixes help, but the pattern is not uniform enough for a 5.

Tool Count2/5

41 tools far exceeds the 25+ threshold and the typical well-scoped 3-15 range. Many tools pertyain to Polymarket, npm scanning, llms.txt generation, and memory, which have little to do with Housing Intel, so the count is not earned by the server's stated domain.

Completeness4/5

For the housing domain specifically, the coverage is strong: market snapshot, affordability, employment, mortgage history, rental/property analysis, metro demand, signal scanning, and Case-Shiller comparisons cover the main data needs. The generic ask_pipeworx and deep_research tools also backfill specialized queries. The weakness is scope blur, not obvious missing housing operations.