Skip to main content
Glama

Case Shiller Metro Compare

case_shiller_metro_compare
Read-onlyIdempotent

Compare Case-Shiller home price indices across multiple US metros in one call (the 20-city composite). For each metro returns latest level, 3-month change, 12-month change, all-time peak, drawdown from peak, and a softening flag. Output also ranks metros softest → strongest. Use for "which metros are softening", "Case-Shiller for [list of cities]", "compare housing prices in X, Y, Z" queries — picks the right per-metro FRED series IDs (DNXRSA, PHXRSA, TPXRSA, etc.) so callers don't have to. Available metros: Atlanta, Boston, Charlotte, Chicago, Cleveland, Dallas, Denver, Detroit, Las Vegas, Los Angeles, Miami, Minneapolis, New York, Phoenix, Portland, San Diego, San Francisco, Seattle, Tampa, Washington DC.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
metrosYesMetro names, case-insensitive. Example: ["Denver", "Phoenix", "Tampa", "Charlotte"]. Pass any subset of the 20-city composite.
_fredKeyNoFRED API key (https://fred.stlouisfed.org/docs/api/api_key.html). Platform key used if omitted.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoError message if request failed
metrosNoRanked metros from softest to strongest
snapshot_dateNoToday's date in YYYY-MM-DD format

Schema Changelog

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

  1. Changed1 schema field changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "metros": [
      -      "Denver",
      -      "Phoenix",
      -      "Tampa",
      -      "Charlotte"
      -    ]
      -  },
      -  {
      -    "_fredKey": "your-housing-intel-api-key",
      -    "metros": [
      -      "San Francisco",
      -      "Los Angeles",
      -      "Seattle"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "metros": [
      +      "Denver",
      +      "Phoenix",
      +      "Tampa",
      +      "Charlotte"
      +    ]
      +  },
      +  {
      +    "metros": [
      +      "San Francisco",
      +      "Los Angeles",
      +      "Seattle"
      +    ]
      +  }
      +]
  2. Changed16 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "metros": [
      +      "Denver",
      +      "Phoenix",
      +      "Tampa",
      +      "Charlotte"
      +    ]
      +  },
      +  {
      +    "_fredKey": "your-housing-intel-api-key",
      +    "metros": [
      +      "San Francisco",
      +      "Los Angeles",
      +      "Seattle"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "description": "Error message if request failed",
      +  "type": "string"
      +}
    • changedOutput schema / properties / metros / items / properties / all_time_peak / description
      Previous value: -"Peak index value in series history"New value: +"Highest value ever recorded"
    • removedOutput schema / properties / metros / items / properties / change_12m
      Removed value: -{
      -  "description": "12-month change in index points",
      -  "type": "number"
      -}
    • addedOutput schema / properties / metros / items / properties / change_12mo
      Added value: +{
      +  "description": "12-month change in index points",
      +  "type": "number"
      +}
    • removedOutput schema / properties / metros / items / properties / change_3m
      Removed value: -{
      -  "description": "3-month change in index points",
      -  "type": "number"
      -}
    • addedOutput schema / properties / metros / items / properties / change_3mo
      Added value: +{
      +  "description": "3-month change in index points",
      +  "type": "number"
      +}
    • changedOutput schema / properties / metros / items / properties / drawdown_from_peak / description
      Previous value: -"Percentage below all-time peak"New value: +"Percent decline from all-time peak"
    • addedOutput schema / properties / metros / items / properties / pct_change_12mo
      Added value: +{
      +  "description": "12-month percent change",
      +  "type": "number"
      +}
    • addedOutput schema / properties / metros / items / properties / pct_change_3mo
      Added value: +{
      +  "description": "3-month percent change",
      +  "type": "number"
      +}
    • changedOutput schema / properties / metros / items / properties / series_id / description
      Previous value: -"FRED series ID"New value: +"FRED series ID (e.g., DNXRSA)"
    • changedOutput schema / properties / metros / items / properties / softening / description
      Previous value: -"True if recent trend shows softening"New value: +"True if 12-month change is negative"
    • addedOutput schema / properties / metros / items / properties / trend
      Added value: +{
      +  "description": "Trend label based on recent values",
      +  "enum": [
      +    "rising",
      +    "falling",
      +    "stable"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / ranking_note
      Removed value: -{
      -  "description": "Explanation of ranking methodology",
      -  "type": "string"
      -}
    • changedOutput schema / properties / snapshot_date / description
      Previous value: -"ISO date of snapshot"New value: +"Today's date in YYYY-MM-DD format"
    • removedOutput schema / required
      Removed value: -[
      -  "snapshot_date",
      -  "metros"
      -]
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "metros": {
      +      "description": "Ranked metros from softest to strongest",
      +      "items": {
      +        "properties": {
      +          "all_time_peak": {
      +            "description": "Peak index value in series history",
      +            "type": "number"
      +          },
      +          "change_12m": {
      +            "description": "12-month change in index points",
      +            "type": "number"
      +          },
      +          "change_3m": {
      +            "description": "3-month change in index points",
      +            "type": "number"
      +          },
      +          "current": {
      +            "description": "Latest Case-Shiller index value",
      +            "type": "number"
      +          },
      +          "drawdown_from_peak": {
      +            "description": "Percentage below all-time peak",
      +            "type": "number"
      +          },
      +          "metro": {
      +            "description": "Metro name",
      +            "type": "string"
      +          },
      +          "series_id": {
      +            "description": "FRED series ID",
      +            "type": "string"
      +          },
      +          "softening": {
      +            "description": "True if recent trend shows softening",
      +            "type": "boolean"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "ranking_note": {
      +      "description": "Explanation of ranking methodology",
      +      "type": "string"
      +    },
      +    "snapshot_date": {
      +      "description": "ISO date of snapshot",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "snapshot_date",
      +    "metros"
      +  ],
      +  "type": "object"
      +}
  4. Added

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare read-only, open-world, and idempotent behavior. The description adds meaningful context about return values (latest level, changes, peak, drawdown, softening flag) and the ranking behavior, which goes beyond the schema. It does not disclose potential caveats like data frequency or API limits, but for a read-only tool this is acceptable.

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 dense but tightly organized: purpose, outputs, usage examples, and available metros are clearly sectioned. Every sentence contributes useful information without redundancy, staying within a manageable length.

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 output schema present and annotations covering safety, the description covers all necessary context: what the tool does, what it returns, when to use it, and available inputs. This 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.

Parameters4/5

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

Schema coverage is 100%, giving a baseline of 3. The description enhances this by enumerating all 20 available metros (Atlanta, Boston, Charlotte, etc.), which is not in the schema, and reinforces that any subset can be passed. This extra context helps parameter selection, meriting a 4.

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 uses a specific verb ('Compare'), a specific resource ('Case-Shiller home price indices'), and clearly defines scope ('across multiple US metros in one call'). It also distinguishes itself by mentioning the 20-city composite and the exact output metrics, setting it apart from sibling housing tools.

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 explicitly states when to use the tool with example query types ('which metros are softening', 'Case-Shiller for [list of cities]'), and shows the benefit of automatic FRED series ID selection. However, it does not explicitly mention when not to use it or name direct alternatives, so it stops short of a full 5.

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.