Docs navigation

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:

ToolWhat it does
get_priceSpot price + 24h/7d/30d change for any token
get_market_overviewTop-N tokens by market cap, with category tags
get_trendingWhat entities and stories are spiking right now
search_newsFull-text search across 3,500+ editorial articles
get_recent_storiesLatest editorial coverage, ranked
get_topicCurated topic landing pages (DeFi, restaking, etc.)
get_entityProject / chain / person dossier with summary + recent mentions
get_explainerCanonical BCA Academy lesson (43 expert-written explainers)
get_sentimentAggregated sentiment for a token or topic
get_fear_greedCrypto 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_LOCKED and 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:

json
{
  "mcpServers": {
    "blockchainacademics": {
      "command": "npx",
      "args": ["-y", "@blockchainacademics/mcp"],
      "env": { "BCA_API_KEY": "bca_..." }
    }
  }
}

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