hvip-mcp-server 0.2.15 → 0.2.17

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/dist/index.js +312 -27
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21151,6 +21151,9 @@ var publicApi = {
21151
21151
  getFundingRate: (instId) => request("GET", "/api/v5/public/funding-rate", { params: { instId } }),
21152
21152
  getMarkPrice: (instType, instId) => request("GET", "/api/v5/public/mark-price", { params: { instType, instId } }),
21153
21153
  getIndexPrice: (instId) => request("GET", "/api/v5/market/index-tickers", { params: { instId } }),
21154
+ getBooksFull: (instId, sz) => request("GET", "/api/v5/market/books-full", { params: { instId, sz } }),
21155
+ getIndexTickers: (quoteCcy, instId) => request("GET", "/api/v5/market/index-tickers", { params: { quoteCcy, instId } }),
21156
+ getIndexCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/index-candles", { params: { instId, bar, after, before, limit } }),
21154
21157
  getOpenInterest: (instType, instId) => request("GET", "/api/v5/public/open-interest", { params: { instType, instId } }),
21155
21158
  getSystemTime: () => request("GET", "/api/v5/public/time"),
21156
21159
  // ── 交易大数据(公共,无需鉴权) ─────────────────────────────────────────────
@@ -21189,7 +21192,10 @@ var publicApi = {
21189
21192
  getAnnouncements: (annType, lang) => request("GET", "/api/v5/support/announcements", { params: { annType, lang } }),
21190
21193
  getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types"),
21191
21194
  getUnderlying: (instType) => request("GET", "/api/v5/public/underlying", { params: { instType } }),
21192
- getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } })
21195
+ getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } }),
21196
+ getTopTradersContractLSRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/top-traders-contract-ls-ratio", { params: { ccy, begin, end } }),
21197
+ getContractsTakerVolume: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/contracts-taker-volume", { params: { ccy, begin, end } }),
21198
+ getContractsLongShortRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/long-short-ratio", { params: { ccy, begin, end } })
21193
21199
  };
21194
21200
  var privateApi = {
21195
21201
  getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
@@ -21246,6 +21252,8 @@ var privateApi = {
21246
21252
  getAlgoOrdersHistory: (auth, ordType, state, instType) => request("GET", "/api/v5/trade/orders-algo-history", { params: { ordType, state, instType }, auth }),
21247
21253
  placeAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/order-algo", { body, auth }),
21248
21254
  cancelAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/cancel-algos", { body, auth }),
21255
+ amendAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/amend-algos", { body, auth }),
21256
+ getOrdersAlgoPending: (auth, algoId, instType, instId, ordType, limit) => request("GET", "/api/v5/trade/orders-algo-pending", { params: { algoId, instType, instId, ordType, limit }, auth }),
21249
21257
  // ── 子账户 ──────────────────────────────────────────────────────────────────
21250
21258
  listSubAccounts: (auth, enable) => request("GET", "/api/v5/users/subaccount/list", { params: { enable }, auth }),
21251
21259
  getSubAccountBalance: (auth, subAcct) => request("GET", "/api/v5/account/subaccount/balances", { params: { subAcct }, auth }),
@@ -21261,7 +21269,13 @@ var privateApi = {
21261
21269
  getSignalPositions: (auth, algoId) => request("GET", "/api/v5/tradingBot/signal/positions", { params: { algoId }, auth }),
21262
21270
  getSignalPositionsHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/positions-history", { params: { algoOrdType: "contract", algoId, limit }, auth }),
21263
21271
  getSignalSubOrders: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/sub-orders", { params: { algoOrdType: "contract", algoId, limit }, auth }),
21264
- getSignalEventHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/event-histories", { params: { algoId, limit }, auth })
21272
+ getSignalEventHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/event-histories", { params: { algoId, limit }, auth }),
21273
+ // ── 交易扩展 ──────────────────────────────────────────────────────────────────
21274
+ cancelAllAfter: (auth, body) => request("POST", "/api/v5/trade/cancel-all-after", { body, auth }),
21275
+ orderPrecheck: (auth, body) => request("POST", "/api/v5/trade/order-precheck", { body, auth }),
21276
+ getAccountRateLimit: (auth) => request("GET", "/api/v5/trade/account-rate-limit", { auth }),
21277
+ easyConvert: (auth, body) => request("POST", "/api/v5/trade/easy-convert", { body, auth }),
21278
+ getEasyConvertHistory: (auth, after, before, limit) => request("GET", "/api/v5/trade/easy-convert-history", { params: { after, before, limit }, auth })
21265
21279
  };
21266
21280
 
21267
21281
  // src/adapters/hrails.ts
@@ -21347,6 +21361,7 @@ var INST_TYPE_PUBLIC = ["MARGIN", "SWAP", "FUTURES", "OPTION"];
21347
21361
  var INST_TYPE_CONTRACTS = ["SWAP", "FUTURES", "OPTION"];
21348
21362
  var INST_TYPE_SWAP_FUT = ["SWAP", "FUTURES"];
21349
21363
  var INST_TYPE_MARGIN_PUB = ["MARGIN", "SWAP", "FUTURES", "OPTION"];
21364
+ var INST_TYPE_RUBIK = ["SPOT", "CONTRACTS"];
21350
21365
  function toResult(data) {
21351
21366
  return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
21352
21367
  }
@@ -21581,6 +21596,85 @@ function registerMarketTools(server) {
21581
21596
  }
21582
21597
  }
21583
21598
  );
21599
+ server.tool(
21600
+ "okx_get_books_full",
21601
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EA7\u54C1\u5168\u6DF1\u5EA6\u8BA2\u5355\u7C3F\uFF08\u6240\u6709\u6863\u4F4D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7CBE\u786E\u5206\u6790\u5E02\u573A\u6D41\u52A8\u6027\u5168\u8C8C\u3001\u53D1\u73B0\u9690\u85CF\u7684\u5927\u989D\u6302\u5355\u3001\u8BA1\u7B97\u6DF1\u5EA6\u52A0\u6743\u4EF7\u683C\n## \u5173\u952E\u8BCD\uFF1A\u5168\u6DF1\u5EA6, \u5B8C\u6574\u8BA2\u5355\u7C3F, books full, \u6240\u6709\u6863\u4F4D, \u6DF1\u5EA6\u5206\u6790, \u6D41\u52A8\u6027\u5168\u666F\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - depth: \u6DF1\u5EA6\u6863\u4F4D\uFF0C\u9ED8\u8BA4\u5168\u90E8\uFF0C\u53EF\u9009\u6307\u5B9A\u6863\u4F4D\u6570\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\u3002\u26A0\uFE0F \u6570\u636E\u91CF\u5927\uFF08\u53EF\u8FBE\u6570\u767EKB\uFF09\uFF0C\u614E\u91CD\u5168\u91CF\u8FD4\u56DE\n## \u8FD4\u56DE\u91CF\uFF1A\u5927\u578B ~200KB+\uFF08\u5305\u542B\u6240\u6709\u6863\u4F4D\u6570\u636E\uFF09\n## \u5173\u8054\uFF1Aokx_get_orderbook \u770B\u6709\u9650\u6DF1\u5EA6 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u6DF1\u5EA6 \u2192 \u8BA1\u7B97\u7CBE\u786E\u5E02\u573A\u51B2\u51FB\u6210\u672C",
21602
+ {
21603
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
21604
+ depth: external_exports.number().int().min(1).max(400).optional().describe("\u6DF1\u5EA6\u6863\u4F4D\uFF0C\u9ED8\u8BA4\u5168\u91CF\uFF0C\u53EF\u9009\u9650\u5236")
21605
+ },
21606
+ async ({ instId, depth }) => {
21607
+ try {
21608
+ const data = await publicApi.getBooksFull(instId, depth);
21609
+ const enriched = data.data || data;
21610
+ if (Array.isArray(enriched)) {
21611
+ const withTsIso = enriched.map((item) => ({
21612
+ ...item,
21613
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
21614
+ }));
21615
+ return toResult(withTsIso);
21616
+ }
21617
+ if (enriched && typeof enriched === "object") {
21618
+ return toResult({
21619
+ ...enriched,
21620
+ tsIso: enriched.ts ? new Date(parseInt(enriched.ts)).toISOString() : void 0
21621
+ });
21622
+ }
21623
+ return toResult(data);
21624
+ } catch (e) {
21625
+ return toError(e);
21626
+ }
21627
+ }
21628
+ );
21629
+ server.tool(
21630
+ "okx_get_index_tickers",
21631
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570\u884C\u60C5\u5217\u8868\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6307\u6570\u73B0\u8D27\u4EF7\u683C\u57FA\u51C6\u3001\u6279\u91CF\u83B7\u53D6\u5404\u5E01\u79CD\u6307\u6570\u4EF7\u683C\u3001\u5224\u65AD\u5408\u7EA6\u6807\u8BB0\u4EF7\u504F\u5DEE\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570\u884C\u60C5, index tickers, \u6307\u6570\u4EF7\u683C, \u52A0\u6743\u5747\u4EF7, \u73B0\u8D27\u57FA\u51C6\n## \u53C2\u6570\uFF1A\n## - quoteCcy: \u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USDT\u3001USD\u3001BTC\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - instId: \u6307\u5B9A\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6307\u6570\u4EF7\u683C \u2192 okx_get_mark_price \u770B\u6807\u8BB0\u4EF7 \u2192 \u5BF9\u6BD4\u504F\u5DEE\u5224\u65AD\u5957\u5229\u7A7A\u95F4",
21632
+ {
21633
+ quoteCcy: external_exports.string().optional().describe("\u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USDT\u3001USD\u3001BTC"),
21634
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT")
21635
+ },
21636
+ async ({ quoteCcy, instId }) => {
21637
+ try {
21638
+ const data = await publicApi.getIndexTickers(quoteCcy, instId);
21639
+ const enriched = data.map((item) => ({
21640
+ ...item,
21641
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
21642
+ }));
21643
+ return toResult(enriched);
21644
+ } catch (e) {
21645
+ return toError(e);
21646
+ }
21647
+ }
21648
+ );
21649
+ server.tool(
21650
+ "okx_get_index_candles",
21651
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570K\u7EBF\u6570\u636E\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\u7684OHLCV\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u73B0\u8D27\u5E02\u573A\u6574\u4F53\u4EF7\u683C\u8D70\u52BF\u3001\u6392\u9664\u5355\u4EA4\u6613\u6240\u5F02\u5E38\u6CE2\u52A8\u3001\u5224\u65AD\u771F\u5B9E\u5E02\u573A\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570K\u7EBF, index candles, \u6307\u6570OHLCV, \u52A0\u6743K\u7EBF, \u73B0\u8D27\u8D8B\u52BF\n## \u53C2\u6570\uFF1A\n## - instId: \u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - bar: K\u7EBF\u5468\u671F\u30021m/3m/5m/15m/30m=\u5206\u949F, 1H=1\u5C0F\u65F6, 4H=4\u5C0F\u65F6, 1D=\u65E5\u7EBF, 1W=\u5468\u7EBF\u3002\u9ED8\u8BA41H\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u5927300\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A100\u6761 ~5KB \u2014 \u5FAE\u5C0F\n## \u5173\u8054\uFF1Aokx_get_candles \u770B\u5355\u4EA4\u6613\u6240K\u7EBF \u2192 \u672C\u5DE5\u5177\u770B\u6307\u6570K\u7EBF \u2192 \u5BF9\u6BD4\u5224\u65AD\u4EA4\u6613\u6240\u504F\u5DEE",
21652
+ {
21653
+ instId: external_exports.string().describe("\u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
21654
+ bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21655
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
21656
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
21657
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21658
+ },
21659
+ async ({ instId, bar, after, before, limit }) => {
21660
+ try {
21661
+ const data = await publicApi.getIndexCandles(instId, bar, after, before, limit);
21662
+ const enriched = data.map((row) => ({
21663
+ ts: row[0],
21664
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21665
+ open: row[1],
21666
+ high: row[2],
21667
+ low: row[3],
21668
+ close: row[4],
21669
+ vol: row[5],
21670
+ volCcy: row[6]
21671
+ }));
21672
+ return toResult(enriched);
21673
+ } catch (e) {
21674
+ return toError(e);
21675
+ }
21676
+ }
21677
+ );
21584
21678
  }
21585
21679
 
21586
21680
  // src/tools/public.ts
@@ -21926,7 +22020,7 @@ function registerAccountTools(server, auth) {
21926
22020
  server.tool(
21927
22021
  "okx_get_positions",
21928
22022
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u6240\u6709\u6301\u4ED3\u4FE1\u606F\uFF0C\u542B\u6301\u4ED3\u65B9\u5411\u3001\u6570\u91CF\u3001\u5747\u4EF7\u3001\u672A\u5B9E\u73B0\u76C8\u4E8F\u548C\u6760\u6746\u500D\u6570\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5F53\u524D\u4ED3\u4F4D\u3001\u76D1\u63A7\u6D6E\u52A8\u76C8\u4E8F\u3001\u5224\u65AD\u98CE\u9669\u655E\u53E3\u3001\u51B3\u5B9A\u662F\u5426\u5E73\u4ED3\n## \u5173\u952E\u8BCD\uFF1A\u6301\u4ED3, positions, \u4ED3\u4F4D, \u672A\u5B9E\u73B0\u76C8\u4E8F, \u6301\u4ED3\u5747\u4EF7, \u6760\u6746, \u5934\u5BF8\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1Aokx_get_balance \u770B\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u770B\u6301\u4ED3 \u2192 okx_get_mark_price \u770B\u6807\u8BB0\u4EF7 \u2192 okx_close_position \u5E73\u4ED3",
21929
- { instType: external_exports.enum(["MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u90E8") },
22023
+ { instType: external_exports.enum(INST_TYPE_PUBLIC).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u90E8") },
21930
22024
  async ({ instType }) => {
21931
22025
  if (!auth) return toError(AUTH_REQUIRED);
21932
22026
  try {
@@ -21958,7 +22052,7 @@ function registerAccountTools(server, auth) {
21958
22052
  "okx_get_orders_history",
21959
22053
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6700\u8FD1\u7684\u5386\u53F2\u6210\u4EA4\u8BA2\u5355\u5217\u8868\uFF08\u6700\u8FD13\u4E2A\u6708\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u4EA4\u6613\u8868\u73B0\u3001\u7EDF\u8BA1\u76C8\u4E8F\u3001\u6838\u5BF9\u5386\u53F2\u6210\u4EA4\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u5386\u53F2\u8BA2\u5355, orders history, \u6210\u4EA4\u8BB0\u5F55, \u4EA4\u6613\u5386\u53F2, \u590D\u76D8, \u76C8\u4E8F\u7EDF\u8BA1\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA450\uFF0C\u6700\u5927100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1Aokx_get_orders_pending \u770B\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u770B\u5386\u53F2\u6210\u4EA4 \u2192 okx_get_fills \u770B\u9010\u7B14\u6210\u4EA4",
21960
22054
  {
21961
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
22055
+ instType: external_exports.enum(INST_TYPE_TRADE).describe("\u4EA7\u54C1\u7C7B\u578B"),
21962
22056
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA450")
21963
22057
  },
21964
22058
  async ({ instType, limit }) => {
@@ -21975,7 +22069,7 @@ function registerAccountTools(server, auth) {
21975
22069
  "okx_get_account_bills",
21976
22070
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EA4\u6613\u8D26\u6237\u8D44\u91D1\u6D41\u6C34\uFF08\u8D26\u5355\uFF09\uFF0C\u542B\u6BCF\u7B14\u51FA\u5165\u91D1\u3001\u624B\u7EED\u8D39\u3001\u8D44\u91D1\u8D39\u7387\u3001\u7ED3\u7B97\u76C8\u4E8F\u7B49\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5BA1\u8BA1\u8D44\u91D1\u53D8\u52A8\u3001\u6392\u67E5\u4E0D\u660E\u6263\u6B3E\u3001\u7EDF\u8BA1\u624B\u7EED\u8D39\u652F\u51FA\u3001\u5BF9\u8D26\n## \u5173\u952E\u8BCD\uFF1A\u8D26\u5355, bills, \u8D44\u91D1\u6D41\u6C34, \u51FA\u5165\u91D1, \u624B\u7EED\u8D39\u8BB0\u5F55, \u8D44\u91D1\u8D39\u7387\u6263\u6B3E, \u5BF9\u8D26\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1Aokx_get_balance \u770B\u4F59\u989D\u53D8\u5316 \u2192 \u672C\u5DE5\u5177\u67E5\u539F\u56E0 \u2192 okx_get_orders_history \u4EA4\u53C9\u9A8C\u8BC1",
21977
22071
  {
21978
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22072
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
21979
22073
  ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 USDT"),
21980
22074
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21981
22075
  },
@@ -22042,7 +22136,7 @@ function registerAccountTools(server, auth) {
22042
22136
  "okx_get_fee_rates",
22043
22137
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D26\u6237\u5F53\u524D\u624B\u7EED\u8D39\u7387\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BA1\u7B97\u4EA4\u6613\u6210\u672C\u3001\u6BD4\u8F83\u4E0D\u540C\u7B49\u7EA7\u8D39\u7387\u5DEE\u5F02\u3001\u4E0B\u5355\u524D\u4F30\u7B97\u624B\u7EED\u8D39\n## \u5173\u952E\u8BCD\uFF1A\u624B\u7EED\u8D39, \u8D39\u7387, fee rate, \u4EA4\u6613\u8D39, maker, taker\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~1KB\n## \u5173\u8054\uFF1Aokx_get_account_config \u67E5\u8D26\u6237\u914D\u7F6E \u2192 \u672C\u5DE5\u5177\u67E5\u8D39\u7387 \u2192 okx_place_order \u4E0B\u5355\u8BA1\u7B97\u6210\u672C",
22044
22138
  {
22045
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22139
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22046
22140
  instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
22047
22141
  uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USDT")
22048
22142
  },
@@ -22060,7 +22154,7 @@ function registerAccountTools(server, auth) {
22060
22154
  "okx_get_positions_history",
22061
22155
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5386\u53F2\u6301\u4ED3\u8BB0\u5F55\uFF08\u5DF2\u5E73\u4ED3\u4ED3\u4F4D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u5386\u53F2\u4EA4\u6613\u3001\u5206\u6790\u5E73\u4ED3\u76C8\u4E8F\u3001\u7EDF\u8BA1\u80DC\u7387\u3001\u5BA1\u8BA1\u4EA4\u6613\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u5386\u53F2\u6301\u4ED3, \u5E73\u4ED3\u8BB0\u5F55, positions history, \u5DF2\u5E73\u4ED3, \u5E73\u4ED3\u76C8\u4E8F, \u4EA4\u6613\u590D\u76D8\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1Aokx_get_positions \u67E5\u5F53\u524D\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2\u5E73\u4ED3 \u2192 okx_get_order_history \u6838\u5BF9\u8BA2\u5355",
22062
22156
  {
22063
- instType: external_exports.enum(["MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22157
+ instType: external_exports.enum(INST_TYPE_PUBLIC).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22064
22158
  instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP"),
22065
22159
  limit: external_exports.number().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22066
22160
  },
@@ -22217,7 +22311,7 @@ function registerTradingTools(server, auth) {
22217
22311
  "okx_get_orders_pending",
22218
22312
  "\u67E5\u8BE2\u5F53\u524D\u6240\u6709\u672A\u6210\u4EA4\u6302\u5355\u5217\u8868\u3002\u7528\u4E8E\u76D1\u63A7\u672A\u6210\u4EA4\u8BA2\u5355\u3001\u68C0\u67E5\u9650\u4EF7\u5355\u662F\u5426\u4ECD\u5728\u961F\u5217\u4E2D\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22219
22313
  {
22220
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22314
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22221
22315
  instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u7CBE\u786E\u7B5B\u9009"),
22222
22316
  ordType: external_exports.enum(["market", "limit", "post_only", "fok", "ioc"]).optional().describe("\u8BA2\u5355\u7C7B\u578B\u7B5B\u9009")
22223
22317
  },
@@ -22235,7 +22329,7 @@ function registerTradingTools(server, auth) {
22235
22329
  "okx_get_fills",
22236
22330
  "\u67E5\u8BE2\u6700\u8FD1\u7684\u6210\u4EA4\u660E\u7EC6\uFF08\u9010\u7B14\u6210\u4EA4\uFF09\uFF0C\u542B\u6210\u4EA4\u4EF7\u3001\u6210\u4EA4\u91CF\u548C\u624B\u7EED\u8D39\u3002\u6BD4\u8BA2\u5355\u5386\u53F2\u66F4\u7EC6\u7C92\u5EA6\uFF0C\u53EF\u7528\u4E8E\u7CBE\u786E\u8BA1\u7B97\u5747\u4EF7\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22237
22331
  {
22238
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
22332
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
22239
22333
  instId: external_exports.string().optional().describe("\u4EA7\u54C1ID"),
22240
22334
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22241
22335
  },
@@ -22253,7 +22347,7 @@ function registerTradingTools(server, auth) {
22253
22347
  "okx_get_orders_history_archive",
22254
22348
  "\u67E5\u8BE23\u4E2A\u6708\u4EE5\u524D\u7684\u5B8C\u6574\u5386\u53F2\u8BA2\u5355\uFF08\u5F52\u6863\u6570\u636E\uFF09\u3002\u7528\u4E8E\u957F\u671F\u4EA4\u6613\u8BB0\u5F55\u5206\u6790\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22255
22349
  {
22256
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
22350
+ instType: external_exports.enum(INST_TYPE_TRADE).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
22257
22351
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA450")
22258
22352
  },
22259
22353
  async ({ instType, limit }) => {
@@ -22389,7 +22483,7 @@ function registerTradingTools(server, auth) {
22389
22483
  ## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB
22390
22484
  ## \u5173\u8054\uFF1Aokx_get_fills \u67E5\u6700\u8FD1\u6210\u4EA4 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2\u6210\u4EA4 \u2192 okx_get_orders_history \u5BF9\u8D26`,
22391
22485
  {
22392
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
22486
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
22393
22487
  instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
22394
22488
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22395
22489
  },
@@ -22416,7 +22510,7 @@ function registerTradingTools(server, auth) {
22416
22510
  ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
22417
22511
  ## \u5173\u8054\uFF1Aokx_get_orders_pending \u786E\u8BA4\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u5168\u90E8\u64A4\u9500 \u2192 okx_get_orders_history \u786E\u8BA4`,
22418
22512
  {
22419
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
22513
+ instType: external_exports.enum(INST_TYPE_TRADE).describe("\u4EA7\u54C1\u7C7B\u578B"),
22420
22514
  instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u4EC5\u5408\u7EA6\u9700\u586B")
22421
22515
  },
22422
22516
  async ({ instType, instFamily }) => {
@@ -22429,6 +22523,97 @@ function registerTradingTools(server, auth) {
22429
22523
  }
22430
22524
  }
22431
22525
  );
22526
+ server.tool(
22527
+ "okx_cancel_all_after",
22528
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u5B9A\u65F6\u5168\u64A4\uFF08N\u79D2\u540E\u81EA\u52A8\u64A4\u9500\u6240\u6709\u6302\u5355\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6781\u7AEF\u884C\u60C5\u4E0B\u542F\u52A8\u7D27\u6025\u64A4\u5355\u5012\u8BA1\u65F6\u3001\u7A0B\u5E8F\u5316\u98CE\u9669\u63A7\u5236\u3001\u8D85\u65F6\u81EA\u52A8\u6E05\u7A7A\u6302\u5355\n## \u5173\u952E\u8BCD\uFF1A\u5B9A\u65F6\u5168\u64A4, cancel all after, \u5012\u8BA1\u65F6\u64A4\u5355, \u7D27\u6025\u98CE\u63A7, \u81EA\u52A8\u64A4\u5355\n## \u53C2\u6570\uFF1A\n## - timeOut: \u5012\u8BA1\u65F6\u79D2\u6570\u30020=\u53D6\u6D88\u5B9A\u65F6\u5168\u64A4, \u6B63\u6570=\u8BBEN\u79D2\u540E\u5168\u64A4\u3002\u6700\u5927120\u79D2\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u98CE\u63A7\u6838\u5FC3\u5DE5\u5177\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u5B9A\u65F6\u64A4\u9500\u6240\u6709\u6302\u5355\uFF0C\u5F71\u54CD\u8303\u56F4\u6781\u5927\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_orders_pending \u786E\u8BA4\u5F53\u524D\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u8BBE\u5012\u8BA1\u65F6 \u2192 \u5230\u65F6\u95F4\u81EA\u52A8\u64A4\u9500",
22529
+ {
22530
+ timeOut: external_exports.string().describe("\u5012\u8BA1\u65F6\u79D2\u6570\uFF0C0=\u53D6\u6D88\u5B9A\u65F6\u5168\u64A4\uFF0C\u6B63\u6570=\u8BBEN\u79D2\u540E\u5168\u64A4\uFF0C\u6700\u5927120\u79D2")
22531
+ },
22532
+ async ({ timeOut }) => {
22533
+ if (!auth) return toError(AUTH_REQUIRED);
22534
+ try {
22535
+ const data = await privateApi.cancelAllAfter(auth, { timeOut });
22536
+ return toResult(data);
22537
+ } catch (e) {
22538
+ return toError(e);
22539
+ }
22540
+ }
22541
+ );
22542
+ server.tool(
22543
+ "okx_order_precheck",
22544
+ `## \u529F\u80FD\uFF1A\u4E0B\u5355\u9884\u68C0\uFF08\u9A8C\u8BC1\u8BA2\u5355\u53C2\u6570\u662F\u5426\u5408\u6CD5\uFF0C\u4E0D\u5B9E\u9645\u4E0B\u5355\uFF09
22545
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u4E0B\u5355\u524D\u9A8C\u8BC1\u53C2\u6570\u6B63\u786E\u6027\u3001\u68C0\u67E5\u4F59\u989D\u548C\u98CE\u63A7\u9650\u5236\u3001\u907F\u514D\u56E0\u53C2\u6570\u9519\u8BEF\u5BFC\u81F4\u7684\u8BA2\u5355\u5931\u8D25
22546
+ ## \u5173\u952E\u8BCD\uFF1A\u4E0B\u5355\u9884\u68C0, \u9884\u68C0\u67E5, order precheck, \u8BA2\u5355\u9A8C\u8BC1, \u53C2\u6570\u68C0\u67E5
22547
+ ## \u53C2\u6570\uFF1A
22548
+ ## - params: \u8BA2\u5355\u53C2\u6570JSON\u5BF9\u8C61\uFF0C\u4E0E okx_place_order \u53C2\u6570\u76F8\u540C\u3002\u5FC5\u586B
22549
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22550
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u9884\u68C0\uFF0C\u4E0D\u4EA7\u751F\u5B9E\u9645\u8BA2\u5355\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22551
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
22552
+ ## \u5173\u8054\uFF1Aokx_place_order \u4E0B\u5355\u524D \u2192 \u672C\u5DE5\u5177\u9884\u68C0\u53C2\u6570 \u2192 \u901A\u8FC7\u540E\u6B63\u5F0F\u4E0B\u5355`,
22553
+ {
22554
+ params: external_exports.string().describe(`\u8BA2\u5355\u53C2\u6570JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '{"instId":"BTC-USDT","tdMode":"cash","side":"buy","ordType":"limit","sz":"0.001","px":"60000"}'`)
22555
+ },
22556
+ async ({ params }) => {
22557
+ if (!auth) return toError(AUTH_REQUIRED);
22558
+ try {
22559
+ const parsed = JSON.parse(params);
22560
+ const data = await privateApi.orderPrecheck(auth, parsed);
22561
+ return toResult(data);
22562
+ } catch (e) {
22563
+ return toError(e);
22564
+ }
22565
+ }
22566
+ );
22567
+ server.tool(
22568
+ "okx_get_account_rate_limit",
22569
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u8D26\u6237\u7684API\u9891\u7387\u9650\u5236\u4F7F\u7528\u60C5\u51B5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u9AD8\u9891\u4EA4\u6613\u524D\u68C0\u67E5\u5269\u4F59\u914D\u989D\u3001\u907F\u514D\u89E6\u53D1\u9650\u9891\u3001\u8C03\u6574\u8BF7\u6C42\u8282\u594F\n## \u5173\u952E\u8BCD\uFF1A\u9891\u7387\u9650\u5236, rate limit, API\u914D\u989D, \u9650\u9891\u67E5\u8BE2, \u5269\u4F59\u6B21\u6570\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u5269\u4F59\u914D\u989D \u2192 \u9AD8\u9891\u4E0B\u5355\u524D\u786E\u8BA4 \u2192 \u907F\u514D HTTP 429 \u9519\u8BEF",
22570
+ {},
22571
+ async () => {
22572
+ if (!auth) return toError(AUTH_REQUIRED);
22573
+ try {
22574
+ const data = await privateApi.getAccountRateLimit(auth);
22575
+ return toResult(data);
22576
+ } catch (e) {
22577
+ return toError(e);
22578
+ }
22579
+ }
22580
+ );
22581
+ server.tool(
22582
+ "okx_easy_convert",
22583
+ "## \u529F\u80FD\uFF1A\u95EA\u5151\uFF08\u4E00\u952E\u5151\u6362\u4E0D\u540C\u5E01\u79CD\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u5151\u6362USDT\u5230BTC/ETH\u7B49\u3001\u5C0F\u989D\u6362\u5E01\u9700\u6C42\u3001\u65E0\u9700\u6302\u5355\u5373\u65F6\u6210\u4EA4\n## \u5173\u952E\u8BCD\uFF1A\u95EA\u5151, easy convert, \u5E01\u79CD\u5151\u6362, \u4E00\u952E\u6362\u5E01, \u5FEB\u901F\u5151\u6362\n## \u53C2\u6570\uFF1A\n## - fromCcy: \u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B\n## - toCcy: \u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B\n## - sz: \u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u5151\u6362\u5E01\u79CD\u548C\u6570\u91CF\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u4EA7\u751F\u771F\u5B9E\u5151\u6362\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_ticker \u770B\u5F53\u524D\u4EF7 \u2192 \u672C\u5DE5\u5177\u95EA\u5151 \u2192 okx_get_easy_convert_history \u67E5\u8BB0\u5F55",
22584
+ {
22585
+ fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT"),
22586
+ toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC"),
22587
+ sz: external_exports.string().describe("\u5356\u51FA\u6570\u91CF")
22588
+ },
22589
+ async ({ fromCcy, toCcy, sz }) => {
22590
+ if (!auth) return toError(AUTH_REQUIRED);
22591
+ try {
22592
+ const data = await privateApi.easyConvert(auth, { fromCcy, toCcy, sz });
22593
+ return toResult(data);
22594
+ } catch (e) {
22595
+ return toError(e);
22596
+ }
22597
+ }
22598
+ );
22599
+ server.tool(
22600
+ "okx_get_easy_convert_history",
22601
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u95EA\u5151\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u95EA\u5151\u4EA4\u6613\u3001\u6838\u5BF9\u5151\u6362\u6C47\u7387\u3001\u7EDF\u8BA1\u6362\u5E01\u6210\u672C\n## \u5173\u952E\u8BCD\uFF1A\u95EA\u5151\u5386\u53F2, easy convert history, \u5151\u6362\u8BB0\u5F55, \u6362\u5E01\u5386\u53F2\n## \u53C2\u6570\uFF1A\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_easy_convert \u95EA\u5151 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 okx_get_account_bills \u5BF9\u8D26",
22602
+ {
22603
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
22604
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
22605
+ limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22606
+ },
22607
+ async ({ after, before, limit }) => {
22608
+ if (!auth) return toError(AUTH_REQUIRED);
22609
+ try {
22610
+ const data = await privateApi.getEasyConvertHistory(auth, after, before, limit);
22611
+ return toResult(data);
22612
+ } catch (e) {
22613
+ return toError(e);
22614
+ }
22615
+ }
22616
+ );
22432
22617
  }
22433
22618
 
22434
22619
  // src/tools/algo.ts
@@ -22438,7 +22623,7 @@ function registerAlgoTools(server, auth) {
22438
22623
  "\u67E5\u8BE2\u5F53\u524D\u6302\u5355\u4E2D\u7684\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u3001\u51B0\u5C71\u3001\u65F6\u95F4\u52A0\u6743\u7B49\uFF09\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22439
22624
  {
22440
22625
  ordType: external_exports.enum(["conditional", "oco", "trigger", "move_order_stop", "iceberg", "twap"]).describe("\u7B56\u7565\u7C7B\u578B"),
22441
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743")
22626
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743")
22442
22627
  },
22443
22628
  async ({ ordType, instType }) => {
22444
22629
  if (!auth) return toError(AUTH_REQUIRED);
@@ -22456,7 +22641,7 @@ function registerAlgoTools(server, auth) {
22456
22641
  {
22457
22642
  ordType: external_exports.enum(["conditional", "oco", "trigger", "move_order_stop", "iceberg", "twap"]).describe("\u7B56\u7565\u7C7B\u578B"),
22458
22643
  state: external_exports.enum(["effective", "canceled", "order_failed"]).describe("\u8BA2\u5355\u72B6\u6001"),
22459
- instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743")
22644
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743")
22460
22645
  },
22461
22646
  async ({ ordType, state, instType }) => {
22462
22647
  if (!auth) return toError(AUTH_REQUIRED);
@@ -22499,6 +22684,43 @@ function registerAlgoTools(server, auth) {
22499
22684
  }
22500
22685
  }
22501
22686
  );
22687
+ server.tool(
22688
+ "okx_get_orders_algo_pending",
22689
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F85\u89E6\u53D1\u7684\u7B56\u7565\u59D4\u6258\u5355\uFF08\u66F4\u7075\u6D3B\u7684\u67E5\u8BE2\u65B9\u5F0F\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6240\u6709\u5F85\u89E6\u53D1\u7B56\u7565\u3001\u6309\u4EA7\u54C1\u6216ID\u7CBE\u786E\u67E5\u627E\u7B56\u7565\u5355\u3001\u76D1\u63A7\u81EA\u52A8\u4EA4\u6613\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u7B56\u7565\u6302\u5355, orders algo pending, \u5F85\u89E6\u53D1, \u6761\u4EF6\u5355\u67E5\u8BE2, \u6B62\u76C8\u6B62\u635F\u67E5\u8BE2\n## \u53C2\u6570\uFF1A\n## - algoId: \u7B56\u7565\u8BA2\u5355ID\uFF0C\u7CBE\u786E\u67E5\u8BE2\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## - ordType: \u7B56\u7565\u7C7B\u578B\u3002conditional/trigger/oco/move_order_stop/iceberg/twap\n## - limit: \u8FD4\u56DE\u6761\u6570\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u8BE2\u5F85\u89E6\u53D1\u7B56\u7565 \u2192 okx_place_algo_order \u4E0B\u7B56\u7565\u5355 \u2192 okx_cancel_algo_order \u64A4\u9500",
22690
+ {
22691
+ algoId: external_exports.string().optional().describe("\u7B56\u7565\u8BA2\u5355ID\uFF0C\u7CBE\u786E\u67E5\u8BE2"),
22692
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
22693
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
22694
+ ordType: external_exports.enum(["conditional", "oco", "trigger", "move_order_stop", "iceberg", "twap"]).optional().describe("\u7B56\u7565\u7C7B\u578B"),
22695
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570")
22696
+ },
22697
+ async ({ algoId, instType, instId, ordType, limit }) => {
22698
+ if (!auth) return toError(AUTH_REQUIRED);
22699
+ try {
22700
+ const data = await privateApi.getOrdersAlgoPending(auth, algoId, instType, instId, ordType, limit);
22701
+ return toResult(data);
22702
+ } catch (e) {
22703
+ return toError(e);
22704
+ }
22705
+ }
22706
+ );
22707
+ server.tool(
22708
+ "okx_amend_algo_order",
22709
+ "## \u529F\u80FD\uFF1A\u4FEE\u6539\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u4EF7\u683C\u3001\u89E6\u53D1\u6761\u4EF6\u7B49\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u6B62\u76C8\u6B62\u635F\u4EF7\u683C\u3001\u4FEE\u6539\u89E6\u53D1\u6761\u4EF6\u3001\u66F4\u65B0\u7B56\u7565\u5355\u53C2\u6570\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539\u7B56\u7565, amend algo, \u8C03\u6574\u6B62\u76C8\u6B62\u635F, \u4FEE\u6539\u6761\u4EF6\u5355, \u66F4\u65B0\u7B56\u7565\n## \u53C2\u6570\uFF1A\n## - orders: \u4FEE\u6539\u7B56\u7565\u8BA2\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B algoId/instId \u53CA\u9700\u4FEE\u6539\u7684\u5B57\u6BB5\uFF08\u5982 newSz/newPx/slTriggerPx/tpTriggerPx\uFF09\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u7B56\u7565\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_orders_algo_pending \u67E5\u8BE2\u7B56\u7565 \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 okx_get_algo_orders \u786E\u8BA4\u4FEE\u6539",
22710
+ {
22711
+ orders: external_exports.string().describe(`\u4FEE\u6539\u7B56\u7565\u8BA2\u5355\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '[{"algoId":"123","instId":"BTC-USDT","newTpTriggerPx":"65000"}]'`)
22712
+ },
22713
+ async ({ orders }) => {
22714
+ if (!auth) return toError(AUTH_REQUIRED);
22715
+ try {
22716
+ const parsed = JSON.parse(orders);
22717
+ const data = await privateApi.amendAlgoOrder(auth, parsed);
22718
+ return toResult(data);
22719
+ } catch (e) {
22720
+ return toError(e);
22721
+ }
22722
+ }
22723
+ );
22502
22724
  }
22503
22725
 
22504
22726
  // src/tools/funding.ts
@@ -22653,7 +22875,7 @@ function registerStatsTools(server) {
22653
22875
  "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4E3B\u52A8\u4E70\u5356\u91CF\u7EDF\u8BA1\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u8D44\u91D1\u6D41\u5411\uFF08\u4E3B\u52A8\u4E70\u91CF>\u5356\u91CF=\u591A\u5934\uFF09\u3001\u5206\u6790\u8D8B\u52BF\u5F3A\u5EA6\n## \u5173\u952E\u8BCD\uFF1A\u4E3B\u52A8\u4E70\u5356\u91CF, taker volume, \u8D44\u91D1\u6D41\u5411, \u4E70\u5356\u529B\u91CF, \u4E3B\u52A8\u6027\u4E70\u76D8\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, CONTRACTS=\u5408\u7EA6\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_taker_flow \u770BTaker\u6D41\u5411 \u2192 \u672C\u5DE5\u5177\u770B\u6210\u4EA4\u91CF \u2192 \u7ED3\u5408 okx_get_ticker \u5224\u65AD\u8D8B\u52BF",
22654
22876
  {
22655
22877
  ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC"),
22656
- instType: external_exports.enum(["SPOT", "CONTRACTS"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
22878
+ instType: external_exports.enum(INST_TYPE_RUBIK).describe("\u4EA7\u54C1\u7C7B\u578B"),
22657
22879
  begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
22658
22880
  end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
22659
22881
  },
@@ -22776,6 +22998,69 @@ function registerStatsTools(server) {
22776
22998
  }
22777
22999
  }
22778
23000
  );
23001
+ server.tool(
23002
+ "okx_get_top_traders_contract_ls_ratio",
23003
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u7CBE\u82F1\u4EA4\u6613\u5458\u591A\u7A7A\u6301\u4ED3\u6BD4\u4F8B\uFF08\u5168\u90E8\u5408\u7EA6\u6C47\u603B\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u7CBE\u82F1\u7FA4\u4F53\u6574\u4F53\u6301\u4ED3\u65B9\u5411\u3001\u5206\u6790\u5927\u6237\u60C5\u7EEA\u53D8\u5316\u8D8B\u52BF\u3001\u53D1\u73B0\u6781\u7AEF\u6301\u4ED3\u7684\u8F6C\u6298\u4FE1\u53F7\n## \u5173\u952E\u8BCD\uFF1A\u7CBE\u82F1\u591A\u7A7A\u6BD4, \u5168\u90E8\u5408\u7EA6, top traders LS ratio, \u5927\u6237\u60C5\u7EEA, \u6301\u4ED3\u6C47\u603B\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_top_trader_long_short_ratio \u770B\u5355\u4E00\u5408\u7EA6\u5927\u6237 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5224\u65AD\u6574\u4F53\u5927\u6237\u65B9\u5411",
23004
+ {
23005
+ ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23006
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
23007
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
23008
+ },
23009
+ async ({ ccy, begin, end }) => {
23010
+ try {
23011
+ const data = await publicApi.getTopTradersContractLSRatio(ccy, begin, end);
23012
+ const enriched = data.map((item) => ({
23013
+ ...item,
23014
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
23015
+ }));
23016
+ return toResult(enriched);
23017
+ } catch (e) {
23018
+ return toError(e);
23019
+ }
23020
+ }
23021
+ );
23022
+ server.tool(
23023
+ "okx_get_contracts_taker_volume",
23024
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u4E3B\u52A8\u4E70\u5356\u91CF\u7EDF\u8BA1\uFF08\u5168\u90E8\u5408\u7EA6\u6C47\u603B\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u6574\u4F53\u5408\u7EA6\u5E02\u573A\u7684\u4E70\u5356\u529B\u91CF\u5BF9\u6BD4\u3001\u5206\u6790\u5168\u5E02\u573A\u8D44\u91D1\u6D41\u5411\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u5408\u7EA6\u4E70\u5356\u91CF, contracts taker volume, \u4E3B\u52A8\u4E70\u5356, \u5168\u90E8\u5408\u7EA6, \u4E70\u5356\u529B\u91CF\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_taker_volume \u770B\u5206\u7C7B\u578B\u4E70\u5356\u91CF \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5224\u65AD\u6574\u4F53\u5E02\u573A\u65B9\u5411",
23025
+ {
23026
+ ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23027
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
23028
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
23029
+ },
23030
+ async ({ ccy, begin, end }) => {
23031
+ try {
23032
+ const data = await publicApi.getContractsTakerVolume(ccy, begin, end);
23033
+ const enriched = data.map((item) => ({
23034
+ ...item,
23035
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
23036
+ }));
23037
+ return toResult(enriched);
23038
+ } catch (e) {
23039
+ return toError(e);
23040
+ }
23041
+ }
23042
+ );
23043
+ server.tool(
23044
+ "okx_get_contracts_long_short_ratio",
23045
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5168\u90E8\u5408\u7EA6\u591A\u7A7A\u6301\u4ED3\u6BD4\u4F8B\uFF08\u591A\u7A7A\u6BD4\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u6574\u4F53\u5408\u7EA6\u5E02\u573A\u60C5\u7EEA\uFF08>1\u591A\u5934\u504F\u591A\uFF0C<1\u7A7A\u5934\u504F\u591A\uFF09\u3001\u53D1\u73B0\u6781\u7AEF\u60C5\u7EEA\u7684\u8F6C\u6298\u4FE1\u53F7\n## \u5173\u952E\u8BCD\uFF1A\u5408\u7EA6\u591A\u7A7A\u6BD4, contracts LS ratio, \u5168\u90E8\u5408\u7EA6\u6301\u4ED3, \u5E02\u573A\u60C5\u7EEA, \u591A\u7A7A\u8D26\u6237\u6BD4\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_long_short_ratio \u770B\u5206\u5408\u7EA6\u591A\u7A7A\u6BD4 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5BF9\u6BD4\u5224\u65AD\u60C5\u7EEA\u65B9\u5411",
23046
+ {
23047
+ ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23048
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
23049
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
23050
+ },
23051
+ async ({ ccy, begin, end }) => {
23052
+ try {
23053
+ const data = await publicApi.getContractsLongShortRatio(ccy, begin, end);
23054
+ const enriched = data.map((item) => ({
23055
+ ...item,
23056
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
23057
+ }));
23058
+ return toResult(enriched);
23059
+ } catch (e) {
23060
+ return toError(e);
23061
+ }
23062
+ }
23063
+ );
22779
23064
  }
22780
23065
 
22781
23066
  // src/tools/subaccount.ts
@@ -23112,7 +23397,7 @@ function registerBotTools(server, auth) {
23112
23397
  {
23113
23398
  algoOrdType: external_exports.enum(["grid", "contract_grid", "moon_grid"]).describe("\u7F51\u683C\u7C7B\u578B"),
23114
23399
  instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23115
- instType: external_exports.enum(["SPOT", "MARGIN", "FUTURES", "SWAP"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009")
23400
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009")
23116
23401
  },
23117
23402
  async ({ algoOrdType, instId, instType }) => {
23118
23403
  if (!auth) return toError(AUTH_REQUIRED);
@@ -23130,7 +23415,7 @@ function registerBotTools(server, auth) {
23130
23415
  {
23131
23416
  algoOrdType: external_exports.enum(["grid", "contract_grid", "moon_grid"]).describe("\u7F51\u683C\u7C7B\u578B"),
23132
23417
  instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23133
- instType: external_exports.enum(["SPOT", "MARGIN", "FUTURES", "SWAP"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009")
23418
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009")
23134
23419
  },
23135
23420
  async ({ algoOrdType, instId, instType }) => {
23136
23421
  if (!auth) return toError(AUTH_REQUIRED);
@@ -23308,7 +23593,7 @@ function registerCopyTools(server, auth) {
23308
23593
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6307\u5B9A\u5E26\u5355\u5458\u5F53\u524D\u6301\u4ED3\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8DDF\u5355\u524D\u8BC4\u4F30\u5E26\u5355\u5458\u5F53\u524D\u4ED3\u4F4D\u3001\u5224\u65AD\u662F\u5426\u503C\u5F97\u8DDF\u5355\n## \u5173\u952E\u8BCD\uFF1A\u5E26\u5355\u5458\u6301\u4ED3, lead trader positions, \u8DDF\u5355, \u4EA4\u6613\u5458\u4ED3\u4F4D, \u5E26\u5355\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\uFF0C\u4ECEOKX App\u300C\u8DDF\u5355\u300D\u9875\u9762\u83B7\u53D6\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u5E26\u5355\u5458\u6301\u4ED3 \u2192 okx_get_lead_trader_stats \u770B\u7EE9\u6548 \u2192 \u51B3\u5B9A\u662F\u5426\u8DDF\u5355",
23309
23594
  {
23310
23595
  uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\uFF0C\u4ECEOKX App\u300C\u8DDF\u5355\u300D\u9875\u9762\u83B7\u53D6"),
23311
- instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
23596
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
23312
23597
  },
23313
23598
  async ({ uniqueCode, instType }) => {
23314
23599
  try {
@@ -23324,7 +23609,7 @@ function registerCopyTools(server, auth) {
23324
23609
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6307\u5B9A\u5E26\u5355\u5458\u5386\u53F2\u6301\u4ED3\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BC4\u4F30\u5E26\u5355\u5458\u5386\u53F2\u8868\u73B0\u3001\u5206\u6790\u4EA4\u6613\u98CE\u683C\u548C\u76C8\u4E8F\u5206\u5E03\n## \u5173\u952E\u8BCD\uFF1A\u5E26\u5355\u5458\u5386\u53F2, trader history, \u4EA4\u6613\u8BB0\u5F55, \u8DDF\u5355\u5386\u53F2, \u5E26\u5355\u76C8\u4E8F\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\n## - instType: \u4EA7\u54C1\u7C7B\u578B\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_lead_trader_positions \u770B\u5F53\u524D \u2192 \u672C\u5DE5\u5177\u770B\u5386\u53F2 \u2192 okx_get_lead_trader_stats \u770B\u7EDF\u8BA1",
23325
23610
  {
23326
23611
  uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801"),
23327
- instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23612
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23328
23613
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420")
23329
23614
  },
23330
23615
  async ({ uniqueCode, instType, limit }) => {
@@ -23341,7 +23626,7 @@ function registerCopyTools(server, auth) {
23341
23626
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6307\u5B9A\u5E26\u5355\u5458\u7684\u7EE9\u6548\u7EDF\u8BA1\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BC4\u4F30\u5E26\u5355\u5458\u7684\u6838\u5FC3\u6307\u6807\uFF08\u6536\u76CA\u7387\u3001\u6700\u5927\u56DE\u64A4\u3001\u80DC\u7387\u3001\u8DDF\u5355\u4EBA\u6570\uFF09\n## \u5173\u952E\u8BCD\uFF1A\u5E26\u5355\u5458\u7EDF\u8BA1, trader stats, \u6536\u76CA\u7387, \u6700\u5927\u56DE\u64A4, \u80DC\u7387, \u8DDF\u5355\u4EBA\u6570\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\n## - instType: \u4EA7\u54C1\u7C7B\u578B\n## - lastDays: \u7EDF\u8BA1\u5468\u671F\uFF08\u5929\uFF09\uFF1A7/30/90/180\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~1KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u7EE9\u6548\u6C47\u603B \u2192 okx_get_lead_trader_history \u770B\u8BE6\u7EC6\u4EA4\u6613 \u2192 \u51B3\u5B9A\u662F\u5426\u8DDF\u5355",
23342
23627
  {
23343
23628
  uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801"),
23344
- instType: external_exports.enum(["SWAP", "FUTURES"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
23629
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).describe("\u4EA7\u54C1\u7C7B\u578B"),
23345
23630
  lastDays: external_exports.enum(["7", "30", "90", "180"]).describe("\u7EDF\u8BA1\u5468\u671F\uFF08\u5929\uFF09\uFF1A7/30/90/180")
23346
23631
  },
23347
23632
  async ({ uniqueCode, instType, lastDays }) => {
@@ -23357,7 +23642,7 @@ function registerCopyTools(server, auth) {
23357
23642
  "okx_get_my_lead_positions",
23358
23643
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6211\u5F53\u524D\u4F5C\u4E3A\u5E26\u5355\u5458\u7684\u6301\u4ED3\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5E26\u5355\u5458\u67E5\u770B\u81EA\u5DF1\u7684\u5E26\u5355\u4ED3\u4F4D\u3001\u7BA1\u7406\u5E26\u5355\u7B56\u7565\n## \u5173\u952E\u8BCD\uFF1A\u6211\u7684\u5E26\u5355, my lead positions, \u5E26\u5355\u6301\u4ED3, \u8DDF\u5355\u8D26\u6237\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6301\u4ED3 \u2192 okx_get_my_lead_history \u770B\u5386\u53F2\u5E26\u5355 \u2192 okx_get_profit_sharing_total \u770B\u5206\u6210",
23359
23644
  {
23360
- instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
23645
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
23361
23646
  },
23362
23647
  async ({ instType }) => {
23363
23648
  if (!auth) return toError(AUTH_REQUIRED);
@@ -23373,7 +23658,7 @@ function registerCopyTools(server, auth) {
23373
23658
  "okx_get_my_lead_history",
23374
23659
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6211\u7684\u5386\u53F2\u5E26\u5355\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5E26\u5355\u5458\u590D\u76D8\u81EA\u5DF1\u7684\u5E26\u5355\u8868\u73B0\u3001\u7EDF\u8BA1\u76C8\u4E8F\n## \u5173\u952E\u8BCD\uFF1A\u6211\u7684\u5E26\u5355\u5386\u53F2, my lead history, \u5E26\u5355\u8BB0\u5F55, \u5206\u6210\u8BB0\u5F55\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_my_lead_positions \u770B\u5F53\u524D \u2192 \u672C\u5DE5\u5177\u770B\u5386\u53F2 \u2192 okx_get_profit_sharing_details \u770B\u5206\u6210\u660E\u7EC6",
23375
23660
  {
23376
- instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23661
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23377
23662
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420")
23378
23663
  },
23379
23664
  async ({ instType, limit }) => {
@@ -23390,7 +23675,7 @@ function registerCopyTools(server, auth) {
23390
23675
  "okx_get_copy_instruments",
23391
23676
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6211\u5F53\u524D\u4F5C\u4E3A\u5E26\u5355\u5458\u5141\u8BB8\u8DDF\u5355\u7684\u54C1\u79CD\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5E26\u5355\u5458\u7BA1\u7406\u5141\u8BB8\u8DDF\u5355\u7684\u4EA4\u6613\u54C1\u79CD\n## \u5173\u952E\u8BCD\uFF1A\u8DDF\u5355\u54C1\u79CD, copy instruments, \u5141\u8BB8\u8DDF\u5355, \u54C1\u79CD\u8BBE\u7F6E\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~1KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u5141\u8BB8\u8DDF\u5355\u7684\u54C1\u79CD \u2192 \u8C03\u6574\u5E26\u5355\u8BBE\u7F6E",
23392
23677
  {
23393
- instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B")
23678
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B")
23394
23679
  },
23395
23680
  async ({ instType }) => {
23396
23681
  if (!auth) return toError(AUTH_REQUIRED);
@@ -23406,7 +23691,7 @@ function registerCopyTools(server, auth) {
23406
23691
  "okx_get_profit_sharing_total",
23407
23692
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6211\u7684\u5E26\u5355\u7D2F\u8BA1\u6536\u53D6\u7684\u5206\u6210\u91D1\u989D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5E26\u5355\u5458\u67E5\u770B\u7D2F\u8BA1\u5206\u6210\u6536\u5165\n## \u5173\u952E\u8BCD\uFF1A\u5E26\u5355\u5206\u6210, profit sharing, \u5206\u6210\u6536\u5165, \u7D2F\u8BA1\u5206\u6210\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u603B\u5206\u6210 \u2192 okx_get_profit_sharing_details \u770B\u9010\u7B14\u660E\u7EC6",
23408
23693
  {
23409
- instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B")
23694
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B")
23410
23695
  },
23411
23696
  async ({ instType }) => {
23412
23697
  if (!auth) return toError(AUTH_REQUIRED);
@@ -23422,7 +23707,7 @@ function registerCopyTools(server, auth) {
23422
23707
  "okx_get_profit_sharing_details",
23423
23708
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5E26\u5355\u76C8\u5229\u5206\u6210\u7684\u9010\u7B14\u660E\u7EC6\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5E26\u5355\u5458\u6838\u5BF9\u6BCF\u7B14\u5206\u6210\u91D1\u989D\u3001\u6765\u6E90\u8DDF\u5355\u8005\u548C\u65F6\u95F4\n## \u5173\u952E\u8BCD\uFF1A\u5206\u6210\u660E\u7EC6, profit details, \u5206\u7B14\u5206\u6210, \u8DDF\u5355\u5206\u6210\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_profit_sharing_total \u770B\u603B\u5206\u6210 \u2192 \u672C\u5DE5\u5177\u770B\u9010\u7B14\u660E\u7EC6",
23424
23709
  {
23425
- instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23710
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23426
23711
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420")
23427
23712
  },
23428
23713
  async ({ instType, limit }) => {
@@ -23444,7 +23729,7 @@ function registerSignalTools(server, auth) {
23444
23729
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u8FD0\u884C\u4E2D\u7684\u4FE1\u53F7\u4EA4\u6613\u673A\u5668\u4EBA\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u76D1\u63A7\u4FE1\u53F7\u673A\u5668\u4EBA\u8FD0\u884C\u72B6\u6001\u3001\u67E5\u770B\u54C1\u79CD\u548C\u4ED3\u4F4D\u3001\u5224\u65AD\u662F\u5426\u9700\u8981\u505C\u6B62\n## \u5173\u952E\u8BCD\uFF1A\u4FE1\u53F7\u673A\u5668\u4EBA, signal bot, \u4FE1\u53F7\u4EA4\u6613, \u81EA\u52A8\u8DDF\u5355, \u673A\u5668\u4EBA\u72B6\u6001\n## \u53C2\u6570\uFF1A\n## - algoId: \u6307\u5B9A\u673A\u5668\u4EBAID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, MARGIN=\u6760\u6746\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u8FD0\u884C\u4E2D\u7684\u673A\u5668\u4EBA \u2192 okx_get_signal_positions \u770B\u6301\u4ED3 \u2192 okx_get_signal_sub_orders \u770B\u5B50\u5355",
23445
23730
  {
23446
23731
  algoId: external_exports.string().optional().describe("\u6307\u5B9A\u673A\u5668\u4EBAID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
23447
- instType: external_exports.enum(["SPOT", "SWAP", "FUTURES", "MARGIN"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B")
23732
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B")
23448
23733
  },
23449
23734
  async ({ algoId, instType }) => {
23450
23735
  if (!auth) return toError(AUTH_REQUIRED);
@@ -23461,7 +23746,7 @@ function registerSignalTools(server, auth) {
23461
23746
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5DF2\u505C\u6B62\u7684\u4FE1\u53F7\u4EA4\u6613\u673A\u5668\u4EBA\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u4FE1\u53F7\u4EA4\u6613\u6548\u679C\u3001\u8BC4\u4F30\u673A\u5668\u4EBA\u76C8\u4E8F\u3001\u4F18\u5316\u4FE1\u53F7\u7B56\u7565\n## \u5173\u952E\u8BCD\uFF1A\u4FE1\u53F7\u5386\u53F2, signal history, \u673A\u5668\u4EBA\u8BB0\u5F55, \u4FE1\u53F7\u76C8\u4E8F, \u4FE1\u53F7\u590D\u76D8\n## \u53C2\u6570\uFF1A\n## - algoId: \u6307\u5B9A\u673A\u5668\u4EBAID\n## - instType: \u4EA7\u54C1\u7C7B\u578B\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u5386\u53F2\u673A\u5668\u4EBA \u2192 okx_get_signal_positions_history \u770B\u6301\u4ED3 \u2192 okx_get_signal_event_history \u770B\u4FE1\u53F7",
23462
23747
  {
23463
23748
  algoId: external_exports.string().optional().describe("\u6307\u5B9A\u673A\u5668\u4EBAID"),
23464
- instType: external_exports.enum(["SPOT", "SWAP", "FUTURES", "MARGIN"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23749
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23465
23750
  limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420")
23466
23751
  },
23467
23752
  async ({ algoId, instType, limit }) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.15",
3
+ "version": "0.2.17",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",