bykaranteli-mcp 0.17.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  MCP (Model Context Protocol) server for **live crypto derivatives data**: funding rates, cross-exchange funding arbitrage, open interest pressure, Fear & Greed, BTC dominance and a verified signal track record.
4
4
 
5
- 34 read-only tools over the free, no-auth public JSON API of [bykaranteli.com](https://bykaranteli.com/developers). No API key, no account, no rate-limit registration. Data covers Binance USDT-M perpetuals (funding arbitrage additionally compares OKX, Bybit, Gate, HTX, BingX, Kraken, MEXC and Bitget).
5
+ 45 read-only tools over the free, no-auth public JSON API of [bykaranteli.com](https://bykaranteli.com/developers). No API key, no account, no rate-limit registration. Data covers Binance USDT-M perpetuals (funding arbitrage additionally compares OKX, Bybit, Gate, HTX, BingX, Kraken, MEXC and Bitget).
6
6
 
7
7
  ## Hosted endpoint (no install)
8
8
 
9
9
  Paste `https://mcp.bykaranteli.com` as a custom connector in any MCP-capable
10
- assistant. Same 34 tools, nothing to install, no key.
10
+ assistant. Same 45 tools, nothing to install, no key.
11
11
 
12
12
  ## Quick start
13
13
 
@@ -65,6 +65,9 @@ Requires Node.js 18 or newer.
65
65
  | `get_theme_indices` | "Which crypto narrative is leading: AI, RWA, DePIN, memes, L2s, DeFi?" |
66
66
  | `get_factor_board` | "Which indicators sit in an unusual band today, and what followed historically?" |
67
67
  | `get_venue_markets` | "Total BTC open interest across exchanges?", "What is the DEX share of perp OI?", "Is USDT off peg anywhere?" |
68
+ | `get_leverage_tiers` | "How much leverage does Bybit allow on SOL?", "Which exchange has the highest max leverage for DOGE?", "Did any venue cut leverage on a coin this week?" |
69
+ | `get_withdrawal_status` | "Has KuCoin paused USDT withdrawals?", "Cheapest network to withdraw USDT from Gate?", "Which exchanges have withdrawals closed right now?" |
70
+ | `get_venue_profile` | "What do you record about Bybit?", "How many contracts does OKX list?", "Is HTX up, and what happened there this week?" |
68
71
  | `get_lead_lag` | "Does Coinbase or Binance move first?" |
69
72
  | `get_iv_surface` | "What is BTC implied vol by expiry?", "Is downside protection expensive (skew)?" |
70
73
  | `get_whale_tape` | "Are whales buying or selling right now?" |
@@ -78,6 +81,7 @@ Requires Node.js 18 or newer.
78
81
  | `get_positioning` | "BTC long/short ratio on Binance? Are top traders net short ETH? CVD today?" |
79
82
  | `get_coverage` | "Which exchanges are behind your liquidation totals? How fresh is the data?" |
80
83
  | `get_orderbook_depth` | "Where is the biggest BTC bid wall? How deep is ETH within 2% on Coinbase vs Binance?" |
84
+ | `get_jupiter_perps` | "How much long vs short OI is on Jupiter SOL perps? Who topped Jupiter this week? What is the JLP APR?" |
81
85
  | `get_cycle_indicators` | "Has the Pi Cycle crossed? Mayer Multiple and Puell today?" |
82
86
  | `get_altseason` | "Is it altseason?", "What is the altcoin season index?" |
83
87
  | `get_metric_context` | "Is today's funding extreme historically?", "Where does this reading sit in its distribution?" |
@@ -112,7 +116,7 @@ MIT. Attribution appreciated: "ByKaranteli (bykaranteli.com)".
112
116
 
113
117
  ## Paid depth (optional)
114
118
 
115
- The 34 tools above are free and stay free. For recorded history and raw records
119
+ The 45 tools above are free and stay free. For recorded history and raw records
116
120
  beyond the live snapshots, bykaranteli.com also exposes pay-per-call x402
117
121
  endpoints (USDC on Solana or Base, priced per call, no account):
118
122
  <https://bykaranteli.com/developers#x402> · machine catalog:
package/dist/tools.js CHANGED
@@ -615,6 +615,63 @@ export function registerByKaranteliTools(server, options) {
615
615
  return fail(err);
616
616
  }
617
617
  });
618
+ server.registerTool("get_venue_profile", {
619
+ title: "Venue profile: everything ByKaranteli records about one exchange",
620
+ description: "Call this when the user asks about a specific exchange (Bybit, OKX, Gate, KuCoin, HTX, Bitget, MEXC, BitMEX, Hyperliquid ...): how many contracts it lists, its perp open interest and average funding, its leverage ladders, deposit and withdrawal networks and how many are paused, its base fee schedule, its status uptime and the recent event log (listings, delistings, leverage cuts, withdrawal pauses, incidents). Without venue returns the list of recorded venues.",
621
+ inputSchema: { venue: z.string().optional().describe("string, optional venue id, e.g. bybit") },
622
+ annotations: READ_ONLY,
623
+ }, async (args) => {
624
+ try {
625
+ return ok(withProvenance(await fetchJson(args.venue ? `/api/public/venues/profile?venue=${encodeURIComponent(String(args.venue).toLowerCase())}` : "/api/public/venues/profile"), args.venue ? `/api/public/venues/profile?venue=${encodeURIComponent(String(args.venue).toLowerCase())}` : "/api/public/venues/profile"));
626
+ }
627
+ catch (err) {
628
+ return fail(err);
629
+ }
630
+ });
631
+ server.registerTool("get_withdrawal_status", {
632
+ title: "Withdrawal status and network fees: which exchanges paused withdrawals, per asset and network",
633
+ description: "Call this when the user asks whether an exchange has paused withdrawals or deposits, which networks are open for an asset, what the withdrawal fee or minimum is on each venue, or which venue is cheapest to withdraw from. Without arguments returns the overview (withdrawals paused right now, ranked, plus recent suspension and resumption events). Pass asset (e.g. USDT) for every venue and network of that asset, and venue (e.g. kucoin) to narrow. Recorded daily by ByKaranteli from 20+ venues' public currency lists.",
634
+ inputSchema: {
635
+ asset: z.string().optional().describe("string, optional asset code, e.g. USDT"),
636
+ venue: z.string().optional().describe("string, optional venue id, e.g. kucoin"),
637
+ },
638
+ annotations: READ_ONLY,
639
+ }, async (args) => {
640
+ try {
641
+ const qs = new URLSearchParams();
642
+ if (args.asset)
643
+ qs.set("asset", String(args.asset).toUpperCase());
644
+ if (args.venue)
645
+ qs.set("venue", String(args.venue).toLowerCase());
646
+ const q = qs.toString();
647
+ return ok(withProvenance(await fetchJson(`/api/public/withdrawals${q ? `?${q}` : ""}`), `/api/public/withdrawals${q ? `?${q}` : ""}`));
648
+ }
649
+ catch (err) {
650
+ return fail(err);
651
+ }
652
+ });
653
+ server.registerTool("get_leverage_tiers", {
654
+ title: "Leverage tiers: max leverage and maintenance margin per perpetual on every venue",
655
+ description: "Call this when the user asks how much leverage an exchange allows on a coin, what the maintenance margin or risk limit ladder is, which venue offers the highest leverage for a symbol, or whether an exchange recently cut leverage. Returns the current ladder per venue (tier, notional floor and cap, max leverage, maintenance margin rate) recorded daily by ByKaranteli, plus a change log. Pass symbol for one base asset (e.g. SOL) and venue for one exchange (bybit, okx, gate, htx, bitget, mexc).",
656
+ inputSchema: {
657
+ symbol: z.string().optional().describe("string, optional base asset, e.g. BTC"),
658
+ venue: z.string().optional().describe("string, optional venue id, e.g. bybit"),
659
+ },
660
+ annotations: READ_ONLY,
661
+ }, async (args) => {
662
+ try {
663
+ const qs = new URLSearchParams();
664
+ if (args.symbol)
665
+ qs.set("symbol", String(args.symbol).toUpperCase());
666
+ if (args.venue)
667
+ qs.set("venue", String(args.venue).toLowerCase());
668
+ const q = qs.toString();
669
+ return ok(withProvenance(await fetchJson(`/api/public/leverage-tiers${q ? `?${q}` : ""}`), `/api/public/leverage-tiers${q ? `?${q}` : ""}`));
670
+ }
671
+ catch (err) {
672
+ return fail(err);
673
+ }
674
+ });
618
675
  server.registerTool("get_venue_markets", {
619
676
  title: "Exchange coverage: OI, volume, funding and pegs across 43 exchanges",
620
677
  description: "Call this when the user asks about total open interest across exchanges, which venues hold the most OI, DEX versus CEX share, funding dispersion between venues, or stablecoin pegs. Returns the latest 10-minute snapshot aggregates across 56 feeds on 43 exchanges; pass symbol for one coin's per-venue rows.",
@@ -871,6 +928,29 @@ export function registerByKaranteliTools(server, options) {
871
928
  return fail(err);
872
929
  }
873
930
  });
931
+ server.registerTool("get_jupiter_perps", {
932
+ title: "Jupiter Perps (Solana): exact long/short OI, utilization, borrow rates, weekly top traders",
933
+ description: "Call this when the user asks about Jupiter perpetuals on Solana: long versus short open interest per market (SOL, ETH, BTC) read from the on-chain custody state, pool utilization and hourly borrow rates, JLP pool AUM and APR, 24h volume, or the week's top traders by realized PnL. Pass base and history_days for the hourly OI history.",
934
+ inputSchema: {
935
+ base: z.string().trim().toUpperCase().regex(/^(SOL|ETH|BTC)$/).optional().describe("Market base: SOL, ETH or BTC"),
936
+ history_days: z.number().int().min(1).max(30).optional().describe("Include hourly OI history for the base, 1..30 days"),
937
+ },
938
+ annotations: READ_ONLY,
939
+ }, async ({ base, history_days }) => {
940
+ try {
941
+ const q = new URLSearchParams();
942
+ if (base)
943
+ q.set("base", base);
944
+ if (history_days)
945
+ q.set("days", String(history_days));
946
+ const qs = q.toString();
947
+ const path = `/api/public/jupiter${qs ? `?${qs}` : ""}`;
948
+ return ok(withProvenance(await fetchJson(path), path));
949
+ }
950
+ catch (err) {
951
+ return fail(err);
952
+ }
953
+ });
874
954
  server.registerTool("get_coverage", {
875
955
  title: "Coverage registry: which venues and data types we collect, how, and how fresh",
876
956
  description: "Call this when the user asks which exchanges sit behind a ByKaranteli number, whether a feed is complete or sampled, since when a venue is collected, or how fresh the data is. Returns the live coverage registry: liquidation feeds per venue with kind and last record, snapshot feeds per venue and market, funding arbitrage legs, positioning sources, whale tape, spot minutes and the Hyperliquid whale scan with freshness.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bykaranteli-mcp",
3
- "version": "0.17.0",
3
+ "version": "0.21.0",
4
4
  "description": "MCP server for live crypto derivatives data from bykaranteli.com: funding rates, funding arbitrage, open interest pressure, Fear & Greed, BTC dominance and verified signal performance. Free, no API key.",
5
5
  "type": "module",
6
6
  "bin": {