hvip-mcp-server 0.2.17 → 0.2.18

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 +228 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21195,7 +21195,13 @@ var publicApi = {
21195
21195
  getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } }),
21196
21196
  getTopTradersContractLSRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/top-traders-contract-ls-ratio", { params: { ccy, begin, end } }),
21197
21197
  getContractsTakerVolume: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/contracts-taker-volume", { params: { ccy, begin, end } }),
21198
- getContractsLongShortRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/long-short-ratio", { params: { ccy, begin, end } })
21198
+ getContractsLongShortRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/long-short-ratio", { params: { ccy, begin, end } }),
21199
+ // ── 公共数据(第三批新增) ──────────────────────────────────────────────────
21200
+ getPlatform24Volume: () => request("GET", "/api/v5/market/platform-24-volume"),
21201
+ getCallAuctionDetails: (instId) => request("GET", "/api/v5/market/call-auction-details", { params: { instId } }),
21202
+ getOptionInstrumentFamilyTrades: (instFamily, limit) => request("GET", "/api/v5/market/option/instrument-family-trades", { params: { instFamily, limit } }),
21203
+ getOptionTrades: (instFamily, instId, limit) => request("GET", "/api/v5/public/option-trades", { params: { instFamily, instId, limit } }),
21204
+ getExchangeRate: () => request("GET", "/api/v5/market/exchange-rate")
21199
21205
  };
21200
21206
  var privateApi = {
21201
21207
  getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
@@ -21275,7 +21281,14 @@ var privateApi = {
21275
21281
  orderPrecheck: (auth, body) => request("POST", "/api/v5/trade/order-precheck", { body, auth }),
21276
21282
  getAccountRateLimit: (auth) => request("GET", "/api/v5/trade/account-rate-limit", { auth }),
21277
21283
  easyConvert: (auth, body) => request("POST", "/api/v5/trade/easy-convert", { body, auth }),
21278
- getEasyConvertHistory: (auth, after, before, limit) => request("GET", "/api/v5/trade/easy-convert-history", { params: { after, before, limit }, auth })
21284
+ getEasyConvertHistory: (auth, after, before, limit) => request("GET", "/api/v5/trade/easy-convert-history", { params: { after, before, limit }, auth }),
21285
+ // ── 账户+资金(第四批新增) ──────────────────────────────────────────────────
21286
+ setPositionMode: (auth, body) => request("POST", "/api/v5/account/set-position-mode", { body, auth }),
21287
+ getAssetValuation: (auth, ccy) => request("GET", "/api/v5/asset/asset-valuation", { params: { ccy }, auth }),
21288
+ getConvertCurrencies: (auth) => request("GET", "/api/v5/asset/convert/currencies", { auth }),
21289
+ convertTrade: (auth, body) => request("POST", "/api/v5/asset/convert/trade", { body, auth }),
21290
+ getSubAccountFundingBalance: (auth, subAcct) => request("GET", "/api/v5/asset/subaccount/balances", { params: { subAcct }, auth }),
21291
+ setSubAccountTransferOut: (auth, body) => request("POST", "/api/v5/users/subaccount/set-transfer-out", { body, auth })
21279
21292
  };
21280
21293
 
21281
21294
  // src/adapters/hrails.ts
@@ -21973,6 +21986,112 @@ function registerPublicTools(server) {
21973
21986
  }
21974
21987
  }
21975
21988
  );
21989
+ server.tool(
21990
+ "okx_get_platform_24_volume",
21991
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u5E73\u53F024\u5C0F\u65F6\u603B\u4EA4\u6613\u91CF\uFF08\u73B0\u8D27+\u5408\u7EA6+\u671F\u6743\u5408\u8BA1\uFF09\uFF0C\u4E0D\u542B\u7279\u5B9A\u5E01\u79CD\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BC4\u4F30\u4EA4\u6613\u6240\u6574\u4F53\u6D3B\u8DC3\u5EA6\u3001\u5224\u65AD\u5E02\u573A\u70ED\u5EA6\u9AD8\u4F4E\u3001\u76D1\u63A7\u5E73\u53F0\u4EA4\u6613\u91CF\u53D8\u5316\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u5E73\u53F0\u4EA4\u6613\u91CF, 24\u5C0F\u65F6\u4EA4\u6613\u91CF, platform volume, \u603B\u6210\u4EA4\u91CF, \u5E02\u573A\u70ED\u5EA6, \u5168\u5E73\u53F0\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\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u5168\u5E73\u53F0\u70ED\u5EA6 \u2192 okx_get_ticker \u770B\u5177\u4F53\u4EA7\u54C1 \u2192 okx_get_tickers \u626B\u63CF\u5E02\u573A",
21992
+ {},
21993
+ async () => {
21994
+ try {
21995
+ const data = await publicApi.getPlatform24Volume();
21996
+ const enriched = data.map((item) => ({
21997
+ ...item,
21998
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
21999
+ }));
22000
+ return toResult(enriched);
22001
+ } catch (e) {
22002
+ return toError(e);
22003
+ }
22004
+ }
22005
+ );
22006
+ server.tool(
22007
+ "okx_get_call_auction_details",
22008
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EA7\u54C1\u96C6\u5408\u7ADE\u4EF7\u8BE6\u60C5\uFF0C\u542B\u5F53\u524D\u7ADE\u4EF7\u7684\u672A\u5339\u914D\u91CF\u548C\u53C2\u8003\u4EF7\u683C\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5F00\u76D8\u524D/\u76D8\u524D\u4EA4\u6613\u65F6\u6BB5\u67E5\u770B\u96C6\u5408\u7ADE\u4EF7\u4F9B\u9700\u3001\u5224\u65AD\u5F00\u76D8\u4EF7\u683C\u533A\u95F4\u3001\u53D1\u73B0\u5F02\u5E38\u7ADE\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u96C6\u5408\u7ADE\u4EF7, call auction, \u7ADE\u4EF7\u8BE6\u60C5, \u5F00\u76D8\u7ADE\u4EF7, \u76D8\u524D\u7ADE\u4EF7, \u672A\u5339\u914D\u91CF\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\u5355\u4EA7\u54C1 ~500B \u2014 \u5FAE\u5C0F\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u7ADE\u4EF7 \u2192 okx_get_ticker \u770B\u5F00\u76D8\u4EF7 \u2192 \u5F00\u76D8\u540E okx_get_candles \u8DDF\u8E2A\u8D70\u52BF",
22009
+ {
22010
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B")
22011
+ },
22012
+ async ({ instId }) => {
22013
+ try {
22014
+ const data = await publicApi.getCallAuctionDetails(instId);
22015
+ const enriched = data.map((item) => ({
22016
+ ...item,
22017
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0,
22018
+ auctionEndTimeIso: item.auctionEndTime ? new Date(parseInt(item.auctionEndTime)).toISOString() : void 0
22019
+ }));
22020
+ return toResult(enriched);
22021
+ } catch (e) {
22022
+ return toError(e);
22023
+ }
22024
+ }
22025
+ );
22026
+ server.tool(
22027
+ "okx_get_option_instrument_family_trades",
22028
+ `## \u529F\u80FD\uFF1A\u6309\u4EA7\u54C1\u65CF\u83B7\u53D6\u671F\u6743\u94FE\u6700\u65B0\u6210\u4EA4\uFF08\u6309\u671F\u6743\u7C7B\u578B\u5F52\u7EC4\uFF09
22029
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u6D4F\u89C8\u67D0BTC/ETH\u671F\u6743\u94FE\u6574\u4F53\u6210\u4EA4\u6982\u51B5\u3001\u5BF9\u6BD4\u770B\u6DA8/\u770B\u8DCC\u6210\u4EA4\u5206\u5E03\u3001\u53D1\u73B0\u5927\u989D\u671F\u6743\u5F02\u52A8
22030
+ ## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u65CF\u6210\u4EA4, option family trades, \u671F\u6743\u94FE\u6210\u4EA4, \u671F\u6743\u6210\u4EA4\u6982\u51B5, \u671F\u6743\u6210\u4EA4\u6C47\u603B
22031
+ ## \u53C2\u6570\uFF1A
22032
+ ## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B
22033
+ ## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u90E8
22034
+ ## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
22035
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22036
+ ## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
22037
+ ## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_instruments(instType=OPTION) \u83B7\u53D6\u671F\u6743\u4EA7\u54C1 \u2192 \u672C\u5DE5\u5177\u770B\u65CF\u6210\u4EA4 \u2192 okx_get_option_trades \u770B\u5355\u7B14`,
22038
+ {
22039
+ instFamily: external_exports.string().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B"),
22040
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570")
22041
+ },
22042
+ async ({ instFamily, limit }) => {
22043
+ try {
22044
+ const data = await publicApi.getOptionInstrumentFamilyTrades(instFamily, limit);
22045
+ return toResult(data);
22046
+ } catch (e) {
22047
+ return toError(e);
22048
+ }
22049
+ }
22050
+ );
22051
+ server.tool(
22052
+ "okx_get_option_trades",
22053
+ `## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u9010\u7B14\u6210\u4EA4\u8BB0\u5F55
22054
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u5177\u4F53\u671F\u6743\u5408\u7EA6\u7684\u6210\u4EA4\u4EF7\u91CF\u5206\u5E03\u3001\u5224\u65AD\u4E3B\u52A8\u4E70\u5356\u65B9\u5411\u3001\u8DDF\u8E2A\u671F\u6743\u5927\u5355
22055
+ ## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u6210\u4EA4, option trades, \u9010\u7B14\u671F\u6743\u6210\u4EA4, \u671F\u6743\u660E\u7EC6, \u671F\u6743\u5927\u5355, option fill
22056
+ ## \u53C2\u6570\uFF1A
22057
+ ## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u4E0EinstId\u4E8C\u9009\u4E00
22058
+ ## - instId: \u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u4E0EinstFamily\u4E8C\u9009\u4E00
22059
+ ## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u5927100
22060
+ ## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
22061
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22062
+ ## \u8FD4\u56DE\u91CF\uFF1A100\u6761 ~5KB \u2014 \u4E2D\u7B49
22063
+ ## \u5173\u8054\uFF1Aokx_get_option_instrument_family_trades \u770B\u65CF\u6982\u51B5 \u2192 \u672C\u5DE5\u5177\u770B\u9010\u7B14 \u2192 okx_get_opt_summary \u770B\u6CE2\u52A8\u7387`,
22064
+ {
22065
+ instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u4E0EinstId\u4E8C\u9009\u4E00"),
22066
+ instId: external_exports.string().optional().describe("\u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u4E0EinstFamily\u4E8C\u9009\u4E00"),
22067
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22068
+ },
22069
+ async ({ instFamily, instId, limit }) => {
22070
+ try {
22071
+ const data = await publicApi.getOptionTrades(instFamily, instId, limit);
22072
+ const enriched = data.map((item) => ({
22073
+ ...item,
22074
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
22075
+ }));
22076
+ return toResult(enriched);
22077
+ } catch (e) {
22078
+ return toError(e);
22079
+ }
22080
+ }
22081
+ );
22082
+ server.tool(
22083
+ "okx_get_exchange_rate",
22084
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u5E73\u53F0\u652F\u6301\u7684\u6CD5\u5B9A\u8D27\u5E01\u6C47\u7387\uFF08\u5982USD/CNY\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06\u7F8E\u5143\u8BA1\u4EF7\u76C8\u4E8F\u6362\u7B97\u4E3A\u672C\u5730\u6CD5\u5E01\u3001\u8BA1\u7B97\u6CD5\u5E01\u51FA\u5165\u91D1\u91D1\u989D\n## \u5173\u952E\u8BCD\uFF1A\u6C47\u7387, exchange rate, \u6CD5\u5E01\u6C47\u7387, USD/CNY, \u7F8E\u5143\u6C47\u7387, \u4EBA\u6C11\u5E01\u6C47\u7387\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\u5FAE\u5C0F ~100B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u6C47\u7387 \u2192 \u8F85\u52A9\u8BA1\u7B97\u76C8\u4E8F \u2192 \u7528\u6237\u4E86\u89E3\u672C\u5730\u6CD5\u5E01\u4EF7\u503C",
22085
+ {},
22086
+ async () => {
22087
+ try {
22088
+ const data = await publicApi.getExchangeRate();
22089
+ return toResult(data);
22090
+ } catch (e) {
22091
+ return toError(e);
22092
+ }
22093
+ }
22094
+ );
21976
22095
  server.tool(
21977
22096
  "okx_search_instruments",
21978
22097
  "## \u529F\u80FD\uFF1A\u6309\u5173\u952E\u8BCD\u641C\u7D22\u53EF\u4EA4\u6613\u4EA7\u54C1\uFF08\u73B0\u8D27/\u5408\u7EA6/\u671F\u6743\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7528\u6237\u8F93\u5165\u4EA7\u54C1\u540D\u79F0\u6A21\u7CCA\u67E5\u627E instId\u3001\u53D1\u73B0\u65B0\u4EA7\u54C1\u3001\u786E\u8BA4\u67D0\u5E01\u79CD\u6709\u54EA\u4E9B\u53EF\u4EA4\u6613\u4EA7\u54C1\n## \u5173\u952E\u8BCD\uFF1A\u641C\u7D22, \u67E5\u627E\u4EA7\u54C1, search instruments, \u4EA7\u54C1\u641C\u7D22, \u6A21\u7CCA\u67E5\u8BE2, \u5E01\u79CD\u641C\u7D22, find instrument\n## \u53C2\u6570\uFF1A\n## - keyword: \u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u5982 BTC\u3001ETH\u3001SOL\u3002\u5FC5\u586B\uFF0C\u6700\u5C112\u5B57\u7B26\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009\u3002\u4E0D\u586B\u5219\u641C\u7D22\u5168\u90E8\u7C7B\u578B\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 \u2014 \u6700\u591A\u8FD4\u56DE top 20 \u5339\u914D\u7ED3\u679C\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u641C\u7D22\u4EA7\u54C1 \u2192 okx_get_ticker \u67E5\u884C\u60C5 \u2192 okx_place_order \u4E0B\u5355",
@@ -22224,6 +22343,80 @@ function registerAccountTools(server, auth) {
22224
22343
  }
22225
22344
  }
22226
22345
  );
22346
+ server.tool(
22347
+ "okx_set_position_mode",
22348
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u6301\u4ED3\u6A21\u5F0F\uFF08\u5355\u5411\u6301\u4ED3/\u53CC\u5411\u6301\u4ED3\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5207\u6362\u6301\u4ED3\u6A21\u5F0F\uFF08\u5982\u4ECE\u5355\u5411\u5207\u5230\u53CC\u5411\u652F\u6301\u540C\u65F6\u505A\u591A\u7A7A\uFF09\u3001\u5F00\u5355\u524D\u786E\u8BA4\u6301\u4ED3\u6A21\u5F0F\u6B63\u786E\n## \u5173\u952E\u8BCD\uFF1A\u6301\u4ED3\u6A21\u5F0F, \u6301\u4ED3\u65B9\u5411, position mode, \u53CC\u5411\u6301\u4ED3, \u5355\u5411\u6301\u4ED3, \u9501\u4ED3\n## \u53C2\u6570\uFF1A\n## - posMode: \u6301\u4ED3\u6A21\u5F0F\u3002long_short_mode=\u53CC\u5411\u6301\u4ED3, net_mode=\u5355\u5411\u6301\u4ED3\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539\u8D26\u6237\u914D\u7F6E\uFF0C\u5F71\u54CD\u6240\u6709\u5408\u7EA6/\u6760\u6746\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_account_config \u770B\u5F53\u524D\u6A21\u5F0F \u2192 \u672C\u5DE5\u5177\u5207\u6362 \u2192 \u8C03 okx_set_leverage \u8BBE\u6760\u6746",
22349
+ {
22350
+ posMode: external_exports.enum(["long_short_mode", "net_mode"]).describe("\u6301\u4ED3\u6A21\u5F0F\u3002long_short_mode=\u53CC\u5411\u6301\u4ED3, net_mode=\u5355\u5411\u6301\u4ED3")
22351
+ },
22352
+ async ({ posMode }) => {
22353
+ if (!auth) return toError(AUTH_REQUIRED);
22354
+ try {
22355
+ const data = await privateApi.setPositionMode(auth, { posMode });
22356
+ return toResult(data);
22357
+ } catch (e) {
22358
+ return toError(e);
22359
+ }
22360
+ }
22361
+ );
22362
+ server.tool(
22363
+ "okx_get_asset_valuation",
22364
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u8D26\u6237\u603B\u8D44\u4EA7\u4F30\u503C\uFF08\u542B\u4EA4\u6613\u8D26\u6237\u548C\u8D44\u91D1\u8D26\u6237\u603B\u6743\u76CA\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u603B\u8D44\u4EA7\u6982\u51B5\u3001\u6309\u5E01\u79CD\u7EDF\u8BA1\u6301\u4ED3\u4EF7\u503C\u3001\u6838\u5BF9\u8D26\u6237\u603B\u6743\u76CA\u53D8\u5316\n## \u5173\u952E\u8BCD\uFF1A\u8D44\u4EA7\u4F30\u503C, \u603B\u8D44\u4EA7, asset valuation, \u8D26\u6237\u603B\u6743\u76CA, \u8D44\u4EA7\u6982\u51B5\n## \u53C2\u6570\uFF1A\n## - ccy: \u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USD\u3001CNY\u3002\u4E0D\u586B\u9ED8\u8BA4\u6309\u6240\u6709\u5E01\u79CD\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u603B\u8D44\u4EA7 \u2192 okx_get_balance \u770B\u4EA4\u6613\u8D26\u6237 \u2192 okx_get_funding_balance \u770B\u8D44\u91D1\u8D26\u6237",
22365
+ {
22366
+ ccy: external_exports.string().optional().describe("\u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USD\u3001CNY\u3002\u4E0D\u586B\u9ED8\u8BA4\u6309\u6240\u6709\u5E01\u79CD")
22367
+ },
22368
+ async ({ ccy }) => {
22369
+ if (!auth) return toError(AUTH_REQUIRED);
22370
+ try {
22371
+ const data = await privateApi.getAssetValuation(auth, ccy);
22372
+ return toResult(data);
22373
+ } catch (e) {
22374
+ return toError(e);
22375
+ }
22376
+ }
22377
+ );
22378
+ server.tool(
22379
+ "okx_get_convert_currencies",
22380
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u652F\u6301\u7684\u4E00\u952E\u5151\u6362\u5E01\u79CD\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5728\u95EA\u5151\u524D\u67E5\u770B\u652F\u6301\u54EA\u4E9B\u5151\u6362\u5BF9\u3001\u786E\u8BA4\u76EE\u6807\u5E01\u79CD\u662F\u5426\u53EF\u5151\u6362\n## \u5173\u952E\u8BCD\uFF1A\u5151\u6362\u5E01\u79CD, convert currencies, \u95EA\u5151\u5217\u8868, \u5151\u6362\u652F\u6301, \u53EF\u5151\u6362\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\u53EF\u5151\u6362\u5E01\u79CD \u2192 okx_convert_trade \u6267\u884C\u5151\u6362 \u2192 okx_get_easy_convert_history \u67E5\u8BB0\u5F55",
22381
+ {},
22382
+ async () => {
22383
+ if (!auth) return toError(AUTH_REQUIRED);
22384
+ try {
22385
+ const data = await privateApi.getConvertCurrencies(auth);
22386
+ return toResult(data);
22387
+ } catch (e) {
22388
+ return toError(e);
22389
+ }
22390
+ }
22391
+ );
22392
+ server.tool(
22393
+ "okx_convert_trade",
22394
+ `## \u529F\u80FD\uFF1A\u6267\u884C\u8D44\u4EA7\u5151\u6362\uFF08\u5C06\u4E00\u79CD\u8D44\u4EA7\u76F4\u63A5\u6362\u6210\u53E6\u4E00\u79CD\uFF0C\u5982 USDT\u2192BTC\uFF09
22395
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u6362\u5E01\u3001\u5C0F\u989D\u8D44\u4EA7\u5151\u6362\u3001\u65E0\u9700\u6302\u5355\u7684\u5373\u65F6\u5151\u6362
22396
+ ## \u5173\u952E\u8BCD\uFF1A\u5151\u6362, convert trade, \u8D44\u4EA7\u5151\u6362, \u6362\u5E01, \u4E00\u952E\u5151\u6362, \u95EA\u5151
22397
+ ## \u53C2\u6570\uFF1A
22398
+ ## - fromCcy: \u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B
22399
+ ## - toCcy: \u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B
22400
+ ## - sz: \u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B
22401
+ ## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u5151\u6362\u65B9\u5411\u548C\u6570\u91CF
22402
+ ## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u4EA7\u751F\u771F\u5B9E\u5151\u6362\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
22403
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
22404
+ ## \u5173\u8054\uFF1Aokx_get_convert_currencies \u67E5\u652F\u6301\u5E01\u79CD \u2192 \u672C\u5DE5\u5177\u5151\u6362 \u2192 okx_get_balance \u786E\u8BA4\u5230\u8D26`,
22405
+ {
22406
+ fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B"),
22407
+ toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B"),
22408
+ sz: external_exports.string().describe("\u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B")
22409
+ },
22410
+ async ({ fromCcy, toCcy, sz }) => {
22411
+ if (!auth) return toError(AUTH_REQUIRED);
22412
+ try {
22413
+ const data = await privateApi.convertTrade(auth, { fromCcy, toCcy, sz });
22414
+ return toResult(data);
22415
+ } catch (e) {
22416
+ return toError(e);
22417
+ }
22418
+ }
22419
+ );
22227
22420
  server.tool(
22228
22421
  "okx_get_margin_balance",
22229
22422
  "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u67D0\u4EA7\u54C1\u7684\u4FDD\u8BC1\u91D1\u4F59\u989D\u8BE6\u60C5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6760\u6746/\u5408\u7EA6\u4EA4\u6613\u524D\u67E5\u770B\u53EF\u7528\u4FDD\u8BC1\u91D1\u3001\u5360\u7528\u4FDD\u8BC1\u91D1\u3001\u4FDD\u8BC1\u91D1\u7387\n## \u5173\u952E\u8BCD\uFF1A\u4FDD\u8BC1\u91D1\u4F59\u989D, \u4FDD\u8BC1\u91D1\u7387, margin balance, \u53EF\u7528\u4FDD\u8BC1\u91D1, \u5360\u7528\u4FDD\u8BC1\u91D1\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\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 ~500B\n## \u5173\u8054\uFF1Aokx_get_balance \u67E5\u603B\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u4FDD\u8BC1\u91D1 \u2192 okx_get_positions \u67E5\u6301\u4ED3",
@@ -23121,6 +23314,39 @@ function registerSubAccountTools(server, auth) {
23121
23314
  }
23122
23315
  }
23123
23316
  );
23317
+ server.tool(
23318
+ "okx_subaccount_set_transfer_out",
23319
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u8F6C\u51FA\u6743\u9650\n## \u573A\u666F\uFF1A\u7528\u4E8E\u63A7\u5236\u5B50\u8D26\u6237\u662F\u5426\u53EF\u4EE5\u5411\u5916\u90E8\u8F6C\u51FA\u8D44\u91D1\u3001\u7BA1\u7406\u591A\u7B56\u7565\u8D26\u6237\u7684\u8D44\u91D1\u6743\u9650\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u8F6C\u51FA, \u8F6C\u51FA\u6743\u9650, set transfer out, \u5B50\u8D26\u6237\u6743\u9650, \u98CE\u63A7, \u8D44\u91D1\u7BA1\u7406\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - canTransferOut: \u662F\u5426\u5141\u8BB8\u8F6C\u51FA\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u7BA1\u7406\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539\u5B50\u8D26\u6237\u6743\u9650\uFF0C\u5F71\u54CD\u8D44\u91D1\u5B89\u5168\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~200B\n## \u5173\u8054\uFF1Aokx_list_subaccounts \u83B7\u53D6\u5B50\u8D26\u6237\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u7BA1\u7406\u6743\u9650 \u2192 okx_transfer_subaccount \u5212\u8F6C",
23320
+ {
23321
+ subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
23322
+ canTransferOut: external_exports.boolean().describe("\u662F\u5426\u5141\u8BB8\u8F6C\u51FA\u3002true=\u5141\u8BB8, false=\u7981\u6B62")
23323
+ },
23324
+ async ({ subAcct, canTransferOut }) => {
23325
+ if (!auth) return toError(AUTH_REQUIRED);
23326
+ try {
23327
+ const data = await privateApi.setSubAccountTransferOut(auth, { subAcct, canTransOut: canTransferOut });
23328
+ return toResult(data);
23329
+ } catch (e) {
23330
+ return toError(e);
23331
+ }
23332
+ }
23333
+ );
23334
+ server.tool(
23335
+ "okx_get_subaccount_assets",
23336
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u8D26\u6237\u4F59\u989D\uFF08\u975E\u4EA4\u6613\u8D26\u6237\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5B50\u8D26\u6237\u7684\u5145\u503C\u8D44\u91D1\u3001\u786E\u8BA4\u5B50\u8D26\u6237\u8D44\u91D1\u8D26\u6237\u8D44\u4EA7\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u8D44\u4EA7, subaccount assets, \u5B50\u8D26\u6237\u8D44\u91D1, \u5B50\u8D26\u6237\u4F59\u989D, \u5B50\u8D26\u53F7\u8D44\u91D1\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981\u4E3B\u8D26\u6237 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_subaccount_balance \u770B\u4EA4\u6613\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u770B\u8D44\u91D1\u4F59\u989D \u2192 \u7EFC\u5408\u8BC4\u4F30\u5B50\u8D26\u6237\u8D44\u4EA7",
23337
+ {
23338
+ subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B")
23339
+ },
23340
+ async ({ subAcct }) => {
23341
+ if (!auth) return toError(AUTH_REQUIRED);
23342
+ try {
23343
+ const data = await privateApi.getSubAccountFundingBalance(auth, subAcct);
23344
+ return toResult(data);
23345
+ } catch (e) {
23346
+ return toError(e);
23347
+ }
23348
+ }
23349
+ );
23124
23350
  }
23125
23351
 
23126
23352
  // src/tools/finance.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.17",
3
+ "version": "0.2.18",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",