Research is a work in progress. Estimated release: 1 December 2026. Our goal is to make it a search engine for trading setups in recorded crypto markets.

Connect an AI agent

Add one secure URL, authorize in your browser, and start asking questions.

HOSTED MCPRECOMMENDED
https://mcp.edgedepth.com/mcp
  1. 01Add the URLChoose your client on the setup page and copy its configuration.
  2. 02Authorize onceSign in to EdgeDepth when your client opens the browser.
  3. 03Show it a move, then ask if it paidPaste a chart or name a coin and time. Ask what came before the move and whether trading it paid. Review each proposal before it runs. See the screenshot walkthrough.
Open MCP setup →No API key, bearer header, or local install required.

Search recorded microstructure from a compatible AI client. A scan counts how often something happened, with coverage and reproducibility keys. An approved trade test answers the other question: whether trading it paid after fees and slippage.

What it looks like in Claude

One unedited question in claude.ai with the EdgeDepth connector, recorded [date]. Only waiting was trimmed. Historical results, not trading returns.

Clip placeholder: take 2, about 60 s
Still placeholder: scan verdict and edge box
The scan says how often big moves followed the setup: [after the setup] against [usual]. It also says that is not an edge: counting moves cannot show whether the wins outweigh the losses.
Still placeholder: trade test payoff view
The trade test answers it: [expectancy] per trade after fees and slippage, [wins] wins against [losses] losses. Funding is excluded and holds are capped at 24 hours.

Ask it things like

Name a condition, then compare outcomes across all matches, including failures:

  • "What instruments can you search, and how often is VPIN above 0.85 on SOL?"Calls list_instruments, then base_rate. Returns the searchable universe with each instrument's coverage window and provenance, then matches over eligible buckets with the denominator beside them. Neither call spends a scan unit, so this is the cheapest way to confirm the connection works.
  • "How often does a bullish engulfing on BTC, ETH and SOL reach +5% within the hour, and what did drawdown look like?"Calls interpret_prose for a proposed document, then run_scan to execute it. Returns the occurrence count with its eligible denominator, an outcomes_summary computed forward over every occurrence (the 1h distribution plus maximum favourable and adverse excursion), and the reproducibility key. That is how often, not whether trading it paid.
  • "Is there an edge in buying when these warning signs show up on alpha coins?"Says first that a scan cannot answer this, then proposes run_trade_test with explicit direction, entry, stop, trailing exit, hold, fees and slippage, and runs it only after you approve. The answer leads with payoff: average return per trade after costs, wins against losses, average win against average loss with counts, and how much of the profit the largest win carries. Funding is excluded and holds are capped at 24 hours.
  • "When top traders were at least 15 points more long than the crowd on BTC, ETH and SOL perps, what followed over the next 4 and 24 hours?"The same two calls over a positioning-difference clause. Returns the 4h and 24h distributions side by side, each carrying the count of occurrences that had a complete horizon, so a short window cannot inflate a rate.
  • "Compare what followed one-hour liquidation notional above $5 million with every other eligible market bucket."Calls run_cohort. Returns the treatment and complement distributions over identical horizons, each with its own denominator, so the comparison runs against every eligible bucket rather than a hand-picked control.

One thing it refuses by design: you cannot filter to the occurrences that then went up. Outcome fields are computed forward and can never be a filter (expect OUTCOME_IN_PREDICATE), so you always get the true rate over all occurrences instead of a hindsight-selected list.

How authorization works

Your MCP client opens EdgeDepth in the browser. Sign in with Google, Discord, or email, review the requested research scopes, and click Authorize. The access token lasts about 15 minutes, but the client silently rotates its refresh credential with a sliding 90-day inactivity window. Active connections stay signed in without asking you to regenerate or copy anything.

Connections appear under Connected Apps and can be revoked immediately. Your OAuth token never reaches the Research API: the hosted server exchanges it for a separate short-lived internal assertion.

Local connection

Need stdio instead of the hosted URL? Run npx -y @edgedepth/research-mcp and use an API key. The hosted connection is simpler for clients that support browser OAuth.

Tool reference

TOOLWHAT IT DOES
list_featuresThe closed grammar registry: feature ids, operators, windows, sequence rules, limits, error codes. Call it first; an agent that grounds here cannot invent field names.
list_instrumentsThe searchable universe, derived from complete manifests: which instruments are available, the coverage window for each, and its provenance. Coverage is stated rather than assumed, so a symbol that is not extracted yet says so instead of returning an empty result that reads like a zero.
interpret_proseProse to a PROPOSED document, labeled proposal:true and never executed. Show it, then call run_scan with the document. That second call is the confirm gate. Metered.
run_scanExecute a research_query.v2 document (stated chips only). Returns counts, denominators, outcomes_summary and the reproducibility key as canonical bytes.
next_pageCursor continuation of a prior run_scan. Never construct cursors.
snapshot_atThe registry as-of a moment: feature values, window aggregates, fired rulebook ids. A read, not a scan, not metered.
base_rateOne-clause count over a window: matches / eligible with denominators. A condition that holds almost everywhere prints high and is visibly uninformative.
commonalityDeterministic intersection across N moments, with the survivorship and multiple-comparisons framing in the output. Never similarity search.
get_reportA published report by its 8-hex canonical hash: the definition and the pinned result.
run_cohortCompare what followed treatment episode anchors with what followed the eligible predicate-false bucket, using the same complete outcome distributions on both sides.
run_trade_testSimulate approved rules (direction, next-minute entry, stop, target or trailing exit, hold up to 1440 minutes, fees and slippage) on every match. Leads with expectancy after fees and slippage, wins and losses, average win and loss. Funding is omitted. Metered.
ground_screenshotsChecks the market and candles the assistant read from a pasted chart against recorded data, and says what is uncertain or missing. Free; never guesses a date or venue.
investigate_moveThe recorded lead-up to a grounded move, optionally as an editable setup. Never launches a scan and consumes no allowance.

Errors are the shared language

Contract codes pass through verbatim and are machine-actionable. A validation failure is 422 {"errors":[{code,message}]} with the frozen codes; a transport failure is the {"error","code"} envelope. An agent that sees UNSUPPORTED_FEATURE or OUTCOME_IN_PREDICATE can read the code, call list_features, and repair its document. See the grammar for the full list and worked examples for documents to hand a tool.