EdgeDepth Research
UnexploredSearch recorded crypto and TradFi microstructure through deterministic, reproducible agent tools.
Install
Terminal
$npx -y @edgedepth/research-mcpmcp_config.json
{
"mcpServers": {
"com-edgedepth-research": {
"env": {
"EDGEDEPTH_API_KEY": "${EDGEDEPTH_API_KEY}"
},
"args": [
"-y",
"@edgedepth/research-mcp"
],
"command": "npx"
}
}
}Documentation
EdgeDepth Research MCP Server
@edgedepth/research-mcp is the official, research-only Model Context Protocol server for EdgeDepth, a market microstructure search engine over recorded Binance USDT-M crypto perpetuals. Use it from ChatGPT, Claude, Cursor, Codex, or any MCP client to find every verified occurrence of a market condition, inspect forward outcomes across the complete matched set, read an unconditional same-scope reference, and open replay-linked evidence.
Every result includes counts with denominators and a reproducibility key. Same key, same bytes.
Website · Search the market · REST API documentation · MCP setup guide · Learning hub
Why use EdgeDepth Research?
- Search recorded market microstructure: query a closed, versioned feature registry covering order flow, order-book depth and cost to trade, capture provenance, price action, volatility, funding, open interest, positioning, candle formations, liquidations and liquidation shelves.
- Keep the denominator: every count reports the eligible population and exclusions behind it. Missing data is absent, never silently changed to zero.
- Measure outcomes without lookahead selection: forward returns, MFE, and MAE are computed over all occurrences. Outcome fields cannot be used as filters.
- Compare matched and baseline populations: deterministic cohort results put the matched distribution beside every other eligible predicate-false bucket.
- Audit and replay the evidence: results carry a reproducibility key, and representative occurrences include authenticated web handoffs to the exact recorded market moment.
- Stay research-only: no tool trades, modifies alerts or publishes reports. The private Radar admin pilot can save account-owned hypotheses with the separate optional
research:hypothesespermission. A fresh scan, cohort, or stratified computation can consume research allowance units; the annotations state that side effect explicitly.
Choose a connection
The package exposes one tool core through two transports:
- Hosted MCP (recommended): connect to
https://mcp.edgedepth.com/mcpover Streamable HTTP and authorize once in your browser. No API key to copy. - Local stdio: run
npx -y @edgedepth/research-mcpwith an EdgeDepth API key.
Connect
Claude Desktop
In Settings > Connectors > Add custom connector, enter:
https://mcp.edgedepth.com/mcp
Complete the EdgeDepth browser authorization prompt.
Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"edgedepth-research": {
"url": "https://mcp.edgedepth.com/mcp"
}
}
}
Codex (~/.codex/config.toml)
[mcp_servers.edgedepth]
url = "https://mcp.edgedepth.com/mcp"
Then run:
codex mcp login edgedepth
Remove any old bearer_token_env_var line before using browser OAuth.
Local stdio with npx
Create a key on the EdgeDepth Developer page, then add:
{
"mcpServers": {
"edgedepth-research": {
"command": "npx",
"args": ["-y", "@edgedepth/research-mcp"],
"env": {
"EDGEDEPTH_API_KEY": "edk_live_YOUR_KEY"
}
}
}
}
Local stdio requires Node.js 20 or newer. Use the research:read key scope for recorded-data tools and add research:interpret only when you need the free interpret_prose proposal step.
Result projection (agent context economy)
Scan-family results are large: a universe scan's canonical bytes run to
hundreds of kilobytes, most of it page rows carrying every recorded feature,
the zero and long-tail entries of counts_by_symbol, and empty threshold
rungs. That overflows a client's tool-result budget before it answers anything.
run_scan, next_page and run_cohort therefore return a stated
projection by default. Display derivations and removals are stated with the
exact way to recover detail. Default run_scan adds the compact text view described
below; full_outcomes: true, next_page and run_cohort keep this detailed projection:
- occurrence rows are trimmed to
rows(default 3) and each kept row keeps the setup fields its ownevidenceblock names -full_rows: truerestores the whole vector; - the per-occurrence
outcomesmap keeps the entries for the rows that remain; counts_by_symbolkeeps the top entries by match count, and says how many instruments and matches were omitted;- the outcome ladders are replaced by a paired answer block: for each metric,
present,absentand the selected rungs' integer counts pass through verbatim, withrate, the unconditionalbaseline_rateover the same symbols and window, and their ratio asliftstated beside them. The selection is fixed in advance (gte 0.01,gte 0.02,lte -0.01,lte -0.02), drops rungs that separate nothing, and adds the single rung carrying the largest lift among those holding at least 30 occurrences, markedkept_for.full_outcomes: truereturns every rung and the per-rung histogram, on the matched set and the reference separately.
Full-population counts, outcome denominators, absent tallies, predicate_coverage,
representatives, the page cursor and reproducibility key stay intact. The request
document is never rewritten, so the canonical query hash and the credit charged
are exactly what you asked for. full_counts: true returns the engine's
verbatim canonical bytes with no projection at all. ETags are
projection-scoped: an ETag held for one projection can never revalidate as a
different one.
list_features takes the same treatment on request: search, feature_ids
and compact return one feature family instead of the whole grammar, with the
closed parts (operators, windows, sequence rules, limits, error codes) intact.
Prompts and resources
The server publishes worked prompts, which compatible clients surface as
pickable commands: test_a_claim, liquidation_cascade_bounce,
investigate_symbol, what_preceded_moves_like_this, does_it_confirm and how_common_is_it (the free
prevalence path). Each one encodes the same answer contract: ground the
grammar, propose the exact definition, wait for confirmation, then report with
denominators, the reference, the reproducibility key and a replay handoff.
The grammar registry is also served as a resource, edgedepth://research/grammar,
so a client can attach it once instead of calling list_features every session.
Recommended agent workflow
- For setup-first questions, interpret prose in the host and call
prepare_studywith structured scope, predicates and outcome. It reuses the web validator and measure contract, validates current instrument membership and returns an unrun canonical definition plus a fresh allowance estimate. No external LLM is used. Preserveuser_stated,semantic_translation(top 10% means rank >= 0.9) andmodel_assumedseparately; only the latter denotes an invented proposal. Useinterpret_proseunchanged as the raw-prose fallback. Use compactlist_featuresfor uncommon fields or validation repair, not every question. - Call
list_instrumentsonly when you need to check the manifest-derived universe, coverage, and provenance. Its result carries the human market page in the same way,https://edgedepth.com/research/symbols/<symbol>, for a market still being recorded; a delisted market in the universe has no page, so offer that link rather than promising it. - Show one short proposal: condition, exact markets and dates/time zone, outcome definition and horizon, and metering. Interpretation is free; fresh computations can consume allowance. Label every unprovided value as a proposed assumption using chip provenance. Resolve unsupported fragments and ask only questions that materially change the study. Keep exact JSON and diagnostics inspectable in tool details, available on request.
- Wait for explicit human approval, then pass the same document to
run_scan. Changes require a new proposal and confirmation. The exact-document API does not store a proposal ID or a human approval receipt; client consent is required, and a model-supplied flag is not proof. On the supporting web release (b68c744 or later), returnedrqworkbench links load editable proposals and wait for Run; navigation never authorizes computation. - Answer the question first, preserving zero-match and inconclusive findings. Give matched/eligible counts, coverage exclusions, present/absent outcomes, both directions at the agreed horizon, and overlap/selection limitations. Read rates from
outcomes_summary, which covers all occurrences. Page rows are examples, never the denominator. Each rung already carries its matched count and rate, the unconditional rate, and their ratio aslift: quote those, and quote the count beside the rate. Noliftmeans no reference was available or the unconditional rate was zero; neither licenses estimating one. - Read the appended unconditional same-scope reference when available. It is not matched, comparable, or a causal control.
- Return the full reproducibility key with the answer and one relevant next action: a returned replay, a changed assumption, or an existing report. General saved studies and alerts remain web actions; private Radar hypotheses use the optional workflow below. Each handoff states how far back it sits; replay reach is a per-account entitlement, so an old moment can be refused at the web surface even though the occurrence is real. Use
next_pageonly with a cursor returned by the API.
Example instruction for an MCP client:
Did elevated VPIN and one-sided buying tend to precede a rise? Propose a precise
study before running anything. Label any suggested thresholds, markets, dates
and outcome definition so I can approve or change them.
The user does not need tool names, feature IDs or JSON. The client translates the confirmed proposal into the existing exact-document call.
Outcome-first and pointed-move workflow
For an outcome-first question, use outcome_first after agreeing the target and
scope. Preserve touched-within (reached) versus close-at-end (finished),
direction, size and horizon. Do not pass the outcome to the setup interpreter or
substitute the worked example. The target grammar is available at
edgedepth://research/outcome-first.
Report the population and both counted shares for each displayed reading. Help
the person choose one reading, retrieve its setup_first_rerun with full_rows: true on the unchanged request, and confirm that exact setup before run_scan.
Pass the original target as run_scan.measure outside the unchanged document:
kind: "touch" for reached, "close" for finished, plus the agreed direction,
fractional magnitude and horizon. The returned workbench link keeps that display
choice and remains an unrun draft. This does not alter the scan/cache key. The local selected-outcome addition below preserves the exact reading separately from closing-return exploration.
Read the original outcome target from the complete matched-set summary; request
full_outcomes if the projection omitted its rung. An unavailable rung is stated,
never replaced by the default horizon. The two reads have different denominators.
A same-period rerun remains exploratory; freeze the condition and use a separate
period before claiming validation.
A named moment can be inspected with snapshot_at; commonality compares multiple
supplied moments. The screenshot path below adds bounded explicit close-range investigation and the existing
detector geometry. Automatic move selection is not exposed through MCP. Historical marker browsing and general volume-tier resolution are not MCP
capabilities yet. The local resolve_scope addition below supplies explicit sector resolution after its web release. list_instruments supplies coverage and instrument provenance,
not sector membership. Use resolve_scope for recorded sector membership when available; otherwise use an exact supplied roster;
never invent group members or a numeric price. Replay handoffs open the web surface
and remain subject to the person's coverage and entitlement.
Tools
| Tool | What it does |
|---|---|
list_features | Returns the closed grammar registry: feature ids, types, ranges, operators, windows, sequence rules, limits, and error codes. search, feature_ids and compact narrow it. |
list_instruments | Returns the research universe and coverage. The default is a compact summary; use symbols: [...] for selected full records or full: true for the verbatim canonical universe. |
prepare_study | Free deterministic structured preparation, provenance and allowance estimate. Requires the web /prepare release first. |
interpret_prose | Turns prose into a proposed query document. It does not execute the query. Optional time_zone accepts an IANA time zone for calendar planning. |
run_scan | Executes a research_query.v2 document and returns result bytes with counts, denominators, outcomes, the unconditional same-scope reference, and the reproducibility key. Projected by default (rows, full_rows, full_counts). |
next_page | Continues a prior scan with its opaque cursor. Never construct cursors manually. |
ground_screenshots | Resolves host-extracted screenshot coordinates against recorded candle closes and coverage, retaining uncertainty and deduplicating event views. Free. |
investigate_move | Reads the existing lead-up and optional recorded detector geometry for a grounded event, and optionally prepares exact unrun setup documents. Free read; historical entitlement applies. |
snapshot_at | Reads registry feature values, window aggregates, and fired rules as of a recorded moment. |
base_rate | Counts matches and eligible buckets for one clause over a window. |
commonality | Finds the deterministic intersection across multiple moments with selection-bias caveats included. |
get_report | Retrieves a published report by its 8-character canonical hash. |
run_cohort | Compares what followed every match with what followed every other eligible predicate-false bucket. |
run_stratified | Partitions one matched population at its existing anchors into split-true, split-false, and split-absent outcome summaries. |
outcome_first | Starts from the MOVE instead of the setup: names an outcome (size, direction, horizon) and reports what the record was doing at five fixed offsets before every realised move like it. Each row carries two counted shares, the share before these moves and the share across every eligible minute in the same scope, plus the setup-first rerun that re-tests it the other way round. A descriptive read, never a rule search: a row is not a rule, a candidate or a finding, and the row order is display order. A scope with too few realised moves is refused with its counts and four adjustments, and a refusal spends nothing. Projected by default (rows, full_rows). |
No tool can trade, change market state or publish. Only the private hypothesis tools modify account research history, with separate permission. run_scan, run_cohort, run_stratified and outcome_first are annotated as metered computations because a fresh call can irreversibly consume an allowance unit. The other recorded-data tools are closed-world reads. interpret_prose is a free read that uses the configured external language interpreter.
Private Radar hypothesis workflow (local addition)
Requires the supporting web release, its optional API-key scope migration and
Radar admin access. Web precedes MCP. Existing grants and keys gain no permission;
request research:hypotheses alongside research:read and authorize a new grant,
or explicitly select the hypothesis option when creating a key. Ordinary accounts
remain denied. This is not a public release or hosted acceptance claim.
get_hypothesis: original observation (event), your saved record (id), or your list (neither).full: truerestores all receipt bodies. Reads run nothing.prepare_hypothesis: exact editable draft, four requests, revision, plan hash and an allowance estimate. No save, computation or approval is implied.save_hypothesis: explicit private save at the known revision; existing source and attempts stay immutable. Save Test/Keep/Reject without dropping failures.run_hypothesis: after human approval of the exact proposal, freeze all four requests and run the first. Use the returned continuation serially for the remaining requests under that same approval. Stop when it is absent. After an ambiguous timeout, read the saved history; running/unknown work is never retried.
Both web and MCP use one account history. Counts come from native whole-result summaries. A+B is primary; A/B are diagnostics against the same input-eligible population, including matches. Samples can contain supporting and contradictory cases but never supply the denominator. One Binance USDT perpetual, six supported numeric fields; population also permits native daily price/OI crossings after its backend release. Outcome is +5% MFE within four hours, before costs/fills. Development is at most 31 days, separated by seven full days from reserved evaluation; anchors end by September 11, 2026. Reserved evaluation is never run.
The server retains definitions, failures, response bytes, HTTP/allowance headers and reproducibility keys. Default output projects examples and omits raw receipts, with recovery stated. Imported browser evidence stays labeled caller-supplied. Storage and concurrency errors stop further work; reopening never computes. Existing metering remains: API computations can each consume allowance, cached work is free; the session UI retains its existing population-scan meter.
Research contract
- Validation failures pass through as
422 {"errors":[{"code":"...","message":"..."}]}. - Transport failures use the
{"error","code"}envelope. - Contract codes are machine-actionable. For errors such as
UNSUPPORTED_FEATUREorOUTCOME_IN_PREDICATE, calllist_features, repair the document, and retry. - Deterministic tools are exact-document, UTC-only tools.
interpret_prosemay use a time zone to plan dates, butrun_scan,run_cohort, andbase_ratenever reinterpret calendar language. - Reruns and ETag
304 Not Modifiedrevalidations are free.list_instrumentsETags are scoped to the requested summary, symbol projection, or full representation. - Interpretation is free and never debits the scan allowance. An unavailable scan allowance returns neutral
402 RESEARCH_ALLOWANCE_EXHAUSTEDmetadata without a checkout link.
REST API and documentation
The MCP server is a thin, deterministic interface to the public EdgeDepth Research API:
- REST API quickstart
- Authentication and API keys
- Credits, caching, and limits
- Versioned query grammar
- Reproducibility contract
- Worked API examples
- MCP connection guide
- How EdgeDepth Research works
- What you can ask
The default REST base used by the stdio package is https://app.edgedepth.com/api/v1/research.
Environment
Local stdio
| Variable | Default | Purpose |
|---|---|---|
EDGEDEPTH_API_KEY | None | Required for stdio |
Sourced from the repository README.
More in AI & Agents
- PonytailMakes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.109,599
- AgentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity39,079
- Frontend SlidesCreate beautiful slides on the web using a coding agent's frontend skills28,060
- Agent Skills Search ServerSearch and discover Agent Skills from the skills.sh registry. Powered by HAPI MCP server.25,980
- Agency Agents Zh🎭 267 个即插即用的 AI 专家角色 — 支持 Hermes Agent/Claude Code/Cursor/Copilot 等 18 种工具,覆盖工程/设计/营销/金融等 20 个部门。含 52 个中国市场原创智能体(小红书/抖音/微信/飞书/钉钉等)。搭配编排器 agency-orchestrator,一句话即可让多位专家按 DAG 自动协作。19,868
- Watermarks RemoverStrip multi-vendor AI provenance marks: Unicode text hygiene, statistical rewrite hooks, and C2PA/metadata from PNG/JPEG/SVG/PDF/DOCX/HTML/MD17,822