The agent feed — MCP methodology
A read-only, descriptive cross-exchange microstructure feed exposed over MCP (Model Context Protocol) for AI agents: six assets across four venues, reported as facts and normalization with no verdicts.
Connect an agent at /agents.
What it is
One MCP call returns one normalized market-state object. The agent feed covers six assets — BTC, ETH, SOL, BNB, XRP, DOGE — across Binance, Bybit, OKX and Hyperliquid, published under the registry name ai.markettrace/agent-feed and hosted at https://api.markettrace.ai/mcp.
The feed reports what it can measure and self-declares how much to trust each number. It never returns a trade recommendation; it reports history and coverage-honest facts. It reports history, not predictions.
Data sources
The feed reuses the same cross-exchange pipeline that powers the site — all-Rust, zero Python daemons. Each metric carries its own provenance and links to a deeper per-metric methodology:
- Funding. An OI-informed cross-venue rate plus a multi-year percentile over a consistent, deep venue set. Funding methodology →
- Open interest. A 4-venue native-USD sum: Bybit
openInterestValue, OKXoiUsd, Hyperliquidcoins × markPx, Binancecoins × mark. - Volume. A 30-day consolidated tape.
- CVD & order-book imbalance. Cross-venue taker flow and flow-weighted OBI. Positioning methodology →
- Liquidations. Three venues — Binance, Bybit, OKX; Hyperliquid is deliberately skipped. Liquidations methodology →
- Basis. Perp-vs-spot in basis points; positive means the perp trades above the spot index, where the index is a multi-exchange spot composite.
- Price / OHLCV. Consolidated cross-exchange candles.
Coverage honesty
Every metric carries a coverage entry. A thin or young metric is answered honestly, with its depth disclosed, and is never faked to look deep.
coverage: { venues, window_days, n_samples, partial, reason }
reason ∈ { accruing | unavailable | degraded | stale }age_seconds is the worst-case age across the live sources that fed the non-null fields, so a single stale sub-feed cannot hide behind fresher ones. A feed beacon on every response — feed.version and feed.tools — lets an agent detect a stale, cached tool catalog and re-read the schema.
Conditional outcomes
The flagship tool measures base rates of forward returns after a caller-stated condition. It replaces folklore — “high funding means a squeeze” — with the base rate drawn from the feed's own data. The mechanics are deliberately conservative:
- As-of percentile. At each historical hour
t, a condition stated as a percentile is ranked only against data at or beforet— no look-ahead. A structural floor applies: an as-of rank exists only once its series holds 12 samples, because a rank among two points is degenerate. Raw-value thresholds carry no such floor. - Matching. A match is any hour where every stated condition field holds at once — the fields AND together.
- Forward returns. Per horizon (default 4h / 24h / 72h):
r_h(t) = close(t+h) / close(t) − 1 // forward return at horizon h maxDD_h = min( low(t+1 … t+h) ) / close(t) − 1 // worst hourly low in (t, t+h]
- Overlap collapse. Overlapping forward windows are not independent samples, so matches are thinned to at least one horizon apart, yielding
n_effective; the rawn_matchesis reported alongside it. Every statistic is computed onn_effective. - Cluster warning. The response reports the share of effective matches falling inside the densest 14-day window — a guard against one squeeze episode masquerading as N independent episodes.
- The
history_silentverdict. Below 12 effective matches on every horizon, the statistics are null and the verdict readshistory_silent. This is a first-class answer — “the history is silent; you would be trading on belief, so size accordingly” — not an error. - Price series. Returns are computed on Binance 1-hour closes (
coverage.price_src), by design: no consolidated or venue-stitched series inside a single backtest. - Archive-feature (v2) conditions. Conditions on
obi_skew,oi_chg_1h_pct,taker_buy_ratioorbasis_bpsintersect the funding window with the young 15-minute archive; the response window reports that intersection honestly.
State history
A 15-minute archive stores the full served market-state per asset. get_state_history returns parallel time-series arrays of any numeric dotted field — funding.percentile, oi.usd, obi.skew — downsampled to max_points. The stride used is reported, and the newest row is never sampled away. The archive is young — it was born 2026-07-03 — and grows forward, so thin answers are honest, not broken.
Tools
get_market_state— one normalized market-state object for an asset.get_funding_percentile— funding rate with its multi-year percentile.get_liquidations_recent— recent liquidations across the three covered venues.get_ohlcv— consolidated cross-exchange candles.get_conditional_outcomes— base-rate forward returns after a stated condition.get_state_history— time-series arrays from the 15-minute archive.
For how to connect an agent, see /agents.
Limitations
- Binance-only price in the backtest. The conditional-outcomes series uses Binance 1-hour closes; the delta versus a consolidated price is small at the 4h-and-longer horizons it reports.
- The state archive is young. It grows forward from 2026-07-03, so archive-feature conditions and
get_state_historyreturn short windows until it fills. - Inherited coverage caveats.Each underlying metric's own caveats carry through — weight any reading by its
coverageentry. - Read-only, descriptive. The feed is read-only and never a trade recommendation. It reports history, not predictions.
Versioning
Methodology version v1.4.1 · updated 2026-07-04. Material changes (new sources, formula tweaks, threshold changes) bump the version and update dateModified in the structured data above.
v1.4.1 (2026-07-04): first published methodology for the MCP agent feed — the coverage-honesty model, conditional-outcomes statistics, and the 15-minute state archive.