bykaranteli-mcp 0.27.2 → 0.28.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,14 +2,15 @@
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
- 46 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
+ 47 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).
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. Without a key it runs on the
11
- shared Free pool; a connector header `Authorization: Bearer bk_...` (Builder
12
- and above) brings your own rate limit and member depth.
10
+ assistant. Same 47 tools, nothing to install. Without a key it runs on the
11
+ shared Free pool; a connector header with your account key, `x-api-key: bk_...`
12
+ (claude.ai custom connectors) or `Authorization: Bearer bk_...` (Builder and
13
+ above), brings your own rate limit and member depth.
13
14
 
14
15
  ## Quick start
15
16
 
@@ -86,6 +87,7 @@ Requires Node.js 18 or newer.
86
87
  | `get_orderbook_depth` | "Where is the biggest BTC bid wall? How deep is ETH within 2% on Coinbase vs Binance?" |
87
88
  | `get_jupiter_perps` | "How much long vs short OI is on Jupiter SOL perps? Who topped Jupiter this week? What is the JLP APR?" |
88
89
  | `get_turkey_premium` | "What do lira buyers pay for bitcoin above the world price? What is the Turkey Premium Index and its score right now? Which Turkish exchange is dearest? What is USDT/TRY against the official rate?" |
90
+ | `get_data_proof` | "Can I verify a ByKaranteli number was not changed later? Show the on-chain proof for BTC funding right now. Which Solana transaction sealed the newest epoch?" |
89
91
  | `get_cycle_indicators` | "Has the Pi Cycle crossed? Mayer Multiple and Puell today?" |
90
92
  | `get_altseason` | "Is it altseason?", "What is the altcoin season index?" |
91
93
  | `get_metric_context` | "Is today's funding extreme historically?", "Where does this reading sit in its distribution?" |
package/dist/tools.js CHANGED
@@ -104,7 +104,7 @@ export function registerByKaranteliTools(server, options) {
104
104
  ? `Invalid input: ${message}`
105
105
  : permanent
106
106
  ? `Error fetching data from bykaranteli.com: ${message}. This is a permanent error for these inputs (wrong parameter or route), not a transient one; retrying will not help.`
107
- : `Error fetching data from bykaranteli.com: ${message}. The API is free and unauthenticated; transient errors usually resolve on retry.`;
107
+ : `Error fetching data from bykaranteli.com: ${message}. Transient errors usually resolve on retry.`;
108
108
  return {
109
109
  content: [{ type: "text", text }],
110
110
  isError: true,
@@ -352,6 +352,9 @@ export function registerByKaranteliTools(server, options) {
352
352
  regimeLabel: it.regimeLabel,
353
353
  components: it.components,
354
354
  explainer: it.explainer,
355
+ /* BYK Data Layer reference (rc6 section 14): the sealed record of the same computation,
356
+ * so an assistant can cite the on-chain proof of the score it quotes. */
357
+ ...(it.byk_proof !== undefined ? { byk_proof: it.byk_proof } : {}),
355
358
  });
356
359
  if (symbol) {
357
360
  const want = normalizeSymbol(symbol);
@@ -687,8 +690,8 @@ export function registerByKaranteliTools(server, options) {
687
690
  }
688
691
  });
689
692
  server.registerTool("get_venue_markets", {
690
- title: "Exchange coverage: OI, volume, funding and pegs across 43 exchanges",
691
- description: "Call this when the user asks about total open interest across exchanges, which venues hold the most OI, DEX versus CEX share, funding dispersion between venues, or stablecoin pegs. Returns the latest 10-minute snapshot aggregates across 56 feeds on 43 exchanges; pass symbol for one coin's per-venue rows.",
693
+ title: "Exchange coverage: OI, volume, funding and pegs across every exchange we snapshot",
694
+ description: "Call this when the user asks about total open interest across exchanges, which venues hold the most OI, DEX versus CEX share, funding dispersion between venues, or stablecoin pegs. Returns the latest 10-minute snapshot aggregates across every perpetual and spot feed we poll (the coverage field lists them); pass symbol for one coin's per-venue rows.",
692
695
  inputSchema: {
693
696
  symbol: z.string().optional().describe("string, optional base asset, e.g. BTC"),
694
697
  history_days: z.number().int().min(1).max(90).optional().describe("Return the hourly multi-venue open interest history (total, DEX share, OI-weighted funding) for this many days instead of the snapshot"),
@@ -865,7 +868,7 @@ export function registerByKaranteliTools(server, options) {
865
868
  }
866
869
  });
867
870
  server.registerTool("get_rsi_heatmap", {
868
- title: "RSI heatmap: Wilder RSI(14) on eight timeframes for ~580 perps",
871
+ title: "RSI heatmap: Wilder RSI(14) on eight timeframes for the top-400 crypto perps and every TradFi perp",
869
872
  description: "Call this when the user asks which coins are overbought or oversold, for a crypto RSI heatmap, multi-timeframe RSI, or one contract's RSI on 15m, 1h, 4h, 12h, 1d, 3d, 1w or 1M. Returns the live board for the top-400 Binance crypto perps by volume plus every TradFi perp, with overbought/oversold counts per interval. Filter by symbol or kind (crypto|tradfi), sort by an interval.",
870
873
  inputSchema: {
871
874
  symbol: z.string().trim().toUpperCase().regex(/^[A-Z0-9]{2,24}$/).optional().describe("One Binance symbol, e.g. BTCUSDT"),
@@ -969,6 +972,37 @@ export function registerByKaranteliTools(server, options) {
969
972
  return fail(err);
970
973
  }
971
974
  });
975
+ server.registerTool("get_data_proof", {
976
+ title: "BYK Data Layer: on-chain proof that a ByKaranteli number was sealed, signed and anchored on Solana and Base",
977
+ description: "Call this when the user asks whether ByKaranteli data can be verified or was changed afterwards, about the BYK Data Layer, on-chain proofs of market data, or wants the proof behind one sealed number. Every 5 minutes a catalog of derived feeds (funding composite, aggregate open interest, liquidations, depth within 2%, pressure scores, Kimchi and Turkey premiums) is sealed into one Merkle root, signed and written to Solana mainnet, and attested on Base once a day. With no arguments returns the stream overview: network, epochs and records sealed, final anchors and the newest epochs with explorer links. Pass feed and asset for one record's proof (value, 104-byte leaf, Merkle path, signed manifest, signature, Solana and Base anchors) at the newest epoch or at sequence; sequence alone for one epoch; catalog for the feed list. result ANCHORED means ByKaranteli signed it and an anchor is final; the protocol verdict is reached from the chains alone at https://bykaranteli.com/proof.",
978
+ inputSchema: {
979
+ feed: z.string().trim().toUpperCase().regex(/^BYK\.[A-Z0-9_.]{3,60}$/).optional().describe("Feed id from the catalog, e.g. BYK.FUNDING.COMPOSITE.B"),
980
+ asset: z.string().trim().toUpperCase().regex(/^[A-Z0-9]{2,10}$/).optional().describe("Asset of the feed: BTC, ETH, SOL, XRP, DOGE, BNB, USDT or ALL"),
981
+ sequence: z.number().int().min(0).optional().describe("Epoch sequence; omit for the newest"),
982
+ catalog: z.boolean().optional().describe("true: list every sealed feed with its unit and methodology"),
983
+ },
984
+ annotations: READ_ONLY,
985
+ }, async ({ feed, asset, sequence, catalog }) => {
986
+ try {
987
+ const route = (() => {
988
+ if (catalog)
989
+ return "/api/v1/proof/catalog";
990
+ if (feed && asset)
991
+ return `/api/v1/proof/proofs/${sequence ?? "latest"}/${encodeURIComponent(feed)}/${encodeURIComponent(asset)}`;
992
+ if (feed || asset)
993
+ return null;
994
+ if (sequence !== undefined)
995
+ return `/api/v1/proof/epochs/${sequence}`;
996
+ return "/api/v1/proof";
997
+ })();
998
+ if (!route)
999
+ throw new InputError("pass feed and asset together (for example feed BYK.FUNDING.COMPOSITE.B and asset BTC), or neither.");
1000
+ return ok(withProvenance(await fetchJson(route), route));
1001
+ }
1002
+ catch (err) {
1003
+ return fail(err);
1004
+ }
1005
+ });
972
1006
  server.registerTool("get_jupiter_perps", {
973
1007
  title: "Jupiter Perps (Solana): exact long/short OI, utilization, borrow rates, weekly top traders",
974
1008
  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.",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bykaranteli-mcp",
3
- "version": "0.27.2",
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. 46 read-only tools, free account key, paid depth via plans or x402.",
3
+ "version": "0.28.1",
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. 47 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"