6-chain on-chain 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 across BTC, ETH, SOL, USDT, Tokenized Gold (XAUT + PAXG), USDC, Wrapped BTC, tokenized RWA, and Polymarket prediction markets, plus per-address MVRV (profit/loss status of every wallet), canonical Meiklejohn clusters (wallet grouping via common-input-ownership), and BTC L1 network health — 72 specialized tools, click-to-install, no API keys to copy-paste.
Why this MCP server?
Six things we offer that no other on-chain MCP server does today: per-address forensics, 6-chain coverage, BTC L1 network health, click-to-install OAuth, a plain-English AI explainer, 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-MCP and CryptoQuant-MCP both expose only network-aggregate MVRV.
Canonical Meiklejohn clusters
3.85M BTC clusters + 165 ETH clusters built from common-input-ownership heuristics. Identify wallet families, custodians, and exchange pools — no other MCP server exposes 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.
6-chain coverage
Glassnode-MCP is BTC-only, CryptoQuant-MCP is BTC + ETH. We cover six chains: BTC + ETH + SOL + Tron + Base + Polygon — spanning USDT, USDC, Tokenized Gold (XAUT + PAXG), Wrapped BTC, tokenized RWA, and Polymarket prediction markets — all under one OAuth session.
BTC L1 network health
Hash-rate (1d/1w/30d trend), mempool fee percentiles, difficulty adjustment, mining-pool concentration with Gini coefficient. whale_btc_l1_health() + whale_mempool_status() + whale_mining_concentration() — derived from our own Bitcoin Core full node, not third-party APIs.
Plain-English AI explainer
whale_explain(target) — pass any address, txid, or glossary term across all 6 chains. Returns a 100–250 word plain-English explanation with jargon defined inline. Uses Claude Haiku with a 78%+ pass-rate on our 570-case eval suite.
How we compare to other on-chain MCP servers
Three real MCP servers exist today in on-chain crypto analytics. (Most "competitors" — Nansen, Arkham, Lookonchain, whale-alert.io — only ship Web/API/Twitter, no MCP integration). Here is the side-by-side, sourced from our 2026-06 MCP-discovery audit.
| Capability | Swiss Whale Intelligence | Glassnode | CryptoQuant |
|---|---|---|---|
| Tools exposed via MCP | 72 | 6 | 9 |
| Chain coverage | BTC · ETH · SOL · Tron · Base · Polygon | BTC only | BTC · ETH |
| Per-address MVRV | ✓ (any wallet) | — (network-aggregate only) | — (network-aggregate only) |
| Wallet clustering (Meiklejohn) | ✓ (3.85M BTC + 165 ETH) | — | — |
| BTC L1 network health | ✓ (own Bitcoin Core node) | — (hash-rate only, aggregate) | — |
| Plain-English AI explainer | ✓ whale_explain() | — | — |
| Authentication | OAuth 2.1 click-to-install | API key copy-paste | API key copy-paste |
| Free tier | 1,000 calls/day permanent | Limited credits (trial only) | Free tier: 10 calls/day |
| Editorial doctrine for AI | ✓ /docs/doctrine | — | — |
| Listed in MCP directories | 10 (Registry, Glama, Smithery, PulseMCP, mcp.so, mcpmarket, Cursor.directory, OmniMCP, Anthropic Connectors, awesome-mcp) | ~3 (Anthropic Connectors, Smithery) | ~2 (Smithery, Glama) |
Audit date: 2026-06-01. Source: live MCP tools/list probes + each vendor's public MCP documentation. If you spot an inaccuracy, email contact@swisswhaleintelligence.com — we update this matrix monthly.
72 tools across 17 categories — full 6-chain coverage
All tools are read-only. Tier-gated where indicated. Use any combination via natural-language prompts in your MCP client.
📍 Address-level forensics 9
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.
whale_entity(address)FreeResolve any address to its canonical cross-chain entity + activity context.
whale_address_story(address)FreeTrader-pattern story for one address — sober, anti-FOMO, evidence-anchored.
whale_lookup_any(address)PremiumPublic-address lookup for any BTC address (not just tracked whales).
🔗 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 5
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.
whale_eth_address_cluster(address)FreeL1-label / L3-graph hybrid cluster for any ETH address (165 clusters, conf 0.4–0.95).
whale_eth_cluster_members(cluster_id)FreeMember-addresses of a known ETH cluster.
whale_eth_mvrv(address)FreePer-address ETH MVRV with hard-invariant aggregator-wallet detection (returns NULL where math doesn't apply).
◎ Solana 4
whale_sol_recent(min_sol, hours, limit)FreeRecent SOL whale transactions tracked across 8 watched-CEX wallets.
whale_sol_address(address)FreeSOL address profile: balance, labels, recent flows.
whale_sol_top_movers(days)FreeTop inbound/outbound SOL movers vs a watched-set of CEX cold-wallets.
whale_sol_flow_breakdown(days)FreeSOL net-flow + flow-type distribution across the watched-set.
₮ Tether USDT (ETH + Tron) 4
whale_usdt_recent(min_usdt, hours, chain)FreeRecent USDT whale transactions across ETH + Tron (filterable by chain).
whale_usdt_address(address)FreeUSDT address profile across both chains.
whale_usdt_lookup(address_or_txid)FreeUnified USDT lookup: address OR transaction.
whale_usdt_treasury_events(days)FreeTether Treasury mint + burn events (supply-change signals).
🏆 Tokenized Gold (XAUT + PAXG) 3
whale_gold_recent(min_oz, hours, token)FreeRecent XAUT or PAXG whale transactions (≥40 troy ounces).
whale_gold_supply()FreeCurrent XAUT + PAXG circulating supply, vault-backing reports.
whale_gold_top_holders(token, limit)FreeTop holders of XAUT or PAXG, with entity-labels where known.
⚡ BTC L1 network health 3
whale_btc_l1_health()FreeAggregate score (0–100) + hash-rate + difficulty + mempool + mining concentration. One-shot snapshot.
whale_mempool_status()FreePending tx count + size + fee percentiles (p10/p25/p50/p75/p90) + next-block fee estimate.
whale_mining_concentration(days)FreeGini coefficient + top-10 pool breakdown for last N days. Sourced from our own Bitcoin Core node.
💬 AI explainer & glossary 3
whale_explain(target, lang)FreePlain-English explanation (100–250 words) for any address, txid, or glossary term across all 6 chains. EN / DE / ES. Jargon inline-defined.
whale_glossary_lookup(term)Free113-term canonical glossary lookup (definition + snippet + comparison-anchor).
whale_glossary_search(query)FreeFull-text search the glossary by partial term / alias / definition keyword.
🧠 Behavioural & regime analysis 7
whale_behavioural_cohorts(days)FreeSegment active BTC whales by behaviour — accumulators, distributors, rotators — not just volume.
whale_eth_behavioural_cohorts(days)FreeSame behavioural segmentation for active ETH whales.
whale_phase_shifts(min_btc)FreeWhich BTC whales recently flipped accumulation ↔ distribution.
whale_eth_phase_shifts()FreeWhich ETH whales recently flipped accumulation ↔ distribution.
whale_market_regime()FreeCurrent Bitcoin market regime as a short descriptive label + evidence.
whale_cohort_analog(top)FreePast weeks with a whale-cohort structure like now — and what BTC did over the next 30/90/180d (descriptive, no forecast).
whale_compare_now_to_history()FreeThe 3 historical weeks whose BTC on-chain structure most resembles now.
🏛 Tokenized Real-World Assets (RWA) 9
whale_rwa_recent(asset_class, underlying, chain)FreeRecent large tokenized-RWA whale transfers across chains (ETH / Base / SOL).
whale_rwa_address(address)FreePer-address RWA treasury profile: flows, approx. position, entity + sanctions.
whale_rwa_top_holders(token, limit)FreeApproximate top holders of a tokenized RWA token by transfer flow.
whale_rwa_assets()FreeThe tracked tokenized-RWA universe grouped by asset class.
whale_rwa_underlying(underlying)FreeCross-chain whale-flow rollup for one real-world asset across all issuers/chains.
whale_rwa_supply_trend(days)FreeNet RWA supply change (mints − burns) per token over N days.
whale_rwa_redemption_trend(token, weeks)FreeWeekly RWA redemption (burn) trend with spike detection.
whale_rwa_flow_balance(token, days)FreeCumulative RWA supply balance (mints − burns) over time.
whale_rwa_liquidity_profile(token)FreeOn-chain liquidity profile for a tokenized RWA token.
₿ Wrapped BTC 2
whale_wrapped_btc_recent(hours, asset, kind)FreeRecent large Wrapped-BTC mint/burn events on Ethereum.
whale_wrapped_btc_summary(days)FreeWrapped-BTC mint/burn balance by asset over N days (cross-chain signal).
💵 USD Coin (USDC) 2
whale_usdc_recent(min_usdc, hours, flow)FreeRecent large USDC transfers on Ethereum.
whale_usdc_address(address)FreeUSDC whale-activity summary for one Ethereum address.
🎲 Prediction markets (Polymarket) 3
whale_prediction_recent(query, hours)FreeMost active Polymarket markets + their current implied probability.
whale_prediction_movers(hours, query)FreeBiggest implied-probability shifts in the window — what is repricing.
whale_prediction_market(query, days)FreeImplied-probability trajectory for one Polymarket market (matched by question keyword).
⚙ 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.
Note on count: all 72 tools reported by FastMCP introspection are listed above across 17 categories. Ask whale_my_status() in your client to see which are active in your tier.
Third-party verification: every tool result referencing a tracked transaction is machine-attestable via
GET /api/attest/<chain>/<txid> — returns an Ed25519 signature over the exact bytes delivered,
verifiable against the public key at
/.well-known/swi-attest-keys.json.
How verification works ↗
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.swisswhaleintelligence.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.swisswhaleintelligence.com/mcp. Click Connect.Add to claude_desktop_config.json (or settings.json on newer plugin-aware versions):
{
"mcpServers": {
"swiss-whale": {
"url": "https://mcp.swisswhaleintelligence.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.swisswhaleintelligence.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.swisswhaleintelligence.com/mcp"
}
}
]
}
}
Add to Zed's settings.json under context_servers:
{
"context_servers": {
"swiss-whale": {
"command": {
"path": "npx",
"args": ["mcp-remote", "https://mcp.swisswhaleintelligence.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.swisswhaleintelligence.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.swisswhaleintelligence.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.swisswhaleintelligence.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.swisswhaleintelligence.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 academic@btcwhalealerts.com.
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 | 30-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 academic@btcwhalealerts.com 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 does this compare to Glassnode-MCP and CryptoQuant-MCP?
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.swisswhaleintelligence.com/mcp for stdio-only clients (Zed, older versions of Claude Desktop, etc.).