@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.
Files changed (2) hide show
  1. package/build/index.js +90 -32
  2. 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 ?? "100";
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 okList(
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, 100)
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, 50)
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, 50)
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, 50)
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, 50)
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, 50)
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, 50)
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 ok(
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, 50)
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, 100)
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, 100)
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 ok(
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 ok(
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, 100)
2628
+ parseMax(_max_items, 30)
2571
2629
  );
2572
2630
  } catch (e) {
2573
2631
  return err(e);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aicoin/opendata-mcp",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
4
4
  "description": "AiCoin OpenData MCP Server - crypto market data via AiCoin Open API",
5
5
  "main": "build/index.js",
6
6
  "type": "module",