Demo tier
npx -y @blockchainacademics/mcp (or uvx bca-mcp) just works. No signup, no BCA_API_KEY, no copy-paste from a dashboard. The package ships with a public demo key baked in.
What you get
10 marquee tools, real data, real citations:
| Tool | What it does |
|---|---|
get_price | Spot price + 24h/7d/30d change for any token |
get_market_overview | Top-N tokens by market cap, with category tags |
get_trending | What entities and stories are spiking right now |
search_news | Full-text search across 3,500+ editorial articles |
get_recent_stories | Latest editorial coverage, ranked |
get_topic | Curated topic landing pages (DeFi, restaking, etc.) |
get_entity | Project / chain / person dossier with summary + recent mentions |
get_explainer | Canonical BCA Academy lesson (43 expert-written explainers) |
get_sentiment | Aggregated sentiment for a token or topic |
get_fear_greed | Crypto Fear & Greed index + interpretation |
Every response carries meta.tier: "demo" and meta.upgrade_url so your agent knows when it's on the demo path.
What you don't get
- Every other tool (agent-backed research, on-chain dossiers, proprietary indicators, KOL influence and so on) returns HTTP 403 with
BCA_TIER_LOCKEDand a signup link in the error body. - Per-user quotas. The demo bucket is shared globally; heavy days can hit the cap.
Rate limits
- 100 calls per day, shared across all demo users globally.
- 20 calls per IP per day so one heavy user can't drain the bucket for everyone.
- 1 request per second soft cap.
When you hit either cap you get HTTP 429 with a Retry-After header and the signup URL in the error body. The agent can surface that to the user.
Upgrade in 30 seconds
Get a free key at blockchainacademics.com/crypto-api/signup. The free tier is 2,000 calls a month, all 105 tools unlocked, no shared bucket. Paid plans are on Pricing.
Once you have a key, drop it into your client config:
{
"mcpServers": {
"blockchainacademics": {
"command": "npx",
"args": ["-y", "@blockchainacademics/mcp"],
"env": { "BCA_API_KEY": "bca_..." }
}
}
}{
"mcpServers": {
"blockchainacademics": {
"command": "npx",
"args": ["-y", "@blockchainacademics/mcp"],
"env": { "BCA_API_KEY": "bca_..." }
}
}
}export BCA_API_KEY=bca_...
npx -y @blockchainacademics/mcpHow it works under the hood
The npm and PyPI packages embed a single public key (bca_demo_…) as a build-time constant. When BCA_API_KEY is unset, the client falls back to that value and sends it as X-API-Key. The backend recognises the literal string via constant-time compare, synthesises an in-memory APIKey row with tier: "demo" (no DB lookup), checks the request path against the 10-tool allowlist, applies the two-bucket rate limiter, and dispatches.
On stdio startup the server emits a one-time banner to stderr so the MCP host log shows the demo mode is active:
[bca-mcp] Running in DEMO mode. Limited to ~10 tools, shared rate cap.
[bca-mcp] Get a free key for full access: https://blockchainacademics.com/crypto-api/signup?ref=mcp-first-run
[bca-mcp] Set: export BCA_API_KEY=bca_... (or add to your client config)Stderr is safe because stdout is owned by the MCP stdio transport. The banner appears once per server boot, never per tool call.