{
  "markdown": "# WhaleScope MCP — Binance Futures Market Intelligence\n\n🇮🇩 Bahasa Indonesia | [🇬🇧 English](README.en.md)\n\nMCP server yang menyediakan data publik Binance USDS-M Futures (funding rate,\nopen interest, long/short ratio, taker volume, candlestick, order book,\nvolatility) plus pembanding Binance Spot (harga, order book, candlestick,\nCVD) sebagai tools yang bisa dipanggil Claude. Semua data yang disajikan\nbersifat **publik read-only** — tidak ada order/trading, tidak ada akses ke\ndata akun pribadi.\n\n## Quick Deploy\n\n[![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/osindo-dev/whalescope-mcp)\n\nTombol ini clone repo + bikin Worker di akun Cloudflare kamu sendiri,\ntermasuk **provision KV namespace & D1 database baru otomatis** (Cloudflare\ngenerate `id`/`database_id` baru buat akun kamu, gak perlu bikin manual).\n**Bukan zero-touch sepenuhnya** — biar jujur soal apa yang masih manual:\nsetelah klik, kamu TETAP perlu set secret (Cloudflare gak bisa nebak value\ndari layanan eksternal) — lihat `.dev.vars.example` di repo ini buat daftar\nlengkap, atau [Setup Proxy Vercel](#setup-proxy-vercel-wajib-sekali-saja)\ndi bawah. `PROXY_URL`/`PROXY_SECRET` WAJIB (semua 46 tool butuh).\n\n## Tujuan\n\nMenyediakan gambaran positioning pasar Binance Futures — bukan cuma harga,\ntapi juga *siapa* yang lagi buka posisi apa (retail vs top trader), *seberapa\ncrowded* leverage-nya, dan *di harga berapa* likuiditas menumpuk — langsung\ndalam percakapan dengan Claude, tanpa perlu buka dashboard exchange terpisah.\n\n## Manfaat\n\n- **Satu pintu buat banyak sinyal.** Funding rate, open interest, order book,\n  dan order flow — semua lewat satu MCP connector, bukan gonta-ganti tab.\n- **Bisa bedain retail vs whale.** `binance_get_top_trader_ratio` kasih\n  breakdown murni top-trader (terpisah dari `binance_get_long_short_ratio`\n  yang blended) — berguna buat lihat kalau posisi retail dan whale lagi\n  divergen.\n- **Native Binance di mana itu penting.** Harga, funding rate, klines, order\n  book — semua lewat jalur native Binance (bukan derivasi pihak ketiga),\n  supaya presisi terjaga terutama untuk pair kecil/kurang likuid.\n- **Gratis buat pemakaian personal** — lihat bagian [Biaya](#biaya).\n\n## Kelebihan\n\n- 29 tools mencakup lima sudut analisis: bias arah pasar, area harga kunci\n  (order book), konfirmasi eksekusi (order flow/aggressor), pembanding\n  Futures-vs-Spot (leverage-driven vs demand riil), dan market-wide scan\n  (funding rate ekstrem lintas semua pair, atau bandingkan metrik across\n  beberapa pair) — plus tool composite (`binance_analyze_pair`) buat\n  overview cepat tanpa banyak tool call, dan config/histori (threshold\n  per-pair, basis time-series) yang tersimpan di Workers KV.\n- Read-only terhadap data pasar Binance — tidak ada order/trading. Satu-\n  satunya tool yang menulis state (`binance_set_pair_threshold`) cuma\n  nyimpen preferensi threshold kamu sendiri di Workers KV, tidak menyentuh\n  akun Binance/data pihak luar sama sekali.\n- Transparan soal keterbatasan tiap tool (lihat bagian di bawah), bukan\n  dibungkus seolah semua data sempurna.\n- Infrastruktur cukup dengan free tier (Cloudflare Workers + Vercel Hobby)\n  untuk pemakaian personal — 100% Binance-native, tidak ada dependensi\n  agregator pihak ketiga lagi.\n\n## Kekurangan\n\n- **Sebagian besar tool request/response.** Funding/OI/klines/order book/ratio\n  semua snapshot atau histori periodik. Data streaming yang ada terbatas:\n  `binance_get_realtime_liquidations` + `binance_get_contract_events` (via\n  stream gateway VPS, lihat di bawah) — tidak ada push tick-by-tick untuk\n  harga / order book.\n- **Liquidation: SAMPLED, bukan lengkap.** Sejak 2026-08-28 ada\n  `binance_get_realtime_liquidations` — WebSocket `!forceOrder@arr`\n  (`dstream.binance.com`) di-buffer always-on di VPS Oracle Singapore\n  (`stream-gateway/`, di luar Cloudflare — worker Cloudflare sendiri masih\n  di-WAF-block dari Binance). Binance men-throttle stream ini maks 1\n  event/symbol/detik, jadi ini SAMPEL likuidasi, bukan tiap satu. Tetap cukup\n  buat konfirmasi cluster stop-hunt di `binance_detect_mm_activity` (proxy\n  ke-3, price-anchored & sisi-hunt). Tidak ada histori liquidation jauh ke\n  belakang (buffer 24 jam).\n- **Setup awal butuh proxy Vercel** (wajib) — bukan pasang-langsung-jalan,\n  ada langkah konfigurasi manual sekali di awal.\n- Tidak ada data wallet on-chain atau data dari exchange selain Binance\n  Futures USDS-M.\n\n**Sumber data: satu jalur, 100% Binance native.**\n\n- **Binance native, lewat proxy relay Vercel.** Domain Binance\n  (`fapi.binance.com`) memblokir traffic dari Cloudflare Workers di level WAF\n  (403, company-wide — sudah dites langsung dari worker ini, bukan asumsi).\n  Vercel pakai IP pool berbeda, jadi tidak kena block yang sama. Worker\n  Cloudflare relay lewat proxy kecil di `proxy/` (project Vercel terpisah,\n  lihat `proxy/README.md`). Ini jalur untuk funding rate (current & histori),\n  klines/OHLCV, bias multi-timeframe, realized volatility, statistik 24 jam,\n  order book depth, aggregate trades, open interest (current & histori),\n  long/short ratio (blended & top-trader), taker buy/sell volume ratio, dan\n  harga spot (proxy juga relay ke Binance Spot API `api.binance.com` lewat\n  parameter `market=spot`, lihat `proxy/README.md`).\n\nKonsekuensinya, worker ini butuh `PROXY_URL`/`PROXY_SECRET` (proxy Vercel,\nwajib buat semua 46 tool) — lihat bagian Setup di bawah.\n\n**Caching & state, tanpa kredensial tambahan.** Response upstream (funding\nrate, klines, OI, dll — kecuali order book & aggregate trades yang butuh\nfreshness ketat) di-cache bertingkat (5 detik-1 jam tergantung endpoint)\nlewat Cache API bawaan Cloudflare Workers, tidak perlu setup apapun.\nThreshold custom per-pair tersimpan di Workers KV (binding `CONFIG_KV`).\nTime-series (basis+funding+OI, dan 6 skor sinyal `binance_detect_mm_activity`)\ntersimpan di D1 (binding `DB`) — diisi otomatis oleh Cron Trigger tiap 5\nmenit untuk watchlist tetap 50 pair (`SNAPSHOT_WATCHLIST` di `src/shared.ts`,\ndiurutkan market cap, mis. BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT, XRPUSDT, dst).\n\n**Cross-exchange, tanpa proxy tambahan.** `whalescope_compare_funding_across_exchanges`\nakses Bybit/OKX/Hyperliquid LANGSUNG dari worker (dites dari edge\nCloudflare beneran, gak kena WAF/geo-block kayak Binance) — gak ada\nkredensial atau setup tambahan buat 3 exchange itu.\n\n## Yang disediakan\n\n| Tool | Fungsi | Sumber |\n|---|---|---|\n| `binance_get_funding_rate` | Funding rate terkini + basis (deviasi mark vs index price) | Binance native |\n| `binance_get_funding_rate_history` | Tren funding rate dari waktu ke waktu | Binance native |\n| `binance_get_spot_price` | Harga spot Binance + basis riil vs mark price futures (beda dari basis di atas yang vs index price). Error jelas kalau pair futures-only (tidak listed di Spot) | Binance native (Spot) |\n| `binance_scan_funding_extremes` | Scan funding rate SEMUA pair Futures sekaligus (1 call bulk), kembalikan top pair paling crowded long/short | Binance native |\n| `binance_get_open_interest` | OI snapshot terkini | Binance native |\n| `binance_get_open_interest_history` | Tren OI naik/turun | Binance native |\n| `binance_get_long_short_ratio` | Rasio long vs short agregat (blended, semua trader) + tren | Binance native |\n| `binance_get_top_trader_ratio` | Rasio long/short KHUSUS top trader (breakdown murni, akun atau size posisi) | Binance native |\n| `binance_get_order_book_depth` | Snapshot order book (bid/ask), spread, wall terbesar | Binance native |\n| `binance_get_order_book_imbalance` | Imbalance volume bid vs ask di depth 5/10/20, dengan label bias (BULLISH/BEARISH/SEIMBANG) | Binance native |\n| `binance_get_agg_trades` | Trade individual granular (buy/sell aggressor) untuk deteksi absorption | Binance native |\n| `binance_get_taker_volume_ratio` | Tekanan beli/jual agresif (taker volume), statistik resmi Binance | Binance native |\n| `binance_get_klines` | Candlestick OHLCV per timeframe, dukung `startTime`/`endTime` (histori jauh ke belakang, buat backtest, maks 1500 candle/panggilan) | Binance native |\n| `binance_get_multi_timeframe_bias` | Bias Bullish/Bearish/Sideways di 5 timeframe sekaligus (1m/5m/15m/1h/1d) | Binance native |\n| `binance_get_realized_volatility` | Realized volatility historis (15m/1h) dari log-return, untuk kalibrasi lebar grid | Binance native |\n| `binance_get_24hr_ticker` | Ringkasan statistik 24 jam (rolling window resmi) | Binance native |\n| `binance_get_spot_ticker_24hr` | Statistik 24 jam versi Spot (harga, %change, VWAP, volume, jumlah trade) — bandingkan dengan versi Futures di atas | Binance native (Spot) |\n| `binance_get_spot_book_ticker` | Best bid/ask + qty real-time Spot, lebih ringan dari full order book | Binance native (Spot) |\n| `binance_get_spot_order_book` | Order book depth Spot (bid/ask, spread, wall terbesar) | Binance native (Spot) |\n| `binance_get_spot_klines` | Candlestick OHLCV Spot per timeframe, dukung `startTime`/`endTime` (maks 1000 candle/panggilan) | Binance native (Spot) |\n| `binance_get_spot_agg_trades` | Trade individual granular Spot (CVD riil, bukan leverage) | Binance native (Spot) |\n| `binance_get_spot_avg_price` | Harga rata-rata bergerak Spot (window beberapa menit, lebih stabil dari last-trade) | Binance native (Spot) |\n| `binance_check_spot_listing` | Cek apakah pair listed di Binance Spot + status trading — dipakai sebelum panggil tool Spot lain untuk pair yang belum pasti | Binance native (Spot) |\n| `binance_analyze_pair` | Overview cepat 1 pair (composite): funding, tren OI, tren top trader, taker volume, order book, bias harga — 6 tool sekaligus dalam 1 call | Binance native |\n| `binance_compare_symbols` | Bandingkan 1 metrik (funding rate, %change 24h, OI, top trader ratio, taker ratio) across 2-10 pair sekaligus, diurutkan dari paling ekstrem | Binance native |\n| `binance_set_pair_threshold` | Set threshold funding/basis custom per-pair (override default ±0.03%/±0.05%), tersimpan di Workers KV | Workers KV |\n| `binance_get_pair_threshold` | Cek threshold custom yang sudah di-set untuk sebuah pair | Workers KV |\n| `binance_get_basis_history` | Histori basis+funding+OI time-series (snapshot Cron tiap 5 menit ke D1) — selalu tersedia untuk watchlist tetap 50 pair, best-effort untuk pair lain yang sering di-query — deteksi \"basis melebar lalu kembali\" tanpa cek manual berkali-kali | D1 + Cron Trigger |\n| `binance_get_orderbook_delta` | 2 snapshot order book ~1-2 detik terpisah, bandingkan wall antar snapshot untuk deteksi spoofing RIIL (wall hilang tanpa harga crossing level itu) — beda dari `binance_get_order_book_depth` yang cuma 1 snapshot | Binance native |\n| `binance_detect_mm_activity` | Skor + tier (Weak/Moderate/Strong/Extreme) dari 6 sinyal MM/whale sekaligus (absorption, spoofing 2-snapshot RIIL, stop-hunt simetris + OI-drop proxy + trade-volume-concentration proxy, basis arbitrage, OI divergence, funding extreme) — ganti 5-6 tool call manual. Stop-hunt TETAP tanpa data liquidation riil (dihapus permanen), lihat [Keterbatasan](#keterbatasan-yang-jujur-perlu-diketahui) | Binance native |\n| `binance_market_regime` | Klasifikasi kondisi pasar: TRENDING_UP/DOWN, RANGING, BREAKOUT, ACCUMULATION, DISTRIBUTION — pakai ADX(14), tren OI, CVD, spike volatilitas/volume | Binance native |\n| `binance_backtest_signal` | Validasi empiris sinyal `binance_detect_mm_activity`: win rate/avg return/max drawdown dari histori sinyal D1 (watchlist tetap), forward return dihitung on-demand dari klines historis | D1 + Binance native |\n| `whalescope_backtest_pipeline_decisions` | Uji maju keputusan `full_pipeline` yang tersimpan di `pipeline_decision_log` (entry-alert Phase 2 + `persist=true`): win rate / avg return / SL-touch per keputusan (TRADE/WATCH/NO_TRADE) dan bucket skor (`lt_40` / `40_55` / `gte_55`). Forward return on-demand dari klines, bukan kolom precompute, bukan auto-tune bobot | D1 + Binance native |\n| `binance_analyze_smart_money` | Skor divergensi smart money (top trader) vs retail (global account) dari 5 variabel: top trader ratio, global account ratio, delta OI, funding rate, orderbook imbalance — kondisi LONG_LIQUIDATION_RISK/BULLISH_ACCUMULATION/SHORT_SQUEEZE_RISK/NEUTRAL + confidenceScore. Beda dari `binance_detect_mm_activity` (6 sinyal absorption/spoofing/stop-hunt/basis-arb) — fokus khusus top-trader-vs-retail | Binance native |\n| `whalescope_compare_funding_across_exchanges` | Bandingkan funding rate, last price, open interest, 24h change 1 pair across Binance/Bybit/OKX/Hyperliquid, deteksi divergensi — cross-confirm sinyal MM detection antar exchange. Satu-satunya tool yang BUKAN Binance-only | Binance native + Bybit + OKX + Hyperliquid |\n| `binance_get_tool_catalog` | Daftar semua tool + kategori/token-cost/use-case, filter per kategori — cek ini dulu sebelum manggil banyak tool individual. Nama+description auto dari tool registry (selalu akurat), kategori/token-cost tetap manual | Semi-otomatis |\n| `binance_get_adl_risk` | Rating risiko Auto-Deleveraging (LOW/MEDIUM/HIGH) per pair, update tiap 30 menit | Binance native |\n| `binance_get_insurance_fund_balance` | Snapshot historis saldo insurance fund per asset margin | Binance native |\n| `binance_get_mark_price_klines` | Candlestick dari MARK PRICE (acuan liquidation/funding), bukan harga transaksi | Binance native |\n| `binance_get_index_price_klines` | Candlestick dari INDEX PRICE (blended beberapa exchange spot), dasar premium index/funding | Binance native |\n| `binance_get_premium_index_klines` | Candlestick dari PREMIUM INDEX (rasio mark vs index price), komponen utama funding rate | Binance native |\n| `binance_get_continuous_klines` | Candlestick kontrak PERPETUAL/CURRENT_QUARTER/NEXT_QUARTER per pair underlying | Binance native |\n| `binance_get_quarterly_settlement_price` | Histori delivery/settlement price kontrak quarterly (tidak berlaku untuk perpetual) | Binance native |\n| `binance_get_composite_index_info` | Komposisi base asset + bobot sebuah composite index symbol (mis. BTCDOMUSDT) | Binance native |\n| `binance_get_index_constituents` | Daftar exchange+harga+bobot penyusun index price sebuah pair | Binance native |\n| `whalescope_full_pipeline` | Decision chain PENUH Grid Bot Futures (composite tertinggi): hard screen → Tier-1 intelligence (smart money, MM composite, regime 1h+4h, order book) → hitung bound grid Compass-equivalent (ATR + swing high/low) → capital-solve EXACT ke budget rugi (`risk_usd`) per opsi leverage → keputusan TRADE/WATCH/NO_TRADE + parameter Grid Bot siap copy-paste, untuk 1-20 symbol sekaligus. `persist=true` (opsional) menulis row compact ke `pipeline_decision_log` (`source=manual` atau `dropstab` + `persist_ref` slug tab). Token cost TINGGI — lihat [`docs/full_pipeline_framework.md`](docs/full_pipeline_framework.md) | Binance native |\n\n## Konvensi `detail`: summary vs full (hemat token)\n\nSemua tool di atas yang balikin data array/histori (klines, agg trades,\norder book, open interest/funding/basis history, long-short &\ntop-trader ratio) punya parameter opsional `detail: \"summary\" | \"full\"`,\ndefault `\"summary\"`. Ini **satu-satunya perubahan default-behavior yang\ndisengaja** di pembaruan token-efficiency 2026-08 — bukan penghapusan\nparameter, cuma default baru:\n\n- `detail: \"summary\"` (default) — cuma metrik turunan (bias, tren, CVD,\n  dominance, dst — yang memang sudah dihitung tool-nya) + maksimal 10 poin\n  data terbaru. Ini yang dipakai kalau kamu tidak mengirim `detail` sama\n  sekali, TERMASUK untuk caller lama yang belum tahu param ini ada.\n- `detail: \"full\"` — array/level mentah penuh, perilaku identik dengan\n  sebelum pembaruan ini.\n\nTool composite (`binance_analyze_pair`, `binance_analyze_smart_money`,\n`binance_detect_mm_activity`, `analyze_futures_grid_risk`,\n`whalescope_full_pipeline`) juga dirapikan: teks dipotong ~8-12 baris,\n`structuredContent` jadi payload utama dengan key lebih pendek/flat, field\nkosong (null/undefined) dibuang. **Tidak ada sinyal/metrik yang hilang** —\nsemua tetap reachable via `structuredContent` atau `detail: \"full\"`.\n\nDetail lengkap + mapping field yang berganti nama:\n[`docs/tool_response_reference.md`](docs/tool_response_reference.md).\n\n## Framework Analisis: Deteksi Market Maker & Whale\n\nTidak ada tool yang bisa melihat identitas atau posisi spesifik market\nmaker (MM)/whale secara langsung — data Binance yang publik memang tidak\nmenyediakan itu. Yang bisa dilakukan (dan itulah fungsi framework ini):\nmembaca **jejak aktivitas** mereka dengan menggabungkan beberapa tool di\natas, lalu menghitung skor indikasi dari pola yang muncul.\n\n**Empat kategori sinyal yang dideteksi:**\n\n| Sinyal | Tool utama | Contoh pola |\n|---|---|---|\n| **Absorption** | order book depth, agg trades (futures & spot), open interest | CVD flat/naik tapi harga stagnan = sell pressure sedang diserap (accumulation); OI spike tajam + harga sideways = posisi besar baru dibuka |\n| **Spoofing** | order book depth, `binance_get_orderbook_delta` (2-snapshot) | Wall besar muncul lalu hilang sebelum sempat tereksekusi TANPA harga benar-benar crossing level itu; spread tiba-tiba melebar lalu normal lagi dalam hitungan detik |\n| **Stop hunt** | open interest, agg trades, klines | Wick panjang (arah manapun) + body kecil candle reversal, dibantu OI-drop proxy + konsentrasi trade agresif per harga — TETAP tanpa konfirmasi liquidation riil (dihapus permanen, lihat Kekurangan) |\n| **Basis arbitrage** | spot price, funding rate, open interest | Basis spot-futures melebar lalu kembali cepat; funding ekstrem + OI naik (indikasi hedge short futures / long spot) |\n\n**Rule of thumb:** kalau **≥3 sinyal align** dalam timeframe yang sama,\nindikasi aktivitas MM cukup kuat untuk ditindaklanjuti — ini heuristik\nchecklist (lihat tier confidence di dokumen lengkap), **bukan** probabilitas\nyang terkalibrasi secara statistik.\n\nDokumen lengkap: [`docs/mm_detection_framework.md`](docs/mm_detection_framework.md)\n(v4, final) — berisi kriteria detail tiap sinyal, workflow step-by-step,\nchecklist live, dan mapping tool → sinyal.\n\n## Framework: Full Pipeline Grid Bot (`whalescope_full_pipeline`)\n\nTool composite tertinggi di repo ini — menjalankan SELURUH decision chain\nGrid Bot Futures dalam satu tool call, untuk satu atau banyak symbol\nsekaligus (maks 20 per call), menggantikan ~8 tool call manual\n(`binance_market_regime` ×2, `binance_analyze_smart_money`,\n`binance_detect_mm_activity`, `binance_get_order_book_imbalance`,\n`analyze_futures_grid_risk`, dst.) plus kalkulasi bound grid yang\nsebelumnya tidak ada tool-nya sama sekali.\n\n**Tahapan (2-wave fetch, reject-early):**\n\n```\n┌───────────────────────────────────────────────────────────────┐\n│ WAVE 1 (semua symbol, paralel): ticker24hr, funding, klines    │\n│ 1h+4h, OI+histori, agg trades, market context                  │\n├───────────────────────────────────────────────────────────────┤\n│ HARD SCREEN: tradable? volume >= minimum? |funding| <= maks?   │\n│ regime 1h/4h != BREAKOUT?                                       │\n│   → GAGAL = NO_TRADE, Wave 2 TIDAK PERNAH DIPANGGIL             │\n├───────────────────────────────────────────────────────────────┤\n│ WAVE 2 (survivor saja, paralel): top-trader ratio, global      │\n│ account ratio, OI histori 24 titik, order book depth 50        │\n├───────────────────────────────────────────────────────────────┤\n│ TIER-1 SCORING: smart money divergence + 6 skor MM composite   │\n│ + order book imbalance + CVD + regime → rankingScore 0-100     │\n├───────────────────────────────────────────────────────────────┤\n│ GRID BOUNDS (Compass-equivalent): ATR + swing high/low →       │\n│ upper/lower/SL/TP/gridCount/gridType                            │\n├───────────────────────────────────────────────────────────────┤\n│ CAPITAL SOLVE: exact (bukan iteratif) per opsi leverage, pilih  │\n│ leverage tertinggi SAFE/MODERATE dengan likuidasi aman          │\n├───────────────────────────────────────────────────────────────┤\n│ KEPUTUSAN: TRADE / WATCH / NO_TRADE + Grid Bot config siap-pakai│\n└───────────────────────────────────────────────────────────────┘\n```\n\nDokumen lengkap (stage-by-stage, worked example, Known Limitations):\n[`docs/full_pipeline_framework.md`](docs/full_pipeline_framework.md).\n\n### Hasil Validasi Empiris\n\nSetiap klaim teknis di framework ini divalidasi langsung ke worker deployed\n(bukan asumsi) sebelum masuk versi final. Beberapa temuan yang mengoreksi\nasumsi awal:\n\n| Klaim awal | Hasil validasi |\n|---|---|\n| Polling <500ms buat deteksi refresh-rate spoofing | ❌ Latency riil 298-898ms/call (rata-rata ~485ms) lewat proxy chain worker→Vercel→Binance — tidak reliable buat itu |\n| Threshold divergence top-trader ratio universal (flat >15% atau tiered 3-15%) | ❌ Tidak pernah trigger — pergerakan riil 4 pair yang dites (SOLUSDT, BNBUSDT, LINKUSDT, AVAXUSDT) dalam window 2 jam cuma 0.40-2.35 poin, jauh di bawah threshold manapun |\n| Retensi historis top-trader ratio \"30-90 hari\" | ⚠️ Dikoreksi — 90 hari tidak tersedia sama sekali dari Binance; 30 hari cuma di resolusi kasar (4h/1d), resolusi 15 menit cuma ~5 hari ke belakang |\n| Kondisi pasar tenang (BTCUSDT) tidak over-trigger | ✅ Terkonfirmasi — skor ~1-1.5/6 (tier Weak) saat pasar sideways, framework tidak salah alarm di kondisi normal |\n\nDetail penuh (termasuk raw data test per klaim): Section 10,\n[`docs/mm_detection_framework.md`](docs/mm_detection_framework.md#10-validasi-empiris).\n\n## Keterbatasan yang jujur perlu diketahui\n\n- **Long/short ratio (`binance_get_long_short_ratio`) adalah rasio agregat\n  BLENDED**, bukan breakdown terpisah \"global account (retail)\" vs \"top\n  trader (whale)\". Untuk breakdown murni top-trader, pakai\n  `binance_get_top_trader_ratio` (sudah native Binance, terpisah dari tool\n  ini).\n- **Basis funding rate bisa noisy untuk pair kecil/baru listing** — index\n  price Binance adalah rata-rata tertimbang dari beberapa exchange spot,\n  salah satunya bisa illikuid untuk pair semacam itu.\n- **Order book depth (`binance_get_order_book_depth`) adalah snapshot\n  sesaat** — wall besar bisa hilang dalam hitungan detik (potensi\n  spoofing), jangan overinterpretasi satu snapshot. Untuk deteksi spoofing\n  RIIL (2-snapshot), pakai `binance_get_orderbook_delta` atau\n  `binance_detect_mm_activity` (lihat di bawah).\n- **Threshold \"top trader\" tidak dipublikasikan Binance secara pasti**, dan\n  datanya snapshot periodik, bukan real-time tick-by-tick.\n- Data histori OI (`binance_get_open_interest_history`) dibatasi retensi\n  endpoint resmi Binance (`/futures/data/openInterestHist`), cek langsung\n  kalau butuh rentang panjang.\n- Tidak ada data wallet on-chain.\n- **Liquidation cuma near-real-time + SAMPLED, tidak ada histori panjang.**\n  `binance_get_realtime_liquidations` baca buffer 24 jam dari stream gateway\n  VPS (`!forceOrder@arr` via `dstream.binance.com` — `fstream.binance.com`\n  di-black-hole dari IP VPS). Binance throttle 1 event/symbol/detik → sampel,\n  bukan lengkap. Tidak ada REST publik market-wide buat backfill historis.\n  Worker Cloudflare sendiri masih tidak bisa WS langsung ke Binance (WAF).\n- **`binance_detect_mm_activity`: spoofing sekarang 2-snapshot RIIL**\n  (~1-2 detik lebih lambat dari tool lain karenanya, jeda eksplisit 1500ms\n  antar 2 fetch — lihat `binance_get_orderbook_delta`), bukan heuristik\n  1-snapshot lagi. **Stop-hunt sekarang simetris** (cek upper DAN lower\n  wick, dulu cuma upper — bug lama) **+ 2 proxy independen** (reuse fetch\n  yang sudah ada, bukan fetch baru): OI turun >=2% berbarengan sama wick\n  candle, dan/atau volume trade agresif >=30% terkonsentrasi tepat di zona\n  harga wick itu (dari 100 aggTrades terakhir, sama data yang dipakai\n  CVD). Confidence naik bertahap: 0 proxy aktif = base, 1 proxy = lebih\n  tinggi, 2 proxy sekaligus = tertinggi — TETAP TANPA data\n  liquidation-by-price riil (permanen, lihat poin di atas). Confidence\n  stop-hunt masih lebih rendah dari sinyal lain di tool yang sama —\n  dicatat di evidence text tiap response.\n- **`binance_market_regime`: spike volatilitas/volume dihitung relatif ke\n  window fetch yang sama** (10 candle terakhir vs 10 sebelumnya), bukan\n  baseline historis jangka panjang.\n- **Time-series D1 (`market_snapshots`, dibaca `binance_get_basis_history`)\n  SELALU tersedia untuk watchlist tetap 50 pair, best-effort untuk pair\n  lain** — pair non-watchlist dapat histori kalau di-query >=3x dalam ~24\n  jam DAN masuk top-5 pair non-watchlist paling sering di-query (KV\n  counter, `src/queryFrequency.ts`), cron 5 menit baru snapshot pair itu\n  setelah kondisi terpenuhi. `signal_history` (dibaca\n  `binance_backtest_signal`) TETAP watchlist-only, tidak ikut diperluas.\n- **Pair futures-only (HYPEUSDT, 1000PEPEUSDT, PUMPUSDT, dst.) — `spot_price`\n  & `basis` NULL di `market_snapshots`** karena tidak listed di Binance Spot.\n  Funding rate & Open Interest tetap tercatat normal; cuma kolom basis yang\n  kosong buat pair semacam itu.\n- **Belum ada pruning/retention buat row D1** — row nambah terus tanpa batas\n  seiring waktu (di 50 pair x ~6.048 row/hari gabungan kedua tabel, D1 free\n  tier 5 juta write/hari & 5GB storage masih longgar untuk waktu yang lama,\n  tapi ini bukan solusi permanen).\n- **Migrasi KV→D1 (basis history) TIDAK backfill data lama** — histori basis\n  yang sempat tersimpan di Workers KV sebelum migrasi ini hilang, window 24\n  jam baru keisi ulang natural beberapa jam setelah deploy.\n- **`binance_backtest_signal`: forward return DIHITUNG ON-DEMAND dari klines\n  historis** (close candle 1h terdekat ke waktu target), BUKAN simulasi\n  eksekusi order riil — slippage/fee/partial fill tidak dihitung. Sample\n  size kecil (di bawah ~20 sinyal) berarti confidence rendah, jangan\n  simpulkan sinyal \"reliable\" dari sedikit data historis (baru mulai\n  terkumpul dari kapan fitur ini deploy, bukan retroaktif).\n- **`pipeline_decision_log` + `whalescope_backtest_pipeline_decisions`:**\n  keputusan per-symbol Phase 2 entry-alert (dan `persist=true`) disimpan\n  compact 90 hari. Forward return / SL-touch dihitung on-demand dari\n  klines — **bukan** precompute, **bukan** auto-tune bobot 35/30/20/15\n  atau threshold 55. `entry_alert_skip_log` retensi 30 hari.\n- **`whalescope_compare_funding_across_exchanges`: Open Interest belum\n  divalidasi silang ke data live** antar 4 exchange (SEHARUSNYA base-asset\n  di semua exchange termasuk OKX yang pakai field `oiCcy`, tapi belum ada\n  pengecekan langsung — cek ulang kalau angkanya kelihatan janggal). Symbol\n  mapping Binance→exchange lain best-effort (strip suffix USDT) — pair\n  kecil yang gak listed di Bybit/OKX/Hyperliquid bakal muncul \"gagal\" di\n  baris itu, bukan bikin tool call gagal total.\n- **Rate limit self-throttle ke proxy Binance itu best-effort, BUKAN hard\n  global limiter** — counter in-memory per-isolate (`src/rateLimiter.ts`),\n  efektif SELAMA isolate yang sama dipakai ulang buat request beruntun,\n  TAPI worker ini stateless per-request jadi bukan jaminan keras\n  cross-isolate. Threshold 200 request/menit, count-based (bukan\n  weight-based per-endpoint kayak limit asli Binance).\n- **`binance_get_tool_catalog` SEMI-otomatis** — nama+description SELALU\n  akurat (ditarik dari tool registry, gak pernah basi/ketinggalan). Tapi\n  category/token-cost/dependencies TETAP manual (`CATALOG_METADATA` di\n  `src/tools/catalog.ts`) — tool baru yang belum di-curated bakal muncul\n  dengan category `\"uncategorized\"`, tetap kelihatan (gak ke-omit diam-diam)\n  tapi belum ter-kategorisasi rapi.\n- **`binance_analyze_smart_money` pakai threshold FIXED** (bukan hasil\n  kalibrasi statistik per-pair) — lihat Section 4.2 & 12 di\n  `docs/mm_detection_framework.md` untuk kenapa threshold absolut pada\n  top-trader ratio harus dipakai hati-hati. `confidenceScore` output-nya\n  mengukur margin di atas threshold, BUKAN probabilitas statistik\n  terkalibrasi.\n\n## Setup Proxy Vercel (wajib, sekali saja)\n\nTool berlabel \"Binance native\" di tabel atas butuh proxy relay di Vercel,\nkarena worker Cloudflare diblokir langsung oleh WAF Binance. Detail deploy\nproxy ada di `proxy/README.md` — ringkasnya:\n\n1. Deploy folder `proxy/` sebagai project Vercel terpisah (Root Directory =\n   `proxy`), set env var `PROXY_SECRET` di Vercel (string acak, generate\n   sendiri, misal `openssl rand -hex 32`).\n2. Set dua secret ini di worker Cloudflare:\n   ```bash\n   npx wrangler secret put PROXY_URL\n   npx wrangler secret put PROXY_SECRET\n   ```\n   `PROXY_URL` = URL project Vercel (contoh `https://whale-pearl.vercel.app`),\n   `PROXY_SECRET` = string yang sama persis dengan yang di-set di Vercel.\n\nTanpa dua secret ini, tool berlabel \"Binance native\" akan gagal dengan pesan\nerror yang jelas (\"PROXY_URL atau PROXY_SECRET belum diset di worker\").\n\n**Penting**: jangan pernah buat secret Cloudflare dengan VALUE sebagai NAME\n(misal `wrangler secret put` lalu tidak sengaja paste value di prompt nama).\n`wrangler secret list` hanya boleh membocorkan nama secret, tidak pernah\nvalue — kesalahan ini membuat value asli bocor lewat command yang seharusnya\naman.\n\n### Proxy sekunder / failover (opsional)\n\nKalau proxy primary kena WAF block/rate-limit/5xx, worker otomatis coba\nproxy sekunder — TAPI cuma kalau dikonfigurasi. Tanpa ini, perilaku persis\nsama seperti sebelumnya (1 proxy, error langsung dilempar kalau gagal).\n\n1. Deploy instance Vercel KEDUA dari folder `proxy/` yang sama (region\n   beda kalau mau, misal Hong Kong vs Singapore) dengan `PROXY_SECRET`\n   sendiri (boleh beda dari primary).\n2. Set dua secret tambahan:\n   ```bash\n   npx wrangler secret put PROXY_URL_2\n   npx wrangler secret put PROXY_SECRET_2\n   ```\n\nFailover cuma jalan untuk error yang berkaitan sama kesehatan/kredensial\ntier (401 secret salah, 403 WAF block, 429 rate limit, 5xx) — bukan buat\nerror request genuinely (400 symbol salah, 404) yang bakal gagal identik\ndi tier manapun. 401 SENGAJA termasuk (beda dari versi sebelumnya) karena\ntiap tier proxy punya secret SENDIRI — primary salah bukan berarti\nsecondary juga salah.\n\n### Direct fallback (tier terakhir, otomatis ON)\n\nKalau primary DAN secondary (kalau dikonfigurasi) sama-sama gagal, worker\notomatis coba langsung ke `fapi.binance.com`/`api.binance.com` TANPA proxy\nsama sekali sebagai last-resort. Tidak butuh setup apapun (default ON) --\nset `DISABLE_DIRECT_FALLBACK=true` di environment variable worker (bukan\nsecret, plain var biasa) kalau mau matikan. Lihat komentar \"DIRECT\nFALLBACK\" di `src/binanceProxyClient.ts` untuk detail & catatan jujur soal\nkenapa tier ini kemungkinan besar tetap kena WAF block di kondisi produksi\nsaat ini (worker Cloudflare ini SUDAH TERBUKTI diblokir Binance secara\nlangsung) -- tetap berguna untuk `wrangler dev` lokal (IP pool beda dari\nedge Cloudflare produksi) dan sebagai jaring pengaman kalau kebijakan block\nberubah.\n\n## Setup Workers KV (wajib, sekali saja — kalau fork/deploy repo ini sendiri)\n\n`id` KV namespace di `wrangler.toml` repo ini terikat ke akun Cloudflare\nyang bikin — kalau kamu fork/clone dan deploy ke akun sendiri, wajib bikin\nnamespace baru:\n\n```bash\nnpx wrangler kv namespace create WHALESCOPE_CONFIG\n```\n\nCopy `id` yang muncul ke `[[kv_namespaces]]` di `wrangler.toml`, ganti value\n`id` yang lama (binding-nya biarkan tetap `CONFIG_KV`, kode worker rujuk\nnama binding itu, bukan id). Tanpa ini, `binance_set_pair_threshold` dan\n`binance_get_pair_threshold` akan gagal dengan error jelas (\"CONFIG_KV\nbelum ke-bind di worker\").\n\n## Setup Workers D1 (wajib, sekali saja — kalau fork/deploy repo ini sendiri)\n\nSama seperti KV di atas, `database_id` D1 di `wrangler.toml` repo ini\nterikat ke akun Cloudflare yang bikin. Kalau fork/deploy ke akun sendiri:\n\n```bash\nnpx wrangler d1 create whalescope-mcp-db\n```\n\nCopy `database_id` yang muncul ke `[[d1_databases]]` di `wrangler.toml`\n(binding biarkan tetap `DB`), lalu jalankan migration:\n\n```bash\nnpx wrangler d1 migrations apply whalescope-mcp-db --remote\n```\n\nTanpa ini, `binance_get_basis_history` dan `binance_backtest_signal` akan\ngagal dengan error jelas (\"D1 database (binding DB) belum ke-bind di\nworker\"), dan Cron Trigger snapshot basis+sinyal MM (tiap 5 menit) akan\ngagal silent tiap tick (ke-log ke Workers Logs, tidak menggagalkan endpoint\n`/mcp` lain).\n\n## Admin: Usage Log (OPSIONAL)\n\nWorker publik gampang ditemuin (terdaftar di [MCP Server Registry](https://registry.modelcontextprotocol.io/))\n— jadi ada endpoint kecil buat liat siapa aja yang connect. **Ini BUKAN\nMCP tool** (sengaja HTTP endpoint terpisah, gak pernah muncul di\n`tools/list`) — kalau dibikin tool biasa, SIAPA AJA yang connect ke server\nini bisa liat IP visitor lain, kontradiksi sama tujuannya.\n\n1. Set secret (tanpa ini, endpoint SELALU balik 403 — fitur nonaktif by\n   default, aman):\n   ```bash\n   npx wrangler secret put ADMIN_SECRET\n   ```\n2. Akses:\n   ```bash\n   curl \"https://<worker-url>/admin/usage?key=<ADMIN_SECRET>&hours=24\"\n   ```\n   Balikin JSON: total request, jumlah IP unik, top 20 IP (+ negara,\n   count), 20 request terakhir mentah. Default window 24 jam, bisa\n   diubah lewat `hours`.\n\n## Monitoring & Alerting\n\nBackend ini punya beberapa titik gagal diam-diam (proxy Vercel/VPS mati, WS\nstream gateway putus, Cron Trigger di-Cancel platform). Yang ada sekarang,\nsemua lewat **Telegram** (butuh `TELEGRAM_BOT_TOKEN` + `TELEGRAM_CHAT_ID`\ndi-set — kalau tidak, alert cuma ke Workers Logs):\n\n| Cek | Cron | Alert kalau |\n|---|---|---|\n| `checkHeartbeat` (`heartbeatCron.ts`) | 3×/hari (07/15/23 WIB) | 8 jam nol sinyal TRADE/WATCH — 1 pesan yang bedain \"market sepi + backend normal\" vs \">30% pair gagal tiap tick = backend bermasalah\" vs \"nol data = cron mati\" |\n| `checkEntryAlertCronFreshness` (`heartbeatCron.ts`) | nempel di `*/5` | nol tick entry-alert SELESAI dalam 40 menit (deteksi tick di-Cancel platform) — cooldown 1 jam |\n| `checkStreamGatewayHealth` (`infraHealthCron.ts`) | nempel di `*/5` | VPS stream gateway `:8081/health` unreachable, WS ke Binance putus, atau buffer basi >5 menit — cooldown 1 jam |\n| `checkMarketSnapshotFreshness` (`infraHealthCron.ts`) | nempel di `*/5` | nol baris `market_snapshots` baru dalam 20 menit (cron snapshot `*/5` berhenti nulis) — cooldown 1 jam |\n| `checkD1Capacity` (`infraHealthCron.ts`) | 3×/hari (piggyback `HEARTBEAT_CRON`) | `market_snapshots` + `signal_history` (dua tabel tanpa pruning) gabungan lewat 5 juta baris — cooldown 24 jam |\n\nSemua cek KV-gated (maks 1 alert per cooldown selagi kondisi persist), aman\ndijalanin tiap 5 menit.\n\n**Yang MASIH belum ada** (kerjaan dashboard, bukan kode):\n\n- **Uptime monitor eksternal** ke worker `/` + relay `https://<vps>/health` —\n  pakai UptimeRobot / Cloudflare Health Checks (gratis, 5-menit). Ini yang\n  paling cepat nangkep VPS/relay mati total; cek internal di atas cuma\n  backstop dengan lag.\n- **Cloudflare notification** untuk spike error-rate Workers / CPU-limit —\n  observability (`[observability] enabled = true`) cuma ngumpulin data, gak\n  ada rule alert.\n\n## Keamanan: DNS Rebinding Protection (OPSIONAL)\n\nEndpoint `/mcp` memvalidasi header `Origin` sebelum memproses request --\ndefault izinkan `https://claude.ai`/`https://claude.com` (dan request TANPA\nheader `Origin` sama sekali, yang mencakup mayoritas MCP client\nserver-to-server, termasuk cara worker ini dipakai sebagai custom\nconnector). Request dengan `Origin` LAIN yang tidak diizinkan dibalas 403.\nIni pengganti opsi bawaan SDK (`enableDnsRebindingProtection`/\n`allowedHosts`/`allowedOrigins`) yang sudah `@deprecated` di\n`@modelcontextprotocol/sdk` -- SDK sekarang merekomendasikan middleware\neksternal, itu yang dilakukan di sini.\n\nKalau kamu punya web app sendiri yang perlu manggil `/mcp` langsung dari\nbrowser, tambahkan origin-nya:\n```bash\nnpx wrangler secret put ALLOWED_ORIGINS\n# contoh value: https://app-kamu.com,https://staging.app-kamu.com\n```\n(comma-separated, tanpa spasi setelah koma juga OK -- di-trim otomatis.)\n\nData disimpan di D1 (`request_log`), di-prune otomatis tiap Cron tick\nbuat row lebih dari 30 hari (tabel ini gak dibatasi watchlist tetap kayak\n`market_snapshots`/`signal_history`, jadi bisa growth kalau ada traffic\nasing beneran).\n\n## Setup Deploy Otomatis (GitHub Actions → Cloudflare Workers)\n\nRepo ini sudah punya workflow di `.github/workflows/deploy.yml` yang otomatis\nmenjalankan `wrangler deploy` setiap kali ada push ke branch `main`.\n\n### Langkah setup (sekali saja)\n\n**1. Buat Cloudflare API Token**\n\n1. Buka https://dash.cloudflare.com/profile/api-tokens\n2. Klik \"Create Token\"\n3. Gunakan template **\"Edit Cloudflare Workers\"**\n4. Scope ke akun kamu, lalu buat token\n5. Salin token yang muncul (hanya ditampilkan sekali)\n\n**2. Tambahkan token sebagai GitHub Secret**\n\n1. Buka repo ini di GitHub → **Settings** → **Secrets and variables** → **Actions**\n2. Klik **New repository secret**\n3. Name: `CLOUDFLARE_API_TOKEN`\n4. Value: token dari langkah 1\n5. Simpan\n\n**3. Trigger deploy**\n\nDeploy akan otomatis jalan begitu ada push baru ke `main`. Untuk trigger\nmanual tanpa push baru, buka tab **Actions** di GitHub repo → pilih workflow\n\"Deploy to Cloudflare Workers\" → **Run workflow**.\n\n**4. Cek hasil deploy**\n\nSetelah workflow selesai (cek tab Actions), worker akan live di:\n```\nhttps://whalescope-mcp.<subdomain-cloudflare-kamu>.workers.dev\n```\n\nBuka URL tersebut — harus muncul JSON status `\"ok\"`.\n\n## Setup Custom Domain (whalescope-mcp.jaringan.dev)\n\nIni **tidak** bisa dilakukan lewat GitHub Actions — perlu langkah manual satu\nkali di dashboard Cloudflare:\n\n1. Buka https://dash.cloudflare.com → pilih akun kamu\n2. Buka **Workers & Pages** → pilih worker `whalescope-mcp`\n3. Buka tab **Settings** → **Domains & Routes**\n4. Klik **Add** → **Custom Domain**\n5. Masukkan `whalescope-mcp.jaringan.dev`\n6. Cloudflare akan otomatis membuat DNS record yang diperlukan **jika**\n   domain `jaringan.dev` sudah berada di zona Cloudflare akun yang sama.\n   Kalau domain itu terdaftar di akun/registrar lain, kamu perlu tambahkan\n   CNAME record secara manual mengarah ke target yang ditampilkan Cloudflare.\n\nSetelah custom domain aktif, worker bisa diakses di\n`https://whalescope-mcp.jaringan.dev` (bukan lagi domain `.workers.dev`).\n\n## Daftarkan sebagai Custom Connector di Claude\n\n1. Buka Claude (claude.ai) → **Settings** → **Connectors**\n2. Pilih **Add custom connector**\n3. Masukkan URL: `https://whalescope-mcp.jaringan.dev/mcp`\n   (atau `https://whalescope-mcp.<subdomain>.workers.dev/mcp` jika belum\n   setup custom domain — perhatikan path `/mcp` di akhir, wajib)\n4. Simpan, lalu aktifkan connector tersebut untuk percakapan yang kamu mau\n\n### Contoh Penggunaan\n\nSetelah connector aktif, tinggal minta lewat percakapan biasa — Claude yang\nmenentukan tool mana yang dipanggil (dan berapa kali) berdasarkan pertanyaan:\n\n- *\"Funding rate BTCUSDT sekarang gimana, ada indikasi crowded?\"* →\n  `binance_get_funding_rate`\n- *\"Pair apa yang funding-nya paling ekstrem sekarang di seluruh market?\"* →\n  `binance_scan_funding_extremes`\n- *\"Cek overview lengkap ETHUSDT — funding, OI, order book, bias harga\"* →\n  `binance_analyze_pair` (composite, 1 call ganti 6 tool terpisah)\n- *\"Ada tanda-tanda aktivitas market maker di SOLUSDT belakangan ini?\"* →\n  kombinasi beberapa tool (order book, agg trades, OI, klines)\n  mengikuti [Framework Analisis](#framework-analisis-deteksi-market-maker--whale)\n  di atas — sebutkan pair-nya, Claude yang menjalankan workflow deteksinya\n- *\"Bandingin funding rate BTC, ETH, SOL, sama BNB\"* →\n  `binance_compare_symbols`\n- *\"Layak gak buka Grid Bot Futures di BTCUSDT dan ETHUSDT sekarang, budget\n  rugi $20?\"* → `whalescope_full_pipeline` (composite tertinggi, 1 call\n  jalanin hard screen → Tier-1 intel → grid bounds → risk sizing →\n  keputusan TRADE/WATCH/NO_TRADE + parameter Grid Bot siap copy-paste untuk\n  kedua pair sekaligus)\n\nKarena semua tool read-only, aman dicoba tanya apapun soal data pasar tanpa\nrisiko memicu order/trading — worker ini tidak punya kemampuan itu sama\nsekali.\n\n## Uji coba manual sebelum daftar ke Claude (disarankan)\n\n`npm test` (vitest) + `npm run typecheck` adalah automated check di repo ini\n— tapi keduanya cuma nge-cover pure logic (scoring functions, D1/KV\nwrapper, tool handler lewat fake `McpServer`), BUKAN Workers `fetch`/\n`scheduled` handler beneran (gak ada `@cloudflare/vitest-pool-workers`).\nVerifikasi tool baru/berubah TETAP butuh manual lewat `wrangler dev` + curl\nJSON-RPC buat itu.\n\n```bash\nnpm install\nnpx wrangler dev\n```\n\nDi terminal lain, contoh untuk tool Binance native:\n```bash\ncurl -X POST http://localhost:8787/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Accept: application/json, text/event-stream\" \\\n  -d '{\n    \"jsonrpc\": \"2.0\",\n    \"id\": 1,\n    \"method\": \"tools/call\",\n    \"params\": {\n      \"name\": \"binance_get_funding_rate\",\n      \"arguments\": { \"symbol\": \"BTCUSDT\" }\n    }\n  }'\n```\n\nKalau ini mengembalikan data funding rate + basis BTCUSDT yang valid, jalur\nproxy Vercel bekerja.\n\n## Audit & Hasil\n\n### Efisiensi Token\n\nResponse tool MCP masuk langsung ke context window Claude — beda dari REST\nAPI biasa di mana ukuran response relatif \"gratis\". Repo ini pernah punya\nbeberapa tool yang boros token tanpa disadari; sudah diperbaiki dan\ndiverifikasi ke worker live (2026-08-12):\n\n| Temuan | Sebelum | Sesudah |\n|---|---|---|\n| `binance_get_klines`/`spot_klines` — `structuredContent.candles` selalu ikut full array | ~14.400 token di `limit=500` (57,7KB), sampai ~43.000 token di limit maksimal 1500 | Opt-in lewat parameter `includeCandles` (default `false`) — default cuma summary (bias, swing high/low, 15 candle terakhir) |\n| 6 tool histori (OI history, long/short ratio, top trader ratio, funding rate history, taker volume ratio, liquidation history) — tabel teks tanpa batas baris | 20-29KB (~5.000-7.250 token) per call di `limit=500` | Truncate ke 15 baris terakhir di teks — summary (avg/tren/dominance) tetap dihitung dari SEMUA data yang di-fetch, bukan cuma yang ditampilkan |\n| 5 deskripsi tool terpanjang (funding_rate, top_trader_ratio, spot_price, klines, spot_klines) | 16.869 karakter total | 15.671 karakter (~7%, ~300 token dihemat di one-time tool-list load per sesi) |\n| `binance_scan_funding_extremes` — `structuredContent.crowdedLong/crowdedShort` duplikat array yang sudah ada di tabel teks | ~2,9KB di `limit=50` (maks) | Cuma `topSymbolLong`/`topSymbolShort` (1 simbol paling ekstrem tiap sisi) — tabel lengkap tetap di teks |\n\nVerifikasi ulang kapan saja:\n\n```bash\nnpm run token-audit\n```\n\nManggil worker deployed langsung, ukur ukuran skema tool, ukuran response\nlintas skala `limit`, dan \"Information Density Ratio\" (data vs boilerplate)\nbuat beberapa tool representatif, plus simulasi 1 percakapan multi-turn\nrealistis. Bukan bagian `npm test`/CI (hit worker live via itu) — dipakai\nmanual pas mau cek dampak perubahan tool description/\nformat response terhadap konsumsi token. Estimasi token pakai heuristik\nchars/4 (gak ada tokenizer resmi Claude yang di-publish sebagai package),\njadi angkanya approximate, berguna buat perbandingan relatif (sebelum vs\nsesudah perubahan), bukan angka token exact.\n\n### Keamanan\n\n- **Validasi input simbol pair.** `symbolSchema` (dipakai semua tool yang\n  butuh parameter `symbol`) dibatasi maksimal 20 karakter dan hanya\n  menerima `[A-Z0-9_]`. Sebelumnya tidak ada batasan — karena simbol dipakai\n  langsung sebagai bagian key Workers KV (`threshold:${symbol}`,\n  `basis_history:${symbol}`), input tanpa batas panjang/karakter berisiko\n  melebihi limit 512-byte key KV atau menyisipkan karakter (titik dua,\n  newline) yang mengacaukan konstruksi key. Batas 20 karakter divalidasi ke\n  data riil (simbol terpanjang di Binance Futures saat ini 17 karakter),\n  dan regex sengaja mengizinkan underscore supaya kontrak dated/quarterly\n  (contoh `BTCUSDT_260925`) tetap valid.\n- **Read-only terhadap akun.** Tidak ada tool yang melakukan order/trading\n  atau mengakses data akun pribadi — satu-satunya tool yang menulis state\n  (`binance_set_pair_threshold`) cuma menyimpan preferensi threshold di\n  Workers KV milik worker sendiri.\n- **Kredensial selalu lewat Wrangler secret**, tidak pernah di-hardcode atau\n  masuk `wrangler.toml`/git — lihat peringatan eksplisit di bagian\n  [Setup Proxy Vercel](#setup-proxy-vercel-wajib-sekali-saja) soal cara\n  aman set secret.\n- Repo ini di-scan manual untuk memastikan tidak ada API key, secret, atau\n  kredensial nyata yang ter-commit — hanya placeholder/contoh (misal URL\n  proxy `whale-pearl.vercel.app` di dokumentasi setup adalah nama contoh,\n  bukan endpoint nyata).\n\n## Biaya\n\n- Cloudflare Workers: free tier 100.000 request/hari — untuk pemakaian\n  personal trading analysis ini jauh dari cukup.\n- Vercel (proxy relay): free tier Hobby plan mencakup jutaan invocation/bulan\n  untuk serverless function — tidak akan kena biaya untuk pemakaian personal.\n  Perhatikan: `PROXY_SECRET` wajib dijaga kerahasiaannya, karena siapapun\n  yang tahu URL + secret bisa memakai quota proxy ini atas nama kamu.\n\nKemungkinan besar kamu tidak akan pernah kena biaya di kedua platform untuk\npemakaian personal.\n\n## Disclaimer\n\n**Project ini open source dan publik** — source code, arsitektur, dan\ndokumentasi (termasuk framework analisis di `docs/`) bisa dilihat, di-clone,\ndan dimodifikasi siapa saja lewat repo GitHub ini. Tidak ada data akun\npribadi yang disimpan atau diproses — semua tool bersifat read-only terhadap\nAPI publik Binance.\n\n- **Bukan saran finansial.** Semua data dan interpretasi (funding rate, OI,\n  order book, framework deteksi MM, dll) bersifat informational — hasil\n  pengolahan data publik, BUKAN rekomendasi trading. Tidak ada jaminan\n  akurasi, kelengkapan, atau ketepatan waktu data — cek [Keterbatasan yang\n  jujur perlu diketahui](#keterbatasan-yang-jujur-perlu-diketahui) untuk\n  batasan spesifik tiap tool sebelum mengambil keputusan berdasarkan data ini.\n- **Tanggung jawab pengguna.** Siapapun yang deploy, memakai, atau\n  memodifikasi worker ini bertanggung jawab penuh atas hasil dan konsekuensi\n  pemakaiannya sendiri — termasuk keputusan trading yang diambil berdasarkan\n  output tool-tool ini.\n- **Kepatuhan ke Binance API Terms of Use.** Worker ini memanggil endpoint\n  publik Binance (Futures & Spot). Pemakaian personal/non-komersial sejalan\n  dengan ketentuan Binance yang berlaku umum; redistribusi ulang data secara\n  komersial atau pemakaian skala besar sebaiknya dicek dulu terhadap\n  [Binance API Terms of Use](https://www.binance.com/en/terms) — di luar\n  tanggung jawab project ini.\n- **Lisensi: [MIT](LICENSE).** Bebas dipakai, dimodifikasi, dan\n  didistribusikan ulang (termasuk untuk keperluan komersial), selama notice\n  copyright & lisensi MIT tetap disertakan. Software disediakan \"as is\",\n  tanpa jaminan apapun — sejalan dengan disclaimer di atas.\n",
  "bytes": 46625,
  "sha": "b80e1b9d66e132d7152d92c52732fe380a344f3ac0b4e73612742df650cd8651",
  "repo_slug": "osindo-dev/whalescope-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_osindo_dev_whalescope_mcp_7e89e3ef/readme"
}