bykaranteli-mcp 0.16.0 → 0.18.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
@@ -7,7 +7,7 @@ MCP (Model Context Protocol) server for **live crypto derivatives data**: fundin
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 35 tools, nothing to install, no key.
11
11
 
12
12
  ## Quick start
13
13
 
@@ -77,6 +77,8 @@ Requires Node.js 18 or newer.
77
77
  | `get_hl_whales` | "Are Hyperliquid whales net long BTC? What did the biggest accounts just flip?" |
78
78
  | `get_positioning` | "BTC long/short ratio on Binance? Are top traders net short ETH? CVD today?" |
79
79
  | `get_coverage` | "Which exchanges are behind your liquidation totals? How fresh is the data?" |
80
+ | `get_orderbook_depth` | "Where is the biggest BTC bid wall? How deep is ETH within 2% on Coinbase vs Binance?" |
81
+ | `get_jupiter_perps` | "How much long vs short OI is on Jupiter SOL perps? Who topped Jupiter this week? What is the JLP APR?" |
80
82
  | `get_cycle_indicators` | "Has the Pi Cycle crossed? Mayer Multiple and Puell today?" |
81
83
  | `get_altseason` | "Is it altseason?", "What is the altcoin season index?" |
82
84
  | `get_metric_context` | "Is today's funding extreme historically?", "Where does this reading sit in its distribution?" |
@@ -111,7 +113,7 @@ MIT. Attribution appreciated: "ByKaranteli (bykaranteli.com)".
111
113
 
112
114
  ## Paid depth (optional)
113
115
 
114
- The 34 tools above are free and stay free. For recorded history and raw records
116
+ The 35 tools above are free and stay free. For recorded history and raw records
115
117
  beyond the live snapshots, bykaranteli.com also exposes pay-per-call x402
116
118
  endpoints (USDC on Solana or Base, priced per call, no account):
117
119
  <https://bykaranteli.com/developers#x402> · machine catalog:
package/dist/tools.js CHANGED
@@ -871,6 +871,29 @@ export function registerByKaranteliTools(server, options) {
871
871
  return fail(err);
872
872
  }
873
873
  });
874
+ server.registerTool("get_jupiter_perps", {
875
+ title: "Jupiter Perps (Solana): exact long/short OI, utilization, borrow rates, weekly top traders",
876
+ 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.",
877
+ inputSchema: {
878
+ base: z.string().trim().toUpperCase().regex(/^(SOL|ETH|BTC)$/).optional().describe("Market base: SOL, ETH or BTC"),
879
+ history_days: z.number().int().min(1).max(30).optional().describe("Include hourly OI history for the base, 1..30 days"),
880
+ },
881
+ annotations: READ_ONLY,
882
+ }, async ({ base, history_days }) => {
883
+ try {
884
+ const q = new URLSearchParams();
885
+ if (base)
886
+ q.set("base", base);
887
+ if (history_days)
888
+ q.set("days", String(history_days));
889
+ const qs = q.toString();
890
+ const path = `/api/public/jupiter${qs ? `?${qs}` : ""}`;
891
+ return ok(withProvenance(await fetchJson(path), path));
892
+ }
893
+ catch (err) {
894
+ return fail(err);
895
+ }
896
+ });
874
897
  server.registerTool("get_coverage", {
875
898
  title: "Coverage registry: which venues and data types we collect, how, and how fresh",
876
899
  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.",
@@ -885,4 +908,27 @@ export function registerByKaranteliTools(server, options) {
885
908
  return fail(err);
886
909
  }
887
910
  });
911
+ server.registerTool("get_orderbook_depth", {
912
+ title: "Spot order book depth: walls and 2% depth across Binance, Coinbase, Kraken, Bybit, OKX",
913
+ 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.",
914
+ inputSchema: {
915
+ symbol: z.string().trim().toUpperCase().regex(/^[A-Z0-9]{2,12}$/).optional().describe("One coin, e.g. BTC (default BTC)"),
916
+ hours: z.number().int().min(1).max(24).optional().describe("Include the summed 5-minute history for this many hours"),
917
+ },
918
+ annotations: READ_ONLY,
919
+ }, async ({ symbol, hours }) => {
920
+ try {
921
+ const params = new URLSearchParams();
922
+ if (symbol)
923
+ params.set("symbol", symbol);
924
+ if (hours)
925
+ params.set("hours", String(hours));
926
+ const qs = params.toString();
927
+ const path = `/api/public/orderbook${qs ? `?${qs}` : ""}`;
928
+ return ok(withProvenance(await fetchJson(path), path));
929
+ }
930
+ catch (err) {
931
+ return fail(err);
932
+ }
933
+ });
888
934
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bykaranteli-mcp",
3
- "version": "0.16.0",
3
+ "version": "0.18.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": {