Bitpoort MCP — integration guide for AI agents

68 MCP tools and 206 REST paths (224 OpenAPI operations) live across Ethereum, Bitcoin, and Hyperliquid, with Polygon node coverage in progress. Free instant API key, no signup. The snippets below are paste-ready -- replace bp_YOUR_KEY with a key from POST https://api.bitpoort.com/v1/keys. Jump: quickstart · get-key · mcp-client · claude-code · claude-desktop · cursor · vscode · codex-openclaw · anthropic-sdk · openai-sdk · curl · tools · discover

1. Get a key (no signup, no email)

curl -X POST https://api.bitpoort.com/v1/keys

Response includes api_key (a bp_ string), tier: free, 60 req/min limit, 10,000/day cap, 90-day expiry, usage.docs, usage.agents_landing, usage.discovery_manifest, and the MCP config snippet under usage.mcp.config.

2. Plug into your MCP client

Claude Code (1.0+, native HTTP MCP)

claude mcp add bitpoort \
  --transport http \
  --url https://mcp.bitpoort.com/ \
  --header "X-API-Key: bp_YOUR_KEY"

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json)

{
  "mcpServers": {
    "bitpoort": {
      "type": "http",
      "url": "https://mcp.bitpoort.com/",
      "headers": {"X-API-Key": "bp_YOUR_KEY"}
    }
  }
}

Cursor (~/.cursor/mcp.json or .cursor/mcp.json)

{
  "mcpServers": {
    "bitpoort": {
      "url": "https://mcp.bitpoort.com/",
      "headers": {"X-API-Key": "bp_YOUR_KEY"}
    }
  }
}

VS Code (.vscode/mcp.json, 1.99+ with Copilot Chat)

{
  "servers": {
    "bitpoort": {
      "type": "http",
      "url": "https://mcp.bitpoort.com/",
      "headers": {"X-API-Key": "bp_YOUR_KEY"}
    }
  }
}

Codex / OpenClaw (~/.codex/config.toml, via mcp-remote stdio shim)

[mcp_servers.bitpoort]
command = "npx"
args = ["-y", "mcp-remote", "https://mcp.bitpoort.com/", "--header", "X-API-Key:bp_YOUR_KEY"]

Anthropic SDK (Python, MCP Connector beta)

import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    mcp_servers=[{
        "type": "url",
        "url": "https://mcp.bitpoort.com/",
        "name": "bitpoort",
        "authorization_token": "bp_YOUR_KEY",
    }],
    messages=[{"role": "user", "content": "What large ETH transfers happened in the last hour?"}],
    extra_headers={"anthropic-beta": "mcp-client-2025-04-04"},
)

OpenAI Agents SDK (Python)

from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

bitpoort = MCPServerStreamableHttp(
    name="bitpoort",
    params={"url": "https://mcp.bitpoort.com/", "headers": {"X-API-Key": "bp_YOUR_KEY"}},
)
async with bitpoort as server:
    agent = Agent(name="onchain-analyst", mcp_servers=[server], model="gpt-4o")
    print((await Runner.run(agent, "Latest whale activity on ETH?")).final_output)

Plain JSON-RPC (curl)

# 1. Initialize -- capture the Mcp-Session-Id header
SESSION_ID=$(curl -sD - -X POST https://mcp.bitpoort.com/ \
  -H "X-API-Key: bp_YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}' \
  | awk -F': ' 'tolower($1)=="mcp-session-id"{gsub(/\r/,"",$2);print $2}')

# 2. List tools
curl -X POST https://mcp.bitpoort.com/ \
  -H "X-API-Key: bp_YOUR_KEY" -H "Mcp-Session-Id: $SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

# 3. Call ask_blockchain
curl -X POST https://mcp.bitpoort.com/ \
  -H "X-API-Key: bp_YOUR_KEY" -H "Mcp-Session-Id: $SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"ask_blockchain","arguments":{"question":"Recent whale activity on ETH","chain":"ETH"}}}'

3. All 68 MCP tools (canonical)

Matches the live tools/list response. Schema for each tool (params, defaults, min/max bounds) is returned by tools/list.

Total: 2+3+7+5+5+9+3+5+8+3+4+7 = 61. Standard query contract on most list endpoints: chain, limit, min_usd, since, until (ISO 8601), cursor (opaque keyset paginator where supported). Responses include next_cursor + has_more for keyset-paginated endpoints.

3a. Chain coverage

ChainStatusBacked by
Ethereum (ETH)liveErigon archive node + full pipeline (whales, flows, RAG, signals)
Bitcoin (BTC)liveBitcoin Core full node + 2.3M-address entity registry, CIOH clustering
Hyperliquid (HL)livenon-validator HL node + perps poller (positions, funding, liquidations)
Polygon (MATIC)node-onlyErigon archive node live; public indexing pipeline pending. Chain enum accepts MATIC for forward compat but data is currently thin.

3b. One-shot smoke test

If all five steps return successful JSON matching the expected shapes, your MCP integration is healthy end-to-end.

KEY=$(curl -s -X POST https://api.bitpoort.com/v1/keys | python3 -c "import sys,json;print(json.load(sys.stdin)['api_key'])")
# Expected: KEY starts with "bp_". POST /v1/keys returns api_key, tier="agent",
# rate_limit=20, daily_cap=1500, scopes[], expires_at, usage{...}.

# 1. Auth identity (REST)
curl -H "X-API-Key: $KEY" https://api.bitpoort.com/v1/auth/me
# Expected: {api_key_id:<int>, name:"instant-agent", role:"agent",
#   rate_limit:20, scopes:[...], sso:null}

# 2. Sample REST query
curl -H "X-API-Key: $KEY" "https://api.bitpoort.com/v1/whales/recent?chain=ETH&limit=3"
# Expected: {count:<=3, chain:"ETH", min_usd:100000.0, next_cursor, has_more,
#   whales:[{tx_hash,block_number,from/to_address,value_usd,timestamp,...}]}

# 3. MCP initialize -- capture session id
SESSION=$(curl -sD - -X POST https://mcp.bitpoort.com/ \
  -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"1"}}}' \
  | awk -F': ' 'tolower($1)=="mcp-session-id"{gsub(/\r/,"",$2);print $2}')
# Expected: SESSION is a UUID. result.serverInfo = {name:"bitpoort", version:"3.5.0"}.
# result.instructions opens with "Bitpoort provides real-time blockchain
# intelligence live across Ethereum, Bitcoin, and Hyperliquid..."

# 4. MCP tools/list (68 tools)
curl -X POST https://mcp.bitpoort.com/ -H "X-API-Key: $KEY" -H "Mcp-Session-Id: $SESSION" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# Expected: result.tools length == 68.

# 5. MCP tool call
curl -X POST https://mcp.bitpoort.com/ -H "X-API-Key: $KEY" -H "Mcp-Session-Id: $SESSION" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_network_summary","arguments":{"chain":"ETH"}}}'
# Expected: result.content[0].text is a JSON string. Parsed:
# {chain:"ETH", health_score, latest_block, hourly{...}, whales_1h{...}}.

4. Discover programmatically