Point-in-Time Universe
get_pit_universeUse this tool to answer questions about historical index membership — e.g. "Was Company X in the S&P 500 on date Y?" or "Which companies were in the Russell 2000 on 2010-01-01?" Use this INSTEAD OF `search_companies` when the question involves a specific historical date or whe...
Example Call
# Using the Valuein MCP server from Python (via MCP SDK)# Or call directly from Claude / Cursor after setup result = await client.call_tool( "get_pit_universe", arguments={})print(result)Direct tool call:get_pit_universe(as_of_date="2020-03-01", index="sp500")
Try it now
Paste this in your terminal — the free tier returns real sample data without authentication.
# No auth required — the Sample tier covers a large-cap US benchmark universe with a 5-year window.# Add -H "Authorization: Bearer $VALUEIN_TOKEN" for the full universe and history.curl -X POST https://mcp.valuein.biz/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "get_pit_universe", "arguments": { "limit": 3 } } }'Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
index | "sp500" | "russell1000" | "russell2000" | "russell3000" | optional | Index filter. 'sp500' (~500 large caps; reconstructed history from 1996, incomplete before ~2007, check pit_safe), 'russell1000' (~1000 large/mid), 'russell2000' (~2000 small caps), 'russell3000' (~3000 broad market) — the three Russell indices carry fund-derived history back to 2000-09-30 at medium confidence, with observation spacing that widens before 2007. Omit for no index filter (sector-only or full universe queries). |
sector | string | optional | Sector filter (case-insensitive substring) over the SIC-derived, GICS-aligned label (not licensed GICS — see tool description). E.g. 'Technology', 'Energy'. |
as_of_date | string | optional | Historical date (YYYY-MM-DD) for survivorship-free construction. Index queries use index_membership join/leave dates (entrants after the date excluded, later-removed members kept); sector queries use security valid_from/valid_to. Omit for the current universe. |
is_active | boolean | optional | Filter to active (currently trading) companies only. Omit to include all. WARNING: setting this to true on a HISTORICAL query reintroduces survivorship bias — companies that were active on as_of_date but later went bankrupt or got acquired will be filtered out. Leave unset for true PIT backtests. |
include_share_classes | boolean | optional | false (default) collapses to one row per CIK (index-provider convention — BRK counts once, not BRK-A + BRK-B). true returns every share-class row (GOOG and GOOGL separately) — for security-level analysis only.Default: false |
ticker | string | optional | Check ONE company: a ticker or a CIK (SEC identifier), e.g. 'AAPL' or '0000320193'. Returns that company's row if it was a member on as_of_date, none if it was not. A ticker matches the symbol listed ON that date, and a since-delisted member can carry no ticker at all (enriched=false), so prefer the CIK for historical checks. Omit to list the universe. |
limit | integer | optional | Rows per page (1–3500; at most 250 are inlined per call). Defaults to 100. `universe_size` always states the full matched count; when more rows remain after this page the response carries a `truncation` envelope — call again with `offset` = its `next_offset`. Universe is deduped to one row per CIK (SP500 ~505, Russell 3000 ~3050).Default: 100 |
offset | integer | optional | Zero-based row offset where this page starts. Pass the previous response's `truncation.next_offset` to fetch the next page. Defaults to 0.Default: 0 |
Output Fields
as_of_dateindexsectoruniverse_sizereturned_rowscompletelimit_truncatedsurvivorship_freecoverage_gapcoverageconfidence_summarynotetruncationcompaniesPaging
limit is the page size and offset is where the page starts. While rows remain, the result carries truncation with next_offset: call again with the same arguments and offset set to truncation.next_offset, until a result has no truncation.
Errors and paging for every tool: the agent contract.
Example Response
{ "as_of_date": null, "index": null, "sector": "Technology", "universe_size": null, "returned_rows": null, "complete": null, "limit_truncated": null, "survivorship_free": null}Shape only — field names match the live schema; values are placeholders, not real filings. Returns the S&P 500 members on March 1, 2020, before the COVID-era additions: `universe_size` is the full count, the first page holds `limit` rows (default 100), and `truncation.next_offset` is the `offset` of the next page.
Notes
This is the only tool that correctly handles the universe construction problem for backtesting: using the current S&P 500 list for 2020 data introduces survivorship bias. Each row's `is_sp500` is null unless the query was `index="sp500"` (membership was not read, so it is unknown, not false). Pass `ticker` (a ticker or a CIK) to check one company's membership on `as_of_date`; prefer the CIK for delisted members.
Plan Access
Related Tools
Index names are trademarks of their owners; Valuein is not affiliated with or endorsed by any index provider.