get_cpi
Pack: econdata · Endpoint: https://gateway.pipeworx.io/econdata/mcp
No MCP client? Call it directly: GET https://gateway.pipeworx.io/v1/tools/get_cpi for the schema, then POST the same URL with its arguments for the data.
The US Consumer Price Index over time, from the Bureau of Labor Statistics.
Tool description as the model sees it
Current US inflation rate (CPI year-over-year) and Consumer Price Index history for All Urban Consumers, US city average, all items. Returns monthly index values with computed yoy_inflation_pct per month plus a latest summary carrying BOTH adjustments — answers “what is the latest inflation rate” and “what is the current CPI-U index level” directly. Defaults to the not-seasonally-adjusted index CUUR0000SA0, the series BLS headlines; pass seasonally_adjusted: true for the seasonally adjusted index CUSR0000SA0 (the FRED CPIAUCSL series). The two differ by roughly a point, so the answer states which one it used.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
seasonally_adjusted | boolean | no | true returns the seasonally adjusted CPI-U index (BLS series CUSR0000SA0, same series as FRED CPIAUCSL); false or omitted returns the not-seasonally-adjusted index (CUUR0000SA0), which is the series BLS headlines and the basis of the published year-over-year inflation rate. Set it to true when the question says seasonally adjusted. |
start_year | string | no | Start year as 4-digit string (e.g. “2020”). Optional. |
end_year | string | no | End year as 4-digit string (e.g. “2024”). Optional. |
_apiKey | string | no | Optional BLS registration key (free, raises the daily cap from ~25 to 500). The gateway supplies a platform key; pass your own only to override. |
Example call
Arguments
{
"seasonally_adjusted": true
}
curl
curl -X POST https://gateway.pipeworx.io/econdata/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_cpi","arguments":{"seasonally_adjusted":true}}}'
TypeScript (@pipeworx/sdk)
import { Pipeworx } from '@pipeworx/sdk';
const pipeworx = new Pipeworx();
const result = await pipeworx.call('get_cpi', {
"seasonally_adjusted": true
});
More examples
{
"start_year": "2020",
"end_year": "2024"
}
Response shape
Always returns: series_id, seasonally_adjusted, description, unit, start_year, end_year, total, data
| Field | Type | Description |
|---|---|---|
series_id | string | BLS series ID actually used — CUUR0000SA0 (not seasonally adjusted) or CUSR0000SA0 (seasonally adjusted) |
seasonally_adjusted | boolean | Whether the returned series is seasonally adjusted (CUSR0000SA0) or not (CUUR0000SA0) |
description | string | Series description, naming the seasonal adjustment used |
unit | string | Unit of measurement (index 1982-84=100) |
start_year | string | null | Start year filter if provided, null otherwise |
end_year | string | null | End year filter if provided, null otherwise |
total | integer | Number of data points returned. Equal to returned — BLS returns every point in the requested year range. |
returned | integer | How many data points are in data. Always equal to total here; stated so a caller need not assume it. |
observation_order | string | Order of the data array. BLS returns each series newest-first. |
data | array | Monthly CPI data |
latest | object | Most recent observation, carrying BOTH seasonal adjustments so the caller can tell which number answers their question. Absent when the range returned no usable data points. |
Full JSON Schema
{
"type": "object",
"properties": {
"series_id": {
"type": "string",
"description": "BLS series ID actually used — CUUR0000SA0 (not seasonally adjusted) or CUSR0000SA0 (seasonally adjusted)"
},
"seasonally_adjusted": {
"type": "boolean",
"description": "Whether the returned series is seasonally adjusted (CUSR0000SA0) or not (CUUR0000SA0)"
},
"description": {
"type": "string",
"description": "Series description, naming the seasonal adjustment used"
},
"unit": {
"type": "string",
"description": "Unit of measurement (index 1982-84=100)"
},
"start_year": {
"type": [
"string",
"null"
],
"description": "Start year filter if provided, null otherwise"
},
"end_year": {
"type": [
"string",
"null"
],
"description": "End year filter if provided, null otherwise"
},
"total": {
"type": "integer",
"description": "Number of data points returned. Equal to `returned` — BLS returns every point in the requested year range."
},
"returned": {
"type": "integer",
"description": "How many data points are in `data`. Always equal to `total` here; stated so a caller need not assume it."
},
"observation_order": {
"type": "string",
"enum": [
"newest_first"
],
"description": "Order of the `data` array. BLS returns each series newest-first."
},
"data": {
"type": "array",
"description": "Monthly CPI data",
"items": {
"type": "object",
"properties": {
"year": {
"type": "string",
"description": "Year of the observation"
},
"month": {
"type": "string",
"description": "Month name (e.g., January)"
},
"period": {
"type": "string",
"description": "Period code (e.g., M01)"
},
"value": {
"type": [
"number",
"null"
],
"description": "CPI index value"
},
"date": {
"type": [
"string",
"null"
],
"description": "First day of the covered period as an ISO date, derived from the BLS period code"
},
"yoy_inflation_pct": {
"type": [
"number",
"null"
],
"description": "Year-over-year percent change vs the same month a year earlier, or null when the prior-year month is not in range"
}
},
"required": [
"year",
"month",
"period",
"value"
]
}
},
"latest": {
"type": "object",
"description": "Most recent observation, carrying BOTH seasonal adjustments so the caller can tell which number answers their question. Absent when the range returned no usable data points.",
"properties": {
"date": {
"type": [
"string",
"null"
],
"description": "ISO date of the latest observation"
},
"index_value": {
"type": "number",
"description": "Index level of the series that was requested"
},
"seasonally_adjusted": {
"type": "boolean",
"description": "Which adjustment index_value is"
},
"index_value_sa": {
"type": [
"number",
"null"
],
"description": "Seasonally adjusted index level (CUSR0000SA0) for the same month"
},
"index_value_nsa": {
"type": [
"number",
"null"
],
"description": "Not-seasonally-adjusted index level (CUUR0000SA0) for the same month"
},
"yoy_inflation_pct": {
"type": [
"number",
"null"
],
"description": "Year-over-year percent change for the latest month, or null when the prior-year month is out of range"
}
},
"required": [
"date",
"index_value",
"seasonally_adjusted",
"index_value_sa",
"index_value_nsa",
"yoy_inflation_pct"
]
}
},
"required": [
"series_id",
"seasonally_adjusted",
"description",
"unit",
"start_year",
"end_year",
"total",
"data"
]
}
Connect
Add this to your MCP client config, or use one-click install buttons:
{
"mcpServers": {
"econdata": {
"url": "https://gateway.pipeworx.io/econdata/mcp"
}
}
}
See Getting Started for client-specific install steps.