bykaranteli-mcp 0.28.2 → 0.29.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 +4 -2
- package/dist/tools.js +65 -12
- 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
|
-
|
|
5
|
+
49 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
|
|
10
|
+
assistant. Same 49 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.
|
|
@@ -52,6 +52,8 @@ Requires Node.js 18 or newer.
|
|
|
52
52
|
| `get_pressure_scores` | "Which coins are over-leveraged / crowded right now?" |
|
|
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
|
+
| `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?" |
|
|
55
57
|
| `get_etf_flows` | "Did the Bitcoin ETFs buy or sell yesterday?", "Cumulative ETH ETF inflow?" |
|
|
56
58
|
| `get_cot_positioning` | "Are hedge funds long or short Bitcoin?", "What did the COT report show?" |
|
|
57
59
|
| `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
|
|
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()
|
|
@@ -313,7 +313,7 @@ export function registerByKaranteliTools(server, options) {
|
|
|
313
313
|
});
|
|
314
314
|
server.registerTool("get_funding_arbitrage", {
|
|
315
315
|
title: "Cross-exchange funding arbitrage opportunities",
|
|
316
|
-
description: "Call this when the user asks about funding arbitrage, funding rate differences between exchanges, or delta-neutral carry trades. Compares funding across Binance, OKX
|
|
316
|
+
description: "Call this when the user asks about funding arbitrage, funding rate differences between exchanges, or delta-neutral carry trades. Compares funding across every venue on the board, from Binance, OKX and Bybit to Hyperliquid, dYdX and the smaller perp venues fed by the venue snapshot, for 12 major perps and returns the best long/short venue per symbol with gross and net annualized APR (net of taker fees and weekly rebalance cost).",
|
|
317
317
|
inputSchema: {},
|
|
318
318
|
annotations: READ_ONLY,
|
|
319
319
|
}, async () => {
|
|
@@ -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
|
|
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
|
-
|
|
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);
|
|
@@ -496,6 +499,56 @@ export function registerByKaranteliTools(server, options) {
|
|
|
496
499
|
return fail(err);
|
|
497
500
|
}
|
|
498
501
|
});
|
|
502
|
+
server.registerTool("get_liquidation_leaderboard", {
|
|
503
|
+
title: "Largest single liquidations and a 30-day session heatmap (counted venue feeds)",
|
|
504
|
+
description: "Call this when the user asks for the biggest liquidation today or this week, who got liquidated for the most, the largest single liquidation print, or when in the day or week liquidations cluster (Asia, Europe or US hours, weekday by UTC hour). Returns the largest single liquidation prints of the last 24h, 7d or 30d (rank, symbol, venue, side where SELL means a long was liquidated, price, quantity, notional, millisecond time) recorded from the counted venues' public feeds, plus a 30-day weekday by UTC hour heatmap with hour, weekday and session totals. Binance publishes at most one print per second per symbol, so its rows are a floor.",
|
|
505
|
+
inputSchema: {
|
|
506
|
+
window: z.enum(["24h", "7d", "30d"]).optional().describe("Ranking window: 24h (default), 7d or 30d."),
|
|
507
|
+
limit: z.number().int().min(1).max(100).optional().describe("Rows to return (default 25, max 100)."),
|
|
508
|
+
days: z.number().int().min(7).max(90).optional().describe("Days folded into the session heatmap (default 30)."),
|
|
509
|
+
},
|
|
510
|
+
annotations: READ_ONLY,
|
|
511
|
+
}, async ({ window, limit, days }) => {
|
|
512
|
+
try {
|
|
513
|
+
const params = new URLSearchParams();
|
|
514
|
+
if (window)
|
|
515
|
+
params.set("window", window);
|
|
516
|
+
if (limit)
|
|
517
|
+
params.set("limit", String(limit));
|
|
518
|
+
if (days)
|
|
519
|
+
params.set("days", String(days));
|
|
520
|
+
const qs = params.toString();
|
|
521
|
+
const path = `/api/public/liquidation-leaderboard${qs ? `?${qs}` : ""}`;
|
|
522
|
+
return ok(withProvenance(await fetchJson(path), path));
|
|
523
|
+
}
|
|
524
|
+
catch (err) {
|
|
525
|
+
return fail(err);
|
|
526
|
+
}
|
|
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
|
+
});
|
|
499
552
|
server.registerTool("get_open_interest", {
|
|
500
553
|
title: "Intraday open interest and leverage regimes (10 major perps)",
|
|
501
554
|
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.",
|
|
@@ -763,7 +816,7 @@ export function registerByKaranteliTools(server, options) {
|
|
|
763
816
|
});
|
|
764
817
|
server.registerTool("get_new_listings", {
|
|
765
818
|
title: "New and delisted perpetual contracts",
|
|
766
|
-
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
|
|
819
|
+
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.",
|
|
767
820
|
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.") },
|
|
768
821
|
annotations: READ_ONLY,
|
|
769
822
|
}, async (args) => {
|
|
@@ -805,7 +858,7 @@ export function registerByKaranteliTools(server, options) {
|
|
|
805
858
|
});
|
|
806
859
|
server.registerTool("get_liqmap", {
|
|
807
860
|
title: "LiqMap: estimated liquidation clusters with real prints overlaid",
|
|
808
|
-
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
|
|
861
|
+
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.",
|
|
809
862
|
inputSchema: {
|
|
810
863
|
symbol: z
|
|
811
864
|
.string()
|
|
@@ -934,8 +987,8 @@ export function registerByKaranteliTools(server, options) {
|
|
|
934
987
|
}
|
|
935
988
|
});
|
|
936
989
|
server.registerTool("get_positioning", {
|
|
937
|
-
title: "Positioning: long/short ratios, taker buy/sell and CVD
|
|
938
|
-
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
|
|
990
|
+
title: "Positioning: long/short ratios, taker buy/sell and CVD across exchanges",
|
|
991
|
+
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.",
|
|
939
992
|
inputSchema: {
|
|
940
993
|
symbol: z.string().trim().toUpperCase().regex(/^[A-Z0-9]{2,24}$/).optional().describe("One Binance symbol, e.g. BTCUSDT"),
|
|
941
994
|
},
|
|
@@ -1041,8 +1094,8 @@ export function registerByKaranteliTools(server, options) {
|
|
|
1041
1094
|
}
|
|
1042
1095
|
});
|
|
1043
1096
|
server.registerTool("get_orderbook_depth", {
|
|
1044
|
-
title: "Spot order book depth: walls and 2% depth
|
|
1045
|
-
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
|
|
1097
|
+
title: "Spot order book depth: walls and 2% depth from every spot venue on the coverage page",
|
|
1098
|
+
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.",
|
|
1046
1099
|
inputSchema: {
|
|
1047
1100
|
symbol: z.string().trim().toUpperCase().regex(/^[A-Z0-9]{2,12}$/).optional().describe("One coin, e.g. BTC (default BTC)"),
|
|
1048
1101
|
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.
|
|
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.
|
|
3
|
+
"version": "0.29.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. 49 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"
|