Bitcoin signals, over MCP.
8 tools, the same data as the dashboard, no API key.
https://coinbucha.com/api/mcpAdd it as a Streamable HTTP server. From Claude Code:
claude mcp add --transport http coinbucha https://coinbucha.com/api/mcpClaude Desktop, Claude.ai and Cowork
- Open Customize → Connectors.
- Click "+", then "Add custom connector".
- Paste the server URL: https://coinbucha.com/api/mcp
- Click "Add". Leave the OAuth fields under Advanced settings empty — this server needs no key.
- Enable it per conversation from the "+" button → Connectors.
Do NOT put this URL in claude_desktop_config.json. That file's schema validates stdio servers only (`command` is required); a `url` / `type: "http"` entry is rejected, and recent builds rewrite the file and drop your whole mcpServers block with it.
Any other MCP client (raw Streamable HTTP)
- POST JSON-RPC to https://coinbucha.com/api/mcp with Accept: application/json, text/event-stream.
- Send `initialize` first; the server replies with the protocol version it negotiated.
- Then call `tools/list` to enumerate the tools, and `tools/call` to run one.
curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'Responses come back as a text/event-stream frame ("event: message" + one "data:" line), even for a single request. The JSON-RPC object is on the data line.
Tools
Every answer carries a data contract (source, as_of, status, corrections_url, license). For bulk and history use the CSVs and data package.
scan_signals — Scan Bitcoin signals
Input: min_strength?: number · direction?: tailwind | headwind | neutral · signal_types?: string[]
get_hiring_signal — Bitcoin hiring velocity
Input: company?: string
get_sovereign_reserves — Sovereign Bitcoin reserves
Input: country?: string · tier?: integer
sovereign_diff — Sovereign Bitcoin snapshot diff
Input: from?: string · to?: string
get_treasury_holdings — Corporate Bitcoin treasuries
Input: no arguments
get_network_signal — Bitcoin network hashrate
Input: no arguments
get_daily_brew — CoinBucha Daily Brew
Input: no arguments
get_signal_history — Bitcoin signal strength history
Input: signal_type: sovereign_adoption | hiring_velocity | corporate_treasury | network_hashrate · days?: integer
Retired: get_etf_flows still answers for clients already wired to it, and returns no figures.
curl for each tool
curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"scan_signals","arguments":{}}}'curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_hiring_signal","arguments":{"company":"Block"}}}'curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_sovereign_reserves","arguments":{"tier":1}}}'curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"sovereign_diff","arguments":{"from":"2026-09-04","to":"2026-10-01"}}}'curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_treasury_holdings","arguments":{}}}'curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_network_signal","arguments":{}}}'curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_daily_brew","arguments":{}}}'curl -s -X POST https://coinbucha.com/api/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2025-11-25' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_signal_history","arguments":{"signal_type":"network_hashrate","days":30}}}'Auth & rate limits
Anonymous: 30 requests/min per IP. A free key raises that to 600/min, sent as Authorization: Bearer <key>.
Request a free key.
30 → 600 requests/min. No account, no card; the key arrives by email.