On-chain Bitcoin & Ethereum forensics for AI assistants
What is MCP? The Model Context Protocol is the open standard (Anthropic, Nov 2024) that lets AI assistants call external tools directly — no copy-paste, no manual API. Connect once, and Claude or Cursor can query our whale data inside your chat.
Connect Claude, Cursor, ChatGPT, or any MCP client to real-time whale-transaction data, per-address MVRV (profit/loss status of every wallet), and canonical Meiklejohn clusters (wallet grouping via common-input-ownership) — 30 specialized tools, click-to-install, no API keys to copy-paste.
Why this MCP rather than Glassnode's MCP?
Glassnode-MCP is excellent for aggregate metrics. We add what they don't: per-address forensics, multi-chain coverage, click-to-install OAuth, and an editorial doctrine for AI quote-generation.
Per-address MVRV
Compute realized cost vs market value for any single address using its UTXO history. Glassnode exposes only network-aggregate MVRV.
Canonical Meiklejohn clusters
3.85M clusters built from 1.68M multi-input transactions. Identify wallet families, custodians, and exchange pools — Glassnode-MCP doesn't expose cluster data.
OAuth click-to-install
Add to claude.ai with one click. Free tier auto-approves; Premium tier signs in via Telegram or Google. No API-key copy-paste, no env-var management.
Multi-chain (BTC + ETH)
Glassnode's MCP is BTC-only. We expose Ethereum whale data alongside Bitcoin — one MCP server, two chains.
Editorial AI doctrine
Editorial doctrine resource (swiss-whale://docs/doctrine) instructs AI clients to quote our data faithfully — descriptive observations, never trading signals.
Free tier permanent
1,000 calls/day, 90-day token TTL, no credit card. Glassnode requires API credits even for basic exploration.
30 tools across 6 categories
All tools are read-only. Tier-gated where indicated. Use any combination via natural-language prompts in your MCP client.
📍 Address-level forensics 6
whale_lookup(address)FreeFull profile: volume index, entity label, holdings, frequency, exchange-share.
whale_address_mvrv(address)FreePer-address MVRV with cross-validated balance + data-quality flag for high-rotation vaults.
whale_address_cluster(address)FreeCanonical Meiklejohn cluster (3.85M total). Falls back to co-occurrence for pure-receivers.
whale_address_history(address, limit, days)PremiumFull chronological tx history with USD-at-tx prices for cost-basis reconstruction.
whale_top_holders(limit, min_btc, confidence)FreeTop non-exchange whales by estimated holdings, confidence-filtered.
whale_dormant_wakeups(days, min_age_years)FreeLong-dormant addresses just becoming active.
🔗 Transaction-level 3
whale_recent(min_btc, flow_type, hours, limit)FreeRecent qualifying whale moves with cluster + entity context.
whale_tx_detail(txid)FreeSingle TX with block, fee, sender/recipient, flow type.
whale_entity_search(query)FreeSearch 1,100+ entity labels (Binance, Kraken, Coinbase, custodians).
📊 Aggregate metrics 8
whale_cohort_breakdown(days)FreeMega/Major/Standard/Small × flow-type counts.
whale_exchange_flows(days)FreeDaily in/out/net BTC across all tagged exchange addresses.
whale_hodl_wave(days)FreeUTXO age distribution across whale supply.
whale_sopr(days)FreeWhale-specific SOPR (UTXOs ≥ 100 BTC).
whale_miner_balances(days)FreeMining-pool BTC holdings over time.
whale_frequency_context(btc, flow)Free"Nth similar move this week" context.
whale_btc_price(hours, granularity)FreeBTC price + whale-event overlay.
whale_btc_indicators()FreePi Cycle Top distance + Stock-to-Flow current state.
🌐 Market context 3
whale_top_coins(symbol?)Free16 coins: price, 24h change, sparkline.
whale_fear_greed(days)FreeFear & Greed Index daily values from alternative.me.
whale_dominance(days)FreeBTC + ETH market-cap dominance trends.
📊 Benchmarks (vs traditional assets) 2
whale_benchmark_prices(symbols, days)FreeDaily-close prices for SPY / GLD / AGG / SP500 / NASDAQ (yfinance-sourced, since 1993 for S&P).
whale_benchmark_compare(period_days, baseline)FreeCumulative-return comparison: BTC vs S&P 500 / Gold / 70-30 portfolio (monthly rebalanced) over any window.
Ξ Ethereum (Glassnode-MCP is BTC-only) 2
whale_eth_recent(min_eth, hours, limit)FreeRecent ETH whale transactions with whale-type classification.
whale_eth_cohort_breakdown(days)FreeETH whale moves by amount × type.
⚙ Meta & tier-aware 2
whale_my_status()FreeShow your tier, scopes, rate limit, capabilities.
whale_export_csv(table, days, min_btc, limit)ResearchBulk CSV export from whale_trades / eth_whale_trades / whale_outputs (max 100k rows).
Plus 7 read-only resources: swiss-whale://help/getting-started, swiss-whale://help/glossary, swiss-whale://help/comparison, swiss-whale://docs/methodology, swiss-whale://docs/doctrine, swiss-whale://ledger/latest, swiss-whale://openapi.
Install in 30 seconds
Pick your client. The Free tier requires no signup. Premium tiers (Telegram, Google, or Email login) unlock higher rate-limits and Premium-only tools.
For any MCP-aware client that supports stdio transport — wraps our HTTP endpoint via the npm mcp-remote bridge:
npx -y mcp-remote https://mcp.btcwhalealerts.com/mcp
Works with Claude Desktop, Zed, Continue, JetBrains AI, and any client that auto-discovers MCP servers via npx. Requires Node.js ≥ 18. The mcp-remote package handles OAuth automatically — first run opens your browser for the consent flow, then caches the bearer token locally.
https://mcp.btcwhalealerts.com/mcp. Click Connect.Add to claude_desktop_config.json (or settings.json on newer plugin-aware versions):
{
"mcpServers": {
"swiss-whale": {
"url": "https://mcp.btcwhalealerts.com/mcp",
"transport": "streamable-http"
}
}
}
File location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Quit Claude Desktop completely (System Tray → Quit), then relaunch.
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"swiss-whale": {
"url": "https://mcp.btcwhalealerts.com/mcp"
}
}
}
Cursor reloads MCP config automatically; if not, restart Cursor.
Add to ~/.continue/config.json under experimental.modelContextProtocolServers:
{
"experimental": {
"modelContextProtocolServers": [
{
"name": "swiss-whale",
"transport": {
"type": "streamable-http",
"url": "https://mcp.btcwhalealerts.com/mcp"
}
}
]
}
}
Add to Zed's settings.json under context_servers:
{
"context_servers": {
"swiss-whale": {
"command": {
"path": "npx",
"args": ["mcp-remote", "https://mcp.btcwhalealerts.com/mcp"]
}
}
}
}
mcp-remote wraps our HTTP transport for stdio-only clients.
Direct JSON-RPC 2.0 over HTTP. Anonymous Free-tier:
# 1. Initialize a session
curl -i -X POST https://mcp.btcwhalealerts.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-06-18",
"capabilities":{},
"clientInfo":{"name":"curl","version":"1"}}}'
# Capture mcp-session-id from the response headers.
# 2. Acknowledge initialization
curl -X POST https://mcp.btcwhalealerts.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}'
# 3. List tools
curl -X POST https://mcp.btcwhalealerts.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
# 4. Call a tool
curl -X POST https://mcp.btcwhalealerts.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
"params":{"name":"whale_btc_indicators","arguments":{}}}'
For Premium/Research, complete the OAuth flow first via /oauth/authorize, then add Authorization: Bearer <token> to subsequent calls.
Workflow cookbook
Real chained workflows you can paste into Claude or Cursor today. Each example shows the actual output we got while building this server.
🔍 Identify a custodian wallet
Goal: figure out which exchange or institution controls a mystery whale address.
Tool:
whale_lookup → entity_label "Bitfinex", is_exchange true, exchange_share 99.87%.
Tool:
whale_address_cluster → method=canonical, cluster_size=131,729 addresses, cluster_total_btc=599,066.
Tool:
whale_lookup on each → all labeled "Bitfinex" via cluster-inferred propagation. Confirms entity.
Takeaway: Three calls, complete attribution. Glassnode-MCP cannot do this — they have no cluster tool.
💰 Compute per-address MVRV with data-quality awareness
Goal: is this whale wallet sitting on profit or near cost-basis?
Tool:
whale_address_mvrv → balance 1,173,567 BTC, MVRV 1.056, _data_quality.status "scaled_to_cache".
Takeaway: MVRV ≈ 1 means address sits at cost-basis — no distribution pressure. Tool also flags its own data-quality so AI can quote the caveat correctly.
🛌 Find dormant whales waking up
Goal: detect long-dormant addresses that just became active.
Tool:
whale_dormant_wakeups(days=30, min_age_years=5)Sample row: 3CgKHXR17eh2xCj2RGnH... — dormant 6.1 years, 129,534 BTC, just moved.
Tool:
whale_address_mvrv → realized_cost_usd from coins acquired in 2018 — likely massive unrealized gains.
📈 Detect distribution-zone risk
Goal: are whales currently distributing or accumulating?
Tools:
whale_btc_indicators + whale_sopr(days=90) + whale_cohort_breakdown(days=7)
Ξ Compare BTC vs ETH whale activity
Goal: which chain are whales more active on this week?
whale_cohort_breakdown(days=7) + whale_eth_cohort_breakdown(days=7)Compare: mega-bucket counts, flow-type ratios, total-BTC vs total-ETH (USD-normalized).
Takeaway: Glassnode-MCP can't do this comparison — they're BTC-only. Multi-chain analysis is a single-prompt question for our MCP.
📦 Bulk export for academic research Research
Goal: pull 100k whale transactions for offline statistical analysis.
Tool:
whale_export_csv(table="whale_trades", days=30, min_btc=100, limit=100000)Returns CSV string with txid, timestamp, total_btc, main_sender, main_recipient, fee, fee_rate, score.
Citation: Add to your methodology section: "On-chain data from Swiss Whale Intelligence (btcwhalealerts.com), accessed via MCP server."
📊 BTC vs traditional assets — honest benchmark comparison
Goal: position BTC's recent performance against the assets a private banker would actually compare it to.
Tool:
whale_benchmark_compare(period_days=365, baseline="BTC")
Takeaway: Real, unedited output from this server today. BTC was −18% while gold and the 70/30 baseline both delivered positive returns over the same window. The doctrine is: report what happened, not what should have happened. Honest comparison builds credibility over hype framings. Data via yfinance, daily-close, dividend-adjusted ETF series.
🐍 Jupyter Notebook templates — runnable in 5 minutes
Goal: pull our REST API data into a notebook, join with public market data, generate a research artefact you can paste into a report.
whale_flow_analysis.ipynb— daily exchange net-flow + entity breakdown + intent distribution + community sentiment join (30d window).address_profile_mvrv.ipynb— pick any whale address, reconstruct its window-limited cost-basis curve, compute mini-MVRV vs current BTC price.exchange_reserves_timeseries.ipynb— per-exchange reserves curves (Binance / Coinbase / Bitfinex / Kraken / OKX), 90d window, BTC price overlay, regime detection.
Stack: pandas + matplotlib + requests + yfinance. All notebooks self-contained: set SWI_TOKEN env var, run all cells, get plots. Doctrine-clean — every section flags whether it's an observation or a heuristic. Pull free Research-tier access for academic users via [email protected].
Tier comparison
Free tier covers most exploration use-cases. Premium adds higher caps and address-history. Research tier is for institutional / academic / production use.
| Free (anonymous) | Intelligence (Telegram / Google / Email login) | Research (paid) | |
|---|---|---|---|
| Price | 0 CHF | 90-day trial · then 49 CHF/month | 149 CHF/month |
| Rate limit | 1,000 calls / 24h | 10,000 calls / 24h | 100,000 calls / 30 days |
| Token TTL | 90 days | 365 days | 365 days |
| History lookback | 7 days | 365 days | 3,650 days (10 years) |
whale_address_history | ✗ | ✓ | ✓ |
whale_export_csv | ✗ | ✗ | ✓ 100k rows / call |
| Auth method | Anonymous (auto-approve) | Telegram / Google / Email login | Stripe-verified Bearer |
| Audit log | Yes (per-token) | Yes (per-token) | Yes + downloadable |
| Revoke anytime | ✓ | ✓ | ✓ |
🎓 Academic researchers at .edu / .ac.uk / EPFL / ETH / uni-* domains get the Research tier free. Email [email protected] from your institutional address.
Stripe checkout opens after a single Telegram message. Live MCP tokens auto-upgrade to the new tier within seconds of payment.
📘 Editorial doctrine for AI quotation
This is an information service, not a trading tool. The MCP exposes a structured doctrine resource (swiss-whale://docs/doctrine) that AI clients automatically read. When citing our data, AI assistants are instructed to:
- Provide descriptive observations ("28th similar move this week", "exchange outflow of N BTC"), never prescriptive trading signals.
- Avoid the terms "trading signal", "buy signal", "sell signal", "smart money", "Swiss precision", "guaranteed".
- Treat the
volume_index_calibratedscore as a methodology-transparent descriptive label, not a profitability predictor. - Frame bullish/bearish only as observed market state with a source, never as a forecast.
This is the reading-aid positioning: AI gives users a faithful summary of on-chain reality, not investment advice. Read the full doctrine via your MCP client or at /llms.txt.
FAQ
What is MCP and why should I care?
How is this different from Glassnode's MCP server?
swiss-whale://help/comparison.Is the Free tier really free, forever?
How do I sign in for Premium?
What's the data freshness?
Can I use this for academic research?
Is this financial advice?
GDPR / Swiss data compliance?
/oauth/revoke.What if MCP isn't supported by my AI client?
npx mcp-remote https://mcp.btcwhalealerts.com/mcp for stdio-only clients (Zed, older versions of Claude Desktop, etc.).