bitcoin-signals
Leading non-price Bitcoin signals over MCP: sovereign, hiring, hashrate. Not financial advice.
Should I use this
Quality & Safety
Findings (11)
- HIGH
- MEDIUMin scan_signals
- MEDIUMin get_hiring_signal
- MEDIUMin get_sovereign_reserves
- MEDIUMin sovereign_diff
- MEDIUMin get_treasury_holdings
- MEDIUMin get_etf_flows
- MEDIUMin get_network_signal
- MEDIUMin get_bitcoin_company_calendar
- MEDIUMin get_daily_brew
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"bitcoin-signals": {
"url": "https://coinbucha.com/api/mcp"
}
}
}Remote endpoints
https://coinbucha.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟢scan_signals(min_strength, direction, signal_types)
Ranked cross-signal feed of CoinBucha's leading, non-price Bitcoin indicators. Returns { as_of, btc_price_usd, count, signals[], disclaimer, attribution, source_terms }, 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. CoinGecko values carry attribution: "Powered by CoinGecko" and source_terms. Observational data; information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {
"min_strength": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Only signals with strength >= this"
},
"direction": {
"type": "string",
"enum": [
"tailwind",
"headwind",
"neutral"
],
"description": "Keep only signals carrying this direction label"
},
"signal_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "e.g. ['sovereign_adoption','hiring_velocity']"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_hiring_signal(company)
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. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"description": "Case-insensitive company filter"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_sovereign_reserves(country, tier)
Nation-state Bitcoin holdings, ranked largest first. Returns { as_of, btc_price_usd, count, sovereigns[], disclaimer, attribution, source_terms }; 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. CoinGecko values carry attribution: "Powered by CoinGecko" and source_terms. Information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {
"country": {
"type": "string",
"description": "Country name or ISO code"
},
"tier": {
"type": "integer",
"minimum": 1,
"maximum": 5,
"description": "Holding tier; 1 = largest holders"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢sovereign_diff(from, to)
What changed between two frozen, immutable sovereign-reserve snapshots. Takes optional { from, to } snapshot dates (YYYY-MM-DD); defaults to the two newest. Returns { status, as_of, from, to, counts, added[], removed[], changed[], envelope[], disclaimer, cite }, where each changed row carries country_code, country_name, source_quality { from, to } and changes[] of { field, basis (reported | derived), from, to }. With fewer than two snapshots it returns status "insufficient_snapshots" and diff: null — not an empty diff. Example: {"from": "2026-09-04", "to": "2026-10-01"}. CoinGecko values carry attribution: "Powered by CoinGecko" and source_terms. The whole frozen series in one call: the per-call x402 route /api/paid/sovereign-snapshots (USDC); the per-date snapshot files stay free. Information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Earlier snapshot date, YYYY-MM-DD"
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Later snapshot date, YYYY-MM-DD"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢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, attribution, source_terms }, where top[] lists the largest holders as { name, symbol, btc }, and listed_exposure[] lists every company in the CoinBucha Listed Bitcoin record as { id, name, ticker, venue, status, btc, page, exposure, record_check } — exposure = { btc_per_share, usd_of_bitcoin_per_share, usd_of_bitcoin_per_1000_usd, btc_per_1000_usd, btc_pct_of_market_cap, as_of { holdings, shares, btc_usd_close, share_close } }, arithmetic on primary filings and closes. Example: {}. CoinGecko values carry attribution: "Powered by CoinGecko" and source_terms. Information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {}
}🟢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. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {}
}🟢get_network_signal
Bitcoin network hashrate level and trend, derived from difficulty (expected, 2016-block epoch). hashrate_eh = difficulty × 2^32 / 600 s for the epoch in force, read from block headers — an expected rate, not a measured one. Takes no arguments. Returns { as_of, hashrate_eh (exahashes per second), pct_30d, pct_90d, hashrate_source, basis, difficulty, difficulty_height, difficulty_source_url, why, disclaimer }. Example: {}. Information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {}
}🟢get_bitcoin_company_calendar(ticker, days_ahead)
Next results dates and SEC 10-Q/10-K filing windows of listed bitcoin holders (MSTR, COIN, MARA, HOOD and others): dates and windows from issuer and exchange sources. Takes optional { ticker, days_ahead (1-60, default 60) }. Returns { as_of, today, days_ahead, ticker, count, available, truncated, events[], full, disclaimer, cite, data_contract }; up to 5 events, soonest first, each with ticker, issuer, event_type, event_name, date_status, source_url, checked and either event_date (an issuer-announced date) or window_start/window_end with the SEC rule (a statutory window — never a date). date_status is the record's, verbatim: announced_primary_confirmed, occurred_primary_confirmed or unknown_exact_date_statutory_window. Example: {"ticker": "MSTR"} or {"days_ahead": 14}. Every row with history, rule locators and recorded outcomes: the per-call x402 route /api/paid/calendar (USDC), named with its price in `full`; the same rows stay free as JSON and CSV. Information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {
"ticker": {
"type": "string",
"minLength": 1,
"maxLength": 12,
"description": "One ticker, e.g. MSTR, COIN, 3350"
},
"days_ahead": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"description": "How many days ahead to look (1-60, default 60)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢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[], attribution, source_terms }, one summary line per signal with its strength, direction and one-line why. Example: {}. CoinGecko values carry attribution: "Powered by CoinGecko" and source_terms. Information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {}
}🟢get_signal_history(signal_type, days)
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. Beyond that window: a cut answer carries `more`, naming the per-call x402 route /api/paid/signal-history (every signal's full series in one call, USDC) and whether it is open now; or data_contract.bulk_url names the free CSV of the signal's dated figures. Observational data; information, not financial advice. Every answer carries data_contract { source, as_of, status, corrections_url, license }. This server answers bounded questions, one question, one answer; for bulk, history, backfills and scheduled pulls use the CSVs and datapackage.json at https://coinbucha.com/data.
Input Schema
{
"type": "object",
"properties": {
"signal_type": {
"type": "string",
"enum": [
"sovereign_adoption",
"hiring_velocity",
"corporate_treasury",
"network_hashrate"
],
"description": "Which signal's history to return"
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"description": "How many of the most recent dated points to return (1-90)"
}
},
"required": [
"signal_type"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence