bykaranteli-mcp 0.22.0 → 0.23.1

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
- 46 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
+ 48 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 46 tools, nothing to install, no key.
10
+ assistant. Same 48 tools, nothing to install, no key.
11
11
 
12
12
  ## Quick start
13
13
 
@@ -69,6 +69,8 @@ Requires Node.js 18 or newer.
69
69
  | `get_withdrawal_status` | "Has KuCoin paused USDT withdrawals?", "Cheapest network to withdraw USDT from Gate?", "Which exchanges have withdrawals closed right now?" |
70
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?" |
71
71
  | `get_settlements` | "What expires this week?", "When is the next BTC quarterly on OKX?", "At what price did the September future settle?" |
72
+ | `get_borrow_rates` | "What does it cost to borrow USDT on Binance?", "Cheapest venue to borrow ETH?", "Is stablecoin borrow spiking?" |
73
+ | `get_fee_table` | "What are Bitget's perp fees?", "Which exchange has the lowest taker fee?", "Did any venue change fees this week?" |
72
74
  | `get_lead_lag` | "Does Coinbase or Binance move first?" |
73
75
  | `get_iv_surface` | "What is BTC implied vol by expiry?", "Is downside protection expensive (skew)?" |
74
76
  | `get_whale_tape` | "Are whales buying or selling right now?" |
@@ -117,7 +119,7 @@ MIT. Attribution appreciated: "ByKaranteli (bykaranteli.com)".
117
119
 
118
120
  ## Paid depth (optional)
119
121
 
120
- The 46 tools above are free and stay free. For recorded history and raw records
122
+ The 48 tools above are free and stay free. For recorded history and raw records
121
123
  beyond the live snapshots, bykaranteli.com also exposes pay-per-call x402
122
124
  endpoints (USDC on Solana or Base, priced per call, no account):
123
125
  <https://bykaranteli.com/developers#x402> · machine catalog:
package/dist/tools.js CHANGED
@@ -37,6 +37,24 @@ export function registerByKaranteliTools(server, options) {
37
37
  }
38
38
  /* Every answer carries where it came from and when (README promise; audit
39
39
  * P3 #416): routes that already emit these keep their own values. */
40
+ /* API stems whose public page has a different name. Stripping /api/public off
41
+ * the route gave nine tools a `source` that 404s on the site (2026-09-04
42
+ * audit: /borrow-rates, /oi, /recent, /venues/markets ...). */
43
+ const PAGE_FOR_STEM = {
44
+ "/borrow-rates": "/borrow",
45
+ "/oi": "/oi-leaderboard",
46
+ "/recent": "/signals",
47
+ "/leaderboard": "/strategies",
48
+ "/venues/markets": "/venues",
49
+ "/venues/lead-lag": "/venues",
50
+ "/venues/profile": "/venues",
51
+ "/datasets/etf-flows": "/etf",
52
+ "/datasets/liquidations-daily": "/liquidations",
53
+ };
54
+ function pageForApiPath(path) {
55
+ const stem = path.replace(/^\/api\/(?:v1\/)?public/, "").split("?")[0] || "/";
56
+ return PAGE_FOR_STEM[stem] ?? stem;
57
+ }
40
58
  function withProvenance(data, path) {
41
59
  if (!data || typeof data !== "object" || Array.isArray(data))
42
60
  return data;
@@ -44,7 +62,7 @@ export function registerByKaranteliTools(server, options) {
44
62
  return {
45
63
  ...record,
46
64
  generatedAt: typeof record.generatedAt === "string" ? record.generatedAt : new Date().toISOString(),
47
- source: typeof record.source === "string" ? record.source : `${PUBLIC_URL}${path.replace(/^\/api\/public/, "").split("?")[0] || "/"}`,
65
+ source: typeof record.source === "string" ? record.source : `${PUBLIC_URL}${pageForApiPath(path)}`,
48
66
  };
49
67
  }
50
68
  function ok(data) {
@@ -615,6 +633,32 @@ export function registerByKaranteliTools(server, options) {
615
633
  return fail(err);
616
634
  }
617
635
  });
636
+ server.registerTool("get_borrow_rates", {
637
+ title: "Margin borrow rates per venue: the cost of leverage, hourly",
638
+ description: "Call this when the user asks what it costs to borrow USDT, USDC, BTC, ETH or a major alt on an exchange, which venue has the cheapest borrow, whether stablecoin borrow cost is spiking, or what the carry of a basis trade is on a venue (funding minus borrow). Returns the latest annualised rate per venue and asset, 30 days of hourly series for the stablecoins and majors, and the carry table. Recorded hourly by ByKaranteli (Binance and OKX today).",
639
+ inputSchema: {},
640
+ annotations: READ_ONLY,
641
+ }, async () => {
642
+ try {
643
+ return ok(withProvenance(await fetchJson("/api/public/borrow-rates"), "/api/public/borrow-rates"));
644
+ }
645
+ catch (err) {
646
+ return fail(err);
647
+ }
648
+ });
649
+ server.registerTool("get_fee_table", {
650
+ title: "Trading fee schedules per venue, base tier maker and taker",
651
+ description: "Call this when the user asks what an exchange charges to trade, how maker and taker fees compare across venues, whether a venue changed its fees, or what a round trip costs on a given notional. Returns base tier maker and taker per venue and market type (median across pairs where the venue prices per pair) and the fee change log, read daily by ByKaranteli from each venue's own fee endpoint.",
652
+ inputSchema: {},
653
+ annotations: READ_ONLY,
654
+ }, async () => {
655
+ try {
656
+ return ok(withProvenance(await fetchJson("/api/public/fees"), "/api/public/fees"));
657
+ }
658
+ catch (err) {
659
+ return fail(err);
660
+ }
661
+ });
618
662
  server.registerTool("get_settlements", {
619
663
  title: "Expiry calendar and settlement prices across venues",
620
664
  description: "Call this when the user asks what futures or options expire soon, when the next quarterly expiry is on an exchange, how many contracts settle this week, or at what price a dated future settled. Returns the next 60 days of dated future and option expiries grouped by date, venue and underlying from 54 venues' market lists, plus the settlement prices recorded as dated futures deliver.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bykaranteli-mcp",
3
- "version": "0.22.0",
3
+ "version": "0.23.1",
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": {