hvip-mcp-server 0.2.25 → 0.2.27

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 +721 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21355,7 +21355,54 @@ var privateApi = {
21355
21355
  getSpreadFills: (auth, sprdId, limit) => request("GET", "/api/v5/sprd/fills", { params: { sprdId, limit }, auth }),
21356
21356
  // ── 第三批交易收尾 ─────────────────────────────────────────────────────────
21357
21357
  resetMmp: (auth, body) => request("POST", "/api/v5/account/mmp-reset", { body, auth }),
21358
- getOrderByClientId: (auth, instId, clOrdId) => request("GET", "/api/v5/trade/order", { params: { instId, clOrdId }, auth })
21358
+ // ── NEW: sprd affiliate ──
21359
+ getOrderByClientId: (auth, instId, clOrdId) => request("GET", "/api/v5/trade/order", { params: { instId, clOrdId }, auth }),
21360
+ // ── 价差收尾(第一批新缺口) ──────────────────────────────────────────
21361
+ getSpreadOrdersHistoryArchive: (auth, sprdId) => request("GET", "/api/v5/sprd/orders-history-archive", { params: { sprdId }, auth }),
21362
+ getSpreadPublicTrades: (sprdId) => request("GET", "/api/v5/sprd/public-trades", { params: { sprdId } }),
21363
+ getSpreadTradeFills: (auth, sprdId) => request("GET", "/api/v5/sprd/trades", { params: { sprdId }, auth }),
21364
+ // ── 子账户+推广(第三批新缺口) ──────────────────────────────────────
21365
+ createSubAccount: (auth, body) => request("POST", "/api/v5/users/subaccount/create-subaccount", { body, auth }),
21366
+ getEntrustSubAccountList: (auth) => request("GET", "/api/v5/users/entrust-subaccount-list", { auth }),
21367
+ getAffiliateInviteeList: (auth) => request("GET", "/api/v5/affiliate/invitee/list", { auth }),
21368
+ getAffiliateInviteeDetail: (auth, uid) => request("GET", "/api/v5/affiliate/invitee/detail", { params: { uid }, auth }),
21369
+ getAffiliateLinkList: (auth) => request("GET", "/api/v5/affiliate/link/list", { auth }),
21370
+ getAffiliatePerformance: (auth) => request("GET", "/api/v5/affiliate/performance/summary", { auth }),
21371
+ getAffiliateCoInviterList: (auth) => request("GET", "/api/v5/affiliate/co-inviter/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 })
21359
21406
  };
21360
21407
 
21361
21408
  // src/adapters/hrails.ts
@@ -21755,6 +21802,138 @@ function registerMarketTools(server) {
21755
21802
  }
21756
21803
  }
21757
21804
  );
21805
+ server.tool(
21806
+ "okx_get_block_ticker",
21807
+ "## \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",
21808
+ {
21809
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B")
21810
+ },
21811
+ async ({ instId }) => {
21812
+ try {
21813
+ const data = await publicApi.getBlockTicker(instId);
21814
+ const enriched = data.map((item) => ({
21815
+ ...item,
21816
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
21817
+ }));
21818
+ return toResult(enriched);
21819
+ } catch (e) {
21820
+ return toError(e);
21821
+ }
21822
+ }
21823
+ );
21824
+ server.tool(
21825
+ "okx_get_history_index_candles",
21826
+ "## \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",
21827
+ {
21828
+ instId: external_exports.string().describe("\u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B"),
21829
+ bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21830
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21831
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21832
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21833
+ },
21834
+ async ({ instId, bar, after, before, limit }) => {
21835
+ try {
21836
+ const data = await publicApi.getHistoryIndexCandles(instId, bar, after, before, limit);
21837
+ const enriched = data.map((row) => ({
21838
+ ts: row[0],
21839
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21840
+ open: row[1],
21841
+ high: row[2],
21842
+ low: row[3],
21843
+ close: row[4],
21844
+ vol: row[5]
21845
+ }));
21846
+ return toResult(enriched);
21847
+ } catch (e) {
21848
+ return toError(e);
21849
+ }
21850
+ }
21851
+ );
21852
+ server.tool(
21853
+ "okx_get_history_mark_price_candles",
21854
+ "## \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",
21855
+ {
21856
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
21857
+ bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21858
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21859
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21860
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21861
+ },
21862
+ async ({ instId, bar, after, before, limit }) => {
21863
+ try {
21864
+ const data = await publicApi.getHistoryMarkPriceCandles(instId, bar, after, before, limit);
21865
+ const enriched = data.map((row) => ({
21866
+ ts: row[0],
21867
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21868
+ open: row[1],
21869
+ high: row[2],
21870
+ low: row[3],
21871
+ close: row[4],
21872
+ vol: row[5]
21873
+ }));
21874
+ return toResult(enriched);
21875
+ } catch (e) {
21876
+ return toError(e);
21877
+ }
21878
+ }
21879
+ );
21880
+ server.tool(
21881
+ "okx_get_mark_price_candles",
21882
+ "## \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",
21883
+ {
21884
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
21885
+ bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21886
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21887
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21888
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21889
+ },
21890
+ async ({ instId, bar, after, before, limit }) => {
21891
+ try {
21892
+ const data = await publicApi.getMarkPriceCandles(instId, bar, after, before, limit);
21893
+ const enriched = data.map((row) => ({
21894
+ ts: row[0],
21895
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21896
+ open: row[1],
21897
+ high: row[2],
21898
+ low: row[3],
21899
+ close: row[4],
21900
+ vol: row[5]
21901
+ }));
21902
+ return toResult(enriched);
21903
+ } catch (e) {
21904
+ return toError(e);
21905
+ }
21906
+ }
21907
+ );
21908
+ server.tool(
21909
+ "okx_get_sprd_history_candles",
21910
+ "## \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",
21911
+ {
21912
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B"),
21913
+ bar: external_exports.enum(["1m", "5m", "15m", "30m", "1H", "4H", "1D"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
21914
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21915
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
21916
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
21917
+ },
21918
+ async ({ sprdId, bar, after, before, limit }) => {
21919
+ try {
21920
+ const data = await publicApi.getSpreadHistoryCandles(sprdId, bar, after, before, limit);
21921
+ const enriched = data.map((row) => ({
21922
+ ts: row[0],
21923
+ tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
21924
+ open: row[1],
21925
+ high: row[2],
21926
+ low: row[3],
21927
+ close: row[4],
21928
+ vol: row[5],
21929
+ volCcy: row[6]
21930
+ }));
21931
+ return toResult(enriched);
21932
+ } catch (e) {
21933
+ return toError(e);
21934
+ }
21935
+ }
21936
+ );
21758
21937
  }
21759
21938
 
21760
21939
  // src/tools/public.ts
@@ -22277,6 +22456,114 @@ function registerPublicTools(server, auth) {
22277
22456
  }
22278
22457
  }
22279
22458
  );
22459
+ server.tool(
22460
+ "okx_get_funding_rate_history",
22461
+ "## \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",
22462
+ {
22463
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
22464
+ before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
22465
+ after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2\uFF09"),
22466
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22467
+ },
22468
+ async ({ instId, before, after, limit }) => {
22469
+ try {
22470
+ const data = await publicApi.getFundingRateHistory(instId, before, after, limit);
22471
+ const enriched = data.map((item) => ({
22472
+ ...item,
22473
+ tsIso: item.fundingTime ? new Date(parseInt(item.fundingTime)).toISOString() : void 0
22474
+ }));
22475
+ return toResult(enriched);
22476
+ } catch (e) {
22477
+ return toError(e);
22478
+ }
22479
+ }
22480
+ );
22481
+ server.tool(
22482
+ "okx_get_interest_rate_loan_quota",
22483
+ "## \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",
22484
+ {},
22485
+ async () => {
22486
+ try {
22487
+ const data = await publicApi.getInterestRateLoanQuota();
22488
+ return toResult(data);
22489
+ } catch (e) {
22490
+ return toError(e);
22491
+ }
22492
+ }
22493
+ );
22494
+ server.tool(
22495
+ "okx_get_premium_history",
22496
+ "## \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",
22497
+ {
22498
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
22499
+ period: external_exports.string().optional().describe("\u65F6\u95F4\u7C92\u5EA6\uFF0C\u5982 1D")
22500
+ },
22501
+ async ({ instId, period }) => {
22502
+ try {
22503
+ const data = await publicApi.getPremiumHistory(instId, period);
22504
+ const enriched = data.map((item) => ({
22505
+ ...item,
22506
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
22507
+ }));
22508
+ return toResult(enriched);
22509
+ } catch (e) {
22510
+ return toError(e);
22511
+ }
22512
+ }
22513
+ );
22514
+ server.tool(
22515
+ "okx_get_delivery_exercise_history",
22516
+ "## \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",
22517
+ {
22518
+ instType: external_exports.enum(INST_TYPE_CONTRACTS).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u5FC5\u586B"),
22519
+ uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570"),
22520
+ instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF")
22521
+ },
22522
+ async ({ instType, uly, instFamily }) => {
22523
+ try {
22524
+ const data = await publicApi.getDeliveryExerciseHistory(instType, uly, instFamily);
22525
+ return toResult(data);
22526
+ } catch (e) {
22527
+ return toError(e);
22528
+ }
22529
+ }
22530
+ );
22531
+ server.tool(
22532
+ "okx_get_settlement_history",
22533
+ "## \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",
22534
+ {
22535
+ instType: external_exports.enum(INST_TYPE_CONTRACTS).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u5FC5\u586B"),
22536
+ instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF"),
22537
+ uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570")
22538
+ },
22539
+ async ({ instType, instFamily, uly }) => {
22540
+ try {
22541
+ const data = await publicApi.getSettlementHistory(instType, instFamily, uly);
22542
+ return toResult(data);
22543
+ } catch (e) {
22544
+ return toError(e);
22545
+ }
22546
+ }
22547
+ );
22548
+ server.tool(
22549
+ "okx_get_public_block_trades",
22550
+ "## \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",
22551
+ {
22552
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\u3002\u5FC5\u586B")
22553
+ },
22554
+ async ({ instId }) => {
22555
+ try {
22556
+ const data = await publicApi.getPublicBlockTrades(instId);
22557
+ const enriched = data.map((item) => ({
22558
+ ...item,
22559
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
22560
+ }));
22561
+ return toResult(enriched);
22562
+ } catch (e) {
22563
+ return toError(e);
22564
+ }
22565
+ }
22566
+ );
22280
22567
  }
22281
22568
 
22282
22569
  // src/tools/account.ts
@@ -23154,6 +23441,51 @@ function registerTradingTools(server, auth) {
23154
23441
  }
23155
23442
  }
23156
23443
  );
23444
+ server.tool(
23445
+ "okx_get_one_click_repay_list",
23446
+ "## \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",
23447
+ {},
23448
+ async () => {
23449
+ if (!auth) return toError(AUTH_REQUIRED);
23450
+ try {
23451
+ const data = await privateApi.getOneClickRepayCurrencyList(auth);
23452
+ return toResult(data);
23453
+ } catch (e) {
23454
+ return toError(e);
23455
+ }
23456
+ }
23457
+ );
23458
+ server.tool(
23459
+ "okx_one_click_repay",
23460
+ "## \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",
23461
+ {
23462
+ ccy: external_exports.string().describe("\u8FD8\u6B3E\u4F7F\u7528\u7684\u5E01\u79CD\u3002\u5FC5\u586B"),
23463
+ repayCcy: external_exports.string().describe("\u8981\u507F\u8FD8\u7684\u503A\u52A1\u5E01\u79CD\u3002\u5FC5\u586B")
23464
+ },
23465
+ async ({ ccy, repayCcy }) => {
23466
+ if (!auth) return toError(AUTH_REQUIRED);
23467
+ try {
23468
+ const data = await privateApi.oneClickRepay(auth, { ccy, repayCcy });
23469
+ return toResult(data);
23470
+ } catch (e) {
23471
+ return toError(e);
23472
+ }
23473
+ }
23474
+ );
23475
+ server.tool(
23476
+ "okx_get_one_click_repay_history",
23477
+ "## \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",
23478
+ {},
23479
+ async () => {
23480
+ if (!auth) return toError(AUTH_REQUIRED);
23481
+ try {
23482
+ const data = await privateApi.getOneClickRepayHistory(auth);
23483
+ return toResult(data);
23484
+ } catch (e) {
23485
+ return toError(e);
23486
+ }
23487
+ }
23488
+ );
23157
23489
  }
23158
23490
 
23159
23491
  // src/tools/algo.ts
@@ -23435,6 +23767,95 @@ function registerFundingTools(server, auth) {
23435
23767
  }
23436
23768
  }
23437
23769
  );
23770
+ server.tool(
23771
+ "okx_get_non_tradable_assets",
23772
+ "## \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",
23773
+ {},
23774
+ async () => {
23775
+ if (!auth) return toError(AUTH_REQUIRED);
23776
+ try {
23777
+ const data = await privateApi.getNonTradableAssets(auth);
23778
+ return toResult(data);
23779
+ } catch (e) {
23780
+ return toError(e);
23781
+ }
23782
+ }
23783
+ );
23784
+ server.tool(
23785
+ "okx_get_exchange_list",
23786
+ "## \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",
23787
+ {},
23788
+ async () => {
23789
+ try {
23790
+ const data = await privateApi.getExchangeList();
23791
+ return toResult(data);
23792
+ } catch (e) {
23793
+ return toError(e);
23794
+ }
23795
+ }
23796
+ );
23797
+ server.tool(
23798
+ "okx_get_deposit_withdraw_status",
23799
+ "## \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",
23800
+ {},
23801
+ async () => {
23802
+ if (!auth) return toError(AUTH_REQUIRED);
23803
+ try {
23804
+ const data = await privateApi.getDepositWithdrawStatus(auth);
23805
+ return toResult(data);
23806
+ } catch (e) {
23807
+ return toError(e);
23808
+ }
23809
+ }
23810
+ );
23811
+ server.tool(
23812
+ "okx_get_asset_bills_history",
23813
+ "## \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",
23814
+ {
23815
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
23816
+ },
23817
+ async ({ limit }) => {
23818
+ if (!auth) return toError(AUTH_REQUIRED);
23819
+ try {
23820
+ const data = await privateApi.getAssetBillsHistory(auth, limit);
23821
+ return toResult(data);
23822
+ } catch (e) {
23823
+ return toError(e);
23824
+ }
23825
+ }
23826
+ );
23827
+ server.tool(
23828
+ "okx_get_convert_currency_pair",
23829
+ "## \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",
23830
+ {},
23831
+ async () => {
23832
+ if (!auth) return toError(AUTH_REQUIRED);
23833
+ try {
23834
+ const data = await privateApi.getConvertCurrencyPair(auth);
23835
+ return toResult(data);
23836
+ } catch (e) {
23837
+ return toError(e);
23838
+ }
23839
+ }
23840
+ );
23841
+ server.tool(
23842
+ "okx_get_convert_estimate_quote",
23843
+ "## \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",
23844
+ {
23845
+ fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\u3002\u5FC5\u586B"),
23846
+ toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\u3002\u5FC5\u586B"),
23847
+ sz: external_exports.string().describe("\u5151\u6362\u6570\u91CF\u3002\u5FC5\u586B")
23848
+ },
23849
+ async ({ fromCcy, toCcy, sz }) => {
23850
+ if (!auth) return toError(AUTH_REQUIRED);
23851
+ try {
23852
+ const data = await privateApi.getConvertEstimateQuote(auth, { fromCcy, toCcy, sz });
23853
+ return toResult(data);
23854
+ } catch (e) {
23855
+ return toError(e);
23856
+ }
23857
+ }
23858
+ );
23438
23859
  }
23439
23860
 
23440
23861
  // src/tools/stats.ts
@@ -24015,6 +24436,39 @@ function registerSubAccountTools(server, auth) {
24015
24436
  }
24016
24437
  }
24017
24438
  );
24439
+ server.tool(
24440
+ "okx_create_subaccount",
24441
+ "## \u529F\u80FD\uFF1A\u521B\u5EFA\u65B0\u7684\u5B50\u8D26\u6237\n## \u573A\u666F\uFF1A\u7528\u4E8E\u521B\u5EFA\u5B50\u8D26\u6237\u7BA1\u7406\u591A\u4E2A\u4EA4\u6613\u7B56\u7565\u3001\u9694\u79BB\u8D44\u91D1\u548C\u98CE\u9669\n## \u5173\u952E\u8BCD\uFF1A\u521B\u5EFA\u5B50\u8D26\u6237, create subaccount, \u65B0\u589E\u5B50\u8D26\u53F7\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - label: \u5B50\u8D26\u6237\u5907\u6CE8\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u7BA1\u7406\uFF09- \u5C06\u521B\u5EFA\u65B0\u5B50\u8D26\u6237\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u521B\u5EFA\u5B50\u8D26\u6237\u5F71\u54CD\u8D26\u6237\u7ED3\u6784\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u521B\u5EFA \u2192 okx_list_subaccounts \u67E5\u770B \u2192 okx_create_subaccount_api_key \u8BBE\u7F6EAPI",
24442
+ {
24443
+ subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
24444
+ label: external_exports.string().optional().describe("\u5B50\u8D26\u6237\u5907\u6CE8")
24445
+ },
24446
+ async ({ subAcct, label }) => {
24447
+ if (!auth) return toError(AUTH_REQUIRED);
24448
+ try {
24449
+ const body = { subAcct };
24450
+ if (label) body.label = label;
24451
+ const data = await privateApi.createSubAccount(auth, body);
24452
+ return toResult(data);
24453
+ } catch (e) {
24454
+ return toError(e);
24455
+ }
24456
+ }
24457
+ );
24458
+ server.tool(
24459
+ "okx_get_entrust_subaccount_list",
24460
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u59D4\u6258\u5B50\u8D26\u6237\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6258\u7BA1\u5B50\u8D26\u6237\u3001\u7BA1\u7406\u59D4\u6258\u4EA4\u6613\u6743\u9650\n## \u5173\u952E\u8BCD\uFF1A\u59D4\u6258\u5B50\u8D26\u6237, entrust subaccount, \u6258\u7BA1\u8D26\u6237, \u59D4\u6258\u7BA1\u7406\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\u59D4\u6258\u5B50\u8D26\u6237 \u2192 \u7BA1\u7406\u5B50\u8D26\u6237\u6743\u9650",
24461
+ {},
24462
+ async () => {
24463
+ if (!auth) return toError(AUTH_REQUIRED);
24464
+ try {
24465
+ const data = await privateApi.getEntrustSubAccountList(auth);
24466
+ return toResult(data);
24467
+ } catch (e) {
24468
+ return toError(e);
24469
+ }
24470
+ }
24471
+ );
24018
24472
  }
24019
24473
 
24020
24474
  // src/tools/finance.ts
@@ -24333,6 +24787,49 @@ function registerOutcomesTools(server) {
24333
24787
  }
24334
24788
  }
24335
24789
  );
24790
+ server.tool(
24791
+ "okx_get_event_series",
24792
+ "## \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",
24793
+ {},
24794
+ async () => {
24795
+ try {
24796
+ const data = await publicApi.getEventSeries();
24797
+ return toResult(data);
24798
+ } catch (e) {
24799
+ return toError(e);
24800
+ }
24801
+ }
24802
+ );
24803
+ server.tool(
24804
+ "okx_get_event_markets",
24805
+ "## \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",
24806
+ {
24807
+ seriesId: external_exports.string().describe("\u4E8B\u4EF6\u7CFB\u5217ID\u3002\u5FC5\u586B")
24808
+ },
24809
+ async ({ seriesId }) => {
24810
+ try {
24811
+ const data = await publicApi.getEventMarkets(seriesId);
24812
+ return toResult(data);
24813
+ } catch (e) {
24814
+ return toError(e);
24815
+ }
24816
+ }
24817
+ );
24818
+ server.tool(
24819
+ "okx_get_event_events",
24820
+ "## \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",
24821
+ {
24822
+ seriesId: external_exports.string().describe("\u4E8B\u4EF6\u7CFB\u5217ID\u3002\u5FC5\u586B")
24823
+ },
24824
+ async ({ seriesId }) => {
24825
+ try {
24826
+ const data = await publicApi.getEventEvents(seriesId);
24827
+ return toResult(data);
24828
+ } catch (e) {
24829
+ return toError(e);
24830
+ }
24831
+ }
24832
+ );
24336
24833
  }
24337
24834
 
24338
24835
  // src/tools/bot.ts
@@ -24806,6 +25303,77 @@ function registerSpreadTools(server, auth) {
24806
25303
  }
24807
25304
  }
24808
25305
  );
25306
+ server.tool(
25307
+ "okx_get_spread_orders_pending",
25308
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EF7\u5DEE\u5408\u7EA6\u5F53\u524D\u6302\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u4EF7\u5DEE\u5408\u7EA6\u7684\u672A\u6210\u4EA4\u8BA2\u5355\u5217\u8868\u3001\u76D1\u63A7\u6302\u5355\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u6302\u5355, spread pending, \u4EF7\u5DEE\u59D4\u6258, \u4EF7\u5DEE\u672A\u6210\u4EA4\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\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 ~2KB\n## \u5173\u8054\uFF1Aokx_place_spread_order \u4E0B\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u770B \u2192 okx_cancel_spread_order \u64A4\u9500",
25309
+ {
25310
+ sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID")
25311
+ },
25312
+ async ({ sprdId }) => {
25313
+ if (!auth) return toError(AUTH_REQUIRED);
25314
+ try {
25315
+ const data = await privateApi.getSpreadOrdersPending(auth, sprdId);
25316
+ return toResult(data);
25317
+ } catch (e) {
25318
+ return toError(e);
25319
+ }
25320
+ }
25321
+ );
25322
+ server.tool(
25323
+ "okx_get_spread_orders_history_archive",
25324
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EF7\u5DEE\u5408\u7EA6\u5F52\u6863\u5386\u53F2\u8BA2\u5355\uFF083\u4E2A\u6708\u524D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u957F\u671F\u590D\u76D8\u4EF7\u5DEE\u4EA4\u6613\u3001\u5E74\u5EA6\u4EA4\u6613\u7EDF\u8BA1\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u5F52\u6863, spread archive, \u4EF7\u5DEE\u5386\u53F2\u5F52\u6863, \u4EF7\u5DEE\u5B58\u6863\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_spread_orders_history \u67E5\u8FD1\u671F \u2192 \u672C\u5DE5\u5177\u67E5\u5F52\u6863 \u2192 \u5B8C\u6574\u590D\u76D8",
25325
+ {
25326
+ sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID")
25327
+ },
25328
+ async ({ sprdId }) => {
25329
+ if (!auth) return toError(AUTH_REQUIRED);
25330
+ try {
25331
+ const data = await privateApi.getSpreadOrdersHistoryArchive(auth, sprdId);
25332
+ return toResult(data);
25333
+ } catch (e) {
25334
+ return toError(e);
25335
+ }
25336
+ }
25337
+ );
25338
+ server.tool(
25339
+ "okx_get_spread_trades_public",
25340
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u516C\u5F00\u6210\u4EA4\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u65E0\u9700\u9274\u6743\u67E5\u770B\u4EF7\u5DEE\u5E02\u573A\u7684\u6210\u4EA4\u60C5\u51B5\u3001\u5206\u6790\u4EF7\u683C\u8D70\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u516C\u5F00\u6210\u4EA4, spread public trades, \u516C\u5F00\u6210\u4EA4, \u4EF7\u5DEE\u6210\u4EA4\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\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 ~2KB\n## \u5173\u8054\uFF1Aokx_get_spread_trades \u770B\u5E26\u8BE6\u60C5\u6210\u4EA4 \u2192 \u672C\u5DE5\u5177\u516C\u5F00\u67E5\u8BE2",
25341
+ {
25342
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B")
25343
+ },
25344
+ async ({ sprdId }) => {
25345
+ try {
25346
+ const data = await publicApi.getSpreadPublicTrades(sprdId);
25347
+ const enriched = data.map((item) => ({
25348
+ ...item,
25349
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
25350
+ }));
25351
+ return toResult(enriched);
25352
+ } catch (e) {
25353
+ return toError(e);
25354
+ }
25355
+ }
25356
+ );
25357
+ server.tool(
25358
+ "okx_get_spread_trades_fills",
25359
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u7684\u6210\u4EA4\u660E\u7EC6\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u4EF7\u5DEE\u8BA2\u5355\u7684\u9010\u7B14\u6210\u4EA4\u8BB0\u5F55\u3001\u6838\u5BF9\u6210\u4EA4\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u6210\u4EA4\u660E\u7EC6, spread fills, \u4EF7\u5DEE\u9010\u7B14, \u4EF7\u5DEE\u6210\u4EA4\u8BB0\u5F55\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_spread_orders \u67E5\u8BA2\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u6210\u4EA4 \u2192 \u6838\u7B97\u6210\u672C",
25360
+ {
25361
+ sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID")
25362
+ },
25363
+ async ({ sprdId }) => {
25364
+ if (!auth) return toError(AUTH_REQUIRED);
25365
+ try {
25366
+ const data = await privateApi.getSpreadTradeFills(auth, sprdId);
25367
+ const enriched = data.map((item) => ({
25368
+ ...item,
25369
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
25370
+ }));
25371
+ return toResult(enriched);
25372
+ } catch (e) {
25373
+ return toError(e);
25374
+ }
25375
+ }
25376
+ );
24809
25377
  }
24810
25378
 
24811
25379
  // src/tools/copy.ts
@@ -25304,6 +25872,156 @@ function registerRfqTools(server, auth) {
25304
25872
  );
25305
25873
  }
25306
25874
 
25875
+ // src/tools/affiliate.ts
25876
+ function registerAffiliateTools(server, auth) {
25877
+ server.tool(
25878
+ "okx_get_affiliate_invitee_list",
25879
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u9080\u8BF7\u7684\u7528\u6237\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u63A8\u5E7F\u5458\u67E5\u770B\u9080\u8BF7\u4E86\u54EA\u4E9B\u7528\u6237\u3001\u7EDF\u8BA1\u63A8\u5E7F\u6548\u679C\n## \u5173\u952E\u8BCD\uFF1A\u63A8\u5E7F\u5217\u8868, invitee list, \u9080\u8BF7\u5217\u8868, \u63A8\u5E7F\u5927\u4F7F\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\u9080\u8BF7\u5217\u8868 \u2192 okx_get_affiliate_performance \u67E5\u770B\u63A8\u5E7F\u7EE9\u6548",
25880
+ {},
25881
+ async () => {
25882
+ if (!auth) return toError(AUTH_REQUIRED);
25883
+ try {
25884
+ const data = await privateApi.getAffiliateInviteeList(auth);
25885
+ return toResult(data);
25886
+ } catch (e) {
25887
+ return toError(e);
25888
+ }
25889
+ }
25890
+ );
25891
+ server.tool(
25892
+ "okx_get_affiliate_invitee_detail",
25893
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u9080\u8BF7\u7684\u67D0\u4E2A\u7528\u6237\u8BE6\u7EC6\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u7279\u5B9A\u88AB\u9080\u8BF7\u7528\u6237\u7684\u4EA4\u6613\u91CF\u548C\u8FD4\u4F63\u8BE6\u60C5\n## \u5173\u952E\u8BCD\uFF1A\u9080\u8BF7\u8BE6\u60C5, invitee detail, \u63A8\u5E7F\u660E\u7EC6, \u7528\u6237\u8BE6\u60C5\n## \u53C2\u6570\uFF1A\n## - uid: \u7528\u6237ID\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 ~2KB\n## \u5173\u8054\uFF1Aokx_get_affiliate_invitee_list \u83B7\u53D6\u7528\u6237\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u67E5\u8BE6\u60C5",
25894
+ {
25895
+ uid: external_exports.string().optional().describe("\u7528\u6237ID")
25896
+ },
25897
+ async ({ uid }) => {
25898
+ if (!auth) return toError(AUTH_REQUIRED);
25899
+ try {
25900
+ const data = await privateApi.getAffiliateInviteeDetail(auth, uid);
25901
+ return toResult(data);
25902
+ } catch (e) {
25903
+ return toError(e);
25904
+ }
25905
+ }
25906
+ );
25907
+ server.tool(
25908
+ "okx_get_affiliate_link_list",
25909
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u94FE\u63A5\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5DF2\u521B\u5EFA\u7684\u63A8\u5E7F\u94FE\u63A5\u3001\u7BA1\u7406\u63A8\u5E7F\u6E20\u9053\n## \u5173\u952E\u8BCD\uFF1A\u63A8\u5E7F\u94FE\u63A5, affiliate link, \u9080\u8BF7\u94FE\u63A5, \u63A8\u5E7F\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\u94FE\u63A5 \u2192 \u5206\u4EAB\u7ED9\u7528\u6237 \u2192 \u8FFD\u8E2A\u63A8\u5E7F\u6548\u679C",
25910
+ {},
25911
+ async () => {
25912
+ if (!auth) return toError(AUTH_REQUIRED);
25913
+ try {
25914
+ const data = await privateApi.getAffiliateLinkList(auth);
25915
+ return toResult(data);
25916
+ } catch (e) {
25917
+ return toError(e);
25918
+ }
25919
+ }
25920
+ );
25921
+ server.tool(
25922
+ "okx_get_affiliate_performance",
25923
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u7EE9\u6548\u6C47\u603B\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u63A8\u5E7F\u6536\u76CA\u3001\u4EA4\u6613\u91CF\u3001\u8FD4\u4F63\u6BD4\u4F8B\u7B49\u6838\u5FC3\u6570\u636E\n## \u5173\u952E\u8BCD\uFF1A\u63A8\u5E7F\u7EE9\u6548, affiliate performance, \u63A8\u5E7F\u6536\u76CA, \u8FD4\u4F63, \u4F63\u91D1\u7EDF\u8BA1\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\u603B\u7EE9\u6548 \u2192 okx_get_affiliate_invitee_list \u770B\u660E\u7EC6 \u2192 \u4F18\u5316\u63A8\u5E7F\u7B56\u7565",
25924
+ {},
25925
+ async () => {
25926
+ if (!auth) return toError(AUTH_REQUIRED);
25927
+ try {
25928
+ const data = await privateApi.getAffiliatePerformance(auth);
25929
+ return toResult(data);
25930
+ } catch (e) {
25931
+ return toError(e);
25932
+ }
25933
+ }
25934
+ );
25935
+ server.tool(
25936
+ "okx_get_co_inviter_list",
25937
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u8054\u5408\u9080\u8BF7\u4EBA\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5408\u4F5C\u63A8\u5E7F\u7684\u8054\u5408\u9080\u8BF7\u4EBA\n## \u5173\u952E\u8BCD\uFF1A\u8054\u5408\u9080\u8BF7, co-inviter, \u5408\u4F5C\u63A8\u5E7F, \u5408\u9080\u5217\u8868\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\u8054\u5408\u9080\u8BF7\u4EBA \u2192 \u7BA1\u7406\u5408\u4F5C\u63A8\u5E7F\u5173\u7CFB",
25938
+ {},
25939
+ async () => {
25940
+ if (!auth) return toError(AUTH_REQUIRED);
25941
+ try {
25942
+ const data = await privateApi.getAffiliateCoInviterList(auth);
25943
+ return toResult(data);
25944
+ } catch (e) {
25945
+ return toError(e);
25946
+ }
25947
+ }
25948
+ );
25949
+ server.tool(
25950
+ "okx_get_sub_affiliate_list",
25951
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4E0B\u7EA7\u63A8\u5E7F\u5458\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u81EA\u5DF1\u7684\u4E0B\u7EA7\u63A8\u5E7F\u5458\u3001\u7BA1\u7406\u63A8\u5E7F\u56E2\u961F\n## \u5173\u952E\u8BCD\uFF1A\u4E0B\u7EA7\u63A8\u5E7F, sub affiliate, \u4E0B\u7EA7\u4EE3\u7406, \u63A8\u5E7F\u56E2\u961F\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\u4E0B\u7EA7\u63A8\u5E7F\u5458 \u2192 \u7BA1\u7406\u63A8\u5E7F\u56E2\u961F \u2192 \u5E26\u52A8\u56E2\u961F\u4E1A\u7EE9",
25952
+ {},
25953
+ async () => {
25954
+ if (!auth) return toError(AUTH_REQUIRED);
25955
+ try {
25956
+ const data = await privateApi.getAffiliateSubAffiliateList(auth);
25957
+ return toResult(data);
25958
+ } catch (e) {
25959
+ return toError(e);
25960
+ }
25961
+ }
25962
+ );
25963
+ }
25964
+
25965
+ // src/tools/fiat.ts
25966
+ function registerFiatTools(server, auth) {
25967
+ server.tool(
25968
+ "okx_get_fiat_buy_sell_pair",
25969
+ "## \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",
25970
+ {},
25971
+ async () => {
25972
+ if (!auth) return toError(AUTH_REQUIRED);
25973
+ try {
25974
+ const data = await privateApi.getFiatBuySellPair(auth);
25975
+ return toResult(data);
25976
+ } catch (e) {
25977
+ return toError(e);
25978
+ }
25979
+ }
25980
+ );
25981
+ server.tool(
25982
+ "okx_get_fiat_deposit",
25983
+ "## \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",
25984
+ {},
25985
+ async () => {
25986
+ if (!auth) return toError(AUTH_REQUIRED);
25987
+ try {
25988
+ const data = await privateApi.getFiatDeposit(auth);
25989
+ return toResult(data);
25990
+ } catch (e) {
25991
+ return toError(e);
25992
+ }
25993
+ }
25994
+ );
25995
+ server.tool(
25996
+ "okx_get_fiat_deposit_orders",
25997
+ "## \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",
25998
+ {},
25999
+ async () => {
26000
+ if (!auth) return toError(AUTH_REQUIRED);
26001
+ try {
26002
+ const data = await privateApi.getFiatDepositOrderHistory(auth);
26003
+ return toResult(data);
26004
+ } catch (e) {
26005
+ return toError(e);
26006
+ }
26007
+ }
26008
+ );
26009
+ server.tool(
26010
+ "okx_get_fiat_deposit_methods",
26011
+ "## \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",
26012
+ {},
26013
+ async () => {
26014
+ if (!auth) return toError(AUTH_REQUIRED);
26015
+ try {
26016
+ const data = await privateApi.getFiatDepositPaymentMethods(auth);
26017
+ return toResult(data);
26018
+ } catch (e) {
26019
+ return toError(e);
26020
+ }
26021
+ }
26022
+ );
26023
+ }
26024
+
25307
26025
  // src/index.ts
25308
26026
  async function main() {
25309
26027
  const server = new McpServer({ name: "hvip", version: "0.2.1" });
@@ -25322,6 +26040,8 @@ async function main() {
25322
26040
  registerFundingTools(server, auth);
25323
26041
  registerSubAccountTools(server, auth);
25324
26042
  registerFinanceTools(server, auth);
26043
+ registerAffiliateTools(server, auth);
26044
+ registerFiatTools(server, auth);
25325
26045
  registerRfqTools(server, auth);
25326
26046
  const transport = new StdioServerTransport();
25327
26047
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.25",
3
+ "version": "0.2.27",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",