🔌 API & MCP
Everything in DYOR is available programmatically — call the REST API from any script or frontend, or plug the MCP server into an AI agent (Claude, etc.) so it can vet tokens as native tools. Same scoring engine behind both.
Research aid, not financial advice.
REST API
checking…FastAPI · JSON · CORS-open for local dev. For scripts, dashboards, and this web app.
https://dyor.cryptoopsec.comuvicorn dyor.api.app:app --port 8077MCP server
hosted · 11 toolsA Model-Context-Protocol server named dyor — exposes the engine as tools an AI agent can call directly. No install: just point your client at the URL.
https://dyor.cryptoopsec.com/mcpstreamable-httpclaude mcp add --transport http dyor https://dyor.cryptoopsec.com/mcpConnect an AI agent (MCP)
Point any MCP-capable client at the hosted endpoint — nothing to install — then ask it “analyze rocket pool” or “screen for DeFi tokens tier B+ with no flags”. The agent calls the tools and reasons over the results.
claude mcp add --transport http dyor https://dyor.cryptoopsec.com/mcp{
"mcpServers": {
"dyor": {
"command": "npx",
"args": ["mcp-remote", "https://dyor.cryptoopsec.com/mcp"]
}
}
}- Endpoint:
https://dyor.cryptoopsec.com/mcp(streamable-http). Cursor, Claude Desktop “Connectors”, and other URL-based clients can use it directly. - Tools resolve tokens cross-chain and collect live data on first call, so the first request can take a few seconds.
- Read-only research surface — no API key required. (Hosted by CryptoOpsec; usage may be rate-limited.)
{
"mcpServers": {
"dyor": {
"command": "dyor-mcp"
}
}
}Run the server yourself:
pip install .in the DYOR repo, thendyor-mcpis on PATH (or pointcommandat/path/to/.venv/bin/dyor-mcp).- For your own HTTP host:
dyor-mcp --transport streamable-http --port 8765→http://localhost:8765/mcp.
REST endpoints
live from /openapi.jsonMCP tools
analyze_token(query, peer_mode='stored', penalize_missing_core=None)Vet ONE token end-to-end: resolve + asset class + 0–1 score & tier + gate flags + per-domain scores + market snapshot + ranked peers.
resolve_token(query)Resolve a name/symbol/contract to a canonical identity (every chain, explorer + project links) WITHOUT scoring — confirm you've got the right token.
compare_tokens(queries[], peer_mode='stored')Analyze several tokens at once → a compact ranked like-for-like summary (token, class, score, tier, coverage, flags).
analyst_memo(query, peer_mode='class')Reasoned markdown memo: verdict, drivers, risks, and 'break your thesis' answered with the data.
screen_tokens(asset_class?, min_tier?, min_score?, no_flags?, min_real_yield?, max_fdv_mcap?, limit=25)Screen the saved universe by criteria → matching tokens ranked high→low.
score_portfolio(tokens[], peer_mode='class')Score holdings: tier distribution, asset-class exposure, average score, flagged holdings, barbell notes.
build_barbell(n_satellites=5)BTC monetary anchor + the top-N ungated A/B satellites from the saved universe.
backtest()Per-tier average forward return + win-rate from persisted runs.
narratives(by='market_cap_change_24h', top=20)Which crypto sectors are heating up — CoinGecko categories ranked by momentum / market cap / volume.
asset_classes()List the asset classes and what each is judged on, to explain WHY a token scored as it did.
methodology()Weights, tier thresholds, gates, the treasury hurdle, and the metric glossary — to cite the scoring transparently.
Usage examples
curl "https://dyor.cryptoopsec.com/api/analyze?q=rocket-pool&peer_mode=class"curl "https://dyor.cryptoopsec.com/api/screen?asset_class=defi&min_tier=B&no_flags=true"const r = await fetch(
"https://dyor.cryptoopsec.com/api/analyze?q=uniswap"
);
const a = await r.json();
console.log(a.score.tier, a.score.final_score);Use DYOR to analyze Lido and
explain why it scored that tier,
then screen for L1s rated B or better.