
bitcoin-signals
Leading non-price Bitcoin signals over MCP: sovereign, hiring, hashrate.
What it can do
What data it sees
Do you need an account
No: the server works without sign-in
Leading non-price Bitcoin signals over MCP: sovereign, hiring, hashrate. Not financial advice.
How to connect
How to connect bitcoin-signals to Claude
The server address to paste into Claude settings:
https://coinbucha.com/api/mcp
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect bitcoin-signals to ChatGPT
The server address to paste into ChatGPT settings:
https://coinbucha.com/api/mcp
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect bitcoin-signals to Cursor
The server address to paste into Cursor settings:
https://coinbucha.com/api/mcp
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (8)
Raw names from tools/list. Only developers need these.
| scan_signals | Ranked cross-signal feed of CoinBucha's leading, non-price Bitcoin indicators. Returns { as_of, btc_price_usd, count, signals[], disclaimer }, where each signal carries id, type, title, value, unit, signal_strength (0-100), direction (tailwind | headwind | neutral), a one-line why, sources[] and its own as_of. Optional filters narrow by strength, direction or signal type. Example: {"min_strength": 70, "direction": "tailwind"} — call with {} for the full ranked list. Observational data; information, not financial advice. |
| get_hiring_signal | Hiring velocity across tracked Bitcoin and crypto-infrastructure employers, counted from their live ATS boards. Returns { as_of, companies[], note, why, disclaimer }; each company carries company, ticker, category, ats, careers_url, open_roles, open_roles_30d_ago, open_roles_90d_ago and the derived delta_30d, delta_90d and pct_30d. Example: {"company": "coinbase"} for one employer, or {} for every employer tracked. When a company filter matches no tracked employer the response adds coverage_note and tracked_count, saying that the name is outside the tracked set — a limit of coverage, not a finding about whether that company is hiring. Information, not financial advice. |
| get_sovereign_reserves | Nation-state Bitcoin holdings, ranked largest first. Returns { as_of, btc_price_usd, count, sovereigns[], disclaimer }; each row carries country_name, country_code, holdings_btc, status, tier (1 = largest holders), framework, sources[], its own as_of, and source_quality (primary = confirmed against the state's own publication; secondary = reported, not confirmed at source — derived from that row's sources[]). Filter by country name or ISO code, or by tier. Example: {"country": "US"} or {"tier": 1} — call with {} for the full ranking. Information, not financial advice. |
| get_treasury_holdings | Bitcoin held on the balance sheets of tracked public companies, in aggregate and by largest holder. Takes no arguments. Returns { as_of, total_btc, company_count, total_value_usd, top[], why, disclaimer }, where top[] lists the largest holders as { name, symbol, btc }. Example: {}. Information, not financial advice. |
| get_etf_flows | RETIRED: this tool is no longer advertised and serves no flow figures. No spot-Bitcoin-ETF flow source is available that is both key-free and permitted to redistribute, so CoinBucha never had a licensed figure to serve here. It remains callable so existing integrations do not break: it takes no arguments and returns { available: false, status, as_of, date_basis, unit, note, disclaimer }, stating the absence explicitly. Read that absence as absent — never as a zero flow. For live signals use scan_signals, get_sovereign_reserves, get_treasury_holdings, get_hiring_signal, get_network_signal or get_daily_brew. Example: {}. Information, not financial advice. |
| get_network_signal | Bitcoin network hashrate level and trend. Takes no arguments. Returns { as_of, hashrate_eh (exahashes per second), pct_30d, pct_90d, why, disclaimer }. Example: {}. Information, not financial advice. |
| get_daily_brew | The day's machine-readable digest of the whole signal set — the CoinBucha Daily Brew. Takes no arguments. Returns { date, btc_price_usd, headline, signals_summary[] }, one summary line per signal with its strength, direction and one-line why. Example: {}. Information, not financial advice. |
| get_signal_history | Dated strength history for one CoinBucha signal, newest first. Returns { as_of, signal_type, title, unit, count, points[], truncated, available_points, tier_window_points, freshness, why, disclaimer, cite }, where each point carries date, signal_strength (0-100) and direction (tailwind | headwind | neutral). Example: {"signal_type": "network_hashrate", "days": 30}. `signal_type` is one of sovereign_adoption, hiring_velocity, corporate_treasury, network_hashrate. Anonymous and free-tier callers receive the most recent points only and are told so by `truncated` and `available_points`; no figure is ever altered or interpolated to fit a window. Observational data; information, not financial advice. |