CryptoOpsec🧭DYOR

🔌 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.

Base URL https://dyor.cryptoopsec.com
OpenAPI schema https://dyor.cryptoopsec.com/openapi.json ↗ — the endpoint table below renders from it.
run it
uvicorn dyor.api.app:app --port 8077

MCP server

hosted · 11 tools

A 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.

Endpoint https://dyor.cryptoopsec.com/mcp
Transport streamable-http
add it (Claude Code)
claude mcp add --transport http dyor https://dyor.cryptoopsec.com/mcp

Connect 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.

Hosted (recommended)
Claude Code — one line
claude mcp add --transport http dyor https://dyor.cryptoopsec.com/mcp
Claude Desktop / stdio-only clients (mcp-remote bridge)
{
  "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.)
Or self-host (local stdio)
claude_desktop_config.json
{
  "mcpServers": {
    "dyor": {
      "command": "dyor-mcp"
    }
  }
}

Run the server yourself:

  • pip install . in the DYOR repo, then dyor-mcp is on PATH (or point command at /path/to/.venv/bin/dyor-mcp).
  • For your own HTTP host: dyor-mcp --transport streamable-http --port 8765http://localhost:8765/mcp.

REST endpoints

live from /openapi.json
loading schema…

MCP 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 — analyze one token
curl "https://dyor.cryptoopsec.com/api/analyze?q=rocket-pool&peer_mode=class"
curl — screen DeFi, tier B+, no flags
curl "https://dyor.cryptoopsec.com/api/screen?asset_class=defi&min_tier=B&no_flags=true"
JavaScript (fetch)
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);
Agent prompt (MCP)
Use DYOR to analyze Lido and
explain why it scored that tier,
then screen for L1s rated B or better.