bykaranteli-mcp 0.24.1 → 0.25.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
@@ -1,6 +1,6 @@
1
1
  # bykaranteli-mcp
2
2
 
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.
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
  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
 
@@ -47,9 +47,6 @@ Requires Node.js 18 or newer.
47
47
  | `get_funding_arbitrage` | "Any funding arb opportunities?", "Best venue to long/short BTC for carry?" |
48
48
  | `get_pressure_scores` | "Which coins are over-leveraged / crowded right now?" |
49
49
  | `get_top_movers` | "Biggest OI spikes today?", "Most extreme funding right now?" |
50
- | `get_recent_signals` | "How did the signals do in the last 24h?" |
51
- | `get_symbol_performance` | "Win rate on ETHUSDT over 90 days?" |
52
- | `get_strategy_leaderboard` | "Which strategies are performing best?" |
53
50
  | `get_liquidations` | "How much was liquidated today?", "Did longs or shorts get flushed this week?" |
54
51
  | `get_etf_flows` | "Did the Bitcoin ETFs buy or sell yesterday?", "Cumulative ETH ETF inflow?" |
55
52
  | `get_cot_positioning` | "Are hedge funds long or short Bitcoin?", "What did the COT report show?" |
@@ -101,7 +98,7 @@ All responses are JSON and carry a `generatedAt` timestamp plus a `source` URL t
101
98
 
102
99
  ## Data notes
103
100
 
104
- - Signal performance is a **live-only** track record: real published signals with SHA-256 receipts, evaluated net of fees, slippage and funding. Never backtests. Verify any signal at [bykaranteli.com/verify](https://bykaranteli.com/verify).
101
+ - The signal engine was retired in September 2026; this server publishes recorded market data only, no trading signals or performance claims.
105
102
  - Funding, OI and pressure data refresh every 15 to 30 minutes; indices every 30 minutes.
106
103
  - Nothing here is financial advice. See [bykaranteli.com/risk-guide](https://bykaranteli.com/risk-guide).
107
104
 
package/dist/tools.js CHANGED
@@ -43,8 +43,6 @@ export function registerByKaranteliTools(server, options) {
43
43
  const PAGE_FOR_STEM = {
44
44
  "/borrow-rates": "/borrow",
45
45
  "/oi": "/oi-leaderboard",
46
- "/recent": "/signals",
47
- "/leaderboard": "/strategies",
48
46
  "/venues/markets": "/venues",
49
47
  "/venues/lead-lag": "/venues",
50
48
  "/venues/profile": "/venues",
@@ -379,78 +377,6 @@ export function registerByKaranteliTools(server, options) {
379
377
  return fail(err);
380
378
  }
381
379
  });
382
- server.registerTool("get_recent_signals", {
383
- title: "Recent closed trading signals with verified outcomes",
384
- description: "Call this when the user asks how the ByKaranteli signal engine is doing today, or wants recent closed LONG/SHORT signals with real outcomes (TP1, SL or TIMEOUT) and net basis-point results. Includes a 24h summary (wins, losses, net bps). Every signal is published with a SHA-256 receipt and results are net of fees, slippage and funding; live signals only, never backtests.",
385
- inputSchema: {},
386
- annotations: READ_ONLY,
387
- }, async () => {
388
- try {
389
- const d = (await fetchJson("/api/public/recent"));
390
- return ok({ ...d, source: `${PUBLIC_URL}/signals` });
391
- }
392
- catch (err) {
393
- return fail(err);
394
- }
395
- });
396
- server.registerTool("get_symbol_performance", {
397
- title: "Per-symbol signal performance and recent trades",
398
- description: "Call this when the user asks how signals performed on a specific coin (win rate, profit factor, net PnL, best/worst trade) or wants that coin's recent closed signals. Data is the live verified track record for one Binance USDT-M perp over a 30, 90 or 180 day window.",
399
- inputSchema: {
400
- symbol: z.string().describe("The symbol, e.g. BTCUSDT, or a coin name like BTC."),
401
- window_days: z
402
- .preprocess((v) => (typeof v === "string" && v.trim() !== "" && Number.isFinite(Number(v)) ? Number(v) : v), z.number().int().min(1).max(365))
403
- .optional()
404
- .describe("Optional lookback window in days, 1 to 365 (the API accepts any integer in that range). Default 90."),
405
- },
406
- annotations: READ_ONLY,
407
- }, async ({ symbol, window_days }) => {
408
- try {
409
- const want = normalizeSymbol(symbol);
410
- const w = window_days ?? 90;
411
- let d;
412
- try {
413
- d = (await fetchJson(`/api/v1/public/symbols/${want}?window=${w}`));
414
- }
415
- catch (err) {
416
- // The API 404s when the symbol has no closed signals in the chosen
417
- // window (data-dependent, not an invalid request). Say so plainly.
418
- if (err instanceof Error && err.message.includes("HTTP 404")) {
419
- return ok({
420
- symbol: want,
421
- window_days: w,
422
- note: `No closed signals recorded for ${want} in the last ${w} days (or the symbol is not tracked). Try window_days: 180, or check ${PUBLIC_URL}/symbols/${want}.`,
423
- });
424
- }
425
- throw err;
426
- }
427
- // daily_points can be long; the stats + recent signals carry the answer.
428
- const daily = d.daily_points;
429
- return ok({
430
- ...d,
431
- daily_points: Array.isArray(daily) ? daily.slice(-30) : daily,
432
- daily_points_truncated: Array.isArray(daily) ? daily.length > 30 : false,
433
- source: `${PUBLIC_URL}/symbols/${want}`,
434
- });
435
- }
436
- catch (err) {
437
- return fail(err);
438
- }
439
- });
440
- server.registerTool("get_strategy_leaderboard", {
441
- title: "Strategy leaderboard with verified live results",
442
- description: "Call this when the user asks which trading strategies are performing best, or wants win rate, profit factor, drawdown and Sharpe per strategy. Rankings are computed from live closed signals only (no backtests), net of fees.",
443
- inputSchema: {},
444
- annotations: READ_ONLY,
445
- }, async () => {
446
- try {
447
- const d = (await fetchJson("/api/v1/public/leaderboard"));
448
- return ok({ ...d, source: `${PUBLIC_URL}/leaderboard` });
449
- }
450
- catch (err) {
451
- return fail(err);
452
- }
453
- });
454
380
  server.registerTool("get_cot_positioning", {
455
381
  title: "CME futures positioning (weekly COT report, BTC + ETH)",
456
382
  description: "Call this when the user asks how hedge funds or institutions are positioned in Bitcoin or Ethereum, or about the CFTC Commitments of Traders report. Returns net positions in contracts, week-over-week changes, open interest and notable extremes/streaks, from official CFTC data updated every Friday. Note: a large share of hedge fund shorts is the market-neutral basis trade, so the weekly change carries more signal than the level.",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bykaranteli-mcp",
3
- "version": "0.24.1",
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.",
3
+ "version": "0.25.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. Free, no API key.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "bykaranteli-mcp": "dist/index.js"