Get up in 3 minutes.
Install the MCP or the CLI, set your key, register with your AI client. 99 tools available in natural language — or as first-class shell commands.
Quickstart
1 · Install
# MCP (Claude / Cursor / any MCP client) npx -y @blockchainacademics/mcp # or CLI (scripts / cron / notebooks) pipx install bca-mcp
2 · Set your API key
bca login # or set directly: bca auth set-key --key "bca_live_..." bca auth whoami # → tier: pro · 99 tools available
3 · Register with your client
bca mcp install claude-code # or: claude-desktop, cursor, vscode, openclaw
Then just ask: "Run DD on Hyperliquid." · "Get coverage index for $SOL." · "Trace the last whale outflow."
Install
Two distribution channels, same endpoint, same envelope. Pick whichever fits your workflow — or use both; one API key works across all of them.
MCP (npm)
npx -y @blockchainacademics/mcpRequires Node 18+. Or use pnpm add -g, yarn global add, bun add -g — whichever you prefer.
CLI (PyPI)
pipx install bca-mcpRequires Python 3.10+. pipx installs in an isolated venv (recommended). pip install works too if you manage your own environments.
CLI quickstart
First-class shell access to all 99 tools. The CLI wraps the same HTTP API the MCP uses, with typed commands, tab-completion, and JSON/table output.
$ pipx install bca-mcp $ bca login # opens browser, stores key at ~/.bca/config.toml $ bca news search "bitcoin etf" --limit 5 # first query $ bca indicator coverage HYPE 7d # proprietary signal $ bca agent research --topic "perp-dex" # async job, 2–5m
Every command supports --json (raw envelope), --as-of YYYY-MM-DD (time-travel, Enterprise tier), and --profile staging (switch between keys).
Authentication
One header: X-API-Key. Keys are scoped by tier (Free, Starter, Pro, Team, Enterprise). Both the CLI and MCP store your key locally at ~/.bca/config.toml and sign requests there. Your AI model never sees the key.
Config file
default_profile = "prod" [profiles.prod] api_key = "bca_live_xxxxxxxxxxxx" base_url = "https://api.blockchainacademics.com" [profiles.staging] api_key = "bca_test_xxxxxxxxxxxx" base_url = "https://staging-api.blockchainacademics.com"
Response envelope
Every tool returns the same shape. This is non-negotiable. Your agent doesn't have to learn six schemas for six vendors.
{
"data": {
// tool-specific payload
"symbol": "HYPE",
"coverage_index": 87.4,
"sources": 14,
"window_days": 7
},
"cite_url": "https://blockchainacademics.com/evidence/...",
"as_of": "2026-04-20T17:32:11Z",
"source_hash": "sha256:a3f2..c891"
}Fields
- data · tool-specific payload, always a JSON object
- cite_url · human-readable evidence page with supporting articles and on-chain refs
- as_of · ISO 8601 UTC timestamp of the data snapshot
- source_hash · content-addressed hash for reproducibility. Replay later and diff.
Tiers & access
Tools are tagged by minimum tier. Calling a tool your key doesn't have access to returns HTTP 403 with an upgrade link.
- FREE ~28 tools · news, entities, academy, spot prices, TVL
- STARTER ~45 tools · adds candles, wallet lookups, risk scores, unlocks
- PRO ~75 tools · adds proprietary indicators + agent-backed reports
- TEAM ~90 tools · adds memos, theses, tokenomics sims, bulk export
- ENTERPRISE all 99 · as-of snapshots, custom tools, SLA, on-prem
See the full tool catalog for per-tool tier info, or the pricing page for feature comparison.
Async tools
Agent-backed tools (generate_research_report, generate_investment_memo, generate_trade_thesis, etc.) return a job ID immediately. Typical runtime: 2–5 minutes.
{
"data": {
"job_id": "job_a3f2c891",
"status": "queued",
"eta_seconds": 260
},
"as_of": "2026-04-20T17:32:11Z"
}Poll get_agent_job_status with the job ID, or pass webhook_url when submitting to get notified on completion. Webhooks are preferred for production agents.
Error handling
Errors return standard HTTP status codes with a consistent JSON body.
{
"error": {
"code": "tier_insufficient",
"message": "get_coverage_index requires tier: pro",
"upgrade_url": "https://brain.blockchainacademics.com/pricing"
},
"as_of": "2026-04-20T17:32:11Z"
}Status codes
- 400 · invalid parameters or malformed query
- 401 · missing or invalid API key
- 403 · tier does not include this tool
- 429 · rate limit exceeded (see
Retry-Afterheader) - 5xx · upstream provider or our infra. Safe to retry with exponential backoff.
Attribution contract
Free-tier responses include an attribution field with a human-readable credit line. If you surface BCA data to end-users on Free, you must render this string alongside the result. Paid tiers (Starter and up) make attribution optional — ship it if you want to, skip it if you don't.
The cite_url field is stable and safe to link publicly; it resolves to the evidence page backing that specific response.
Claude Code
Fastest setup. Run once and Claude Code registers the MCP in your project's .mcp.json.
bca mcp install claude-code # now ask anything in Claude Code: > Run full DD on Hyperliquid. Tokenomics, team, audit, risk. > Which AI agent tokens have rising narrative strength this week?
Claude Desktop
Paste the snippet below into ~/Library/Application Support/Claude/claude_desktop_config.json on macOS (or the Windows / Linux equivalent). Restart Claude Desktop to pick up the new MCP.
{
"mcpServers": {
"bca-crypto-brain": {
"command": "npx",
"args": ["-y", "@blockchainacademics/mcp"],
"env": { "BCA_API_KEY": "bca_live_..." }
}
}
}Or let the CLI patch it for you: bca mcp install claude-desktop.
Cursor
Cursor picks up MCP config from the workspace. Run the setup in your project root.
cd your-project/
bca mcp install cursorLangChain
Use langchain-mcp-adapters to expose all 99 BCA tools to any LangChain agent — no glue wrappers required.
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({
"bca": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@blockchainacademics/mcp"],
"env": {"BCA_API_KEY": "bca_live_..."},
}
})
tools = await client.get_tools()
# → 99 MCP tools, typed + ready for any LangChain agentWorks identically with LangGraph, LlamaIndex (llama-index-tools-mcp), and any framework that understands MCP.
HTTP / REST
Every MCP tool is available as a REST endpoint if you don't use an MCP client or the CLI.
curl https://api.blockchainacademics.com/v1/indicators/coverage \ -H "X-API-Key: bca_live_..." \ -H "Content-Type: application/json" \ -d '{"entity_slug": "hyperliquid", "window": "7d"}'
Full OpenAPI 3.1 spec: api.blockchainacademics.com/docs.
Environment variables
Everything in the config file is overridable via env. Useful for CI, Docker, and serverless deployments where you don't want to persist a config file.
BCA_API_KEY=bca_live_... BCA_BASE_URL=https://api.blockchainacademics.com # override for staging / on-prem BCA_PROFILE=prod # picks [profiles.prod] from config.toml BCA_TIMEOUT_MS=30000 # per-request timeout BCA_TELEMETRY=0 # opt out of anonymous usage pings
Rate limits
Per-second limits sized by tier. Headers on every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
- Free · 1 req/sec · 2,000 calls/mo
- Starter · 5 req/sec · 25,000 calls/mo
- Pro · 30 req/sec · 250,000 calls/mo
- Team · 100 req/sec · 1,500,000 calls/mo
- Enterprise · custom, negotiated per contract
Hitting the limit returns 429 with Retry-After. Use exponential backoff with jitter.
Webhooks
Subscribe to async job completion, narrative shifts, or alert thresholds. Payloads are signed with HMAC-SHA256; verify with the X-BCA-Signature header.
{
"event": "job.completed",
"job_id": "job_a3f2c891",
"tool": "generate_research_report",
"result_url": "https://api.blockchainacademics.com/v1/agents/jobs/job_a3f2c891",
"completed_at": "2026-04-20T17:36:42Z"
}Register webhooks via create_webhook or the dashboard. Retries: 5 attempts with exponential backoff over 24h. Failed deliveries are visible in the dashboard for debugging.