🔌 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 that 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, with 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, served athttp://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: resolution, asset class, 0 to 100 score and tier, gate flags, per-domain scores, market snapshot, ranked peers.
resolve_token(query)Resolve a name, symbol or contract to a canonical identity (every chain, explorer and project links) without scoring, to confirm it is the right token.
compare_tokens(queries[], peer_mode='stored')Analyze several tokens at once and get 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 to 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 or 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.