Read-only U.S. stock market history: S&P 500 since 1928, CAPE, drawdowns, index changes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calendar-year returns by year, price return and total return (dividends reinvested), with the arithmetic mean and compound annual rate over the complete years in the range. Indexes: sp500 (from 1928), ndx, sox, xlk, xlf, xly, xlp. The current year is year-to-date and flagged `ytd`.
Which index or ETF. Default sp500.
Last year to include.
First year to include.
Calendar-year returns by year, price return and total return (dividends reinvested), with the arithmetic mean and compound annual rate over the complete years in the range. Indexes: sp500 (from 1928), ndx, sox, xlk, xlf, xly, xlp. The current year is year-to-date and flagged `ytd`.
| Argument | Type | Description |
|---|---|---|
| index | string | Which index or ETF. Default sp500. |
| to_year | integer | Last year to include. |
| from_year | integer | First year to include. |
{
"type": "object",
"properties": {
"index": {
"enum": [
"sp500",
"ndx",
"sox",
"xlk",
"xlf",
"xly",
"xlp"
],
"type": "string",
"description": "Which index or ETF. Default sp500."
},
"to_year": {
"type": "integer",
"description": "Last year to include."
},
"from_year": {
"type": "integer",
"description": "First year to include."
}
},
"additionalProperties": false
}Read one published dataset (the JSON behind a chart), e.g. "sp500/drawdowns", "sp500/pe", "ndx/forward-pe", "recessions". Rows can be filtered by `since`/`until` on their `date` (or `year`). A result is capped at about 60,000 characters: when a file is larger (long daily series), each array keeps its most recent rows and the cut is reported under `windowed`. Scalars and summary fields are always included.
| Argument | Type | Description |
|---|---|---|
| path* | string | Dataset path without /api/ and .json, as returned by search_charts. |
| tail | integer | Rows kept per array after filtering, from the end. By default every row is returned when the result fits; long daily series are cut to their most recent rows and reported under `windowed`. |
| since | string | Keep rows dated on or after this (YYYY-MM-DD or YYYY). |
| until | string | Keep rows dated on or before this (YYYY-MM-DD or YYYY). |
{
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"description": "Dataset path without /api/ and .json, as returned by search_charts."
},
"tail": {
"type": "integer",
"maximum": 2000,
"minimum": 1,
"description": "Rows kept per array after filtering, from the end. By default every row is returned when the result fits; long daily series are cut to their most recent rows and reported under `windowed`."
},
"since": {
"type": "string",
"description": "Keep rows dated on or after this (YYYY-MM-DD or YYYY)."
},
"until": {
"type": "string",
"description": "Keep rows dated on or before this (YYYY-MM-DD or YYYY)."
}
},
"additionalProperties": false
}Current headline readings (value, unit, observation date) for the site's charts: S&P 500 level, Shiller CAPE, forward P/E for the S&P 500, Nasdaq 100, SOX and sector ETFs, VIX, drawdown from the high, breadth, Magnificent 7 weight and more. Pass `id` for one chart, or omit it for all.
| Argument | Type | Description |
|---|---|---|
| id | string | Chart id, e.g. "pe" (Shiller CAPE), "forward-pe", "ndx-forward-pe", "drawdown", "vix". Omit for every reading. |
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Chart id, e.g. \"pe\" (Shiller CAPE), \"forward-pe\", \"ndx-forward-pe\", \"drawdown\", \"vix\". Omit for every reading."
}
},
"additionalProperties": false
}Constituent changes with effective date, the company added, the company removed and the reason. sp500 from 2016, ndx from 2020. Newest first.
| Argument | Type | Description |
|---|---|---|
| index | string | Default sp500. |
| limit | integer | Default 20. |
| since | string | Only changes effective on or after this date (YYYY-MM-DD). |
| ticker | string | Only changes that add or remove this ticker. |
{
"type": "object",
"properties": {
"index": {
"enum": [
"sp500",
"ndx"
],
"type": "string",
"description": "Default sp500."
},
"limit": {
"type": "integer",
"maximum": 300,
"minimum": 1,
"description": "Default 20."
},
"since": {
"type": "string",
"description": "Only changes effective on or after this date (YYYY-MM-DD)."
},
"ticker": {
"type": "string",
"description": "Only changes that add or remove this ticker."
}
},
"additionalProperties": false
}Search the site's charts by topic or question (e.g. "bear markets", "Shiller CAPE", "Nasdaq 100 drawdown", "monthly seasonality"). Returns each chart's title, the question it answers, its page and the dataset path to pass to get_dataset.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Default 10. |
| query* | string | Words to match against chart titles and the questions they answer. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 10."
},
"query": {
"type": "string",
"description": "Words to match against chart titles and the questions they answer."
}
},
"additionalProperties": false
}