VINTAGE

POINT-IN-TIME RESEARCH TERMINAL · MCP

A research terminal that costs $0 and won't lie to you about your Sharpe.

Data filed with, published by, and computed at
U.S. Securities & Exchange CommissionEDGAR — the filings themselves Federal Reserve Bank of St. LouisFRED & ALFRED — 800k series Dartmouth CollegeKen French Library — since 1926 Open Source Asset PricingChen & Zimmermann — 331 published claims

Official filings and central-bank releases, pulled live from the institutions that publish them. Not a scrape, not a CSV dump, not a mirror of someone else's mirror.

claude — vintage
$claude mcp add vintage -s user -- uvx vintage-mcp
connected · sec edgar · fred · ken french · openap · yahoo
backtest 12-1 momentum on the dow 30 since 2010
reading 30 tickers from yahoo-finance, 3,914 sessions
panel indexed on known_at — lookahead structurally impossible
annualized return14.8%volatility17.1%turnover cost−40 bps/yr
sharpe2.14
try short-term reversal instead
sharpe1.87
and low volatility
sharpe2.31
honesty report
specs tried this session41
sharpe noise would produce2.29
deflated sharpe probability0.09
after 41 trials, a sharpe this high is what noise produces.
the terminal you pay for does not tell you this.

Install

One command. Nothing to clone.

claude mcp add vintage -s user -- uvx vintage-mcp

Add to claude_desktop_config.json, then restart the app.

{
  "mcpServers": {
    "vintage": {
      "command": "uvx",
      "args": ["vintage-mcp"]
    }
  }
}

Add to ~/.cursor/mcp.json.

{
  "mcpServers": {
    "vintage": {
      "command": "uvx",
      "args": ["vintage-mcp"]
    }
  }
}

Settings → Connectors → Developer mode. Needs a hosted URL — run vintage behind HTTPS and point the connector at it.

uvx vintage-mcp --transport streamable-http --port 8000

Needs uv. Prefer pip? pip install vintage-mcp, then use vintage as the command. No API keys required for anything above.

Where the data comes from

A century of market history, six sources, zero API keys. The Fama-French factors start in July 1926 and the SEC filing stream runs to this morning — Vintage covers both ends from the same six verbs.

Five of the six are the primary source, not a reseller and not a scraper: the filings come from the regulator that receives them, the macro series come from the central bank that publishes them, and the factors come from the university that computes them. Vintage hosts none of it — it connects, normalizes, and preserves vintage.

100years, July 1926 to this morning
331published anomalies, with claims
10,398ticker-mapped US filers
800k+macro series with vintages
0API keys required
Primary · US regulator

SEC EDGAR XBRL

Every concept every US filer has ever tagged, with the accession number and filing date attached to each figure. Restatements arrive as separate rows, not as an overwrite.

Primary · US regulator

SEC filings stream

8-K, 10-K, 10-Q, Form 4 and 13D/G, timestamped to the second EDGAR accepted them. This is the clock the rest of the market runs on.

Primary · central bank

FRED & ALFRED

Federal Reserve Bank of St. Louis. ALFRED is the rare archive that keeps first releases, so you can ask what CPI looked like that morning rather than after the revisions.

Primary · academic

Ken French Data Library

Dartmouth. FF3, FF5, momentum, daily FF3, and the 49 industry portfolios — the same series the papers are written against, from where the authors publish them.

Primary · academic

Open Source Asset Pricing

Chen & Zimmermann's replication of the anomaly zoo: 331 published predictors with the return and t-statistic each paper claimed, its sample window, and a definition precise enough to implement from. This is the scoreboard a replication is scored against — openap:Mom12m returns Jegadeesh-Titman's 1.31%/month, t = 3.74.

Third party

Yahoo Finance

Daily OHLCV and adjusted close, decades deep. Labelled honestly: adjustments are applied retroactively, so price history is not fully point-in-time and Vintage says so on every row.

The full field-by-field catalogue lists every prefix, dataset and signal with measured coverage spans — generated from the registry, so it cannot drift from the code. Counts current as of August 2026. Each upstream source keeps its own terms; Vintage redistributes none of it.

Every value carries two dates

observed_at

What period the number describes. Apple's Q4 2019 assets describe September 2019.

known_at

When it first became public. You could not have traded on it until the 10-K landed in October.

The backtest panel is indexed on known_at, so any slice of it is automatically point-in-time. There is no flag to turn that off. Sources that cannot supply an honest known_at are flagged UNKNOWN_VINTAGE rather than given a made-up date.

Six ways yesterday's data quietly changed

Lag

The number is true in December. It gets published in February.

Restatement

The company says "oops, wrong" and changes last year's number.

Revision

The government keeps fixing old jobs and inflation figures, for years.

Survivorship

Dead companies get deleted. Only the winners are still listed.

Membership

Today's S&P 500 list is not the list from 2005.

Price adjustment

Splits and dividends silently rewrite every price before them.

All six say the same thing: the data you have today is not what people saw back then. Point-in-time means showing only what was already public that day — and Vintage enforces it in the panel index rather than trusting you to remember.

Why that matters

What you ask forWhat a normal API returnsWhat Vintage returns
2019 revenue, asked today the restated figure both, with the date each was filed
A universe, as of 2012 today's survivors a warning that it is doing the same, loudly
A Sharpe, on your 41st idea 2.14 0.09 after deflation

The method

Vintage implements the backtest-validation literature rather than inventing its own statistics. Execution realism is a different problem, already solved by LEAN and Nautilus Trader — Vintage runs before that, where most ideas should die.

TechniqueSourceStatus
Point-in-time panel, indexed on known_atstructural, no flag to disableshipped
Costs charged on turnover, alwaysno zero-cost mode existsshipped
Deflated Sharpe RatioBailey & López de Prado (2014)shipped
Session trial ledger feeding the deflationBailey & López de Prado (2014)shipped
Probability of Backtest Overfitting, via CSCVBailey, Borwein, López de Prado & Zhu (2017)planned
Purged k-fold CV with embargoAdvances in Financial Machine Learning, ch. 7planned
Combinatorial purged cross-validationAdvances in Financial Machine Learning, ch. 12planned
Minimum Backtest LengthBailey, Borwein, López de Prado & Zhu (2014)planned
Newey–West adjustment for autocorrelated returnsNewey & West (1987)planned
Square-root market impactAlmgren et al. (2005)planned

Citations are references, not endorsements — none of these authors is affiliated with Vintage. Anything marked planned is not in the code yet, and the backtest response says so at runtime rather than in the footnotes.

Six verbs

resolveAny identifier → the entity key everything else accepts
discoverPlain-English search across every source's catalog
fetchThe workhorse. Any field, any source, with as_of
eventsFiling timeline with exact public timestamps
backtestCross-sectional signal → returns, costs, honesty report
benchmarkYour returns → correlation and alpha vs published factors

Source is a parameter, never a separate tool. Twenty more sources adds zero tools.