bykaranteli-mcp 0.28.3 → 0.30.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.
Files changed (3) hide show
  1. package/README.md +4 -2
  2. package/dist/tools.js +65 -11
  3. package/package.json +2 -2
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, liquidations, options, ETF flows, Fear & Greed and BTC dominance.
4
4
 
5
- 48 read-only tools over the public JSON API of [bykaranteli.com](https://bykaranteli.com/developers). Since 2026-09-10 the API asks programs for an account key: a **free key** comes with any verified account at <https://bykaranteli.com/dashboard/api> (30 requests a minute, public depth), and the Builder, Business and Scale plans raise the rate and unlock member depth (LiqMap on seven timeframes, 5-minute series, the x402 catalog included). Set it as `BYKARANTELI_API_KEY`. Data covers Binance USDT-M perpetuals (funding arbitrage additionally compares OKX, Bybit, Gate, HTX, BingX, Kraken, MEXC and Bitget).
5
+ 50 read-only tools over the public JSON API of [bykaranteli.com](https://bykaranteli.com/developers). Since 2026-09-10 the API asks programs for an account key: a **free key** comes with any verified account at <https://bykaranteli.com/dashboard/api> (30 requests a minute, public depth), and the Builder, Business and Scale plans raise the rate and unlock member depth (LiqMap on seven timeframes, 5-minute series, the x402 catalog included). Set it as `BYKARANTELI_API_KEY`. Data covers Binance USDT-M perpetuals; funding arbitrage, liquidations, order book depth, options, positioning and insurance funds add the other venues each board lists on bykaranteli.com/coverage.
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 48 tools, nothing to install. Without a key it runs on the
10
+ assistant. Same 50 tools, nothing to install. Without a key it runs on the
11
11
  shared Free pool; a connector header with your account key, `x-api-key: bk_...`
12
12
  (claude.ai custom connectors) or `Authorization: Bearer bk_...` (Builder and
13
13
  above), brings your own rate limit and member depth.
@@ -53,6 +53,8 @@ Requires Node.js 18 or newer.
53
53
  | `get_top_movers` | "Biggest OI spikes today?", "Most extreme funding right now?" |
54
54
  | `get_liquidations` | "How much was liquidated today?", "Did longs or shorts get flushed this week?" |
55
55
  | `get_liquidation_leaderboard` | "What was the biggest liquidation today?", "When do liquidations cluster, Asia or US hours?" |
56
+ | `get_insurance_funds` | "How big is the Binance insurance fund?", "Did any exchange insurance fund shrink this week?" |
57
+ | `get_tokenized_stocks` | "How much tokenized Tesla exists onchain?", "Which tokenized stock trades furthest from the real share?" |
56
58
  | `get_etf_flows` | "Did the Bitcoin ETFs buy or sell yesterday?", "Cumulative ETH ETF inflow?" |
57
59
  | `get_cot_positioning` | "Are hedge funds long or short Bitcoin?", "What did the COT report show?" |
58
60
  | `get_options_snapshot` | "Where are the BTC option walls?", "What is DVOL / the zero-gamma level?" |
package/dist/tools.js CHANGED
@@ -153,7 +153,7 @@ export function registerByKaranteliTools(server, options) {
153
153
  });
154
154
  server.registerTool("get_liquidations", {
155
155
  title: "Crypto liquidations: daily long/short totals per symbol and exchange",
156
- description: "Call this when the user asks how much was liquidated in crypto futures, whether longs or shorts got flushed, or for liquidation history. Returns daily long and short liquidation totals in USD per symbol and exchange, recorded from ByKaranteli's own Binance, Bybit, OKX, Gate, HTX and dYdX stream collectors (recorded events, a floor, not estimates). One row per finalized UTC day, symbol and exchange; history begins 2026-07-30 and grows daily.",
156
+ description: "Call this when the user asks how much was liquidated in crypto futures, whether longs or shorts got flushed, or for liquidation history. Returns daily long and short liquidation totals in USD per symbol and exchange, recorded from ByKaranteli's own stream collectors on every liquidation venue it counts, listed on bykaranteli.com/coverage (recorded events, a floor, not estimates). One row per finalized UTC day, symbol and exchange; history begins 2026-07-30 and grows daily.",
157
157
  inputSchema: {
158
158
  symbol: z
159
159
  .string()
@@ -407,12 +407,15 @@ export function registerByKaranteliTools(server, options) {
407
407
  });
408
408
  server.registerTool("get_options_snapshot", {
409
409
  title: "Options walls, gamma exposure and DVOL (BTC + ETH)",
410
- description: "Call this when the user asks where the big options bets sit, about call/put walls, gamma exposure (GEX), the zero-gamma level, implied volatility (DVOL) or the IV term structure for Bitcoin or Ethereum. Daily snapshot of listed crypto options: top strikes by open interest, put/call ratio, dealer hedging map and ATM IV by expiry.",
411
- inputSchema: {},
410
+ description: "Call this when the user asks where the big options bets sit, about call/put walls, gamma exposure (GEX), the zero-gamma level, implied volatility (DVOL) or the IV term structure for Bitcoin or Ethereum, across options venues or on one venue. Daily snapshot of the listed option chains of every options venue we record, summed by default or one venue with venue: top strikes by open interest, put/call ratio, dealer hedging map, ATM IV by expiry and each venue's open interest (venues_included). DVOL is Deribit's index whatever the venue.",
411
+ inputSchema: {
412
+ venue: z.enum(["all", "deribit", "bybit", "binance", "okx", "delta"]).optional().describe("all (default) sums every options venue; or one venue id: deribit, bybit, binance, okx or delta (Delta Exchange India)."),
413
+ },
412
414
  annotations: READ_ONLY,
413
- }, async () => {
415
+ }, async ({ venue }) => {
414
416
  try {
415
- return ok(withProvenance(await fetchJson("/api/public/options"), "/api/public/options"));
417
+ const path = venue && venue !== "all" ? `/api/public/options?venue=${venue}` : "/api/public/options";
418
+ return ok(withProvenance(await fetchJson(path), path));
416
419
  }
417
420
  catch (err) {
418
421
  return fail(err);
@@ -522,6 +525,57 @@ export function registerByKaranteliTools(server, options) {
522
525
  return fail(err);
523
526
  }
524
527
  });
528
+ server.registerTool("get_insurance_funds", {
529
+ title: "Exchange insurance funds: size, 24h and 7d change, fund against open interest, daily history",
530
+ description: "Call this when the user asks how big an exchange's insurance fund is, whether a fund is shrinking or was used after a crash, how much exchanges hold to absorb bankrupt liquidations, or how a fund compares with the venue's open interest. Returns the latest hourly reading per covered venue (every exchange the insurance fund board lists): the fund in USD (OKX's own published total, the sum of priced pools elsewhere), per asset, 24h and 7d change, the fund as a percent of the venue's perpetual open interest on the coins ByKaranteli tracks, and daily closes per venue. Set pools to include every pool row (the contracts it covers, asset, balance, USD). A fund is a balance the venue reports, not an audit of its reserves.",
531
+ inputSchema: {
532
+ venue: z.enum(["binance", "bybit", "okx", "gate"]).optional().describe("One venue; omit for every covered venue."),
533
+ history_days: z.number().int().min(1).max(366).optional().describe("Days of daily closes (default 30, max 366)."),
534
+ pools: z.boolean().optional().describe("Include every pool row (large for Binance and Bybit). Default false."),
535
+ },
536
+ annotations: READ_ONLY,
537
+ }, async ({ venue, history_days, pools }) => {
538
+ try {
539
+ const params = new URLSearchParams();
540
+ if (venue)
541
+ params.set("venue", venue);
542
+ params.set("days", String(history_days ?? 30));
543
+ if (!pools)
544
+ params.set("pools", "0");
545
+ const path = `/api/public/insurance-funds?${params.toString()}`;
546
+ return ok(withProvenance(await fetchJson(path), path));
547
+ }
548
+ catch (err) {
549
+ return fail(err);
550
+ }
551
+ });
552
+ server.registerTool("get_tokenized_stocks", {
553
+ title: "Tokenized stocks onchain: supply, premium to the real share, DEX pools and exchange pairs",
554
+ description: "Call this when the user asks about tokenized stocks or stock tokens (xStocks, Ondo, Robinhood stock tokens, Coinbase tokenized stocks on Base, Binance bStocks, Backpack): how much of a stock exists onchain, which issuer or chain holds the most, whether a wrapper trades above or below the real share, which DEX pools or exchanges trade it. Returns the board ByKaranteli refreshes every 10 minutes: per underlying the reference share price and its session, each wrapper (issuer, chain, price, premium_pct against a fresh reference, DEX liquidity and 24h volume from admitted pools, supply in shares and dollars, holders, status), tokenized spot pairs on the exchanges the board lists, the perpetual futures cross, and totals (supply by issuer and chain, DEX volume, median premium). Wrappers come from issuer sources only, never from a name search.",
555
+ inputSchema: {
556
+ underlying: z.string().regex(/^[A-Za-z0-9.]{1,16}$/).optional().describe("Stock ticker, e.g. TSLA; omit for the whole board."),
557
+ issuer: z.enum(["xstocks", "robinhood", "coinbase", "bstocks", "ondo", "backpack", "gstocks"]).optional().describe("One issuer; omit for every issuer."),
558
+ chain: z.string().regex(/^[a-z]{2,12}$/).optional().describe("One chain, e.g. solana, base, bnb, robinhood, ethereum, ton, all (xStocks circulating) or cex (exchange pairs)."),
559
+ top: z.number().int().min(1).max(200).optional().describe("Rows by supply (default 20, max 200)."),
560
+ },
561
+ annotations: READ_ONLY,
562
+ }, async ({ underlying, issuer, chain, top }) => {
563
+ try {
564
+ const params = new URLSearchParams();
565
+ if (underlying)
566
+ params.set("underlying", underlying.toUpperCase());
567
+ if (issuer)
568
+ params.set("issuer", issuer);
569
+ if (chain)
570
+ params.set("chain", chain);
571
+ params.set("top", String(top ?? 20));
572
+ const path = `/api/public/tokenized-stocks?${params.toString()}`;
573
+ return ok(withProvenance(await fetchJson(path), path));
574
+ }
575
+ catch (err) {
576
+ return fail(err);
577
+ }
578
+ });
525
579
  server.registerTool("get_open_interest", {
526
580
  title: "Intraday open interest and leverage regimes (10 major perps)",
527
581
  description: "Call this when the user asks whether leverage is entering or leaving the market, about open interest changes, or whether longs or shorts are building in a major coin. Returns 5-minute-resolution OI with 24h OI and price deltas and a four-regime read per symbol: longs building, shorts building, long squeeze, short squeeze, or quiet.",
@@ -789,7 +843,7 @@ export function registerByKaranteliTools(server, options) {
789
843
  });
790
844
  server.registerTool("get_new_listings", {
791
845
  title: "New and delisted perpetual contracts",
792
- description: "Call this when the user asks what new perpetuals were listed, which exchange listed a coin first, or about delistings. Returns listings and delistings across six exchanges from the hourly scan.",
846
+ description: "Call this when the user asks what new perpetuals were listed, which exchange listed a coin first, or about delistings. Returns listings and delistings across every exchange the hourly scan covers.",
793
847
  inputSchema: { days: z.number().int().min(1).max(30).optional().describe("Window in days, 1-30 (default 30). Longer listing history is the listings dataset at bykaranteli.com/data.") },
794
848
  annotations: READ_ONLY,
795
849
  }, async (args) => {
@@ -831,7 +885,7 @@ export function registerByKaranteliTools(server, options) {
831
885
  });
832
886
  server.registerTool("get_liqmap", {
833
887
  title: "LiqMap: estimated liquidation clusters with real prints overlaid",
834
- description: "Call this when the user asks where liquidation clusters or liquidity pools sit for a perpetual, where leveraged longs/shorts would get liquidated, or for a liquidation heatmap reading. Returns the LiqMap snapshot for one symbol: modeled liquidation levels by price, zone aggregates and real liquidation prints from six venues. Without an account key (or on the Free plan) the 24h view; with a Builder or higher key (BYKARANTELI_API_KEY) every timeframe from 1h to 30d.",
888
+ description: "Call this when the user asks where liquidation clusters or liquidity pools sit for a perpetual, where leveraged longs/shorts would get liquidated, or for a liquidation heatmap reading. Returns the LiqMap snapshot for one symbol: modeled liquidation levels by price, zone aggregates and real liquidation prints from every liquidation venue ByKaranteli counts (listed on bykaranteli.com/coverage). Without an account key (or on the Free plan) the 24h view; with a Builder or higher key (BYKARANTELI_API_KEY) every timeframe from 1h to 30d.",
835
889
  inputSchema: {
836
890
  symbol: z
837
891
  .string()
@@ -960,8 +1014,8 @@ export function registerByKaranteliTools(server, options) {
960
1014
  }
961
1015
  });
962
1016
  server.registerTool("get_positioning", {
963
- title: "Positioning: long/short ratios, taker buy/sell and CVD on Binance, Bybit, OKX, Gate, HTX, Bitget",
964
- description: "Call this when the user asks about the long/short ratio, whether retail or top traders are net long or short, the taker buy/sell ratio, or CVD (cumulative volume delta) for a perpetual. Returns exchange-published statistics for the 30 most traded Binance USDT perps on Binance, Bybit, OKX, Gate, HTX and Bitget (Binance global and top-trader ratios, Bybit share long, OKX ratios and taker volume, Gate account and top-trader ratios, HTX elite ratios, Bitget account and position ratios) and CVD series for BTC, ETH and SOL; refreshed every 15 minutes.",
1017
+ title: "Positioning: long/short ratios, taker buy/sell and CVD across exchanges",
1018
+ description: "Call this when the user asks about the long/short ratio, whether retail or top traders are net long or short, the taker buy/sell ratio, or CVD (cumulative volume delta) for a perpetual. Returns exchange-published statistics for the 30 most traded Binance USDT perps on every perpetual venue the positioning board records (Binance global and top-trader ratios, Bybit share long, OKX ratios and taker volume, Gate account and top-trader ratios, HTX elite ratios, Bitget account and position ratios) and CVD series for BTC, ETH and SOL; refreshed every 15 minutes.",
965
1019
  inputSchema: {
966
1020
  symbol: z.string().trim().toUpperCase().regex(/^[A-Z0-9]{2,24}$/).optional().describe("One Binance symbol, e.g. BTCUSDT"),
967
1021
  },
@@ -1067,8 +1121,8 @@ export function registerByKaranteliTools(server, options) {
1067
1121
  }
1068
1122
  });
1069
1123
  server.registerTool("get_orderbook_depth", {
1070
- title: "Spot order book depth: walls and 2% depth across Binance, Coinbase, Kraken, Bybit, OKX",
1071
- description: "Call this when the user asks where the bid or ask walls are, how deep the spot order book is, whether buyers or sellers have more resting orders near price, or for an order book heatmap. Returns the five venues' books binned into 0.1% buckets within 5% of mid (USD notional), the largest walls with venue split, 2% depth and book reach per venue, and optionally the summed 5-minute history; coins: BTC, ETH, SOL, XRP, DOGE, ADA, LINK, AVAX, LTC, BNB.",
1124
+ title: "Spot order book depth: walls and 2% depth from every spot venue on the coverage page",
1125
+ description: "Call this when the user asks where the bid or ask walls are, how deep the spot order book is, whether buyers or sellers have more resting orders near price, or for an order book heatmap. Returns the books of every spot venue with a public book that the coverage page lists, binned into 0.1% buckets within 20% of mid (USD notional), the largest walls with venue split, 2% depth and book reach per venue, and optionally the summed 5-minute history; coins: BTC, ETH, SOL, XRP, DOGE, ADA, LINK, AVAX, LTC, BNB. Books whose size is not corroborated are recorded and returned per venue with in_aggregate false (listed in held_out) but not summed into the walls, 2% depth or history.",
1072
1126
  inputSchema: {
1073
1127
  symbol: z.string().trim().toUpperCase().regex(/^[A-Z0-9]{2,12}$/).optional().describe("One coin, e.g. BTC (default BTC)"),
1074
1128
  hours: z.number().int().min(1).max(24).optional().describe("Include the summed 5-minute history for this many hours"),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bykaranteli-mcp",
3
- "version": "0.28.3",
4
- "description": "MCP server for live crypto derivatives data from bykaranteli.com: funding rates, funding arbitrage, open interest pressure, liquidations, options, ETF flows, Fear & Greed and BTC dominance. 48 read-only tools, free account key, paid depth via plans or x402.",
3
+ "version": "0.30.0",
4
+ "description": "MCP server for live crypto derivatives data from bykaranteli.com: funding rates, funding arbitrage, open interest pressure, liquidations, options, ETF flows, Fear & Greed and BTC dominance. 50 read-only tools, free account key, paid depth via plans or x402.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "bykaranteli-mcp": "dist/index.js"