hvip-mcp-server 0.2.26 → 0.2.28

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 +646 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21369,7 +21369,45 @@ var privateApi = {
21369
21369
  getAffiliateLinkList: (auth) => request("GET", "/api/v5/affiliate/link/list", { auth }),
21370
21370
  getAffiliatePerformance: (auth) => request("GET", "/api/v5/affiliate/performance/summary", { auth }),
21371
21371
  getAffiliateCoInviterList: (auth) => request("GET", "/api/v5/affiliate/co-inviter/list", { auth }),
21372
- getAffiliateSubAffiliateList: (auth) => request("GET", "/api/v5/affiliate/sub-affiliate/list", { auth })
21372
+ getAffiliateSubAffiliateList: (auth) => request("GET", "/api/v5/affiliate/sub-affiliate/list", { auth }),
21373
+ // ── 新增批:market ────────────────────────────────────────────────────
21374
+ getBlockTicker: (instId) => request("GET", "/api/v5/market/block-ticker", { params: { instId } }),
21375
+ getHistoryIndexCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/history-index-candles", { params: { instId, bar, after, before, limit } }),
21376
+ getHistoryMarkPriceCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/history-mark-price-candles", { params: { instId, bar, after, before, limit } }),
21377
+ getMarkPriceCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/mark-price-candles", { params: { instId, bar, after, before, limit } }),
21378
+ getSpreadHistoryCandles: (sprdId, bar, after, before, limit) => request("GET", "/api/v5/sprd/history-candles", { params: { sprdId, bar, after, before, limit } }),
21379
+ // ── 新增批:trade ─────────────────────────────────────────────────────
21380
+ getOneClickRepayCurrencyList: (auth) => request("GET", "/api/v5/trade/one-click-repay-currency-list", { auth }),
21381
+ oneClickRepay: (auth, body) => request("POST", "/api/v5/trade/one-click-repay", { body, auth }),
21382
+ getOneClickRepayHistory: (auth) => request("GET", "/api/v5/trade/one-click-repay-history", { auth }),
21383
+ // ── 新增批:asset ─────────────────────────────────────────────────────
21384
+ getNonTradableAssets: (auth) => request("GET", "/api/v5/asset/non-tradable-assets", { auth }),
21385
+ getExchangeList: () => request("GET", "/api/v5/asset/exchange-list"),
21386
+ getDepositWithdrawStatus: (auth) => request("GET", "/api/v5/asset/deposit-withdraw-status", { auth }),
21387
+ getMonthlyStatement: (auth) => request("GET", "/api/v5/asset/monthly-statement", { auth }),
21388
+ getAssetBillsHistory: (auth, limit) => request("GET", "/api/v5/asset/bills-history", { params: { limit }, auth }),
21389
+ getConvertCurrencyPair: (auth) => request("GET", "/api/v5/asset/convert/currency-pair", { auth }),
21390
+ getConvertEstimateQuote: (auth, body) => request("POST", "/api/v5/asset/convert/estimate-quote", { body, auth }),
21391
+ // ── 新增批:public ────────────────────────────────────────────────────
21392
+ getPublicBlockTrades: (instId) => request("GET", "/api/v5/public/block-trades", { params: { instId } }),
21393
+ getDeliveryExerciseHistory: (instType, uly, instFamily) => request("GET", "/api/v5/public/delivery-exercise-history", { params: { instType, uly, instFamily } }),
21394
+ getFundingRateHistory: (instId, before, after, limit) => request("GET", "/api/v5/public/funding-rate-history", { params: { instId, before, after, limit } }),
21395
+ getInterestRateLoanQuota: () => request("GET", "/api/v5/public/interest-rate-loan-quota"),
21396
+ getPremiumHistory: (instId, period) => request("GET", "/api/v5/public/premium-history", { params: { instId, period } }),
21397
+ getSettlementHistory: (instType, instFamily, uly) => request("GET", "/api/v5/public/settlement-history", { params: { instType, instFamily, uly } }),
21398
+ getEventSeries: () => request("GET", "/api/v5/public/event-contract/series"),
21399
+ getEventMarkets: (seriesId) => request("GET", "/api/v5/public/event-contract/markets", { params: { seriesId } }),
21400
+ getEventEvents: (seriesId) => request("GET", "/api/v5/public/event-contract/events", { params: { seriesId } }),
21401
+ // ── 新增批:fiat ──────────────────────────────────────────────────────
21402
+ getFiatBuySellPair: (auth) => request("GET", "/api/v5/fiat/buy-sell/currency-pair", { auth }),
21403
+ getFiatDeposit: (auth) => request("GET", "/api/v5/fiat/deposit", { auth }),
21404
+ getFiatDepositOrderHistory: (auth) => request("GET", "/api/v5/fiat/deposit-order-history", { auth }),
21405
+ getFiatDepositPaymentMethods: (auth) => request("GET", "/api/v5/fiat/deposit-payment-methods", { auth }),
21406
+ // ── rubik 大数据(v0.2.26 第四批) ────────────────────────────────────
21407
+ getTakerVolumeContract: (ccy, instId) => request("GET", "/api/v5/rubik/stat/taker-volume-contract", { params: { ccy, instId } }),
21408
+ getOptionTakerBlockVolume: (ccy) => request("GET", "/api/v5/rubik/stat/option/taker-block-volume", { params: { ccy } }),
21409
+ getTopTraderPositionRatio: (instId) => request("GET", "/api/v5/rubik/stat/contracts/long-short-position-ratio-contract-top-trader", { params: { instId } }),
21410
+ applyMonthlyStatement: (auth) => request("POST", "/api/v5/asset/monthly-statement", { auth })
21373
21411
  };
21374
21412
 
21375
21413
  // src/adapters/hrails.ts
@@ -21769,6 +21807,138 @@ function registerMarketTools(server) {
21769
21807
  }
21770
21808
  }
21771
21809
  );
21810
+ server.tool(
21811
+ "okx_get_block_ticker",
21812
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5927\u5B97\u4EA4\u6613\u5355\u4E2A\u4EA7\u54C1\u5B9E\u65F6\u884C\u60C5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u8BE2\u5927\u5B97\u5E02\u573A\u7684\u6700\u65B0\u6210\u4EA4\u4EF7\u3001\u4E70\u5356\u62A5\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u5927\u5B97\u884C\u60C5, block ticker, \u5927\u5B97\u6700\u65B0\u4EF7, \u5927\u5B97\u4E70\u5356\u4EF7\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\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 ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u5927\u5B97\u884C\u60C5 \u2192 okx_get_block_tickers \u770B\u5168\u91CF\u5927\u5B97 \u2192 \u8BC4\u4F30\u5927\u5B97\u5E02\u573A",
21813
+ {
21814
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B")
21815
+ },
21816
+ async ({ instId }) => {
21817
+ try {
21818
+ const data = await publicApi.getBlockTicker(instId);
21819
+ const enriched = data.map((item) => ({
21820
+ ...item,
21821
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
21822
+ }));
21823
+ return toResult(enriched);
21824
+ } catch (e) {
21825
+ return toError(e);
21826
+ }
21827
+ }
21828
+ );
21829
+ server.tool(
21830
+ "okx_get_history_index_candles",
21831
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570\u5386\u53F2K\u7EBF\uFF083\u4E2A\u6708\u4EE5\u524D\u7684\u6570\u636E\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u957F\u5468\u671F\u6307\u6570\u8D70\u52BF\u5206\u6790\u3001\u7B56\u7565\u56DE\u6D4B\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570\u5386\u53F2K\u7EBF, index history candles, \u5386\u53F2\u6307\u6570, \u56DE\u6D4B\u6570\u636E\n## \u53C2\u6570\uFF1A\n## - instId: \u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - bar: K\u7EBF\u5468\u671F\u3002\u9ED8\u8BA41H\n## - after: \u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - before: \u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\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\n## \u5173\u8054\uFF1Aokx_get_index_candles \u67E5\u8FD1\u671F \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 \u957F\u5468\u671F\u5206\u6790",
21832
+ {
21833
+ instId: external_exports.string().describe("\u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B"),
21834
+ bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21835
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21836
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21837
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21838
+ },
21839
+ async ({ instId, bar, after, before, limit }) => {
21840
+ try {
21841
+ const data = await publicApi.getHistoryIndexCandles(instId, bar, after, before, limit);
21842
+ const enriched = data.map((row) => ({
21843
+ ts: row[0],
21844
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21845
+ open: row[1],
21846
+ high: row[2],
21847
+ low: row[3],
21848
+ close: row[4],
21849
+ vol: row[5]
21850
+ }));
21851
+ return toResult(enriched);
21852
+ } catch (e) {
21853
+ return toError(e);
21854
+ }
21855
+ }
21856
+ );
21857
+ server.tool(
21858
+ "okx_get_history_mark_price_candles",
21859
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6807\u8BB0\u4EF7\u5386\u53F2K\u7EBF\uFF083\u4E2A\u6708\u4EE5\u524D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5386\u53F2\u6807\u8BB0\u4EF7\u8D70\u52BF\u56DE\u6D4B\u3001\u5206\u6790\u5F3A\u5E73\u4EF7\u683C\u53D8\u5316\n## \u5173\u952E\u8BCD\uFF1A\u6807\u8BB0\u4EF7\u5386\u53F2K\u7EBF, mark price history candles, \u6807\u8BB0\u4EF7\u56DE\u6D4B\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\n## - bar: K\u7EBF\u5468\u671F\u3002\u9ED8\u8BA41H\n## - after: \u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - before: \u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\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\n## \u5173\u8054\uFF1Aokx_get_mark_price_candles \u67E5\u8FD1\u671F \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 \u5BF9\u6BD4\u5206\u6790",
21860
+ {
21861
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
21862
+ bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21863
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21864
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21865
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21866
+ },
21867
+ async ({ instId, bar, after, before, limit }) => {
21868
+ try {
21869
+ const data = await publicApi.getHistoryMarkPriceCandles(instId, bar, after, before, limit);
21870
+ const enriched = data.map((row) => ({
21871
+ ts: row[0],
21872
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21873
+ open: row[1],
21874
+ high: row[2],
21875
+ low: row[3],
21876
+ close: row[4],
21877
+ vol: row[5]
21878
+ }));
21879
+ return toResult(enriched);
21880
+ } catch (e) {
21881
+ return toError(e);
21882
+ }
21883
+ }
21884
+ );
21885
+ server.tool(
21886
+ "okx_get_mark_price_candles",
21887
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6807\u8BB0\u4EF7K\u7EBF\u6570\u636E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BA1\u7B97\u5408\u7EA6\u8D44\u91D1\u8D39\u7387\u7528\u7684\u6807\u8BB0\u4EF7\u8D70\u52BF\u3001\u5224\u65AD\u5F3A\u5E73\u98CE\u9669\n## \u5173\u952E\u8BCD\uFF1A\u6807\u8BB0\u4EF7K\u7EBF, mark price candles, \u6807\u8BB0\u4EF7\u8D70\u52BF, \u5F3A\u5E73\u53C2\u8003\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\n## - bar: K\u7EBF\u5468\u671F\u3002\u9ED8\u8BA41H\n## - after: \u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - before: \u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\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\n## \u5173\u8054\uFF1Aokx_get_index_candles \u770B\u6307\u6570K\u7EBF \u2192 \u672C\u5DE5\u5177\u770B\u6807\u8BB0\u4EF7 \u2192 \u5BF9\u6BD4\u57FA\u5DEE",
21888
+ {
21889
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
21890
+ bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21891
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21892
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21893
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21894
+ },
21895
+ async ({ instId, bar, after, before, limit }) => {
21896
+ try {
21897
+ const data = await publicApi.getMarkPriceCandles(instId, bar, after, before, limit);
21898
+ const enriched = data.map((row) => ({
21899
+ ts: row[0],
21900
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21901
+ open: row[1],
21902
+ high: row[2],
21903
+ low: row[3],
21904
+ close: row[4],
21905
+ vol: row[5]
21906
+ }));
21907
+ return toResult(enriched);
21908
+ } catch (e) {
21909
+ return toError(e);
21910
+ }
21911
+ }
21912
+ );
21913
+ server.tool(
21914
+ "okx_get_sprd_history_candles",
21915
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u5386\u53F2K\u7EBF\uFF083\u4E2A\u6708\u4EE5\u524D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7814\u7A76\u4EF7\u5DEE\u5386\u53F2\u8D70\u52BF\u7684\u957F\u671F\u8D8B\u52BF\u3001\u8BA1\u7B97\u8DE8\u671F\u5957\u5229\u7684\u5B63\u8282\u6027\u6A21\u5F0F\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u5386\u53F2K\u7EBF, sprd history candles, \u4EF7\u5DEE\u56DE\u6D4B, \u8DE8\u671F\u5386\u53F2\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B\n## - bar: K\u7EBF\u5468\u671F\u3002\u9ED8\u8BA41H\n## - after: \u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - before: \u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\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\n## \u5173\u8054\uFF1Aokx_get_spread_candles \u67E5\u8FD1\u671F \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 \u957F\u5468\u671F\u5957\u5229\u5206\u6790",
21916
+ {
21917
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B"),
21918
+ bar: external_exports.enum(["1m", "5m", "15m", "30m", "1H", "4H", "1D"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21919
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21920
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21921
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21922
+ },
21923
+ async ({ sprdId, bar, after, before, limit }) => {
21924
+ try {
21925
+ const data = await publicApi.getSpreadHistoryCandles(sprdId, bar, after, before, limit);
21926
+ const enriched = data.map((row) => ({
21927
+ ts: row[0],
21928
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21929
+ open: row[1],
21930
+ high: row[2],
21931
+ low: row[3],
21932
+ close: row[4],
21933
+ vol: row[5],
21934
+ volCcy: row[6]
21935
+ }));
21936
+ return toResult(enriched);
21937
+ } catch (e) {
21938
+ return toError(e);
21939
+ }
21940
+ }
21941
+ );
21772
21942
  }
21773
21943
 
21774
21944
  // src/tools/public.ts
@@ -22291,6 +22461,114 @@ function registerPublicTools(server, auth) {
22291
22461
  }
22292
22462
  }
22293
22463
  );
22464
+ server.tool(
22465
+ "okx_get_funding_rate_history",
22466
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u8D44\u91D1\u8D39\u7387\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u5386\u53F2\u8D44\u91D1\u8D39\u7387\u53D8\u5316\u8D8B\u52BF\u3001\u8BA1\u7B97\u5957\u5229\u6301\u4ED3\u6210\u672C\n## \u5173\u952E\u8BCD\uFF1A\u8D44\u91D1\u8D39\u7387\u5386\u53F2, funding rate history, \u8D39\u7387\u8D70\u52BF, \u5386\u53F2\u8D44\u91D1\u8D39\u7387\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\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_funding_rate \u770B\u5F53\u524D \u2192 \u672C\u5DE5\u5177\u770B\u5386\u53F2 \u2192 \u5224\u65AD\u5747\u503C\u56DE\u5F52\u65B9\u5411",
22467
+ {
22468
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
22469
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
22470
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
22471
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22472
+ },
22473
+ async ({ instId, before, after, limit }) => {
22474
+ try {
22475
+ const data = await publicApi.getFundingRateHistory(instId, before, after, limit);
22476
+ const enriched = data.map((item) => ({
22477
+ ...item,
22478
+ tsIso: item.fundingTime ? new Date(parseInt(item.fundingTime)).toISOString() : void 0
22479
+ }));
22480
+ return toResult(enriched);
22481
+ } catch (e) {
22482
+ return toError(e);
22483
+ }
22484
+ }
22485
+ );
22486
+ server.tool(
22487
+ "okx_get_interest_rate_loan_quota",
22488
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5404\u5E01\u79CD\u7684\u5229\u7387\u548C\u501F\u8D37\u914D\u989D\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5404\u5E01\u79CD\u7684\u501F\u8D37\u5229\u7387\u3001\u4E86\u89E3\u6700\u5927\u53EF\u501F\u9650\u989D\n## \u5173\u952E\u8BCD\uFF1A\u5229\u7387\u914D\u989D, interest rate quota, \u501F\u8D37\u5229\u7387, \u501F\u6B3E\u9650\u989D\n## \u53C2\u6570\uFF1A\u65E0\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\uFF1A\u672C\u5DE5\u5177\u67E5\u5229\u7387\u914D\u989D \u2192 okx_get_interest_accrued \u770B\u5DF2\u8BA1\u5229\u606F \u2192 \u8BA1\u7B97\u501F\u8D37\u6210\u672C",
22489
+ {},
22490
+ async () => {
22491
+ try {
22492
+ const data = await publicApi.getInterestRateLoanQuota();
22493
+ return toResult(data);
22494
+ } catch (e) {
22495
+ return toError(e);
22496
+ }
22497
+ }
22498
+ );
22499
+ server.tool(
22500
+ "okx_get_premium_history",
22501
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u6EA2\u4EF7/\u6298\u4EF7\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u5408\u7EA6\u4E0E\u73B0\u8D27\u4EF7\u683C\u504F\u5DEE\u3001\u5224\u65AD\u5E02\u573A\u60C5\u7EEA\n## \u5173\u952E\u8BCD\uFF1A\u6EA2\u4EF7\u5386\u53F2, premium history, \u5408\u7EA6\u6EA2\u4EF7, \u57FA\u5DEE\u5386\u53F2\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\n## - period: \u65F6\u95F4\u7C92\u5EA6\u30021D=\u65E5\u7EBF\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6EA2\u4EF7 \u2192 okx_get_ticker \u770B\u4EF7\u683C \u2192 \u5224\u65AD\u671F\u8D27\u60C5\u7EEA",
22502
+ {
22503
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
22504
+ period: external_exports.string().optional().describe("\u65F6\u95F4\u7C92\u5EA6\uFF0C\u5982 1D")
22505
+ },
22506
+ async ({ instId, period }) => {
22507
+ try {
22508
+ const data = await publicApi.getPremiumHistory(instId, period);
22509
+ const enriched = data.map((item) => ({
22510
+ ...item,
22511
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
22512
+ }));
22513
+ return toResult(enriched);
22514
+ } catch (e) {
22515
+ return toError(e);
22516
+ }
22517
+ }
22518
+ );
22519
+ server.tool(
22520
+ "okx_get_delivery_exercise_history",
22521
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u4EA4\u5272\u548C\u671F\u6743\u884C\u6743\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5386\u53F2\u4EA4\u5272\u4EF7\u683C\u3001\u4E86\u89E3\u884C\u6743\u7ED3\u7B97\u60C5\u51B5\n## \u5173\u952E\u8BCD\uFF1A\u4EA4\u5272\u5386\u53F2, delivery history, \u884C\u6743\u5386\u53F2, \u5408\u7EA6\u4EA4\u5272, \u671F\u6743\u884C\u6743\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u5FC5\u586B\n## - uly: \u6807\u7684\u6307\u6570\u3002\u53EF\u9009\n## - instFamily: \u4EA7\u54C1\u65CF\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u4EA4\u5272\u5386\u53F2 \u2192 okx_get_opt_summary \u770B\u671F\u6743\u6458\u8981 \u2192 \u4E86\u89E3\u884C\u6743\u7ED3\u7B97",
22522
+ {
22523
+ instType: external_exports.enum(INST_TYPE_CONTRACTS).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u5FC5\u586B"),
22524
+ uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570"),
22525
+ instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF")
22526
+ },
22527
+ async ({ instType, uly, instFamily }) => {
22528
+ try {
22529
+ const data = await publicApi.getDeliveryExerciseHistory(instType, uly, instFamily);
22530
+ return toResult(data);
22531
+ } catch (e) {
22532
+ return toError(e);
22533
+ }
22534
+ }
22535
+ );
22536
+ server.tool(
22537
+ "okx_get_settlement_history",
22538
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u7ED3\u7B97\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5408\u7EA6\u7684\u6BCF\u65E5\u7ED3\u7B97\u4EF7\u683C\u548C\u7ED3\u7B97\u65F6\u95F4\n## \u5173\u952E\u8BCD\uFF1A\u7ED3\u7B97\u5386\u53F2, settlement history, \u5408\u7EA6\u7ED3\u7B97, \u6BCF\u65E5\u7ED3\u7B97\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u5FC5\u586B\n## - instFamily: \u4EA7\u54C1\u65CF\u3002\u53EF\u9009\n## - uly: \u6807\u7684\u6307\u6570\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u7ED3\u7B97\u5386\u53F2 \u2192 \u4E86\u89E3\u7ED3\u7B97\u4EF7 \u2192 \u8BC4\u4F30\u6D6E\u52A8\u76C8\u4E8F",
22539
+ {
22540
+ instType: external_exports.enum(INST_TYPE_CONTRACTS).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u5FC5\u586B"),
22541
+ instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF"),
22542
+ uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570")
22543
+ },
22544
+ async ({ instType, instFamily, uly }) => {
22545
+ try {
22546
+ const data = await publicApi.getSettlementHistory(instType, instFamily, uly);
22547
+ return toResult(data);
22548
+ } catch (e) {
22549
+ return toError(e);
22550
+ }
22551
+ }
22552
+ );
22553
+ server.tool(
22554
+ "okx_get_public_block_trades",
22555
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5927\u5B97\u4EA4\u6613\u516C\u5F00\u6210\u4EA4\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5927\u5B97\u5E02\u573A\u5386\u53F2\u6210\u4EA4\u3001\u5206\u6790\u5927\u5B97\u4EF7\u683C\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u5927\u5B97\u6210\u4EA4, block trades, \u5927\u5B97\u516C\u5F00, \u5927\u5B97\u4EA4\u6613\u8BB0\u5F55\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\u3002\u5FC5\u586B\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\uFF1A\u672C\u5DE5\u5177\u770B\u5927\u5B97\u6210\u4EA4 \u2192 \u5206\u6790\u5927\u5B97\u5E02\u573A \u2192 \u8BC4\u4F30\u673A\u6784\u52A8\u5411",
22556
+ {
22557
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\u3002\u5FC5\u586B")
22558
+ },
22559
+ async ({ instId }) => {
22560
+ try {
22561
+ const data = await publicApi.getPublicBlockTrades(instId);
22562
+ const enriched = data.map((item) => ({
22563
+ ...item,
22564
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
22565
+ }));
22566
+ return toResult(enriched);
22567
+ } catch (e) {
22568
+ return toError(e);
22569
+ }
22570
+ }
22571
+ );
22294
22572
  }
22295
22573
 
22296
22574
  // src/tools/account.ts
@@ -23168,6 +23446,51 @@ function registerTradingTools(server, auth) {
23168
23446
  }
23169
23447
  }
23170
23448
  );
23449
+ server.tool(
23450
+ "okx_get_one_click_repay_list",
23451
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4E00\u952E\u8FD8\u6B3E\u652F\u6301\u7684\u5E01\u79CD\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u54EA\u4E9B\u5E01\u79CD\u652F\u6301\u4E00\u952E\u8FD8\u6B3E\u3001\u4E86\u89E3\u53EF\u8FD8\u6B3E\u7684\u503A\u52A1\u7C7B\u578B\n## \u5173\u952E\u8BCD\uFF1A\u4E00\u952E\u8FD8\u6B3E, one click repay, \u8FD8\u6B3E\u5E01\u79CD, \u503A\u52A1\u507F\u8FD8\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 ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u652F\u6301\u5E01\u79CD \u2192 okx_one_click_repay \u6267\u884C\u8FD8\u6B3E",
23452
+ {},
23453
+ async () => {
23454
+ if (!auth) return toError(AUTH_REQUIRED);
23455
+ try {
23456
+ const data = await privateApi.getOneClickRepayCurrencyList(auth);
23457
+ return toResult(data);
23458
+ } catch (e) {
23459
+ return toError(e);
23460
+ }
23461
+ }
23462
+ );
23463
+ server.tool(
23464
+ "okx_one_click_repay",
23465
+ "## \u529F\u80FD\uFF1A\u6267\u884C\u4E00\u952E\u8FD8\u6B3E\uFF08\u4F7F\u7528\u8D26\u6237\u8D44\u91D1\u81EA\u52A8\u507F\u8FD8\u501F\u5E01\u503A\u52A1\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u507F\u8FD8\u6760\u6746\u501F\u8D37\u5229\u606F\u3001\u907F\u514D\u5229\u606F\u7D2F\u79EF\n## \u53C2\u6570\uFF1A\n## - ccy: \u8FD8\u6B3E\u4F7F\u7528\u7684\u5E01\u79CD\u3002\u5FC5\u586B\n## - repayCcy: \u8981\u507F\u8FD8\u7684\u503A\u52A1\u5E01\u79CD\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4F7F\u7528\u8D26\u6237\u8D44\u91D1\u8FD8\u6B3E\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8FD8\u6B3E\u79FB\u52A8\u771F\u5B9E\u8D44\u91D1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_one_click_repay_list \u67E5\u652F\u6301\u5E01\u79CD \u2192 \u672C\u5DE5\u5177\u8FD8\u6B3E \u2192 okx_one_click_repay_history \u67E5\u8BB0\u5F55",
23466
+ {
23467
+ ccy: external_exports.string().describe("\u8FD8\u6B3E\u4F7F\u7528\u7684\u5E01\u79CD\u3002\u5FC5\u586B"),
23468
+ repayCcy: external_exports.string().describe("\u8981\u507F\u8FD8\u7684\u503A\u52A1\u5E01\u79CD\u3002\u5FC5\u586B")
23469
+ },
23470
+ async ({ ccy, repayCcy }) => {
23471
+ if (!auth) return toError(AUTH_REQUIRED);
23472
+ try {
23473
+ const data = await privateApi.oneClickRepay(auth, { ccy, repayCcy });
23474
+ return toResult(data);
23475
+ } catch (e) {
23476
+ return toError(e);
23477
+ }
23478
+ }
23479
+ );
23480
+ server.tool(
23481
+ "okx_get_one_click_repay_history",
23482
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4E00\u952E\u8FD8\u6B3E\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u4EE5\u5F80\u7684\u8FD8\u6B3E\u64CD\u4F5C\u3001\u6838\u5BF9\u8FD8\u6B3E\u91D1\u989D\u548C\u5E01\u79CD\n## \u5173\u952E\u8BCD\uFF1A\u8FD8\u6B3E\u5386\u53F2, repay history, \u4E00\u952E\u8FD8\u6B3E\u8BB0\u5F55, \u503A\u52A1\u507F\u8FD8\u8BB0\u5F55\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_one_click_repay \u8FD8\u6B3E \u2192 \u672C\u5DE5\u5177\u67E5\u8BB0\u5F55 \u2192 \u786E\u8BA4\u8FD8\u6B3E\u5B8C\u6210",
23483
+ {},
23484
+ async () => {
23485
+ if (!auth) return toError(AUTH_REQUIRED);
23486
+ try {
23487
+ const data = await privateApi.getOneClickRepayHistory(auth);
23488
+ return toResult(data);
23489
+ } catch (e) {
23490
+ return toError(e);
23491
+ }
23492
+ }
23493
+ );
23171
23494
  }
23172
23495
 
23173
23496
  // src/tools/algo.ts
@@ -23449,6 +23772,109 @@ function registerFundingTools(server, auth) {
23449
23772
  }
23450
23773
  }
23451
23774
  );
23775
+ server.tool(
23776
+ "okx_get_non_tradable_assets",
23777
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4E0D\u53EF\u4EA4\u6613\u8D44\u4EA7\uFF08\u5982\u6CD5\u5E01\u3001\u975E\u6D41\u901A\u4EE3\u5E01\uFF09\u7684\u6301\u4ED3\u4F59\u989D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u8D26\u6237\u4E2D\u4E0D\u80FD\u76F4\u63A5\u4EA4\u6613\u4F46\u53EF\u80FD\u5177\u6709\u4EF7\u503C\u7684\u8D44\u4EA7\n## \u5173\u952E\u8BCD\uFF1A\u4E0D\u53EF\u4EA4\u6613\u8D44\u4EA7, non tradable, \u6CD5\u5E01\u8D44\u4EA7, \u975E\u6D41\u901A\u8D44\u4EA7\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u4E0D\u53EF\u4EA4\u6613\u8D44\u4EA7 \u2192 okx_get_balance \u770B\u53EF\u4EA4\u6613\u8D44\u4EA7 \u2192 \u5168\u9762\u638C\u63E1\u6301\u4ED3",
23778
+ {},
23779
+ async () => {
23780
+ if (!auth) return toError(AUTH_REQUIRED);
23781
+ try {
23782
+ const data = await privateApi.getNonTradableAssets(auth);
23783
+ return toResult(data);
23784
+ } catch (e) {
23785
+ return toError(e);
23786
+ }
23787
+ }
23788
+ );
23789
+ server.tool(
23790
+ "okx_get_exchange_list",
23791
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u652F\u6301\u7684\u4EA4\u6613\u6240/\u5E73\u53F0\u5217\u8868\uFF08\u63D0\u73B0\u5916\u90E8\u5730\u5740\u6821\u9A8C\u7528\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u63D0\u73B0\u65F6\u9009\u62E9\u76EE\u6807\u4EA4\u6613\u6240\u3001\u786E\u8BA4\u63D0\u73B0\u901A\u9053\u662F\u5426\u53EF\u7528\n## \u5173\u952E\u8BCD\uFF1A\u4EA4\u6613\u6240\u5217\u8868, exchange list, \u63D0\u73B0\u5E73\u53F0, \u5916\u90E8\u4EA4\u6613\u6240\n## \u53C2\u6570\uFF1A\u65E0\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\u67E5\u770B\u652F\u6301\u4EA4\u6613\u6240 \u2192 okx_withdrawal \u63D0\u73B0\u65F6\u9009\u62E9\u76EE\u6807",
23792
+ {},
23793
+ async () => {
23794
+ try {
23795
+ const data = await privateApi.getExchangeList();
23796
+ return toResult(data);
23797
+ } catch (e) {
23798
+ return toError(e);
23799
+ }
23800
+ }
23801
+ );
23802
+ server.tool(
23803
+ "okx_get_deposit_withdraw_status",
23804
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5145\u503C\u63D0\u73B0\u7684\u72B6\u6001\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5145\u503C\u6216\u63D0\u73B0\u662F\u5426\u5230\u8D26\u3001\u94FE\u4E0A\u786E\u8BA4\u8FDB\u5EA6\n## \u5173\u952E\u8BCD\uFF1A\u5145\u63D0\u72B6\u6001, deposit withdraw, \u5145\u503C\u72B6\u6001, \u63D0\u73B0\u72B6\u6001, \u5230\u8D26\u67E5\u8BE2\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_deposit_address \u83B7\u53D6\u5730\u5740 \u2192 \u5145\u503C\u540E \u2192 \u672C\u5DE5\u5177\u67E5\u72B6\u6001",
23805
+ {},
23806
+ async () => {
23807
+ if (!auth) return toError(AUTH_REQUIRED);
23808
+ try {
23809
+ const data = await privateApi.getDepositWithdrawStatus(auth);
23810
+ return toResult(data);
23811
+ } catch (e) {
23812
+ return toError(e);
23813
+ }
23814
+ }
23815
+ );
23816
+ server.tool(
23817
+ "okx_get_asset_bills_history",
23818
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D44\u91D1\u8D26\u6237\u7684\u5386\u53F2\u8D26\u5355\u6D41\u6C34\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5BA1\u8BA1\u8D44\u91D1\u8D26\u6237\u7684\u8D44\u91D1\u53D8\u52A8\u3001\u6838\u5BF9\u51FA\u5165\u91D1\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u8D44\u91D1\u8D26\u5355, asset bills, \u8D44\u91D1\u6D41\u6C34, \u8D44\u91D1\u8D26\u6237\u8D26\u5355\n## \u53C2\u6570\uFF1A\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\uFF1A\u672C\u5DE5\u5177\u67E5\u8D44\u91D1\u6D41\u6C34 \u2192 okx_get_balance \u6838\u5BF9\u4F59\u989D \u2192 \u5BF9\u8D26",
23819
+ {
23820
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
23821
+ },
23822
+ async ({ limit }) => {
23823
+ if (!auth) return toError(AUTH_REQUIRED);
23824
+ try {
23825
+ const data = await privateApi.getAssetBillsHistory(auth, limit);
23826
+ return toResult(data);
23827
+ } catch (e) {
23828
+ return toError(e);
23829
+ }
23830
+ }
23831
+ );
23832
+ server.tool(
23833
+ "okx_get_convert_currency_pair",
23834
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u95EA\u5151\u652F\u6301\u7684\u5E01\u79CD\u5BF9\u8BE6\u60C5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u95EA\u5151\u4EA4\u6613\u7684\u5151\u6362\u6BD4\u4F8B\u548C\u652F\u6301\u7684\u5151\u6362\u5BF9\n## \u5173\u952E\u8BCD\uFF1A\u5151\u6362\u5E01\u79CD\u5BF9, convert pair, \u95EA\u5151\u5BF9, \u5151\u6362\u8BE6\u60C5\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u5151\u6362\u5BF9 \u2192 okx_get_convert_estimate_quote \u83B7\u53D6\u9884\u4F30 \u2192 okx_convert_trade \u6267\u884C",
23835
+ {},
23836
+ async () => {
23837
+ if (!auth) return toError(AUTH_REQUIRED);
23838
+ try {
23839
+ const data = await privateApi.getConvertCurrencyPair(auth);
23840
+ return toResult(data);
23841
+ } catch (e) {
23842
+ return toError(e);
23843
+ }
23844
+ }
23845
+ );
23846
+ server.tool(
23847
+ "okx_get_convert_estimate_quote",
23848
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u95EA\u5151\u9884\u4F30\u62A5\u4EF7\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5151\u6362\u524D\u67E5\u770B\u9884\u4F30\u5151\u6362\u7387\u548C\u6570\u91CF\u3001\u6BD4\u8F83\u5404\u65B9\u6848\u4F18\u52A3\n## \u53C2\u6570\uFF1A\n## - fromCcy: \u5356\u51FA\u5E01\u79CD\u3002\u5FC5\u586B\n## - toCcy: \u4E70\u5165\u5E01\u79CD\u3002\u5FC5\u586B\n## - sz: \u5151\u6362\u6570\u91CF\u3002\u5FC5\u586B\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\u83B7\u53D6\u9884\u4F30 \u2192 okx_get_convert_currency_pair \u770B\u8BE6\u60C5 \u2192 okx_convert_trade \u6267\u884C",
23849
+ {
23850
+ fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\u3002\u5FC5\u586B"),
23851
+ toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\u3002\u5FC5\u586B"),
23852
+ sz: external_exports.string().describe("\u5151\u6362\u6570\u91CF\u3002\u5FC5\u586B")
23853
+ },
23854
+ async ({ fromCcy, toCcy, sz }) => {
23855
+ if (!auth) return toError(AUTH_REQUIRED);
23856
+ try {
23857
+ const data = await privateApi.getConvertEstimateQuote(auth, { fromCcy, toCcy, sz });
23858
+ return toResult(data);
23859
+ } catch (e) {
23860
+ return toError(e);
23861
+ }
23862
+ }
23863
+ );
23864
+ server.tool(
23865
+ "okx_get_monthly_statement",
23866
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u8D26\u6237\u6708\u5EA6\u8D26\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6708\u5EA6\u4EA4\u6613\u6C47\u603B\u3001\u6536\u5165\u652F\u51FA\u660E\u7EC6\n## \u5173\u952E\u8BCD\uFF1A\u6708\u5EA6\u8D26\u5355, monthly statement, \u6708\u7ED3, \u6708\u5EA6\u62A5\u544A\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\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6708\u5EA6\u6C47\u603B \u2192 \u8BC4\u4F30\u6708\u5EA6\u76C8\u4E8F \u2192 \u8C03\u6574\u7B56\u7565",
23867
+ {},
23868
+ async () => {
23869
+ if (!auth) return toError(AUTH_REQUIRED);
23870
+ try {
23871
+ const data = await privateApi.applyMonthlyStatement(auth);
23872
+ return toResult(data);
23873
+ } catch (e) {
23874
+ return toError(e);
23875
+ }
23876
+ }
23877
+ );
23452
23878
  }
23453
23879
 
23454
23880
  // src/tools/stats.ts
@@ -23822,6 +24248,121 @@ function registerStatsTools(server) {
23822
24248
  }
23823
24249
  }
23824
24250
  );
24251
+ server.tool(
24252
+ "okx_get_long_short_account_ratio",
24253
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u591A\u7A7A\u8D26\u6237\u6BD4\u4F8B\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u5E02\u573A\u60C5\u7EEA\uFF0C\u6BD4\u503C>1\u8868\u793A\u591A\u5934\u5360\u591A\u6570\n## \u5173\u952E\u8BCD\uFF1A\u591A\u7A7A\u8D26\u6237\u6BD4, long short account, \u5E02\u573A\u60C5\u7EEA\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\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\uFF1A\u672C\u5DE5\u5177\u770B\u8D26\u6237\u591A\u7A7A\u6BD4 \u2192 okx_get_contract_trader_ls_ratio \u770B\u5927\u6237 \u2192 \u5BF9\u6BD4",
24254
+ {
24255
+ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH"),
24256
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
24257
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
24258
+ },
24259
+ async ({ ccy, begin, end }) => {
24260
+ try {
24261
+ const data = await publicApi.getLongShortRatio(ccy, begin, end);
24262
+ const enriched = data.map((item) => ({
24263
+ ...item,
24264
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
24265
+ }));
24266
+ return toResult(enriched);
24267
+ } catch (e) {
24268
+ return toError(e);
24269
+ }
24270
+ }
24271
+ );
24272
+ server.tool(
24273
+ "okx_get_contract_trader_ls_ratio",
24274
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u7CBE\u82F1\u4EA4\u6613\u5458\u5408\u7EA6\u591A\u7A7A\u6BD4\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u5927\u6237\u5BF9\u5408\u7EA6\u5E02\u573A\u7684\u770B\u6CD5\n## \u5173\u952E\u8BCD\uFF1A\u7CBE\u82F1\u591A\u7A7A\u6BD4, top trader ls, \u5927\u6237\u5408\u7EA6\n## \u53C2\u6570\uFF1A\n## - instId: \u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\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\uFF1A\u672C\u5DE5\u5177\u770B\u5927\u6237\u591A\u7A7A \u2192 okx_get_long_short_account_ratio \u770B\u6563\u6237 \u2192 \u5BF9\u6BD4",
24275
+ {
24276
+ instId: external_exports.string().describe("\u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP"),
24277
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
24278
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
24279
+ },
24280
+ async ({ instId, begin, end }) => {
24281
+ try {
24282
+ const data = await publicApi.getTopTraderLongShortRatio(instId, begin, end);
24283
+ const enriched = data.map((item) => ({
24284
+ ...item,
24285
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
24286
+ }));
24287
+ return toResult(enriched);
24288
+ } catch (e) {
24289
+ return toError(e);
24290
+ }
24291
+ }
24292
+ );
24293
+ server.tool(
24294
+ "okx_get_contract_position_trader_ratio",
24295
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u7CBE\u82F1\u4EA4\u6613\u5458\u6301\u4ED3\u591A\u7A7A\u6BD4\u4F8B\uFF08\u6309\u4ED3\u4F4D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u5927\u6237\u5B9E\u9645\u6301\u4ED3\u65B9\u5411\u3001\u6BD4\u8D26\u6237\u6BD4\u4F8B\u66F4\u7CBE\u786E\n## \u5173\u952E\u8BCD\uFF1A\u7CBE\u82F1\u6301\u4ED3\u6BD4, top trader position, \u5927\u6237\u4ED3\u4F4D\n## \u53C2\u6570\uFF1A\n## - instId: \u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\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\uFF1A\u672C\u5DE5\u5177\u770B\u5927\u6237\u4ED3\u4F4D\u591A\u7A7A \u2192 \u7ED3\u5408\u4EF7\u683C\u5224\u65AD\u8D8B\u52BF",
24296
+ {
24297
+ instId: external_exports.string().describe("\u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B")
24298
+ },
24299
+ async ({ instId }) => {
24300
+ try {
24301
+ const data = await publicApi.getTopTraderPositionRatio(instId);
24302
+ const enriched = data.map((item) => ({
24303
+ ...item,
24304
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
24305
+ }));
24306
+ return toResult(enriched);
24307
+ } catch (e) {
24308
+ return toError(e);
24309
+ }
24310
+ }
24311
+ );
24312
+ server.tool(
24313
+ "okx_get_option_oi_ratio",
24314
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u672A\u5E73\u4ED3\u91CFCall/Put\u6BD4\u548C\u6210\u4EA4\u91CF\u6BD4\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8861\u91CF\u671F\u6743\u5E02\u573A\u6574\u4F53\u60C5\u7EEA\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u6301\u4ED3\u6BD4, option oi ratio, PCR, \u671F\u6743\u60C5\u7EEA\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\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\uFF1A\u672C\u5DE5\u5177\u770B\u671F\u6743\u6BD4 \u2192 okx_get_option_open_interest \u770B\u6301\u4ED3\u603B\u91CF",
24315
+ {
24316
+ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH"),
24317
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
24318
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
24319
+ },
24320
+ async ({ ccy, begin, end }) => {
24321
+ try {
24322
+ const data = await publicApi.getOptionPutCallRatio(ccy, begin, end);
24323
+ const enriched = data.map((item) => ({
24324
+ ...item,
24325
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
24326
+ }));
24327
+ return toResult(enriched);
24328
+ } catch (e) {
24329
+ return toError(e);
24330
+ }
24331
+ }
24332
+ );
24333
+ server.tool(
24334
+ "okx_get_option_taker_block_volume",
24335
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u4E3B\u52A8\u6210\u4EA4\u548C\u533A\u5757\u6210\u4EA4\u7684\u7EDF\u8BA1\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u671F\u6743\u5E02\u573A\u7684Taker\u6210\u4EA4\u91CF\u548C\u533A\u5757\u6210\u4EA4\u91CF\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u6210\u4EA4\u91CF, option taker block, \u671F\u6743\u4E3B\u52A8\u4E70\u5356, \u671F\u6743\u5927\u5355\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u5FC5\u586B\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\uFF1A\u672C\u5DE5\u5177\u770B\u671F\u6743\u6210\u4EA4\u91CF \u2192 okx_get_option_open_interest \u770B\u6301\u4ED3 \u2192 \u5206\u6790\u6D3B\u8DC3\u5EA6",
24336
+ { ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u5FC5\u586B") },
24337
+ async ({ ccy }) => {
24338
+ try {
24339
+ const data = await publicApi.getOptionTakerBlockVolume(ccy);
24340
+ return toResult(data);
24341
+ } catch (e) {
24342
+ return toError(e);
24343
+ }
24344
+ }
24345
+ );
24346
+ server.tool(
24347
+ "okx_get_taker_volume_contract",
24348
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u4E3B\u52A8\u4E70\u5356\u91CF\u7EDF\u8BA1\uFF08\u6309\u5408\u7EA6\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5177\u4F53\u5408\u7EA6\u7684\u4E3B\u52A8\u4E70\u5356\u529B\u91CF\n## \u5173\u952E\u8BCD\uFF1A\u5408\u7EA6\u4E70\u5356\u91CF, taker volume contract, \u4E3B\u52A8\u6210\u4EA4\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B\n## - instId: \u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\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\uFF1A\u672C\u5DE5\u5177\u67E5\u5355\u5408\u7EA6\u4E70\u5356\u91CF \u2192 okx_get_contracts_taker_volume \u67E5\u6C47\u603B",
24349
+ {
24350
+ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B"),
24351
+ instId: external_exports.string().describe("\u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B")
24352
+ },
24353
+ async ({ ccy, instId }) => {
24354
+ try {
24355
+ const data = await publicApi.getTakerVolumeContract(ccy, instId);
24356
+ const enriched = data.map((item) => ({
24357
+ ...item,
24358
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
24359
+ }));
24360
+ return toResult(enriched);
24361
+ } catch (e) {
24362
+ return toError(e);
24363
+ }
24364
+ }
24365
+ );
23825
24366
  }
23826
24367
 
23827
24368
  // src/tools/subaccount.ts
@@ -24380,6 +24921,49 @@ function registerOutcomesTools(server) {
24380
24921
  }
24381
24922
  }
24382
24923
  );
24924
+ server.tool(
24925
+ "okx_get_event_series",
24926
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u9884\u6D4B\u5E02\u573A\u4E8B\u4EF6\u5408\u7EA6\u7CFB\u5217\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6D4F\u89C8\u53EF\u4EA4\u6613\u7684\u4E8B\u4EF6\u5408\u7EA6\u7CFB\u5217\uFF08\u5982SOL\u4EF7\u683C\u533A\u95F4\u9884\u6D4B\uFF09\n## \u5173\u952E\u8BCD\uFF1A\u4E8B\u4EF6\u5408\u7EA6, event series, \u9884\u6D4B\u5E02\u573A, \u4E8B\u4EF6\u7CFB\u5217, \u4E8B\u4EF6\u7C7B\u578B\n## \u53C2\u6570\uFF1A\u65E0\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\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u4E8B\u4EF6\u7CFB\u5217 \u2192 okx_get_event_markets \u67E5\u770B\u5177\u4F53\u5E02\u573A \u2192 \u9009\u62E9\u4EA4\u6613",
24927
+ {},
24928
+ async () => {
24929
+ try {
24930
+ const data = await publicApi.getEventSeries();
24931
+ return toResult(data);
24932
+ } catch (e) {
24933
+ return toError(e);
24934
+ }
24935
+ }
24936
+ );
24937
+ server.tool(
24938
+ "okx_get_event_markets",
24939
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u9884\u6D4B\u5E02\u573A\u6307\u5B9A\u7CFB\u5217\u4E0B\u7684\u6240\u6709\u5E02\u573A\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u67D0\u4E8B\u4EF6\u7CFB\u5217\u4E0B\u7684\u6240\u6709\u53EF\u4EA4\u6613\u5408\u7EA6\u54C1\u79CD\n## \u5173\u952E\u8BCD\uFF1A\u4E8B\u4EF6\u5E02\u573A, event markets, \u9884\u6D4B\u5E02\u573A, \u5408\u7EA6\u5E02\u573A\n## \u53C2\u6570\uFF1A\n## - seriesId: \u4E8B\u4EF6\u7CFB\u5217ID\u3002\u5FC5\u586B\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_event_series \u67E5\u7CFB\u5217 \u2192 \u672C\u5DE5\u5177\u67E5\u770B\u5E02\u573A \u2192 \u8BC4\u4F30\u4EA4\u6613\u673A\u4F1A",
24940
+ {
24941
+ seriesId: external_exports.string().describe("\u4E8B\u4EF6\u7CFB\u5217ID\u3002\u5FC5\u586B")
24942
+ },
24943
+ async ({ seriesId }) => {
24944
+ try {
24945
+ const data = await publicApi.getEventMarkets(seriesId);
24946
+ return toResult(data);
24947
+ } catch (e) {
24948
+ return toError(e);
24949
+ }
24950
+ }
24951
+ );
24952
+ server.tool(
24953
+ "okx_get_event_events",
24954
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u9884\u6D4B\u5E02\u573A\u6307\u5B9A\u7CFB\u5217\u4E0B\u7684\u4E8B\u4EF6\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u4E8B\u4EF6\u5408\u7EA6\u7684\u5230\u671F\u65E5\u3001\u72B6\u6001\u548C\u6709\u5173\u4FE1\u606F\n## \u5173\u952E\u8BCD\uFF1A\u4E8B\u4EF6\u5217\u8868, event events, \u9884\u6D4B\u4E8B\u4EF6, \u4E8B\u4EF6\u72B6\u6001\n## \u53C2\u6570\uFF1A\n## - seriesId: \u4E8B\u4EF6\u7CFB\u5217ID\u3002\u5FC5\u586B\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_event_series \u67E5\u7CFB\u5217 \u2192 \u672C\u5DE5\u5177\u67E5\u770B\u4E8B\u4EF6 \u2192 \u9009\u62E9\u5230\u671F\u65E5",
24955
+ {
24956
+ seriesId: external_exports.string().describe("\u4E8B\u4EF6\u7CFB\u5217ID\u3002\u5FC5\u586B")
24957
+ },
24958
+ async ({ seriesId }) => {
24959
+ try {
24960
+ const data = await publicApi.getEventEvents(seriesId);
24961
+ return toResult(data);
24962
+ } catch (e) {
24963
+ return toError(e);
24964
+ }
24965
+ }
24966
+ );
24383
24967
  }
24384
24968
 
24385
24969
  // src/tools/bot.ts
@@ -25512,6 +26096,66 @@ function registerAffiliateTools(server, auth) {
25512
26096
  );
25513
26097
  }
25514
26098
 
26099
+ // src/tools/fiat.ts
26100
+ function registerFiatTools(server, auth) {
26101
+ server.tool(
26102
+ "okx_get_fiat_buy_sell_pair",
26103
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6CD5\u5E01\u4E70\u5356\u652F\u6301\u7684\u5E01\u79CD\u5BF9\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u652F\u6301\u7684\u6CD5\u5E01\u4EA4\u6613\u5BF9\u3001\u4E86\u89E3\u53EF\u76F4\u63A5\u7528\u6CD5\u5E01\u4E70\u5356\u7684\u5E01\u79CD\n## \u5173\u952E\u8BCD\uFF1A\u6CD5\u5E01\u4EA4\u6613\u5BF9, fiat pair, \u6CD5\u5E01\u4E70\u5356, \u6CD5\u5E01\u5E01\u79CD\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u652F\u6301\u5BF9 \u2192 okx_get_fiat_deposit \u67E5\u770B\u5165\u91D1\u65B9\u5F0F",
26104
+ {},
26105
+ async () => {
26106
+ if (!auth) return toError(AUTH_REQUIRED);
26107
+ try {
26108
+ const data = await privateApi.getFiatBuySellPair(auth);
26109
+ return toResult(data);
26110
+ } catch (e) {
26111
+ return toError(e);
26112
+ }
26113
+ }
26114
+ );
26115
+ server.tool(
26116
+ "okx_get_fiat_deposit",
26117
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6CD5\u5E01\u5165\u91D1\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6CD5\u5E01\u5145\u503C\u6E20\u9053\u3001\u5165\u91D1\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u6CD5\u5E01\u5165\u91D1, fiat deposit, \u6CD5\u5E01\u5145\u503C, \u6CD5\u5E01\u5165\u91D1\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 ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u5165\u91D1 \u2192 okx_get_fiat_deposit_methods \u770B\u652F\u4ED8\u65B9\u5F0F",
26118
+ {},
26119
+ async () => {
26120
+ if (!auth) return toError(AUTH_REQUIRED);
26121
+ try {
26122
+ const data = await privateApi.getFiatDeposit(auth);
26123
+ return toResult(data);
26124
+ } catch (e) {
26125
+ return toError(e);
26126
+ }
26127
+ }
26128
+ );
26129
+ server.tool(
26130
+ "okx_get_fiat_deposit_orders",
26131
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6CD5\u5E01\u5165\u91D1\u8BA2\u5355\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2A\u6CD5\u5E01\u5145\u503C\u8BB0\u5F55\u3001\u6838\u5BF9\u5165\u91D1\u72B6\u6001\u548C\u91D1\u989D\n## \u5173\u952E\u8BCD\uFF1A\u6CD5\u5E01\u5165\u91D1\u8BA2\u5355, fiat deposit orders, \u5145\u503C\u8BB0\u5F55, \u5165\u91D1\u5386\u53F2\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u5165\u91D1\u5386\u53F2 \u2192 \u5230\u8D26\u786E\u8BA4 \u2192 \u4EA4\u6613\u51C6\u5907",
26132
+ {},
26133
+ async () => {
26134
+ if (!auth) return toError(AUTH_REQUIRED);
26135
+ try {
26136
+ const data = await privateApi.getFiatDepositOrderHistory(auth);
26137
+ return toResult(data);
26138
+ } catch (e) {
26139
+ return toError(e);
26140
+ }
26141
+ }
26142
+ );
26143
+ server.tool(
26144
+ "okx_get_fiat_deposit_methods",
26145
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6CD5\u5E01\u5165\u91D1\u652F\u6301\u7684\u652F\u4ED8\u65B9\u5F0F\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u53EF\u7528\u7684\u6CD5\u5E01\u5165\u91D1\u652F\u4ED8\u65B9\u5F0F\uFF08\u94F6\u884C\u8F6C\u8D26/\u7B2C\u4E09\u65B9\u652F\u4ED8\u7B49\uFF09\n## \u5173\u952E\u8BCD\uFF1A\u6CD5\u5E01\u652F\u4ED8\u65B9\u5F0F, fiat methods, \u5165\u91D1\u65B9\u5F0F, \u652F\u4ED8\u6E20\u9053\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u652F\u4ED8\u65B9\u5F0F \u2192 \u9009\u62E9\u5408\u9002\u65B9\u5F0F\u5165\u91D1",
26146
+ {},
26147
+ async () => {
26148
+ if (!auth) return toError(AUTH_REQUIRED);
26149
+ try {
26150
+ const data = await privateApi.getFiatDepositPaymentMethods(auth);
26151
+ return toResult(data);
26152
+ } catch (e) {
26153
+ return toError(e);
26154
+ }
26155
+ }
26156
+ );
26157
+ }
26158
+
25515
26159
  // src/index.ts
25516
26160
  async function main() {
25517
26161
  const server = new McpServer({ name: "hvip", version: "0.2.1" });
@@ -25531,6 +26175,7 @@ async function main() {
25531
26175
  registerSubAccountTools(server, auth);
25532
26176
  registerFinanceTools(server, auth);
25533
26177
  registerAffiliateTools(server, auth);
26178
+ registerFiatTools(server, auth);
25534
26179
  registerRfqTools(server, auth);
25535
26180
  const transport = new StdioServerTransport();
25536
26181
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.26",
3
+ "version": "0.2.28",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",