housing_mortgage_history

Pack: housing-intel · Connect: https://pipeworx.io/mcp (see Connect below for a single-pack URL)

No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/housing_mortgage_history for the schema, then POST the same URL with its arguments for the data.

Freddie Mac Primary Mortgage Market Survey — the weekly US mortgage INTEREST rate (the annual percentage borrowers pay on a home loan, e.g. 6.5%), back to 1971. This is the borrowing cost paid by home buyers. Returns the latest snapshot, a time series for the requested window, and min/max/avg stats. Sourced from Freddie Mac directly (not FRED), ingested weekly by the Pipeworx data pipeline.

Parameters

NameTypeRequiredDescription
windowstringno1m | 3m | 6m | 1y | 5y | all (default 1y)
as_ofstringnoOptional YYYY-MM-DD — returns the rate for the closest observation on or before that date instead of the latest.

Example call

Arguments

{
  "window": "1y"
}

curl

curl -X POST https://gateway.pipeworx.io/housing-intel/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"housing_mortgage_history","arguments":{"window":"1y"}}}'

TypeScript (@pipeworx/sdk)

import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();

const result = await pipeworx.call('housing_mortgage_history', {
  "window": "1y"
});

More examples

{
  "window": "5y",
  "as_of": "2024-01-15"
}

Response shape

FieldTypeDescription
sourcestring
notestring
freshnessobject
treasury_10y_since_observationobject | null10-year Treasury (FRED DGS10) move since the last PMMS print. null when the print is under 2 days old or when as_of was given; {unavailable: reason} when FRED could not answer.
snapshotobject
statsobject | null
seriesarray
Full JSON Schema
{
  "type": "object",
  "properties": {
    "source": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "freshness": {
      "type": "object",
      "properties": {
        "observation_date": {
          "type": [
            "string",
            "null"
          ]
        },
        "age_days": {
          "type": [
            "number",
            "null"
          ]
        },
        "cadence": {
          "type": "string"
        },
        "publishes": {
          "type": "string"
        },
        "next_publication_expected": {
          "type": [
            "string",
            "null"
          ]
        },
        "current_for_cadence": {
          "type": [
            "boolean",
            "null"
          ]
        },
        "instrument": {
          "type": "string"
        },
        "statement": {
          "type": "string"
        }
      }
    },
    "treasury_10y_since_observation": {
      "type": [
        "object",
        "null"
      ],
      "description": "10-year Treasury (FRED DGS10) move since the last PMMS print. null when the print is under 2 days old or when as_of was given; {unavailable: reason} when FRED could not answer.",
      "properties": {
        "unavailable": {
          "type": "string"
        },
        "series_id": {
          "type": "string"
        },
        "from_date": {
          "type": [
            "string",
            "null"
          ]
        },
        "from_pct": {
          "type": "number"
        },
        "to_date": {
          "type": [
            "string",
            "null"
          ]
        },
        "to_pct": {
          "type": "number"
        },
        "change_bp": {
          "type": "number"
        },
        "observations": {
          "type": "number"
        }
      }
    },
    "snapshot": {
      "type": "object",
      "properties": {
        "observation_date": {
          "type": [
            "string",
            "null"
          ]
        },
        "rate_30y_fixed": {
          "type": [
            "number",
            "null"
          ]
        },
        "points_30y": {
          "type": [
            "number",
            "null"
          ]
        },
        "rate_15y_fixed": {
          "type": [
            "number",
            "null"
          ]
        },
        "points_15y": {
          "type": [
            "number",
            "null"
          ]
        },
        "rate_5_1_arm": {
          "type": [
            "number",
            "null"
          ]
        },
        "as_of_requested": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "stats": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "window": {
          "type": "string"
        },
        "from_date": {
          "type": [
            "string",
            "null"
          ]
        },
        "to_date": {
          "type": [
            "string",
            "null"
          ]
        },
        "observations": {
          "type": "number"
        },
        "min_30y": {
          "type": "number"
        },
        "max_30y": {
          "type": "number"
        },
        "avg_30y": {
          "type": "number"
        }
      }
    },
    "series": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string"
          },
          "rate_30y_fixed": {
            "type": [
              "number",
              "null"
            ]
          },
          "rate_15y_fixed": {
            "type": [
              "number",
              "null"
            ]
          },
          "rate_5_1_arm": {
            "type": [
              "number",
              "null"
            ]
          }
        }
      }
    }
  }
}

Connect

Add this to your MCP client config — every tool in the catalog, including this one — or use one-click install buttons:

{
  "mcpServers": {
    "pipeworx": {
      "url": "https://pipeworx.io/mcp"
    }
  }
}
Connect to just the housing-intel pack
{
  "mcpServers": {
    "housing-intel": {
      "url": "https://gateway.pipeworx.io/housing-intel/mcp"
    }
  }
}

See Getting Started for client-specific install steps.

Regenerated from source · build October 5, 2026