@aicoin/opendata-mcp 1.0.18 → 1.0.20
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/build/index.js +90 -32
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -44,14 +44,11 @@ Endpoint: ${path}`;
|
|
|
44
44
|
}
|
|
45
45
|
throw new Error(msg);
|
|
46
46
|
}
|
|
47
|
+
var FREE_KEY = "ronJ8uI0Yj2soAfGVs5H1YALUIINbE22";
|
|
48
|
+
var FREE_SECRET = "CWHZcH2us1CLSE7grroR1TpS0Z1JxTwU";
|
|
47
49
|
function getCredentials() {
|
|
48
|
-
const key = process.env.AICOIN_ACCESS_KEY_ID;
|
|
49
|
-
const secret = process.env.AICOIN_ACCESS_SECRET;
|
|
50
|
-
if (!key || !secret) {
|
|
51
|
-
throw new Error(
|
|
52
|
-
"Missing AICOIN_ACCESS_KEY_ID or AICOIN_ACCESS_SECRET. Register at https://www.aicoin.com/opendata to get your API credentials."
|
|
53
|
-
);
|
|
54
|
-
}
|
|
50
|
+
const key = process.env.AICOIN_ACCESS_KEY_ID || FREE_KEY;
|
|
51
|
+
const secret = process.env.AICOIN_ACCESS_SECRET || FREE_SECRET;
|
|
55
52
|
return { key, secret };
|
|
56
53
|
}
|
|
57
54
|
async function apiGet(path, params = {}) {
|
|
@@ -190,6 +187,60 @@ function okDepth(data, max = 50) {
|
|
|
190
187
|
}
|
|
191
188
|
return ok(data);
|
|
192
189
|
}
|
|
190
|
+
function okListDeep(data, max = 5, innerMax = 20) {
|
|
191
|
+
const truncInner = (item) => {
|
|
192
|
+
if (!item || typeof item !== "object") return item;
|
|
193
|
+
const obj = item;
|
|
194
|
+
const out = {};
|
|
195
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
196
|
+
if (Array.isArray(v) && v.length > innerMax) {
|
|
197
|
+
out[k] = v.slice(0, innerMax);
|
|
198
|
+
out[`_${k}_truncated`] = {
|
|
199
|
+
total: v.length,
|
|
200
|
+
showing: innerMax
|
|
201
|
+
};
|
|
202
|
+
} else {
|
|
203
|
+
out[k] = v;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return out;
|
|
207
|
+
};
|
|
208
|
+
const truncDeep = (arr) => {
|
|
209
|
+
const sliced = arr.length > max ? arr.slice(0, max) : arr;
|
|
210
|
+
const mapped = sliced.map(truncInner);
|
|
211
|
+
if (arr.length > max) {
|
|
212
|
+
return {
|
|
213
|
+
total: arr.length,
|
|
214
|
+
showing: max,
|
|
215
|
+
truncated: true,
|
|
216
|
+
data: mapped
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return mapped;
|
|
220
|
+
};
|
|
221
|
+
if (Array.isArray(data)) {
|
|
222
|
+
return ok(truncDeep(data));
|
|
223
|
+
}
|
|
224
|
+
if (data && typeof data === "object") {
|
|
225
|
+
const obj = data;
|
|
226
|
+
for (const k of LIST_KEYS) {
|
|
227
|
+
if (Array.isArray(obj[k])) {
|
|
228
|
+
const arr = obj[k];
|
|
229
|
+
const result = truncDeep(arr);
|
|
230
|
+
return ok({
|
|
231
|
+
...obj,
|
|
232
|
+
[k]: Array.isArray(result) ? result : result.data,
|
|
233
|
+
_truncated: Array.isArray(result) ? void 0 : {
|
|
234
|
+
field: k,
|
|
235
|
+
total: arr.length,
|
|
236
|
+
showing: max
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return ok(data);
|
|
243
|
+
}
|
|
193
244
|
function err(e) {
|
|
194
245
|
const msg = e instanceof Error ? e.message : String(e);
|
|
195
246
|
return {
|
|
@@ -490,15 +541,16 @@ function registerCoinTools(server2) {
|
|
|
490
541
|
cycle
|
|
491
542
|
};
|
|
492
543
|
if (leverage) params.leverage = leverage;
|
|
493
|
-
params.limit = limit ?? "
|
|
544
|
+
params.limit = limit ?? "5";
|
|
494
545
|
if (start_time) params.start_time = start_time;
|
|
495
546
|
if (end_time) params.end_time = end_time;
|
|
496
|
-
return
|
|
547
|
+
return okListDeep(
|
|
497
548
|
await apiGet(
|
|
498
549
|
"/api/upgrade/v2/futures/estimated-liquidation/history",
|
|
499
550
|
params
|
|
500
551
|
),
|
|
501
|
-
parseMax(_max_items,
|
|
552
|
+
parseMax(_max_items, 5),
|
|
553
|
+
20
|
|
502
554
|
);
|
|
503
555
|
} catch (e) {
|
|
504
556
|
return err(e);
|
|
@@ -911,7 +963,7 @@ function registerMarketTools(server2) {
|
|
|
911
963
|
"/api/v2/market/hotTabCoins",
|
|
912
964
|
params
|
|
913
965
|
),
|
|
914
|
-
parseMax(_max_items,
|
|
966
|
+
parseMax(_max_items, 20)
|
|
915
967
|
);
|
|
916
968
|
} catch (e) {
|
|
917
969
|
return err(e);
|
|
@@ -965,7 +1017,7 @@ function registerMarketTools(server2) {
|
|
|
965
1017
|
try {
|
|
966
1018
|
return okList(
|
|
967
1019
|
await apiGet("/api/v2/index/getIndex"),
|
|
968
|
-
parseMax(_max_items,
|
|
1020
|
+
parseMax(_max_items, 20)
|
|
969
1021
|
);
|
|
970
1022
|
} catch (e) {
|
|
971
1023
|
return err(e);
|
|
@@ -1371,7 +1423,7 @@ function registerFeatureTools(server2) {
|
|
|
1371
1423
|
await apiGet("/api/v2/order/bigOrder", {
|
|
1372
1424
|
symbol
|
|
1373
1425
|
}),
|
|
1374
|
-
parseMax(_max_items,
|
|
1426
|
+
parseMax(_max_items, 20)
|
|
1375
1427
|
);
|
|
1376
1428
|
} catch (e) {
|
|
1377
1429
|
return err(e);
|
|
@@ -1393,7 +1445,7 @@ function registerFeatureTools(server2) {
|
|
|
1393
1445
|
await apiGet("/api/v2/order/aggTrade", {
|
|
1394
1446
|
symbol
|
|
1395
1447
|
}),
|
|
1396
|
-
parseMax(_max_items,
|
|
1448
|
+
parseMax(_max_items, 30)
|
|
1397
1449
|
);
|
|
1398
1450
|
} catch (e) {
|
|
1399
1451
|
return err(e);
|
|
@@ -1443,7 +1495,7 @@ function registerFeatureTools(server2) {
|
|
|
1443
1495
|
"/api/v2/signal/strategySignal",
|
|
1444
1496
|
params
|
|
1445
1497
|
),
|
|
1446
|
-
parseMax(_max_items,
|
|
1498
|
+
parseMax(_max_items, 20)
|
|
1447
1499
|
);
|
|
1448
1500
|
} catch (e) {
|
|
1449
1501
|
return err(e);
|
|
@@ -1527,7 +1579,7 @@ function registerFeatureTools(server2) {
|
|
|
1527
1579
|
await apiGet(
|
|
1528
1580
|
"/api/v2/signal/signalAlert"
|
|
1529
1581
|
),
|
|
1530
|
-
parseMax(_max_items,
|
|
1582
|
+
parseMax(_max_items, 20)
|
|
1531
1583
|
);
|
|
1532
1584
|
} catch (e) {
|
|
1533
1585
|
return err(e);
|
|
@@ -1538,17 +1590,19 @@ function registerFeatureTools(server2) {
|
|
|
1538
1590
|
"get_signal_alert_config",
|
|
1539
1591
|
"Get signal alert configuration options",
|
|
1540
1592
|
{
|
|
1541
|
-
lan: z5.string().optional().describe("Language: cn or en")
|
|
1593
|
+
lan: z5.string().optional().describe("Language: cn or en"),
|
|
1594
|
+
...maxItemsParam
|
|
1542
1595
|
},
|
|
1543
|
-
async ({ lan }) => {
|
|
1596
|
+
async ({ lan, _max_items }) => {
|
|
1544
1597
|
try {
|
|
1545
1598
|
const params = {};
|
|
1546
1599
|
if (lan) params.lan = lan;
|
|
1547
|
-
return
|
|
1600
|
+
return okList(
|
|
1548
1601
|
await apiGet(
|
|
1549
1602
|
"/api/v2/signal/signalAlertConf",
|
|
1550
1603
|
params
|
|
1551
|
-
)
|
|
1604
|
+
),
|
|
1605
|
+
parseMax(_max_items, 20)
|
|
1552
1606
|
);
|
|
1553
1607
|
} catch (e) {
|
|
1554
1608
|
return err(e);
|
|
@@ -1813,7 +1867,7 @@ function registerHyperliquidTools(server2) {
|
|
|
1813
1867
|
}
|
|
1814
1868
|
return okList(
|
|
1815
1869
|
await apiPost("/api/upgrade/v2/hl/info", body),
|
|
1816
|
-
parseMax(_max_items,
|
|
1870
|
+
parseMax(_max_items, 20)
|
|
1817
1871
|
);
|
|
1818
1872
|
} catch (e) {
|
|
1819
1873
|
return err(e);
|
|
@@ -2062,7 +2116,7 @@ function registerHyperliquidTools(server2) {
|
|
|
2062
2116
|
await apiGet(
|
|
2063
2117
|
`/api/upgrade/v2/hl/portfolio/${address}/${win}`
|
|
2064
2118
|
),
|
|
2065
|
-
parseMax(_max_items,
|
|
2119
|
+
parseMax(_max_items, 30)
|
|
2066
2120
|
);
|
|
2067
2121
|
} catch (e) {
|
|
2068
2122
|
return err(e);
|
|
@@ -2392,7 +2446,7 @@ function registerHyperliquidTools(server2) {
|
|
|
2392
2446
|
"/api/upgrade/v2/hl/whales/history-long-ratio",
|
|
2393
2447
|
params
|
|
2394
2448
|
),
|
|
2395
|
-
parseMax(_max_items,
|
|
2449
|
+
parseMax(_max_items, 30)
|
|
2396
2450
|
);
|
|
2397
2451
|
} catch (e) {
|
|
2398
2452
|
return err(e);
|
|
@@ -2461,15 +2515,17 @@ function registerHyperliquidTools(server2) {
|
|
|
2461
2515
|
"hl_smart_find",
|
|
2462
2516
|
"Discover smart money addresses on Hyperliquid",
|
|
2463
2517
|
{
|
|
2464
|
-
params_json: z6.string().describe("Search params as JSON string")
|
|
2518
|
+
params_json: z6.string().describe("Search params as JSON string"),
|
|
2519
|
+
...maxItemsParam
|
|
2465
2520
|
},
|
|
2466
|
-
async ({ params_json }) => {
|
|
2521
|
+
async ({ params_json, _max_items }) => {
|
|
2467
2522
|
try {
|
|
2468
|
-
return
|
|
2523
|
+
return okList(
|
|
2469
2524
|
await apiPost(
|
|
2470
2525
|
"/api/upgrade/v2/hl/smart/find",
|
|
2471
2526
|
JSON.parse(params_json)
|
|
2472
|
-
)
|
|
2527
|
+
),
|
|
2528
|
+
parseMax(_max_items, 20)
|
|
2473
2529
|
);
|
|
2474
2530
|
} catch (e) {
|
|
2475
2531
|
return err(e);
|
|
@@ -2480,15 +2536,17 @@ function registerHyperliquidTools(server2) {
|
|
|
2480
2536
|
"hl_discover_traders",
|
|
2481
2537
|
"Discover traders by criteria",
|
|
2482
2538
|
{
|
|
2483
|
-
params_json: z6.string().describe("Discovery params as JSON string")
|
|
2539
|
+
params_json: z6.string().describe("Discovery params as JSON string"),
|
|
2540
|
+
...maxItemsParam
|
|
2484
2541
|
},
|
|
2485
|
-
async ({ params_json }) => {
|
|
2542
|
+
async ({ params_json, _max_items }) => {
|
|
2486
2543
|
try {
|
|
2487
|
-
return
|
|
2544
|
+
return okList(
|
|
2488
2545
|
await apiPost(
|
|
2489
2546
|
"/api/upgrade/v2/hl/traders/discover",
|
|
2490
2547
|
JSON.parse(params_json)
|
|
2491
|
-
)
|
|
2548
|
+
),
|
|
2549
|
+
parseMax(_max_items, 20)
|
|
2492
2550
|
);
|
|
2493
2551
|
} catch (e) {
|
|
2494
2552
|
return err(e);
|
|
@@ -2567,7 +2625,7 @@ function registerHyperliquidTools(server2) {
|
|
|
2567
2625
|
await apiGet(
|
|
2568
2626
|
`/api/upgrade/v2/hl/klines-with-taker-vol/${coin}/${interval}`
|
|
2569
2627
|
),
|
|
2570
|
-
parseMax(_max_items,
|
|
2628
|
+
parseMax(_max_items, 30)
|
|
2571
2629
|
);
|
|
2572
2630
|
} catch (e) {
|
|
2573
2631
|
return err(e);
|