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.
- package/README.md +4 -2
- package/dist/tools.js +65 -11
- 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
|
+
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
|
|
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
|
|
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
|
|
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);
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.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"
|