Crypto MCP server for AI agents
MarketTrace runs a free, read-only MCP server for crypto perpetual futures. Its ten tools return funding rates with their percentile against up to two years of history, open interest, volume, CVD, order-book imbalance, liquidations and basis, plus candles with delta, volume-profile levels, large trades and footprint events. It covers BTC, ETH, SOL, BNB, XRP, DOGE, HYPE, ZEC and ENA on Binance, Bybit, OKX and Hyperliquid; liquidations come from the first three.
Facts and normalization, no verdicts. Each metric comes with its coverage (the venues that fed it and the history behind it), and every response states its age. An agent can tell a solid number from a thin one before it repeats either.
- Server URL
https://api.markettrace.ai/mcp- Transport
- Streamable HTTP
- Sign-in
- OAuth with an email link. No API key, no card.
- Access
- Read-only. Every tool is marked readOnlyHint.
- Assets
- BTC, ETH, SOL, BNB, XRP, DOGE, HYPE, ZEC, ENA
- Venues
- Binance, Bybit, OKX, Hyperliquid (liquidations: Binance, Bybit, OKX)
- Version
- 1.9.0, released 2026-10-06 · changelog
- Registry name
- ai.markettrace/agent-feed
- Tool contract
- tools.json on GitHub, input schemas for all 10 tools
- Price
- Free
Connect the MCP server
Every client uses the same URL and the same sign-in. The client opens a browser, you type your email, and we send a sign-in link. Open it on the same device and in the same browser where you started, or sign-in will not finish.
Claude (web and desktop)
- In Claude: Settings → Connectors → Add custom connector.
- Paste the server URL: https://api.markettrace.ai/mcp
- Authorize when prompted and open the emailed link.
- Ask away. The feed is read-only; it can never trade or move funds.
Claude Code and Codex connect from the terminal in two steps. Adding the server does not sign you in, so run both.
Claude Code
- Add the server:
claude mcp add --transport http markettrace https://api.markettrace.ai/mcp - Sign in (your browser opens):
claude mcp login markettrace
If your Claude Code has no mcp login command, start a session, type /mcp, pick markettrace and choose Authenticate.
Codex
- Add the server:
codex mcp add markettrace --url https://api.markettrace.ai/mcp - Sign in (your browser opens):
codex mcp login markettrace
Cursor
Use the Add to Cursor button, or add the server to ~/.cursor/mcp.json and sign in when Cursor asks.
{
"mcpServers": {
"markettrace": {
"url": "https://api.markettrace.ai/mcp"
}
}
}Other clients and your own agent
Stdio-only clients connect through the standard mcp-remote bridge, which also runs the sign-in:
{
"mcpServers": {
"markettrace": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.markettrace.ai/mcp"
]
}
}
}Your own agent can use any MCP client library with OAuth support; the official TypeScript and Python SDKs include one. An unauthenticated request gets HTTP 401 with a WWW-Authenticate header that points to the server's OAuth metadata, so the client finds the sign-in flow by itself.
Listed in the official MCP registry as ai.markettrace/agent-feed.
Open-source bridge & docs on GitHub
Things to ask
Plain questions work. The arrow shows the tool an agent reaches for.
- What's the market state for BTC? Is positioning stretched? → get_market_state
- SOL funding is above the 90th percentile. What happened over the next 24 and 72 hours the other times it was that high? → get_market_state, get_conditional_outcomes
- How did ETH open interest build over the last three days? → get_state_history
- How much got liquidated on ETH in the last hour, longs or shorts? → get_liquidations_recent
- Is BTC trading inside yesterday's value area? Any naked POCs nearby? → get_volume_profile, get_market_state
- Any market orders over $1M on BTC in the last hour? Which venue took the biggest one? → get_big_trades
- Were bid walls pulled on SOL before the last drop? → get_footprint_events
- Where did aggressive selling stack up on ETH this morning? → get_stacked_imbalances
- Pull BTC 1h candles with delta for the last two days and work out the ATR. → get_ohlcv
- Which venue is leading the HYPE move? Compare CVD, funding and open interest on Binance, Bybit, OKX and Hyperliquid. → get_market_state
MCP tools: funding, open interest, CVD, liquidations, volume profile, footprint
Ten tools, all read-only. Each one takes a symbol: BTC, ETH, SOL, BNB, XRP, DOGE, HYPE, ZEC or ENA, and names like BTCUSDT work too.
get_market_state: the whole market in one call
One normalized snapshot per asset, merged across all four venues. Start here.
- Asks
- “What's the market state for BTC?” · “Is ETH positioning stretched?”
- Returns
- Price with 1h, 4h and 24h change, 1h ATR and 24h realized volatility. Funding rate, percentile and streak. Open interest in USD, its 1h change and its multiple of the 1d, 1w and 1m medians. 24h volume. 30-minute CVD in USD and the taker-buy ratio. Order-book imbalance from −1 to +1 and depth within 10, 25 and 50 bps. Last-hour liquidations with the long share and a percentile. Basis. Per-venue values, next funding times, and drivers: a few plain-text lines on what stands out.
On the site: Market positioning · Book depth
get_funding_percentile: is funding unusually high?
The current funding rate ranked against the asset's own history from 0 to 100, plus the hours it has kept its sign.
- Returns
- rate_bps (8h-normalized; positive means longs pay shorts), percentile, streak_h and coverage.
- History
- Up to 730 days. Assets with a shorter record rank against what exists, and coverage.window_days says how much. The cross-venue rate and its rank use venues with at least 365 days of funding history.
On the site: Funding rates · Background: funding rate
get_liquidations_recent: who got liquidated
Liquidation totals on Binance, Bybit and OKX for a window of up to 24 hours.
- Inputs
- window_s in seconds, default 3600, maximum 86400.
- Returns
- Total USD, long and short USD, long_ratio (the share of longs, 0 to 1) and the event count.
- Note
- USD values are estimates: base quantity times each venue's reference price, and Bybit and OKX publish the bankruptcy price. Hyperliquid liquidations are not included.
On the site: Liquidations · liquidations methodology
get_ohlcv: candles with delta
Candles built from all four venues' trades on one timeline, with taker delta inside each candle.
- Inputs
- interval 5m, 15m, 1h, 4h or 1d (default 1h); limit 1 to 200 (default 100).
- Returns
- t (candle open, epoch ms); o, h, l, c in USD; v and delta in base units (BTC, ETH and so on); partial on a candle that is still forming. Summing delta over the candles gives the CVD of that window.
- Range
- The tape holds 31 days, so 1d stops at 31 candles and 4h at 186. ZEC and ENA keep 14 days.
On the site: Footprint chart · Background: CVD
get_conditional_outcomes: what followed this condition before
Forward returns after a condition you state, measured on the feed's own history.
- Conditions
- A funding percentile band (funding_pct_gte, funding_pct_lte), funding_sign, streak_h_gte, or one archived feature (obi_skew, oi_chg_1h_pct, taker_buy_ratio, basis_bps) by value or by percentile. Conditions combine with AND.
- Horizons
- 4h, 24h and 72h by default; any from 1h to 168h.
- Returns
- Per horizon: n_matches and n_effective (after overlapping windows are collapsed), median, p10 and p90 return in percent, the share of up moves and the median drawdown. Up to 50 matched timestamps, and where the latest hour sits on the same axes.
- history_silent
- Fewer than 12 independent matches on every horizon. The stats come back null, and that is the answer: the record is too thin to measure.
- Method
- Percentiles are as-of: each hour is ranked only against data that existed at that hour. Returns use Binance 1h closes.
Background: conditional outcomes · funding-rate extremes study · method
get_state_history: how it got here
A time series of any numeric field from get_market_state, read from a 15-minute archive that started on 2026-07-03.
- Inputs
- fields, 1 to 16 dotted paths such as funding.percentile, oi.usd, obi.skew or venues.binance.oi_usd; from and to as RFC 3339, YYYY-MM-DD or epoch ms; max_points 1 to 1000 (default 200).
- Returns
- t in epoch ms and one aligned array per field. stride says how many rows each point skips, and null marks a field that was empty in that row.
Background: state history
get_volume_profile: where the volume sits
Point of control and value-area high and low for each UTC day, from the combined tape of all four venues.
- Inputs
- days, 1 to 30 complete days (default 7).
- Returns
- Today (still forming), each complete day, a composite over the period, and naked POCs from the last 30 days that price has not traded back to. Per profile: poc, vah and val in USD, va_width_pct, volume in base units and taker_buy_ratio. The value area holds 70% of the day's volume.
On the site: Volume profile · Background: volume profile
get_big_trades: large market orders
Large aggressive orders from the trade tape. Fills that share venue, taker side and timestamp add up to one trade, so a market order that sweeps several price levels counts once.
- Inputs
- from and to (default the last hour; up to 12 h per call, no older than 31 days); min_usd, at least 50,000; limit 1 to 150 (default 50).
- Defaults
- Thresholds match the footprint chart: $1M for BTC and ETH, $500K for SOL, BNB, XRP, DOGE and HYPE, $100K for ZEC and ENA.
- Returns
- Count and USD per side, and the largest trades with time, venue, side, price and USD size.
On the site: Footprint chart
get_footprint_events: walls absorbed or pulled
Order-book wall events from the 1-minute footprint. A wall is a resting price row larger than the book's median row plus five MADs.
- Absorbed
- Trades took at least 5% of the wall's peak, at least 85% of the peak still rested at the minute's close, and price did not break through.
- Pulled
- The wall fell below half its peak while trades covered less than 30% of the drop, it did not refill within 2 seconds, and price had come within reach.
- Inputs
- from and to (default the last hour; up to 24 h per call), kinds (absorbed, pulled), min_usd, limit 1 to 150.
- Returns
- Each event's minute, kind, side, price, and peak, executed and closing size in USD; plus thin-book minutes per side.
- History
- Recorded since 2026-10-03; the archive grows forward.
On the site: Footprint chart · Book depth
get_stacked_imbalances: stacked one-sided aggression
Stacked imbalances by the diagonal rule the MarketTrace footprint chart uses. A row is a buy imbalance when its market buys reach the chosen ratio times the market sells on the nearest traded row below, and a sell imbalance in the mirror case against the row above. Three or more consecutive flagged rows on one side make a stack.
- Inputs
- interval 1m, 5m, 15m or 1h (default 1m); ratio 2, 3 or 4 (default 3); kinds (buy, sell); from and to (up to 12 h per call, no older than 31 days); limit 1 to 150.
- Returns
- Each run's candle time, side, price band, row count and USD size, plus counts per side.
- Scale
- On BTC at ratio 3, a typical hour holds about 38 runs on 1m candles, 13 on 5m, 4 on 15m and 1 on 1h.
On the site: Footprint chart · Background: footprint
Sample response
get_market_state for BTC at 2026-10-06 13:58 UTC, trimmed to the main blocks. A full response also carries per-venue values, order-book depth, the funding calendar and a coverage entry for every block.
{
"symbol": "BTC",
"as_of": "2026-10-06T13:58:41Z",
"age_seconds": 20,
"price": { "last": 86267.813, "chg_1h_pct": 0.09, "chg_24h_pct": -0.2, "atr_1h_pct": 0.36, "rv_24h_pct": 32.7 },
"funding": { "rate_bps": 0.28, "percentile": 26, "streak_h": 680 },
"oi": { "usd": 19175427019, "chg_1h_pct": 0.14, "rel": { "1d": 1.0195, "1w": 1.0345, "1m": 1.059 } },
"volume": { "usd_24h": 22309245455, "rel": { "1d": 1.3568, "1w": 1.416, "1m": 1.2496 } },
"cvd": { "window": "30m", "delta_usd": 121145644, "taker_buy_ratio": 0.5558 },
"obi": { "skew": -0.0097 },
"liq": { "usd_1h": 1276732, "long_ratio": 0.0614, "percentile": { "1w": 80, "1m": 87 } },
"basis_bps": -6.33,
"drivers": [
"funding 26th pct (730d, binance+bybit+hyperliquid)",
"OI 1.1x monthly median",
"volume 1.4x weekly median",
"liq 80th pct (1w), 6% longs",
"OI +0.1%/1h, price +0.1% — new longs"
],
"coverage": {
"funding": { "venues": ["binance", "bybit", "hyperliquid"], "window_days": 730, "n_samples": 2190, "partial": false },
"liq": { "venues": ["binance", "bybit", "okx"], "partial": false },
"basis": { "venues": ["binance"], "partial": true }
},
"stale_venues": [],
"feed": { "version": "1.9.0", "tools": 10 }
}Coverage: assets, venues and history
| Binance | Bybit | OKX | Hyperliquid | |
|---|---|---|---|---|
| Funding rate per venue | ✓ | ✓ | ✓ | ✓ |
| Cross-venue funding rate and percentile | ✓ | ✓ | — | ✓ |
| Open interest | ✓ | ✓ | ✓ | ✓ |
| Volume, CVD, candles | ✓ | ✓ | ✓ | ✓ |
| Order book: imbalance, depth, wall events | ✓ | ✓ | ✓ | ✓ |
| Trade tape: big trades, volume profile, stacked imbalances | ✓ | ✓ | ✓ | ✓ |
| Liquidations | ✓ | ✓ | ✓ | — |
| Basis | ✓ | — | — | — |
The cross-venue funding rate and its percentile use venues with at least 365 days of funding history; responses list them in the funding coverage entry. Basis compares the Binance perp with a multi-exchange spot index. Hyperliquid has no liquidation feed.
- Assets: BTC · ETH · SOL · BNB · XRP · DOGE · HYPE · ZEC · ENA.
- Funding percentile: up to 730 days of history.
- Trade tape (candles, big trades, stacked imbalances, volume profile): 31 days; 14 for ZEC and ENA.
- State archive (get_state_history and archived conditions): a row every 15 minutes since 2026-07-03.
- Wall events: since 2026-10-03.
- Live blocks refresh about every 30 seconds.
Rules for agents reading this feed
These eight rules keep an agent from misreading the numbers. They also work as a system prompt.
- Call get_market_state first. One call covers funding, open interest, volume, CVD, the order book, liquidations, basis and drivers for one asset.
- Read the coverage entry before quoting a number. partial: true means the block rests on fewer venues or less history than the full set; reason, when present, says why: accruing, unavailable, degraded or stale. Basis is always partial because it uses Binance only.
- Check stale_venues and age_seconds. age_seconds is the age of the oldest live source behind the response.
- Mind the scales. Percentiles run 0 to 100, fields ending in _ratio run 0 to 1, rel values are multiples of the trailing median (1.4 means 140%), obi.skew runs from −1 to +1 and is positive when bids are heavier, and basis_bps is positive when the perp trades above spot.
- In get_ohlcv, v and delta are in base units, not USD. Leave a partial candle out of ATR and volatility math.
- Treat liquidation USD as an estimate, and remember that Hyperliquid is not in it.
- When get_conditional_outcomes returns history_silent, say the history is too thin to measure. Do not fill the gap with a guess.
- Report the numbers as measurements. The feed says what happened, not what to trade.
Limits and errors
Limits apply per account.
- Tool calls: bursts of up to 60, then one every 2 seconds (30 a minute).
- The heavier tools, get_ohlcv, get_state_history, get_big_trades and get_stacked_imbalances, also share a tighter budget: bursts of up to 20, then one every 6 seconds (10 a minute).
- All requests together: bursts of up to 200, then 10 a second.
- A throttled tool call comes back as a tool error the model can read, for example "Rate limit (call): retry after 2 s". Past the request budget the server answers HTTP 429 with a Retry-After header.
- Parameters outside a tool's range return an error and are never trimmed to fit: windows over 24 h in get_liquidations_recent and get_footprint_events, over 12 h in get_big_trades and get_stacked_imbalances, and candles beyond the 31-day tape in get_ohlcv.
Honesty model
The feed reports what it can measure and says so when it can't: thin history answers with disclosed depth instead of made-up numbers, conditional outcomes go history_silent below the evidence floor, and every response self-declares freshness. Reports history, not predictions.
Free and open source
The hosted MCP server is free: no API keys, no card, OAuth via email magic link. The stdio bridge, connection configs and the full tool contract are open source (MIT) on GitHub. The feed is read-only by design: it can never trade or move funds.
FAQ
Is the MarketTrace MCP server free?
Yes. The hosted endpoint is free: OAuth sign-in, no API keys, no payment details.
Which MCP clients does it work with?
Claude (web and desktop), Claude Code, Codex, Cursor, and any client that speaks MCP over Streamable HTTP with OAuth. Stdio-only clients connect through mcp-remote.
Does it give trading signals?
No. The feed is descriptive: it reports measured market state and history and declares its own coverage. Interpretation stays with the agent, or with you.
Can it place trades or access funds?
No. The server is read-only and every tool is marked readOnlyHint. It holds no keys to any exchange account and has no write scope of any kind.
What data does it cover?
Funding rates with percentiles over up to two years, open interest, volume, CVD, order-book imbalance, liquidations, basis, OHLCV with per-candle delta, volume-profile levels (POC, value area, naked POCs) and large aggressive orders, plus absorbed or pulled order-book walls and stacked footprint imbalances for BTC, ETH, SOL, BNB, XRP, DOGE, HYPE, ZEC and ENA across Binance, Bybit, OKX and Hyperliquid. Liquidations cover Binance, Bybit and OKX; Hyperliquid has no liquidation feed.
How fresh is the data?
Live blocks refresh about every 30 seconds. Each response carries age_seconds, the age of its oldest live source, and the funding block carries source_age_ms, the time since the settlement it used.
How far back does the history go?
Funding percentiles rank against up to 730 days. Candles, big trades, stacked imbalances and volume profiles come from a 31-day trade tape, 14 days for ZEC and ENA. The 15-minute state archive starts on 2026-07-03 and wall events on 2026-10-03.
What are the rate limits?
Per account, 30 tool calls a minute after a burst of 60, and 10 a minute for the four heavier tools after a burst of 20. A throttled call returns an error that says how many seconds to wait.
Is there a REST API?
Not yet. MCP is the programmatic interface today, and a script can call it through any MCP client library that supports OAuth.
How is it different from the CoinGecko or CoinMarketCap MCP servers?
Those cover prices, market caps and broad market data for thousands of coins. MarketTrace covers nine perpetual futures markets in depth: funding percentiles, open interest by venue, CVD, order-book imbalance, liquidations and footprint events. Our comparison of crypto MCP servers lists what each one serves.
What does the server see and store?
Your email address for sign-in and an account ID. For each request the server logs the account ID, the time, the tool and its arguments, your client's name and user agent, your IP address cut to its network prefix (/24 for IPv4, /48 for IPv6) and your country. It never sees your conversation, only the tool calls your agent makes. The privacy policy has the details.
Is it open source?
The stdio bridge, client configs and the tool contract are MIT-licensed on GitHub. The data pipeline behind the hosted endpoint is not open source.