bykaranteli-mcp 0.27.2 → 0.28.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 +3 -2
- package/dist/tools.js +32 -1
- 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
|
+
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
|
|
10
|
+
assistant. Same 47 tools, nothing to install. Without a key it runs on the
|
|
11
11
|
shared Free pool; a connector header `Authorization: Bearer bk_...` (Builder
|
|
12
12
|
and above) brings your own rate limit and member depth.
|
|
13
13
|
|
|
@@ -86,6 +86,7 @@ Requires Node.js 18 or newer.
|
|
|
86
86
|
| `get_orderbook_depth` | "Where is the biggest BTC bid wall? How deep is ETH within 2% on Coinbase vs Binance?" |
|
|
87
87
|
| `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
88
|
| `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?" |
|
|
89
|
+
| `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
90
|
| `get_cycle_indicators` | "Has the Pi Cycle crossed? Mayer Multiple and Puell today?" |
|
|
90
91
|
| `get_altseason` | "Is it altseason?", "What is the altcoin season index?" |
|
|
91
92
|
| `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}.
|
|
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,
|
|
@@ -969,6 +969,37 @@ export function registerByKaranteliTools(server, options) {
|
|
|
969
969
|
return fail(err);
|
|
970
970
|
}
|
|
971
971
|
});
|
|
972
|
+
server.registerTool("get_data_proof", {
|
|
973
|
+
title: "BYK Data Layer: on-chain proof that a ByKaranteli number was sealed, signed and anchored on Solana and Base",
|
|
974
|
+
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.",
|
|
975
|
+
inputSchema: {
|
|
976
|
+
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"),
|
|
977
|
+
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"),
|
|
978
|
+
sequence: z.number().int().min(0).optional().describe("Epoch sequence; omit for the newest"),
|
|
979
|
+
catalog: z.boolean().optional().describe("true: list every sealed feed with its unit and methodology"),
|
|
980
|
+
},
|
|
981
|
+
annotations: READ_ONLY,
|
|
982
|
+
}, async ({ feed, asset, sequence, catalog }) => {
|
|
983
|
+
try {
|
|
984
|
+
const route = (() => {
|
|
985
|
+
if (catalog)
|
|
986
|
+
return "/api/v1/proof/catalog";
|
|
987
|
+
if (feed && asset)
|
|
988
|
+
return `/api/v1/proof/proofs/${sequence ?? "latest"}/${encodeURIComponent(feed)}/${encodeURIComponent(asset)}`;
|
|
989
|
+
if (feed || asset)
|
|
990
|
+
return null;
|
|
991
|
+
if (sequence !== undefined)
|
|
992
|
+
return `/api/v1/proof/epochs/${sequence}`;
|
|
993
|
+
return "/api/v1/proof";
|
|
994
|
+
})();
|
|
995
|
+
if (!route)
|
|
996
|
+
throw new InputError("pass feed and asset together (for example feed BYK.FUNDING.COMPOSITE.B and asset BTC), or neither.");
|
|
997
|
+
return ok(withProvenance(await fetchJson(route), route));
|
|
998
|
+
}
|
|
999
|
+
catch (err) {
|
|
1000
|
+
return fail(err);
|
|
1001
|
+
}
|
|
1002
|
+
});
|
|
972
1003
|
server.registerTool("get_jupiter_perps", {
|
|
973
1004
|
title: "Jupiter Perps (Solana): exact long/short OI, utilization, borrow rates, weekly top traders",
|
|
974
1005
|
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.
|
|
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.28.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. 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"
|