@aicoin/opendata-mcp 1.0.9 → 1.0.10

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 +144 -71
  2. package/package.json +1 -1
package/build/index.js CHANGED
@@ -99,6 +99,13 @@ async function apiPost(path, body = {}) {
99
99
  }
100
100
 
101
101
  // src/tools/utils.ts
102
+ var LIST_KEYS = [
103
+ "data",
104
+ "list",
105
+ "items",
106
+ "result",
107
+ "results"
108
+ ];
102
109
  function ok(data) {
103
110
  return {
104
111
  content: [
@@ -109,12 +116,47 @@ function ok(data) {
109
116
  ]
110
117
  };
111
118
  }
119
+ function okList(data, max = 50) {
120
+ if (Array.isArray(data)) {
121
+ return ok(truncArr(data, max));
122
+ }
123
+ if (data && typeof data === "object") {
124
+ const obj = data;
125
+ for (const k of LIST_KEYS) {
126
+ if (Array.isArray(obj[k])) {
127
+ const arr = obj[k];
128
+ if (arr.length > max) {
129
+ return ok({
130
+ ...obj,
131
+ [k]: arr.slice(0, max),
132
+ _truncated: {
133
+ field: k,
134
+ total: arr.length,
135
+ showing: max
136
+ }
137
+ });
138
+ }
139
+ }
140
+ }
141
+ }
142
+ return ok(data);
143
+ }
144
+ function truncArr(arr, max) {
145
+ if (arr.length <= max) return arr;
146
+ return {
147
+ total: arr.length,
148
+ showing: max,
149
+ truncated: true,
150
+ data: arr.slice(0, max)
151
+ };
152
+ }
112
153
  function err(e) {
154
+ const msg = e instanceof Error ? e.message : String(e);
113
155
  return {
114
156
  content: [
115
157
  {
116
158
  type: "text",
117
- text: `Error: ${e.message}`
159
+ text: `Error: ${msg}`
118
160
  }
119
161
  ],
120
162
  isError: true
@@ -125,11 +167,14 @@ function err(e) {
125
167
  function registerCoinTools(server2) {
126
168
  server2.tool(
127
169
  "get_coin_list",
128
- "Get list of all supported coins with basic info",
170
+ "Get supported coins list (returns top 100 by default, use get_coin_ticker for specific coins)",
129
171
  {},
130
172
  async () => {
131
173
  try {
132
- return ok(await apiGet("/api/v2/coin"));
174
+ return okList(
175
+ await apiGet("/api/v2/coin"),
176
+ 100
177
+ );
133
178
  } catch (e) {
134
179
  return err(e);
135
180
  }
@@ -208,7 +253,7 @@ function registerCoinTools(server2) {
208
253
  symbol,
209
254
  interval
210
255
  };
211
- if (limit) params.limit = limit;
256
+ params.limit = limit ?? "100";
212
257
  if (start_time) params.start_time = start_time;
213
258
  if (end_time) params.end_time = end_time;
214
259
  return ok(
@@ -268,7 +313,7 @@ function registerCoinTools(server2) {
268
313
  symbol,
269
314
  interval
270
315
  };
271
- if (limit) params.limit = limit;
316
+ params.limit = limit ?? "100";
272
317
  if (start_time) params.start_time = start_time;
273
318
  if (end_time) params.end_time = end_time;
274
319
  return ok(
@@ -298,7 +343,7 @@ function registerCoinTools(server2) {
298
343
  symbol,
299
344
  interval
300
345
  };
301
- if (limit) params.limit = limit;
346
+ params.limit = limit ?? "100";
302
347
  if (start_time) params.start_time = start_time;
303
348
  if (end_time) params.end_time = end_time;
304
349
  return ok(
@@ -328,7 +373,7 @@ function registerCoinTools(server2) {
328
373
  symbol,
329
374
  interval
330
375
  };
331
- if (limit) params.limit = limit;
376
+ params.limit = limit ?? "100";
332
377
  if (start_time) params.start_time = start_time;
333
378
  if (end_time) params.end_time = end_time;
334
379
  return ok(
@@ -360,7 +405,7 @@ function registerCoinTools(server2) {
360
405
  symbol,
361
406
  interval
362
407
  };
363
- if (limit) params.limit = limit;
408
+ params.limit = limit ?? "100";
364
409
  if (start_time) params.start_time = start_time;
365
410
  if (end_time) params.end_time = end_time;
366
411
  return ok(
@@ -396,7 +441,7 @@ function registerCoinTools(server2) {
396
441
  cycle
397
442
  };
398
443
  if (leverage) params.leverage = leverage;
399
- if (limit) params.limit = limit;
444
+ params.limit = limit ?? "100";
400
445
  if (start_time) params.start_time = start_time;
401
446
  if (end_time) params.end_time = end_time;
402
447
  return ok(
@@ -424,7 +469,7 @@ function registerCoinTools(server2) {
424
469
  async ({ key, limit, start_time, end_time }) => {
425
470
  try {
426
471
  const params = { key };
427
- if (limit) params.limit = limit;
472
+ params.limit = limit ?? "100";
428
473
  if (start_time) params.start_time = start_time;
429
474
  if (end_time) params.end_time = end_time;
430
475
  return ok(
@@ -454,7 +499,7 @@ function registerCoinTools(server2) {
454
499
  try {
455
500
  const params = { key };
456
501
  if (amount) params.amount = amount;
457
- if (limit) params.limit = limit;
502
+ params.limit = limit ?? "100";
458
503
  if (start_time) params.start_time = start_time;
459
504
  if (end_time) params.end_time = end_time;
460
505
  return ok(
@@ -482,7 +527,7 @@ function registerCoinTools(server2) {
482
527
  async ({ dbkey, limit, start_time, end_time }) => {
483
528
  try {
484
529
  const params = { dbkey };
485
- if (limit) params.limit = limit;
530
+ params.limit = limit ?? "100";
486
531
  if (start_time) params.start_time = start_time;
487
532
  if (end_time) params.end_time = end_time;
488
533
  return ok(
@@ -512,7 +557,7 @@ function registerContentTools(server2) {
512
557
  try {
513
558
  const params = {};
514
559
  if (page) params.page = page;
515
- if (limit) params.limit = limit;
560
+ params.limit = limit ?? "20";
516
561
  return ok(
517
562
  await apiGet("/api/v2/content/newsflash", params)
518
563
  );
@@ -532,7 +577,7 @@ function registerContentTools(server2) {
532
577
  try {
533
578
  const params = {};
534
579
  if (page) params.page = page;
535
- if (limit) params.limit = limit;
580
+ params.limit = limit ?? "20";
536
581
  return ok(
537
582
  await apiGet("/api/v2/content/news-list", params)
538
583
  );
@@ -568,7 +613,7 @@ function registerContentTools(server2) {
568
613
  try {
569
614
  const params = {};
570
615
  if (page) params.page = page;
571
- if (pageSize) params.pageSize = pageSize;
616
+ params.pageSize = pageSize ?? "20";
572
617
  return ok(
573
618
  await apiGet(
574
619
  "/api/v2/content/square/market/news-list",
@@ -592,11 +637,12 @@ function registerContentTools(server2) {
592
637
  const params = {};
593
638
  if (language) params.language = language;
594
639
  if (createtime) params.createtime = createtime;
595
- return ok(
640
+ return okList(
596
641
  await apiGet(
597
642
  "/api/v2/content/flashList",
598
643
  params
599
- )
644
+ ),
645
+ 30
600
646
  );
601
647
  } catch (e) {
602
648
  return err(e);
@@ -614,7 +660,7 @@ function registerContentTools(server2) {
614
660
  try {
615
661
  const params = {};
616
662
  if (page) params.page = page;
617
- if (limit) params.limit = limit;
663
+ params.limit = limit ?? "20";
618
664
  return ok(
619
665
  await apiGet(
620
666
  "/api/v2/content/exchange-listing-flash",
@@ -651,7 +697,7 @@ function registerMarketTools(server2) {
651
697
  symbol
652
698
  };
653
699
  if (period) params.period = period;
654
- if (size) params.size = size;
700
+ params.size = size ?? "100";
655
701
  if (since) params.since = since;
656
702
  if (open_time) params.open_time = open_time;
657
703
  return ok(
@@ -751,7 +797,7 @@ function registerMarketTools(server2) {
751
797
  params.us_stock = String(us_stock);
752
798
  if (hk_stock != null)
753
799
  params.hk_stock = String(hk_stock);
754
- if (limit != null) params.limit = String(limit);
800
+ params.limit = String(limit ?? 30);
755
801
  return ok(
756
802
  await apiGet(
757
803
  "/api/upgrade/v2/crypto_stock/top-gainer",
@@ -795,11 +841,12 @@ function registerMarketTools(server2) {
795
841
  try {
796
842
  const params = { key };
797
843
  if (currency) params.currency = currency;
798
- return ok(
844
+ return okList(
799
845
  await apiGet(
800
846
  "/api/v2/market/hotTabCoins",
801
847
  params
802
- )
848
+ ),
849
+ 50
803
850
  );
804
851
  } catch (e) {
805
852
  return err(e);
@@ -851,8 +898,9 @@ function registerMarketTools(server2) {
851
898
  {},
852
899
  async () => {
853
900
  try {
854
- return ok(
855
- await apiGet("/api/v2/index/getIndex")
901
+ return okList(
902
+ await apiGet("/api/v2/index/getIndex"),
903
+ 50
856
904
  );
857
905
  } catch (e) {
858
906
  return err(e);
@@ -916,7 +964,7 @@ function registerMarketTools(server2) {
916
964
  indicator_key
917
965
  };
918
966
  if (period) params.period = period;
919
- if (size) params.size = size;
967
+ params.size = size ?? "100";
920
968
  if (since) params.since = since;
921
969
  if (open_time) params.open_time = open_time;
922
970
  return ok(
@@ -965,11 +1013,12 @@ function registerMarketTools(server2) {
965
1013
  try {
966
1014
  const body = { coin };
967
1015
  if (entity_id) body.entity_id = entity_id;
968
- return ok(
1016
+ return okList(
969
1017
  await apiPost(
970
1018
  "/api/upgrade/v2/coin-treasuries/history",
971
1019
  body
972
- )
1020
+ ),
1021
+ 100
973
1022
  );
974
1023
  } catch (e) {
975
1024
  return err(e);
@@ -987,11 +1036,12 @@ function registerMarketTools(server2) {
987
1036
  try {
988
1037
  const body = { coin };
989
1038
  if (entity_id) body.entity_id = entity_id;
990
- return ok(
1039
+ return okList(
991
1040
  await apiPost(
992
1041
  "/api/upgrade/v2/coin-treasuries/history/accumulated",
993
1042
  body
994
- )
1043
+ ),
1044
+ 100
995
1045
  );
996
1046
  } catch (e) {
997
1047
  return err(e);
@@ -1082,11 +1132,12 @@ function registerMarketTools(server2) {
1082
1132
  },
1083
1133
  async ({ coin }) => {
1084
1134
  try {
1085
- return ok(
1135
+ return okList(
1086
1136
  await apiGet(
1087
1137
  "/api/upgrade/v2/futures/full-depth",
1088
1138
  { coin }
1089
- )
1139
+ ),
1140
+ 50
1090
1141
  );
1091
1142
  } catch (e) {
1092
1143
  return err(e);
@@ -1101,11 +1152,12 @@ function registerMarketTools(server2) {
1101
1152
  },
1102
1153
  async ({ coin }) => {
1103
1154
  try {
1104
- return ok(
1155
+ return okList(
1105
1156
  await apiGet(
1106
1157
  "/api/upgrade/v2/futures/full-depth/grouped",
1107
1158
  { coin }
1108
- )
1159
+ ),
1160
+ 50
1109
1161
  );
1110
1162
  } catch (e) {
1111
1163
  return err(e);
@@ -1148,8 +1200,9 @@ function registerFeatureTools(server2) {
1148
1200
  const params = {};
1149
1201
  if (coin) params.coin = coin;
1150
1202
  if (period) params.period = period;
1151
- return ok(
1152
- await apiGet("/api/v2/mix/liq", params)
1203
+ return okList(
1204
+ await apiGet("/api/v2/mix/liq", params),
1205
+ 50
1153
1206
  );
1154
1207
  } catch (e) {
1155
1208
  return err(e);
@@ -1290,8 +1343,9 @@ function registerFeatureTools(server2) {
1290
1343
  {},
1291
1344
  async () => {
1292
1345
  try {
1293
- return ok(
1294
- await apiGet("/api/v2/mix/stock-market")
1346
+ return okList(
1347
+ await apiGet("/api/v2/mix/stock-market"),
1348
+ 50
1295
1349
  );
1296
1350
  } catch (e) {
1297
1351
  return err(e);
@@ -1402,11 +1456,12 @@ function registerFeatureTools(server2) {
1402
1456
  const params = {};
1403
1457
  if (type) params.type = type;
1404
1458
  if (currency) params.currency = currency;
1405
- return ok(
1459
+ return okList(
1406
1460
  await apiGet(
1407
1461
  "/api/v2/signal/changeSignal",
1408
1462
  params
1409
- )
1463
+ ),
1464
+ 50
1410
1465
  );
1411
1466
  } catch (e) {
1412
1467
  return err(e);
@@ -1445,8 +1500,9 @@ function registerFeatureTools(server2) {
1445
1500
  platform
1446
1501
  };
1447
1502
  if (type) params.type = type;
1448
- return ok(
1449
- await apiGet("/api/v2/trading-pair", params)
1503
+ return okList(
1504
+ await apiGet("/api/v2/trading-pair", params),
1505
+ 100
1450
1506
  );
1451
1507
  } catch (e) {
1452
1508
  return err(e);
@@ -1460,11 +1516,14 @@ import { z as z5 } from "zod";
1460
1516
  function registerHyperliquidTools(server2) {
1461
1517
  server2.tool(
1462
1518
  "hl_get_tickers",
1463
- "Get all Hyperliquid ticker data",
1519
+ "Get Hyperliquid ticker data (truncated to top 50, use hl_get_ticker_by_coin for specific coin)",
1464
1520
  {},
1465
1521
  async () => {
1466
1522
  try {
1467
- return ok(await apiGet("/api/upgrade/v2/hl/tickers"));
1523
+ return okList(
1524
+ await apiGet("/api/upgrade/v2/hl/tickers"),
1525
+ 50
1526
+ );
1468
1527
  } catch (e) {
1469
1528
  return err(e);
1470
1529
  }
@@ -1498,11 +1557,12 @@ function registerHyperliquidTools(server2) {
1498
1557
  const params = {};
1499
1558
  if (coin) params.coin = coin;
1500
1559
  if (min_usd) params.min_usd = min_usd;
1501
- return ok(
1560
+ return okList(
1502
1561
  await apiGet(
1503
1562
  "/api/upgrade/v2/hl/whales/open-positions",
1504
1563
  params
1505
- )
1564
+ ),
1565
+ 50
1506
1566
  );
1507
1567
  } catch (e) {
1508
1568
  return err(e);
@@ -1519,11 +1579,12 @@ function registerHyperliquidTools(server2) {
1519
1579
  try {
1520
1580
  const params = {};
1521
1581
  if (coin) params.coin = coin;
1522
- return ok(
1582
+ return okList(
1523
1583
  await apiGet(
1524
1584
  "/api/upgrade/v2/hl/liquidations/history",
1525
1585
  params
1526
- )
1586
+ ),
1587
+ 50
1527
1588
  );
1528
1589
  } catch (e) {
1529
1590
  return err(e);
@@ -1565,8 +1626,9 @@ function registerHyperliquidTools(server2) {
1565
1626
  if (extra_params) {
1566
1627
  Object.assign(body, JSON.parse(extra_params));
1567
1628
  }
1568
- return ok(
1569
- await apiPost("/api/upgrade/v2/hl/info", body)
1629
+ return okList(
1630
+ await apiPost("/api/upgrade/v2/hl/info", body),
1631
+ 50
1570
1632
  );
1571
1633
  } catch (e) {
1572
1634
  return err(e);
@@ -1581,8 +1643,9 @@ function registerHyperliquidTools(server2) {
1581
1643
  },
1582
1644
  async ({ address }) => {
1583
1645
  try {
1584
- return ok(
1585
- await apiGet(`/api/upgrade/v2/hl/fills/${address}`)
1646
+ return okList(
1647
+ await apiGet(`/api/upgrade/v2/hl/fills/${address}`),
1648
+ 50
1586
1649
  );
1587
1650
  } catch (e) {
1588
1651
  return err(e);
@@ -1633,11 +1696,12 @@ function registerHyperliquidTools(server2) {
1633
1696
  try {
1634
1697
  const params = {};
1635
1698
  if (coin) params.coin = coin;
1636
- return ok(
1699
+ return okList(
1637
1700
  await apiGet(
1638
1701
  "/api/upgrade/v2/hl/fills/top-trades",
1639
1702
  params
1640
- )
1703
+ ),
1704
+ 50
1641
1705
  );
1642
1706
  } catch (e) {
1643
1707
  return err(e);
@@ -1652,10 +1716,11 @@ function registerHyperliquidTools(server2) {
1652
1716
  },
1653
1717
  async ({ address }) => {
1654
1718
  try {
1655
- return ok(
1719
+ return okList(
1656
1720
  await apiGet(
1657
1721
  `/api/upgrade/v2/hl/filled-orders/${address}/latest`
1658
- )
1722
+ ),
1723
+ 50
1659
1724
  );
1660
1725
  } catch (e) {
1661
1726
  return err(e);
@@ -1688,10 +1753,11 @@ function registerHyperliquidTools(server2) {
1688
1753
  },
1689
1754
  async ({ address }) => {
1690
1755
  try {
1691
- return ok(
1756
+ return okList(
1692
1757
  await apiGet(
1693
1758
  `/api/upgrade/v2/hl/orders/${address}/latest`
1694
- )
1759
+ ),
1760
+ 50
1695
1761
  );
1696
1762
  } catch (e) {
1697
1763
  return err(e);
@@ -1724,11 +1790,12 @@ function registerHyperliquidTools(server2) {
1724
1790
  try {
1725
1791
  const params = {};
1726
1792
  if (coin) params.coin = coin;
1727
- return ok(
1793
+ return okList(
1728
1794
  await apiGet(
1729
1795
  "/api/upgrade/v2/hl/orders/top-open-orders",
1730
1796
  params
1731
- )
1797
+ ),
1798
+ 50
1732
1799
  );
1733
1800
  } catch (e) {
1734
1801
  return err(e);
@@ -1785,8 +1852,9 @@ function registerHyperliquidTools(server2) {
1785
1852
  },
1786
1853
  async ({ address }) => {
1787
1854
  try {
1788
- return ok(
1789
- await apiGet(`/api/upgrade/v2/hl/pnls/${address}`)
1855
+ return okList(
1856
+ await apiGet(`/api/upgrade/v2/hl/pnls/${address}`),
1857
+ 100
1790
1858
  );
1791
1859
  } catch (e) {
1792
1860
  return err(e);
@@ -1851,10 +1919,11 @@ function registerHyperliquidTools(server2) {
1851
1919
  },
1852
1920
  async ({ address }) => {
1853
1921
  try {
1854
- return ok(
1922
+ return okList(
1855
1923
  await apiGet(
1856
1924
  `/api/upgrade/v2/hl/traders/${address}/completed-trades`
1857
- )
1925
+ ),
1926
+ 50
1858
1927
  );
1859
1928
  } catch (e) {
1860
1929
  return err(e);
@@ -2022,11 +2091,12 @@ function registerHyperliquidTools(server2) {
2022
2091
  try {
2023
2092
  const params = {};
2024
2093
  if (coin) params.coin = coin;
2025
- return ok(
2094
+ return okList(
2026
2095
  await apiGet(
2027
2096
  "/api/upgrade/v2/hl/whales/latest-events",
2028
2097
  params
2029
- )
2098
+ ),
2099
+ 50
2030
2100
  );
2031
2101
  } catch (e) {
2032
2102
  return err(e);
@@ -2064,11 +2134,12 @@ function registerHyperliquidTools(server2) {
2064
2134
  try {
2065
2135
  const params = {};
2066
2136
  if (coin) params.coin = coin;
2067
- return ok(
2137
+ return okList(
2068
2138
  await apiGet(
2069
2139
  "/api/upgrade/v2/hl/whales/history-long-ratio",
2070
2140
  params
2071
- )
2141
+ ),
2142
+ 100
2072
2143
  );
2073
2144
  } catch (e) {
2074
2145
  return err(e);
@@ -2120,11 +2191,12 @@ function registerHyperliquidTools(server2) {
2120
2191
  try {
2121
2192
  const params = {};
2122
2193
  if (coin) params.coin = coin;
2123
- return ok(
2194
+ return okList(
2124
2195
  await apiGet(
2125
2196
  "/api/upgrade/v2/hl/liquidations/top-positions",
2126
2197
  params
2127
- )
2198
+ ),
2199
+ 50
2128
2200
  );
2129
2201
  } catch (e) {
2130
2202
  return err(e);
@@ -2232,10 +2304,11 @@ function registerHyperliquidTools(server2) {
2232
2304
  },
2233
2305
  async ({ coin, interval }) => {
2234
2306
  try {
2235
- return ok(
2307
+ return okList(
2236
2308
  await apiGet(
2237
2309
  `/api/upgrade/v2/hl/klines-with-taker-vol/${coin}/${interval}`
2238
- )
2310
+ ),
2311
+ 100
2239
2312
  );
2240
2313
  } catch (e) {
2241
2314
  return err(e);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aicoin/opendata-mcp",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "AiCoin OpenData MCP Server - crypto market data via AiCoin Open API",
5
5
  "main": "build/index.js",
6
6
  "type": "module",