hvip-mcp-server 0.2.29 → 0.2.31

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 +535 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21428,7 +21428,46 @@ var privateApi = {
21428
21428
  getUnrealizedProfitSharing: (auth) => request("GET", "/api/v5/copytrading/unrealized-profit-sharing-details", { auth }),
21429
21429
  getTotalUnrealizedProfitSharing: (auth) => request("GET", "/api/v5/copytrading/total-unrealized-profit-sharing", { auth }),
21430
21430
  amendProfitSharingRatio: (auth, body) => request("POST", "/api/v5/copytrading/amend-profit-sharing-ratio", { body, auth }),
21431
- amendCopySettings: (auth, body) => request("POST", "/api/v5/copytrading/amend-copy-settings", { body, auth })
21431
+ amendCopySettings: (auth, body) => request("POST", "/api/v5/copytrading/amend-copy-settings", { body, auth }),
21432
+ // ── 第一批快收尾 ──────────────────────────────────────────────────────
21433
+ resetRfqMmp: (auth) => request("POST", "/api/v5/rfq/mmp-reset", { auth }),
21434
+ stopCopyTrading: (auth, body) => request("POST", "/api/v5/copytrading/stop-copy-trading", { body, auth }),
21435
+ getPublicPreferenceCurrency: (uniqueCode) => request("GET", "/api/v5/copytrading/public-preference-currency", { params: { uniqueCode } }),
21436
+ getPublicLeadPositions: (uniqueCode, instType) => request("GET", "/api/v5/copytrading/public-current-subpositions", { params: { uniqueCode, instType } }),
21437
+ // ── 第二批 account ────────────────────────────────────────────────────
21438
+ getAccountPositionRisk: (auth) => request("GET", "/api/v5/account/account-position-risk", { auth }),
21439
+ getInterestLimits: (auth) => request("GET", "/api/v5/account/interest-limits", { auth }),
21440
+ getTradeFee: (auth, instType, instId, uly) => request("GET", "/api/v5/account/trade-fee", { params: { instType, instId, uly }, auth }),
21441
+ getAccountSubtypes: (auth) => request("GET", "/api/v5/account/subtypes", { auth }),
21442
+ getSubAccountTradingBalance: (auth, subAcct) => request("GET", "/api/v5/account/subaccount/balances", { params: { subAcct }, auth }),
21443
+ presetAccountSwitch: (auth, body) => request("POST", "/api/v5/account/account-level-switch-preset", { body, auth }),
21444
+ activateOption: (auth, body) => request("POST", "/api/v5/account/activate-option", { body, auth }),
21445
+ positionBuilder: (auth, body) => request("POST", "/api/v5/account/position-builder", { body, auth }),
21446
+ setAutoEarn: (auth, body) => request("POST", "/api/v5/account/set-auto-earn", { body, auth }),
21447
+ setFeeType: (auth, body) => request("POST", "/api/v5/account/set-fee-type", { body, auth }),
21448
+ setSettleCurrency: (auth, body) => request("POST", "/api/v5/account/set-settle-currency", { body, auth }),
21449
+ getPositionBuilderGraph: (auth) => request("GET", "/api/v5/account/position-builder-graph", { auth }),
21450
+ precheckDeltaNeutral: (auth, body) => request("POST", "/api/v5/account/precheck-set-delta-neutral", { body, auth }),
21451
+ // ── 第三批 finance ────────────────────────────────────────────────────
21452
+ adjustFlexibleLoanCollateral: (auth, body) => request("POST", "/api/v5/finance/flexible-loan/adjust-collateral", { body, auth }),
21453
+ purchaseSavings: (auth, body) => request("POST", "/api/v5/finance/savings/purchase-redempt", { body, auth }),
21454
+ getSfpDcdProducts: (auth) => request("GET", "/api/v5/finance/sfp/dcd/products", { auth }),
21455
+ redeemSfpDcd: (auth, body) => request("POST", "/api/v5/finance/sfp/dcd/redeem", { body, auth }),
21456
+ getStakingActiveOrders: (auth) => request("GET", "/api/v5/finance/staking-defi/orders-active", { auth }),
21457
+ cancelRedeemEthStaking: (auth, body) => request("POST", "/api/v5/finance/staking-defi/eth/cancel-redeem", { body, auth }),
21458
+ purchaseSolStaking: (auth, body) => request("POST", "/api/v5/finance/staking-defi/sol/purchase", { body, auth }),
21459
+ redeemSolStaking: (auth, body) => request("POST", "/api/v5/finance/staking-defi/sol/redeem", { body, auth }),
21460
+ // ── 最终批 ────────────────────────────────────────────────────────────
21461
+ getRiskState: (auth) => request("GET", "/api/v5/account/risk-state", { auth }),
21462
+ borrowRepay: (auth, body) => request("POST", "/api/v5/account/borrow-repay", { body, auth }),
21463
+ getBorrowRepayHistory: (auth) => request("GET", "/api/v5/account/borrow-repay-history", { auth }),
21464
+ getFlexibleLoanCollateralAssets: (auth) => request("GET", "/api/v5/finance/flexible-loan/collateral-assets", { auth }),
21465
+ getFlexibleLoanInfo: (auth) => request("GET", "/api/v5/finance/flexible-loan/loan-info", { auth }),
21466
+ getFlexibleLoanHistory: (auth) => request("GET", "/api/v5/finance/flexible-loan/loan-history", { auth }),
21467
+ getStableRewardsProductInfo: (auth) => request("GET", "/api/v5/finance/stable-rewards/product-info", { auth }),
21468
+ getStableRewardsQuote: (auth, body) => request("POST", "/api/v5/finance/stable-rewards/quote", { body, auth }),
21469
+ getEasyConvertCurrencyList: (auth) => request("GET", "/api/v5/trade/easy-convert-currency-list", { auth }),
21470
+ getOneClickRepayCurrencyList: (auth) => request("GET", "/api/v5/trade/one-click-repay-currency-list", { auth })
21432
21471
  };
21433
21472
 
21434
21473
  // src/adapters/hrails.ts
@@ -22995,6 +23034,256 @@ function registerAccountTools(server, auth) {
22995
23034
  }
22996
23035
  }
22997
23036
  );
23037
+ server.tool(
23038
+ "okx_get_account_position_risk",
23039
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D26\u6237\u6301\u4ED3\u98CE\u9669\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BC4\u4F30\u8D26\u6237\u6574\u4F53\u98CE\u9669\u655E\u53E3\u3001\u67E5\u770B\u5404\u4EA7\u54C1\u7684\u98CE\u9669\u7387\n## \u5173\u952E\u8BCD\uFF1A\u6301\u4ED3\u98CE\u9669, position risk, \u98CE\u9669\u655E\u53E3, \u8D26\u6237\u98CE\u63A7\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\u67E5\u98CE\u9669 \u2192 okx_get_positions \u67E5\u6301\u4ED3 \u2192 \u8C03\u6574\u98CE\u9669\u7BA1\u7406",
23040
+ {},
23041
+ async () => {
23042
+ if (!auth) return toError(AUTH_REQUIRED);
23043
+ try {
23044
+ const data = await privateApi.getAccountPositionRisk(auth);
23045
+ return toResult(data);
23046
+ } catch (e) {
23047
+ return toError(e);
23048
+ }
23049
+ }
23050
+ );
23051
+ server.tool(
23052
+ "okx_get_interest_limits",
23053
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5404\u5E01\u79CD\u7684\u5229\u606F\u9650\u989D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5404\u5E01\u79CD\u7684\u514D\u606F\u989D\u5EA6\u548C\u5229\u606F\u4E0A\u9650\n## \u5173\u952E\u8BCD\uFF1A\u5229\u606F\u9650\u989D, interest limits, \u514D\u606F\u989D\u5EA6, \u5229\u606F\u4E0A\u9650\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\u9650\u989D \u2192 okx_get_interest_accrued \u770B\u5DF2\u8BA1\u606F \u2192 \u7BA1\u7406\u501F\u8D37",
23054
+ {},
23055
+ async () => {
23056
+ if (!auth) return toError(AUTH_REQUIRED);
23057
+ try {
23058
+ const data = await privateApi.getInterestLimits(auth);
23059
+ return toResult(data);
23060
+ } catch (e) {
23061
+ return toError(e);
23062
+ }
23063
+ }
23064
+ );
23065
+ server.tool(
23066
+ "okx_get_account_subtypes",
23067
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D26\u6237\u5B50\u7C7B\u578B\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u8D26\u6237\u7684\u5B50\u7C7B\u578B\u5206\u7C7B\u548C\u914D\u7F6E\n## \u5173\u952E\u8BCD\uFF1A\u8D26\u6237\u5B50\u7C7B\u578B, account subtypes, \u8D26\u6237\u5206\u7C7B\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\u8D26\u6237\u7C7B\u578B \u2192 \u4E86\u89E3\u4EA4\u6613\u6743\u9650",
23068
+ {},
23069
+ async () => {
23070
+ if (!auth) return toError(AUTH_REQUIRED);
23071
+ try {
23072
+ const data = await privateApi.getAccountSubtypes(auth);
23073
+ return toResult(data);
23074
+ } catch (e) {
23075
+ return toError(e);
23076
+ }
23077
+ }
23078
+ );
23079
+ server.tool(
23080
+ "okx_get_subaccount_trading_balance",
23081
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684\u4EA4\u6613\u8D26\u6237\u4F59\u989D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5B50\u8D26\u6237\u7684\u4EA4\u6613\u8D44\u91D1\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u4EA4\u6613\u4F59\u989D, subaccount trading, \u5B50\u8D26\u6237\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\uFF1A\u672C\u5DE5\u5177\u67E5\u5B50\u8D26\u6237\u4EA4\u6613\u4F59\u989D \u2192 okx_get_subaccount_assets \u67E5\u8D44\u91D1\u4F59\u989D",
23082
+ {
23083
+ subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B")
23084
+ },
23085
+ async ({ subAcct }) => {
23086
+ if (!auth) return toError(AUTH_REQUIRED);
23087
+ try {
23088
+ const data = await privateApi.getSubAccountTradingBalance(auth, subAcct);
23089
+ return toResult(data);
23090
+ } catch (e) {
23091
+ return toError(e);
23092
+ }
23093
+ }
23094
+ );
23095
+ server.tool(
23096
+ "okx_preset_account_switch",
23097
+ "## \u529F\u80FD\uFF1A\u9884\u8BBE\u8D26\u6237\u6A21\u5F0F\u5207\u6362\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5728\u5207\u6362\u8D26\u6237\u6A21\u5F0F\u524D\u9884\u8BBE\u53C2\u6570\n## \u53C2\u6570\uFF1A\n## - acctLv: \u76EE\u6807\u8D26\u6237\u5C42\u7EA7\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u9884\u8BBE\u8D26\u6237\u6A21\u5F0F\u5207\u6362\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u5F71\u54CD\u8D26\u6237\u914D\u7F6E\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u9884\u8BBE \u2192 okx_set_account_mode \u6267\u884C\u5207\u6362",
23098
+ {
23099
+ acctLv: external_exports.string().describe("\u76EE\u6807\u8D26\u6237\u5C42\u7EA7\u3002\u5FC5\u586B")
23100
+ },
23101
+ async ({ acctLv }) => {
23102
+ if (!auth) return toError(AUTH_REQUIRED);
23103
+ try {
23104
+ const data = await privateApi.presetAccountSwitch(auth, { acctLv });
23105
+ return toResult(data);
23106
+ } catch (e) {
23107
+ return toError(e);
23108
+ }
23109
+ }
23110
+ );
23111
+ server.tool(
23112
+ "okx_activate_option",
23113
+ "## \u529F\u80FD\uFF1A\u6FC0\u6D3B\u671F\u6743\u4EA4\u6613\u6743\u9650\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5F00\u901A\u671F\u6743\u4EA4\u6613\u529F\u80FD\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u6FC0\u6D3B, activate option, \u671F\u6743\u6743\u9650, \u5F00\u901A\u671F\u6743\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u6FC0\u6D3B\u671F\u6743\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u5F00\u901A\u671F\u6743\u540E\u6D89\u53CA\u590D\u6742\u4EA4\u6613\u54C1\u79CD\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u6FC0\u6D3B \u2192 okx_get_instruments \u67E5\u770B\u671F\u6743\u4EA7\u54C1 \u2192 \u4EA4\u6613\u671F\u6743",
23114
+ {},
23115
+ async () => {
23116
+ if (!auth) return toError(AUTH_REQUIRED);
23117
+ try {
23118
+ const data = await privateApi.activateOption(auth, {});
23119
+ return toResult(data);
23120
+ } catch (e) {
23121
+ return toError(e);
23122
+ }
23123
+ }
23124
+ );
23125
+ server.tool(
23126
+ "okx_position_builder",
23127
+ "## \u529F\u80FD\uFF1A\u7EC4\u5408\u4FDD\u8BC1\u91D1\u8BD5\u7B97\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6D4B\u8BD5\u4E0D\u540C\u6301\u4ED3\u7EC4\u5408\u4E0B\u7684\u4FDD\u8BC1\u91D1\u9700\u6C42\n## \u5173\u952E\u8BCD\uFF1A\u6301\u4ED3\u8BD5\u7B97, position builder, \u7EC4\u5408\u4FDD\u8BC1\u91D1, \u4FDD\u8BC1\u91D1\u4F30\u7B97\n## \u53C2\u6570\uFF1A\n## - body: \u8BD5\u7B97\u53C2\u6570JSON\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u8FDB\u884C\u4FDD\u8BC1\u91D1\u8BD5\u7B97\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u8BD5\u7B97\u64CD\u4F5C\u5F71\u54CD\u8D26\u6237\u72B6\u6001\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u8BD5\u7B97 \u2192 \u4F18\u5316\u6301\u4ED3\u7EC4\u5408 \u2192 \u964D\u4F4E\u4FDD\u8BC1\u91D1\u5360\u7528",
23128
+ {
23129
+ body: external_exports.string().describe("\u8BD5\u7B97\u53C2\u6570JSON\u5B57\u7B26\u4E32\u3002\u5FC5\u586B")
23130
+ },
23131
+ async ({ body }) => {
23132
+ if (!auth) return toError(AUTH_REQUIRED);
23133
+ try {
23134
+ const parsed = JSON.parse(body);
23135
+ const data = await privateApi.positionBuilder(auth, parsed);
23136
+ return toResult(data);
23137
+ } catch (e) {
23138
+ return toError(e);
23139
+ }
23140
+ }
23141
+ );
23142
+ server.tool(
23143
+ "okx_set_auto_earn",
23144
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u81EA\u52A8\u7406\u8D22\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5F00\u542F\u6216\u5173\u95ED\u95F2\u7F6E\u8D44\u91D1\u7684\u81EA\u52A8\u7406\u8D22\u529F\u80FD\n## \u5173\u952E\u8BCD\uFF1A\u81EA\u52A8\u7406\u8D22, auto earn, \u81EA\u52A8\u8D5A\u5E01, \u95F2\u7F6E\u8D44\u91D1\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\u3002\u5FC5\u586B\n## - autoEarn: \u662F\u5426\u5F00\u542F\u81EA\u52A8\u7406\u8D22\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u7406\u8D22\u8BBE\u7F6E\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u81EA\u52A8\u7406\u8D22\u8BBE\u7F6E\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u8BBE\u7F6E \u2192 okx_get_savings_balance \u67E5\u770B\u7406\u8D22\u4F59\u989D",
23145
+ {
23146
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
23147
+ autoEarn: external_exports.boolean().describe("\u662F\u5426\u5F00\u542F\u81EA\u52A8\u7406\u8D22\u3002true=\u5F00\u542F, false=\u5173\u95ED")
23148
+ },
23149
+ async ({ ccy, autoEarn }) => {
23150
+ if (!auth) return toError(AUTH_REQUIRED);
23151
+ try {
23152
+ const data = await privateApi.setAutoEarn(auth, { ccy, autoEarn });
23153
+ return toResult(data);
23154
+ } catch (e) {
23155
+ return toError(e);
23156
+ }
23157
+ }
23158
+ );
23159
+ server.tool(
23160
+ "okx_set_fee_type",
23161
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u624B\u7EED\u8D39\u7C7B\u578B\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5207\u6362\u8BA1\u8D39\u6A21\u5F0F\uFF08\u6309\u5F20/\u6309\u5E01\uFF09\n## \u5173\u952E\u8BCD\uFF1A\u624B\u7EED\u8D39\u7C7B\u578B, fee type, \u8BA1\u8D39\u6A21\u5F0F, \u8D39\u7387\u8BBE\u7F6E\n## \u53C2\u6570\uFF1A\n## - feeType: \u624B\u7EED\u8D39\u7C7B\u578B\u30020=\u6309\u5E01, 1=\u6309USDT\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u624B\u7EED\u8D39\u7C7B\u578B\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u8BA1\u8D39\u65B9\u5F0F\u5F71\u54CD\u4EA4\u6613\u6210\u672C\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_fee_rates \u770B\u5F53\u524D\u8D39\u7387 \u2192 \u672C\u5DE5\u5177\u5207\u7C7B\u578B \u2192 \u4F18\u5316\u6210\u672C",
23162
+ {
23163
+ feeType: external_exports.enum(["0", "1"]).describe("\u624B\u7EED\u8D39\u7C7B\u578B\u30020=\u6309\u5E01, 1=\u6309USDT")
23164
+ },
23165
+ async ({ feeType }) => {
23166
+ if (!auth) return toError(AUTH_REQUIRED);
23167
+ try {
23168
+ const data = await privateApi.setFeeType(auth, { feeType });
23169
+ return toResult(data);
23170
+ } catch (e) {
23171
+ return toError(e);
23172
+ }
23173
+ }
23174
+ );
23175
+ server.tool(
23176
+ "okx_set_settle_currency",
23177
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u8D26\u6237\u7ED3\u7B97\u5E01\u79CD\n## \u573A\u666F\uFF1A\u7528\u4E8E\u66F4\u6539\u8D26\u6237\u7684\u9ED8\u8BA4\u7ED3\u7B97\u8D27\u5E01\n## \u5173\u952E\u8BCD\uFF1A\u7ED3\u7B97\u5E01\u79CD, settle currency, \u9ED8\u8BA4\u7ED3\u7B97, \u8BA1\u4EF7\u5E01\u79CD\n## \u53C2\u6570\uFF1A\n## - ccy: \u7ED3\u7B97\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u7ED3\u7B97\u5E01\u79CD\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539\u7ED3\u7B97\u5E01\u79CD\u5F71\u54CD\u8D26\u6237\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u8BBE\u7F6E \u2192 okx_get_account_config \u786E\u8BA4\u53D8\u66F4\u751F\u6548",
23178
+ {
23179
+ ccy: external_exports.string().describe("\u7ED3\u7B97\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B")
23180
+ },
23181
+ async ({ ccy }) => {
23182
+ if (!auth) return toError(AUTH_REQUIRED);
23183
+ try {
23184
+ const data = await privateApi.setSettleCurrency(auth, { ccy });
23185
+ return toResult(data);
23186
+ } catch (e) {
23187
+ return toError(e);
23188
+ }
23189
+ }
23190
+ );
23191
+ server.tool(
23192
+ "okx_get_position_builder_graph",
23193
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u7EC4\u5408\u4FDD\u8BC1\u91D1\u8BD5\u7B97\u7ED3\u679C\u56FE\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u7EC4\u5408\u4FDD\u8BC1\u91D1\u6A21\u62DF\u7ED3\u679C\u7684\u56FE\u5F62\u6570\u636E\n## \u5173\u952E\u8BCD\uFF1A\u8BD5\u7B97\u56FE\u8868, position builder graph, \u4FDD\u8BC1\u91D1\u6A21\u62DF\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_position_builder \u8BD5\u7B97 \u2192 \u672C\u5DE5\u5177\u770B\u56FE\u8868 \u2192 \u4F18\u5316\u7EC4\u5408",
23194
+ {},
23195
+ async () => {
23196
+ if (!auth) return toError(AUTH_REQUIRED);
23197
+ try {
23198
+ const data = await privateApi.getPositionBuilderGraph(auth);
23199
+ return toResult(data);
23200
+ } catch (e) {
23201
+ return toError(e);
23202
+ }
23203
+ }
23204
+ );
23205
+ server.tool(
23206
+ "okx_precheck_delta_neutral",
23207
+ "## \u529F\u80FD\uFF1A\u9884\u68C0Delta\u4E2D\u6027\u8BBE\u7F6E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u68C0\u67E5\u671F\u6743\u6301\u4ED3\u7684Delta\u4E2D\u6027\u6761\u4EF6\n## \u5173\u952E\u8BCD\uFF1ADelta\u4E2D\u6027, delta neutral, \u671F\u6743\u5BF9\u51B2, \u65B9\u5411\u4E2D\u6027\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u9884\u68C0Delta\u4E2D\u6027\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u9884\u68C0\u64CD\u4F5C\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u9884\u68C0 \u2192 \u8C03\u6574\u671F\u6743\u6301\u4ED3 \u2192 \u5B9E\u73B0Delta\u4E2D\u6027",
23208
+ {},
23209
+ async () => {
23210
+ if (!auth) return toError(AUTH_REQUIRED);
23211
+ try {
23212
+ const data = await privateApi.precheckDeltaNeutral(auth, {});
23213
+ return toResult(data);
23214
+ } catch (e) {
23215
+ return toError(e);
23216
+ }
23217
+ }
23218
+ );
23219
+ server.tool(
23220
+ "okx_get_trade_fee",
23221
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EA4\u6613\u624B\u7EED\u8D39\uFF08\u6309\u4EA7\u54C1\u7EF4\u5EA6\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5177\u4F53\u4EA7\u54C1\u7684Maker/Taker\u8D39\u7387\n## \u5173\u952E\u8BCD\uFF1A\u4EA4\u6613\u624B\u7EED\u8D39, trade fee, maker taker, \u8D39\u7387\u67E5\u8BE2\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002\u53EF\u9009\n## - instId: \u4EA7\u54C1ID\u3002\u53EF\u9009\n## - uly: \u6807\u7684\u6307\u6570\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~1KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u4EA7\u54C1\u8D39\u7387 \u2192 okx_get_fee_rates \u770B\u8D26\u6237\u8D39\u7387 \u2192 \u8BC4\u4F30\u4EA4\u6613\u6210\u672C",
23222
+ {
23223
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23224
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID"),
23225
+ uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570")
23226
+ },
23227
+ async ({ instType, instId, uly }) => {
23228
+ if (!auth) return toError(AUTH_REQUIRED);
23229
+ try {
23230
+ const data = await privateApi.getTradeFee(auth, instType, instId, uly);
23231
+ return toResult(data);
23232
+ } catch (e) {
23233
+ return toError(e);
23234
+ }
23235
+ }
23236
+ );
23237
+ server.tool(
23238
+ "okx_get_risk_state",
23239
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D26\u6237\u98CE\u63A7\u72B6\u6001\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E86\u89E3\u8D26\u6237\u662F\u5426\u5B58\u5728\u98CE\u9669\u8B66\u544A\n## \u5173\u952E\u8BCD\uFF1A\u98CE\u63A7\u72B6\u6001, risk state, \u8D26\u6237\u98CE\u9669, \u5F3A\u5E73\u98CE\u9669\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\u98CE\u9669 \u2192 \u5F3A\u5E73\u9884\u8B66 \u2192 \u8C03\u6574\u4FDD\u8BC1\u91D1",
23240
+ {},
23241
+ async () => {
23242
+ if (!auth) return toError(AUTH_REQUIRED);
23243
+ try {
23244
+ const data = await privateApi.getRiskState(auth);
23245
+ return toResult(data);
23246
+ } catch (e) {
23247
+ return toError(e);
23248
+ }
23249
+ }
23250
+ );
23251
+ server.tool(
23252
+ "okx_borrow_repay",
23253
+ "## \u529F\u80FD\uFF1A\u501F\u5E01\u6216\u8FD8\u6B3E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u589E\u52A0\u501F\u6B3E\u6216\u507F\u8FD8\u503A\u52A1\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\u3002\u5FC5\u586B\n## - side: \u65B9\u5411\u3002borrow=\u501F\u5E01, repay=\u8FD8\u6B3E\u3002\u5FC5\u586B\n## - amt: \u6570\u91CF\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u64CD\u4F5C\u501F\u8D37\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u501F\u5165/\u507F\u8FD8\u8D44\u91D1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u64CD\u4F5C \u2192 okx_get_borrow_repay_history \u770B\u8BB0\u5F55",
23254
+ {
23255
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
23256
+ side: external_exports.enum(["borrow", "repay"]).describe("\u65B9\u5411\u3002borrow=\u501F\u5E01, repay=\u8FD8\u6B3E"),
23257
+ amt: external_exports.string().describe("\u6570\u91CF\u3002\u5FC5\u586B")
23258
+ },
23259
+ async ({ ccy, side, amt }) => {
23260
+ if (!auth) return toError(AUTH_REQUIRED);
23261
+ try {
23262
+ const data = await privateApi.borrowRepay(auth, { ccy, side, amt });
23263
+ return toResult(data);
23264
+ } catch (e) {
23265
+ return toError(e);
23266
+ }
23267
+ }
23268
+ );
23269
+ server.tool(
23270
+ "okx_get_borrow_repay_history",
23271
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u501F\u5E01\u8FD8\u6B3E\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2A\u501F\u8D37\u64CD\u4F5C\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u501F\u8D37\u5386\u53F2, borrow repay history, \u501F\u6B3E\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_borrow_repay \u64CD\u4F5C \u2192 \u672C\u5DE5\u5177\u67E5\u8BB0\u5F55",
23272
+ {},
23273
+ async () => {
23274
+ if (!auth) return toError(AUTH_REQUIRED);
23275
+ try {
23276
+ const data = await privateApi.getBorrowRepayHistory(auth);
23277
+ const enriched = data.map((item) => ({
23278
+ ...item,
23279
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
23280
+ }));
23281
+ return toResult(enriched);
23282
+ } catch (e) {
23283
+ return toError(e);
23284
+ }
23285
+ }
23286
+ );
22998
23287
  }
22999
23288
 
23000
23289
  // src/tools/trading.ts
@@ -23512,6 +23801,20 @@ function registerTradingTools(server, auth) {
23512
23801
  }
23513
23802
  }
23514
23803
  );
23804
+ server.tool(
23805
+ "okx_get_easy_convert_currency_list",
23806
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u95EA\u5151\u652F\u6301\u7684\u5E01\u79CD\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u54EA\u4E9B\u5E01\u79CD\u652F\u6301\u95EA\u5151\n## \u5173\u952E\u8BCD\uFF1A\u95EA\u5151\u5217\u8868, easy convert list, \u95EA\u5151\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\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB",
23807
+ {},
23808
+ async () => {
23809
+ if (!auth) return toError(AUTH_REQUIRED);
23810
+ try {
23811
+ const data = await privateApi.getEasyConvertCurrencyList(auth);
23812
+ return toResult(data);
23813
+ } catch (e) {
23814
+ return toError(e);
23815
+ }
23816
+ }
23817
+ );
23515
23818
  }
23516
23819
 
23517
23820
  // src/tools/algo.ts
@@ -24789,6 +25092,194 @@ function registerFinanceTools(server, auth) {
24789
25092
  }
24790
25093
  }
24791
25094
  );
25095
+ server.tool(
25096
+ "okx_purchase_savings",
25097
+ "## \u529F\u80FD\uFF1A\u7533\u8D2D\u6216\u8D4E\u56DE\u6D3B\u671F\u8D5A\u5E01\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06\u95F2\u7F6E\u8D44\u91D1\u5B58\u5165\u6D3B\u671F\u8D5A\u5E01\u83B7\u53D6\u6536\u76CA\u3001\u6216\u8D4E\u56DE\u8D5A\u5E01\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\u3002\u5FC5\u586B\n## - amt: \u7533\u8D2D\u6570\u91CF\u3002\u5FC5\u586B\n## - side: \u65B9\u5411\u3002purchase=\u7533\u8D2D, redempt=\u8D4E\u56DE\u3002\u5FC5\u586B\n## - rate: \u5229\u7387\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u64CD\u4F5C\u6D3B\u671F\u8D5A\u5E01\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u7533\u8D2D/\u8D4E\u56DE\u5F71\u54CD\u8D44\u91D1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_savings_balance \u770B\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u64CD\u4F5C \u2192 okx_get_savings_history \u786E\u8BA4",
25098
+ {
25099
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
25100
+ amt: external_exports.string().describe("\u7533\u8D2D\u6570\u91CF\u3002\u5FC5\u586B"),
25101
+ side: external_exports.enum(["purchase", "redempt"]).describe("\u65B9\u5411\u3002purchase=\u7533\u8D2D, redempt=\u8D4E\u56DE"),
25102
+ rate: external_exports.string().optional().describe("\u5229\u7387")
25103
+ },
25104
+ async ({ ccy, amt, side, rate }) => {
25105
+ if (!auth) return toError(AUTH_REQUIRED);
25106
+ try {
25107
+ const body = { ccy, amt, side };
25108
+ if (rate) body.rate = rate;
25109
+ const data = await privateApi.purchaseSavings(auth, body);
25110
+ return toResult(data);
25111
+ } catch (e) {
25112
+ return toError(e);
25113
+ }
25114
+ }
25115
+ );
25116
+ server.tool(
25117
+ "okx_get_sfp_products",
25118
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u9CA8\u9C7C\u9CCD\uFF08SFP\uFF09\u4EA7\u54C1\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u53EF\u8D2D\u4E70\u7684\u9CA8\u9C7C\u9CCD\u7ED3\u6784\u5316\u4EA7\u54C1\n## \u5173\u952E\u8BCD\uFF1A\u9CA8\u9C7C\u9CCD, SFP, sfp products, \u7ED3\u6784\u6027\u4EA7\u54C1\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\u67E5\u770B\u4EA7\u54C1 \u2192 \u9009\u62E9\u8D2D\u4E70 \u2192 \u7BA1\u7406\u6536\u76CA",
25119
+ {},
25120
+ async () => {
25121
+ if (!auth) return toError(AUTH_REQUIRED);
25122
+ try {
25123
+ const data = await privateApi.getSfpDcdProducts(auth);
25124
+ return toResult(data);
25125
+ } catch (e) {
25126
+ return toError(e);
25127
+ }
25128
+ }
25129
+ );
25130
+ server.tool(
25131
+ "okx_redeem_sfp",
25132
+ "## \u529F\u80FD\uFF1A\u8D4E\u56DE\u9CA8\u9C7C\u9CCD\uFF08SFP\uFF09\u4EA7\u54C1\n## \u573A\u666F\uFF1A\u7528\u4E8E\u63D0\u524D\u8D4E\u56DE\u9CA8\u9C7C\u9CCD\u7ED3\u6784\u6027\u4EA7\u54C1\n## \u5173\u952E\u8BCD\uFF1A\u8D4E\u56DESFP, redeem sfp, \u9CA8\u9C7C\u9CCD\u8D4E\u56DE\n## \u53C2\u6570\uFF1A\n## - productId: \u4EA7\u54C1ID\u3002\u5FC5\u586B\n## - amt: \u8D4E\u56DE\u6570\u91CF\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u8D4E\u56DE\u4EA7\u54C1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8D4E\u56DE\u5F71\u54CD\u8D44\u91D1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_sfp_products \u67E5\u770B\u4EA7\u54C1 \u2192 \u672C\u5DE5\u5177\u8D4E\u56DE \u2192 \u786E\u8BA4\u5230\u8D26",
25133
+ {
25134
+ productId: external_exports.string().describe("\u4EA7\u54C1ID\u3002\u5FC5\u586B"),
25135
+ amt: external_exports.string().describe("\u8D4E\u56DE\u6570\u91CF\u3002\u5FC5\u586B")
25136
+ },
25137
+ async ({ productId, amt }) => {
25138
+ if (!auth) return toError(AUTH_REQUIRED);
25139
+ try {
25140
+ const data = await privateApi.redeemSfpDcd(auth, { productId, amt });
25141
+ return toResult(data);
25142
+ } catch (e) {
25143
+ return toError(e);
25144
+ }
25145
+ }
25146
+ );
25147
+ server.tool(
25148
+ "okx_get_staking_active_orders",
25149
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u6D3B\u8DC3\u7684\u8D28\u62BC\u8BA2\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6B63\u5728\u7533\u8D2D\u6216\u8D4E\u56DE\u4E2D\u7684\u8D28\u62BC\u8BA2\u5355\n## \u5173\u952E\u8BCD\uFF1A\u8D28\u62BC\u6D3B\u8DC3\u8BA2\u5355, active orders, \u8D28\u62BC\u8FDB\u884C\u4E2D\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\u770B\u6D3B\u8DC3\u8BA2\u5355 \u2192 okx_get_staking_orders \u770B\u5168\u90E8 \u2192 \u7BA1\u7406\u8D28\u62BC",
25150
+ {},
25151
+ async () => {
25152
+ if (!auth) return toError(AUTH_REQUIRED);
25153
+ try {
25154
+ const data = await privateApi.getStakingActiveOrders(auth);
25155
+ return toResult(data);
25156
+ } catch (e) {
25157
+ return toError(e);
25158
+ }
25159
+ }
25160
+ );
25161
+ server.tool(
25162
+ "okx_cancel_redeem_eth",
25163
+ "## \u529F\u80FD\uFF1A\u53D6\u6D88ETH\u8D28\u62BC\u7684\u8D4E\u56DE\u8BF7\u6C42\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5728\u8D4E\u56DE\u786E\u8BA4\u524D\u53D6\u6D88\u8D4E\u56DE\u64CD\u4F5C\n## \u5173\u952E\u8BCD\uFF1A\u53D6\u6D88\u8D4E\u56DE, cancel redeem, \u53D6\u6D88ETH\u8D4E\u56DE\n## \u53C2\u6570\uFF1A\n## - amt: \u53D6\u6D88\u8D4E\u56DE\u6570\u91CF\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u53D6\u6D88\u8D4E\u56DE\u8BF7\u6C42\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u53D6\u6D88\u8D4E\u56DE\u540EETH\u5C06\u7EE7\u7EED\u8D28\u62BC\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_stake_eth \u8D28\u62BC \u2192 \u672C\u5DE5\u5177\u53D6\u6D88\u8D4E\u56DE \u2192 ETH\u7EE7\u7EED\u751F\u606F",
25164
+ {
25165
+ amt: external_exports.string().describe("\u53D6\u6D88\u8D4E\u56DE\u6570\u91CF\u3002\u5FC5\u586B")
25166
+ },
25167
+ async ({ amt }) => {
25168
+ if (!auth) return toError(AUTH_REQUIRED);
25169
+ try {
25170
+ const data = await privateApi.cancelRedeemEthStaking(auth, { amt });
25171
+ return toResult(data);
25172
+ } catch (e) {
25173
+ return toError(e);
25174
+ }
25175
+ }
25176
+ );
25177
+ server.tool(
25178
+ "okx_purchase_sol_staking",
25179
+ "## \u529F\u80FD\uFF1A\u7533\u8D2DSOL\u94FE\u4E0A\u8D28\u62BC\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06SOL\u5B58\u5165\u8D28\u62BC\u4EE5\u8D5A\u53D6\u6536\u76CA\n## \u5173\u952E\u8BCD\uFF1ASOL\u8D28\u62BC, stake sol, SOL\u7533\u8D2D, \u8D28\u62BCSOL\n## \u53C2\u6570\uFF1A\n## - amt: \u8D28\u62BC\u6570\u91CF\uFF08SOL\uFF09\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u7533\u8D2DSOL\u8D28\u62BC\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8D28\u62BCSOL\u540E\u9700\u7B49\u5F85\u8D4E\u56DE\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_sol_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u7533\u8D2D \u2192 okx_get_staking_orders \u786E\u8BA4",
25180
+ {
25181
+ amt: external_exports.string().describe("\u8D28\u62BC\u6570\u91CF\uFF08SOL\uFF09\u3002\u5FC5\u586B")
25182
+ },
25183
+ async ({ amt }) => {
25184
+ if (!auth) return toError(AUTH_REQUIRED);
25185
+ try {
25186
+ const data = await privateApi.purchaseSolStaking(auth, { amt });
25187
+ return toResult(data);
25188
+ } catch (e) {
25189
+ return toError(e);
25190
+ }
25191
+ }
25192
+ );
25193
+ server.tool(
25194
+ "okx_redeem_sol_staking",
25195
+ "## \u529F\u80FD\uFF1A\u8D4E\u56DESOL\u94FE\u4E0A\u8D28\u62BC\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06\u8D28\u62BC\u7684SOL\u8D4E\u56DE\n## \u5173\u952E\u8BCD\uFF1A\u8D4E\u56DESOL, redeem sol, SOL\u89E3\u8D28\u62BC\n## \u53C2\u6570\uFF1A\n## - amt: \u8D4E\u56DE\u6570\u91CF\uFF08SOL\uFF09\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u8D4E\u56DESOL\u8D28\u62BC\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8D4E\u56DESOL\u9700\u7B49\u5F85\u94FE\u4E0A\u786E\u8BA4\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_sol_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u8D4E\u56DE \u2192 \u786E\u8BA4\u5230\u8D26",
25196
+ {
25197
+ amt: external_exports.string().describe("\u8D4E\u56DE\u6570\u91CF\uFF08SOL\uFF09\u3002\u5FC5\u586B")
25198
+ },
25199
+ async ({ amt }) => {
25200
+ if (!auth) return toError(AUTH_REQUIRED);
25201
+ try {
25202
+ const data = await privateApi.redeemSolStaking(auth, { amt });
25203
+ return toResult(data);
25204
+ } catch (e) {
25205
+ return toError(e);
25206
+ }
25207
+ }
25208
+ );
25209
+ server.tool(
25210
+ "okx_adjust_collateral",
25211
+ "## \u529F\u80FD\uFF1A\u8C03\u6574\u7075\u6D3B\u501F\u8D37\u7684\u62B5\u62BC\u54C1\n## \u573A\u666F\uFF1A\u7528\u4E8E\u589E\u52A0\u6216\u51CF\u5C11\u7075\u6D3B\u501F\u8D37\u7684\u62B5\u62BC\u8D44\u4EA7\n## \u5173\u952E\u8BCD\uFF1A\u62B5\u62BC\u8C03\u6574, adjust collateral, \u7075\u6D3B\u501F\u8D37, \u62B5\u62BC\u54C1\u7BA1\u7406\n## \u53C2\u6570\uFF1A\n## - ccy: \u62B5\u62BC\u5E01\u79CD\u3002\u5FC5\u586B\n## - amt: \u8C03\u6574\u6570\u91CF\u3002\u5FC5\u586B\n## - side: \u65B9\u5411\u3002add=\u589E\u52A0\u62B5\u62BC, reduce=\u51CF\u5C11\u62B5\u62BC\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u8C03\u6574\u62B5\u62BC\u54C1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8C03\u6574\u62B5\u62BC\u54C1\u5F71\u54CD\u501F\u8D37\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u8C03\u6574 \u2192 \u7BA1\u7406\u501F\u8D37\u98CE\u9669 \u2192 \u907F\u514D\u5F3A\u5E73",
25212
+ {
25213
+ ccy: external_exports.string().describe("\u62B5\u62BC\u5E01\u79CD\u3002\u5FC5\u586B"),
25214
+ amt: external_exports.string().describe("\u8C03\u6574\u6570\u91CF\u3002\u5FC5\u586B"),
25215
+ side: external_exports.enum(["add", "reduce"]).describe("\u65B9\u5411\u3002add=\u589E\u52A0\u62B5\u62BC, reduce=\u51CF\u5C11\u62B5\u62BC")
25216
+ },
25217
+ async ({ ccy, amt, side }) => {
25218
+ if (!auth) return toError(AUTH_REQUIRED);
25219
+ try {
25220
+ const data = await privateApi.adjustFlexibleLoanCollateral(auth, { ccy, amt, side });
25221
+ return toResult(data);
25222
+ } catch (e) {
25223
+ return toError(e);
25224
+ }
25225
+ }
25226
+ );
25227
+ server.tool(
25228
+ "okx_get_flexible_loan_collateral",
25229
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u7075\u6D3B\u501F\u8D37\u652F\u6301\u7684\u62B5\u62BC\u8D44\u4EA7\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u53EF\u62B5\u62BC\u7684\u5E01\u79CD\u548C\u62B5\u62BC\u7387\n## \u5173\u952E\u8BCD\uFF1A\u62B5\u62BC\u8D44\u4EA7, collateral assets, \u7075\u6D3B\u501F\u8D37\u62B5\u62BC\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\u62B5\u62BC\u8D44\u4EA7 \u2192 \u8C03\u6574\u62B5\u62BC \u2192 \u7BA1\u7406\u501F\u8D37",
25230
+ {},
25231
+ async () => {
25232
+ if (!auth) return toError(AUTH_REQUIRED);
25233
+ try {
25234
+ const data = await privateApi.getFlexibleLoanCollateralAssets(auth);
25235
+ return toResult(data);
25236
+ } catch (e) {
25237
+ return toError(e);
25238
+ }
25239
+ }
25240
+ );
25241
+ server.tool(
25242
+ "okx_get_flexible_loan_info",
25243
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u7075\u6D3B\u501F\u8D37\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5F53\u524D\u501F\u8D37\u8BE6\u60C5\n## \u5173\u952E\u8BCD\uFF1A\u7075\u6D3B\u501F\u8D37, loan info, \u501F\u8D37\u4FE1\u606F\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\u501F\u8D37 \u2192 \u7BA1\u7406\u98CE\u9669",
25244
+ {},
25245
+ async () => {
25246
+ if (!auth) return toError(AUTH_REQUIRED);
25247
+ try {
25248
+ const data = await privateApi.getFlexibleLoanInfo(auth);
25249
+ return toResult(data);
25250
+ } catch (e) {
25251
+ return toError(e);
25252
+ }
25253
+ }
25254
+ );
25255
+ server.tool(
25256
+ "okx_get_flexible_loan_history",
25257
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u7075\u6D3B\u501F\u8D37\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2A\u501F\u8D37\u64CD\u4F5C\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u501F\u8D37\u5386\u53F2, loan history, \u7075\u6D3B\u501F\u8D37\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\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB",
25258
+ {},
25259
+ async () => {
25260
+ if (!auth) return toError(AUTH_REQUIRED);
25261
+ try {
25262
+ const data = await privateApi.getFlexibleLoanHistory(auth);
25263
+ return toResult(data);
25264
+ } catch (e) {
25265
+ return toError(e);
25266
+ }
25267
+ }
25268
+ );
25269
+ server.tool(
25270
+ "okx_get_stable_rewards_product",
25271
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u7A33\u5B9A\u5E01\u5956\u52B1\u4EA7\u54C1\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u7A33\u5B9A\u5E01\u7406\u8D22\u4EA7\u54C1\u7684\u6536\u76CA\u7387\n## \u5173\u952E\u8BCD\uFF1A\u7A33\u5B9A\u5E01\u5956\u52B1, stable rewards, \u7A33\u5B9A\u5E01\u7406\u8D22\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\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB",
25272
+ {},
25273
+ async () => {
25274
+ if (!auth) return toError(AUTH_REQUIRED);
25275
+ try {
25276
+ const data = await privateApi.getStableRewardsProductInfo(auth);
25277
+ return toResult(data);
25278
+ } catch (e) {
25279
+ return toError(e);
25280
+ }
25281
+ }
25282
+ );
24792
25283
  }
24793
25284
 
24794
25285
  // src/tools/outcomes.ts
@@ -25884,6 +26375,35 @@ function registerCopyTools(server, auth) {
25884
26375
  }
25885
26376
  }
25886
26377
  );
26378
+ server.tool(
26379
+ "okx_get_public_preference_currency",
26380
+ "## \u529F\u80FD\uFF1A\u516C\u5F00\u67E5\u8BE2\u5E26\u5355\u5458\u504F\u597D\u7684\u7ED3\u7B97\u5E01\u79CD\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5E26\u5355\u5458\u652F\u6301\u7684\u8DDF\u5355\u5E01\u79CD\n## \u5173\u952E\u8BCD\uFF1A\u5E26\u5355\u5E01\u79CD, preference currency, \u8DDF\u5355\u5E01\u79CD, \u7ED3\u7B97\u5E01\u79CD\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\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\u5E01\u79CD\u504F\u597D \u2192 okx_get_lead_trader_stats \u67E5\u7EE9\u6548 \u2192 \u51B3\u5B9A\u8DDF\u5355",
26381
+ {
26382
+ uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B")
26383
+ },
26384
+ async ({ uniqueCode }) => {
26385
+ try {
26386
+ const data = await publicApi.getPublicPreferenceCurrency(uniqueCode);
26387
+ return toResult(data);
26388
+ } catch (e) {
26389
+ return toError(e);
26390
+ }
26391
+ }
26392
+ );
26393
+ server.tool(
26394
+ "okx_stop_copy_trading",
26395
+ "## \u529F\u80FD\uFF1A\u505C\u6B62\u8DDF\u5355/\u505C\u6B62\u5E26\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u505C\u6B62\u5F53\u524D\u7684\u8DDF\u5355\u5173\u7CFB\u6216\u7EC8\u6B62\u5E26\u5355\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u505C\u6B62\u8DDF\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u505C\u6B62\u8DDF\u5355\u5F71\u54CD\u6301\u4ED3\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_copy_settings \u67E5\u770B\u8BBE\u7F6E \u2192 \u672C\u5DE5\u5177\u505C\u6B62",
26396
+ {},
26397
+ async () => {
26398
+ if (!auth) return toError(AUTH_REQUIRED);
26399
+ try {
26400
+ const data = await privateApi.stopCopyTrading(auth, {});
26401
+ return toResult(data);
26402
+ } catch (e) {
26403
+ return toError(e);
26404
+ }
26405
+ }
26406
+ );
25887
26407
  }
25888
26408
 
25889
26409
  // src/tools/signal.ts
@@ -26277,6 +26797,20 @@ function registerRfqTools(server, auth) {
26277
26797
  }
26278
26798
  }
26279
26799
  );
26800
+ server.tool(
26801
+ "okx_reset_rfq_mmp",
26802
+ "## \u529F\u80FD\uFF1A\u91CD\u7F6ERFQ\u7684\u505A\u5E02\u5546\u4FDD\u62A4\uFF08MMP\uFF09\u72B6\u6001\n## \u573A\u666F\uFF1A\u7528\u4E8E\u89E6\u53D1MMP\u4FDD\u62A4\u540E\u624B\u52A8\u6062\u590D\u505A\u5E02\u62A5\u4EF7\n## \u5173\u952E\u8BCD\uFF1ARFQ-MMP, reset mmp, \u505A\u5E02\u4FDD\u62A4\u91CD\u7F6E\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u91CD\u7F6E\u505A\u5E02\u4FDD\u62A4\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u91CD\u7F6EMMP\u540E\u505A\u5E02\u5546\u53EF\u6062\u590D\u62A5\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u91CD\u7F6E \u2192 \u6062\u590D\u6B63\u5E38RFQ\u62A5\u4EF7",
26803
+ {},
26804
+ async () => {
26805
+ if (!auth) return toError(AUTH_REQUIRED);
26806
+ try {
26807
+ const data = await privateApi.resetRfqMmp(auth);
26808
+ return toResult(data);
26809
+ } catch (e) {
26810
+ return toError(e);
26811
+ }
26812
+ }
26813
+ );
26280
26814
  }
26281
26815
 
26282
26816
  // src/tools/affiliate.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.29",
3
+ "version": "0.2.31",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",