hvip-mcp-server 0.2.29 → 0.2.30

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 +404 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21428,7 +21428,35 @@ 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 })
21432
21460
  };
21433
21461
 
21434
21462
  // src/adapters/hrails.ts
@@ -22995,6 +23023,206 @@ function registerAccountTools(server, auth) {
22995
23023
  }
22996
23024
  }
22997
23025
  );
23026
+ server.tool(
23027
+ "okx_get_account_position_risk",
23028
+ "## \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",
23029
+ {},
23030
+ async () => {
23031
+ if (!auth) return toError(AUTH_REQUIRED);
23032
+ try {
23033
+ const data = await privateApi.getAccountPositionRisk(auth);
23034
+ return toResult(data);
23035
+ } catch (e) {
23036
+ return toError(e);
23037
+ }
23038
+ }
23039
+ );
23040
+ server.tool(
23041
+ "okx_get_interest_limits",
23042
+ "## \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",
23043
+ {},
23044
+ async () => {
23045
+ if (!auth) return toError(AUTH_REQUIRED);
23046
+ try {
23047
+ const data = await privateApi.getInterestLimits(auth);
23048
+ return toResult(data);
23049
+ } catch (e) {
23050
+ return toError(e);
23051
+ }
23052
+ }
23053
+ );
23054
+ server.tool(
23055
+ "okx_get_account_subtypes",
23056
+ "## \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",
23057
+ {},
23058
+ async () => {
23059
+ if (!auth) return toError(AUTH_REQUIRED);
23060
+ try {
23061
+ const data = await privateApi.getAccountSubtypes(auth);
23062
+ return toResult(data);
23063
+ } catch (e) {
23064
+ return toError(e);
23065
+ }
23066
+ }
23067
+ );
23068
+ server.tool(
23069
+ "okx_get_subaccount_trading_balance",
23070
+ "## \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",
23071
+ {
23072
+ subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B")
23073
+ },
23074
+ async ({ subAcct }) => {
23075
+ if (!auth) return toError(AUTH_REQUIRED);
23076
+ try {
23077
+ const data = await privateApi.getSubAccountTradingBalance(auth, subAcct);
23078
+ return toResult(data);
23079
+ } catch (e) {
23080
+ return toError(e);
23081
+ }
23082
+ }
23083
+ );
23084
+ server.tool(
23085
+ "okx_preset_account_switch",
23086
+ "## \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",
23087
+ {
23088
+ acctLv: external_exports.string().describe("\u76EE\u6807\u8D26\u6237\u5C42\u7EA7\u3002\u5FC5\u586B")
23089
+ },
23090
+ async ({ acctLv }) => {
23091
+ if (!auth) return toError(AUTH_REQUIRED);
23092
+ try {
23093
+ const data = await privateApi.presetAccountSwitch(auth, { acctLv });
23094
+ return toResult(data);
23095
+ } catch (e) {
23096
+ return toError(e);
23097
+ }
23098
+ }
23099
+ );
23100
+ server.tool(
23101
+ "okx_activate_option",
23102
+ "## \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",
23103
+ {},
23104
+ async () => {
23105
+ if (!auth) return toError(AUTH_REQUIRED);
23106
+ try {
23107
+ const data = await privateApi.activateOption(auth, {});
23108
+ return toResult(data);
23109
+ } catch (e) {
23110
+ return toError(e);
23111
+ }
23112
+ }
23113
+ );
23114
+ server.tool(
23115
+ "okx_position_builder",
23116
+ "## \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",
23117
+ {
23118
+ body: external_exports.string().describe("\u8BD5\u7B97\u53C2\u6570JSON\u5B57\u7B26\u4E32\u3002\u5FC5\u586B")
23119
+ },
23120
+ async ({ body }) => {
23121
+ if (!auth) return toError(AUTH_REQUIRED);
23122
+ try {
23123
+ const parsed = JSON.parse(body);
23124
+ const data = await privateApi.positionBuilder(auth, parsed);
23125
+ return toResult(data);
23126
+ } catch (e) {
23127
+ return toError(e);
23128
+ }
23129
+ }
23130
+ );
23131
+ server.tool(
23132
+ "okx_set_auto_earn",
23133
+ "## \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",
23134
+ {
23135
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
23136
+ autoEarn: external_exports.boolean().describe("\u662F\u5426\u5F00\u542F\u81EA\u52A8\u7406\u8D22\u3002true=\u5F00\u542F, false=\u5173\u95ED")
23137
+ },
23138
+ async ({ ccy, autoEarn }) => {
23139
+ if (!auth) return toError(AUTH_REQUIRED);
23140
+ try {
23141
+ const data = await privateApi.setAutoEarn(auth, { ccy, autoEarn });
23142
+ return toResult(data);
23143
+ } catch (e) {
23144
+ return toError(e);
23145
+ }
23146
+ }
23147
+ );
23148
+ server.tool(
23149
+ "okx_set_fee_type",
23150
+ "## \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",
23151
+ {
23152
+ feeType: external_exports.enum(["0", "1"]).describe("\u624B\u7EED\u8D39\u7C7B\u578B\u30020=\u6309\u5E01, 1=\u6309USDT")
23153
+ },
23154
+ async ({ feeType }) => {
23155
+ if (!auth) return toError(AUTH_REQUIRED);
23156
+ try {
23157
+ const data = await privateApi.setFeeType(auth, { feeType });
23158
+ return toResult(data);
23159
+ } catch (e) {
23160
+ return toError(e);
23161
+ }
23162
+ }
23163
+ );
23164
+ server.tool(
23165
+ "okx_set_settle_currency",
23166
+ "## \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",
23167
+ {
23168
+ ccy: external_exports.string().describe("\u7ED3\u7B97\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B")
23169
+ },
23170
+ async ({ ccy }) => {
23171
+ if (!auth) return toError(AUTH_REQUIRED);
23172
+ try {
23173
+ const data = await privateApi.setSettleCurrency(auth, { ccy });
23174
+ return toResult(data);
23175
+ } catch (e) {
23176
+ return toError(e);
23177
+ }
23178
+ }
23179
+ );
23180
+ server.tool(
23181
+ "okx_get_position_builder_graph",
23182
+ "## \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",
23183
+ {},
23184
+ async () => {
23185
+ if (!auth) return toError(AUTH_REQUIRED);
23186
+ try {
23187
+ const data = await privateApi.getPositionBuilderGraph(auth);
23188
+ return toResult(data);
23189
+ } catch (e) {
23190
+ return toError(e);
23191
+ }
23192
+ }
23193
+ );
23194
+ server.tool(
23195
+ "okx_precheck_delta_neutral",
23196
+ "## \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",
23197
+ {},
23198
+ async () => {
23199
+ if (!auth) return toError(AUTH_REQUIRED);
23200
+ try {
23201
+ const data = await privateApi.precheckDeltaNeutral(auth, {});
23202
+ return toResult(data);
23203
+ } catch (e) {
23204
+ return toError(e);
23205
+ }
23206
+ }
23207
+ );
23208
+ server.tool(
23209
+ "okx_get_trade_fee",
23210
+ "## \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",
23211
+ {
23212
+ instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
23213
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID"),
23214
+ uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570")
23215
+ },
23216
+ async ({ instType, instId, uly }) => {
23217
+ if (!auth) return toError(AUTH_REQUIRED);
23218
+ try {
23219
+ const data = await privateApi.getTradeFee(auth, instType, instId, uly);
23220
+ return toResult(data);
23221
+ } catch (e) {
23222
+ return toError(e);
23223
+ }
23224
+ }
23225
+ );
22998
23226
  }
22999
23227
 
23000
23228
  // src/tools/trading.ts
@@ -24789,6 +25017,138 @@ function registerFinanceTools(server, auth) {
24789
25017
  }
24790
25018
  }
24791
25019
  );
25020
+ server.tool(
25021
+ "okx_purchase_savings",
25022
+ "## \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",
25023
+ {
25024
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
25025
+ amt: external_exports.string().describe("\u7533\u8D2D\u6570\u91CF\u3002\u5FC5\u586B"),
25026
+ side: external_exports.enum(["purchase", "redempt"]).describe("\u65B9\u5411\u3002purchase=\u7533\u8D2D, redempt=\u8D4E\u56DE"),
25027
+ rate: external_exports.string().optional().describe("\u5229\u7387")
25028
+ },
25029
+ async ({ ccy, amt, side, rate }) => {
25030
+ if (!auth) return toError(AUTH_REQUIRED);
25031
+ try {
25032
+ const body = { ccy, amt, side };
25033
+ if (rate) body.rate = rate;
25034
+ const data = await privateApi.purchaseSavings(auth, body);
25035
+ return toResult(data);
25036
+ } catch (e) {
25037
+ return toError(e);
25038
+ }
25039
+ }
25040
+ );
25041
+ server.tool(
25042
+ "okx_get_sfp_products",
25043
+ "## \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",
25044
+ {},
25045
+ async () => {
25046
+ if (!auth) return toError(AUTH_REQUIRED);
25047
+ try {
25048
+ const data = await privateApi.getSfpDcdProducts(auth);
25049
+ return toResult(data);
25050
+ } catch (e) {
25051
+ return toError(e);
25052
+ }
25053
+ }
25054
+ );
25055
+ server.tool(
25056
+ "okx_redeem_sfp",
25057
+ "## \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",
25058
+ {
25059
+ productId: external_exports.string().describe("\u4EA7\u54C1ID\u3002\u5FC5\u586B"),
25060
+ amt: external_exports.string().describe("\u8D4E\u56DE\u6570\u91CF\u3002\u5FC5\u586B")
25061
+ },
25062
+ async ({ productId, amt }) => {
25063
+ if (!auth) return toError(AUTH_REQUIRED);
25064
+ try {
25065
+ const data = await privateApi.redeemSfpDcd(auth, { productId, amt });
25066
+ return toResult(data);
25067
+ } catch (e) {
25068
+ return toError(e);
25069
+ }
25070
+ }
25071
+ );
25072
+ server.tool(
25073
+ "okx_get_staking_active_orders",
25074
+ "## \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",
25075
+ {},
25076
+ async () => {
25077
+ if (!auth) return toError(AUTH_REQUIRED);
25078
+ try {
25079
+ const data = await privateApi.getStakingActiveOrders(auth);
25080
+ return toResult(data);
25081
+ } catch (e) {
25082
+ return toError(e);
25083
+ }
25084
+ }
25085
+ );
25086
+ server.tool(
25087
+ "okx_cancel_redeem_eth",
25088
+ "## \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",
25089
+ {
25090
+ amt: external_exports.string().describe("\u53D6\u6D88\u8D4E\u56DE\u6570\u91CF\u3002\u5FC5\u586B")
25091
+ },
25092
+ async ({ amt }) => {
25093
+ if (!auth) return toError(AUTH_REQUIRED);
25094
+ try {
25095
+ const data = await privateApi.cancelRedeemEthStaking(auth, { amt });
25096
+ return toResult(data);
25097
+ } catch (e) {
25098
+ return toError(e);
25099
+ }
25100
+ }
25101
+ );
25102
+ server.tool(
25103
+ "okx_purchase_sol_staking",
25104
+ "## \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",
25105
+ {
25106
+ amt: external_exports.string().describe("\u8D28\u62BC\u6570\u91CF\uFF08SOL\uFF09\u3002\u5FC5\u586B")
25107
+ },
25108
+ async ({ amt }) => {
25109
+ if (!auth) return toError(AUTH_REQUIRED);
25110
+ try {
25111
+ const data = await privateApi.purchaseSolStaking(auth, { amt });
25112
+ return toResult(data);
25113
+ } catch (e) {
25114
+ return toError(e);
25115
+ }
25116
+ }
25117
+ );
25118
+ server.tool(
25119
+ "okx_redeem_sol_staking",
25120
+ "## \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",
25121
+ {
25122
+ amt: external_exports.string().describe("\u8D4E\u56DE\u6570\u91CF\uFF08SOL\uFF09\u3002\u5FC5\u586B")
25123
+ },
25124
+ async ({ amt }) => {
25125
+ if (!auth) return toError(AUTH_REQUIRED);
25126
+ try {
25127
+ const data = await privateApi.redeemSolStaking(auth, { amt });
25128
+ return toResult(data);
25129
+ } catch (e) {
25130
+ return toError(e);
25131
+ }
25132
+ }
25133
+ );
25134
+ server.tool(
25135
+ "okx_adjust_collateral",
25136
+ "## \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",
25137
+ {
25138
+ ccy: external_exports.string().describe("\u62B5\u62BC\u5E01\u79CD\u3002\u5FC5\u586B"),
25139
+ amt: external_exports.string().describe("\u8C03\u6574\u6570\u91CF\u3002\u5FC5\u586B"),
25140
+ side: external_exports.enum(["add", "reduce"]).describe("\u65B9\u5411\u3002add=\u589E\u52A0\u62B5\u62BC, reduce=\u51CF\u5C11\u62B5\u62BC")
25141
+ },
25142
+ async ({ ccy, amt, side }) => {
25143
+ if (!auth) return toError(AUTH_REQUIRED);
25144
+ try {
25145
+ const data = await privateApi.adjustFlexibleLoanCollateral(auth, { ccy, amt, side });
25146
+ return toResult(data);
25147
+ } catch (e) {
25148
+ return toError(e);
25149
+ }
25150
+ }
25151
+ );
24792
25152
  }
24793
25153
 
24794
25154
  // src/tools/outcomes.ts
@@ -25884,6 +26244,35 @@ function registerCopyTools(server, auth) {
25884
26244
  }
25885
26245
  }
25886
26246
  );
26247
+ server.tool(
26248
+ "okx_get_public_preference_currency",
26249
+ "## \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",
26250
+ {
26251
+ uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B")
26252
+ },
26253
+ async ({ uniqueCode }) => {
26254
+ try {
26255
+ const data = await publicApi.getPublicPreferenceCurrency(uniqueCode);
26256
+ return toResult(data);
26257
+ } catch (e) {
26258
+ return toError(e);
26259
+ }
26260
+ }
26261
+ );
26262
+ server.tool(
26263
+ "okx_stop_copy_trading",
26264
+ "## \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",
26265
+ {},
26266
+ async () => {
26267
+ if (!auth) return toError(AUTH_REQUIRED);
26268
+ try {
26269
+ const data = await privateApi.stopCopyTrading(auth, {});
26270
+ return toResult(data);
26271
+ } catch (e) {
26272
+ return toError(e);
26273
+ }
26274
+ }
26275
+ );
25887
26276
  }
25888
26277
 
25889
26278
  // src/tools/signal.ts
@@ -26277,6 +26666,20 @@ function registerRfqTools(server, auth) {
26277
26666
  }
26278
26667
  }
26279
26668
  );
26669
+ server.tool(
26670
+ "okx_reset_rfq_mmp",
26671
+ "## \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",
26672
+ {},
26673
+ async () => {
26674
+ if (!auth) return toError(AUTH_REQUIRED);
26675
+ try {
26676
+ const data = await privateApi.resetRfqMmp(auth);
26677
+ return toResult(data);
26678
+ } catch (e) {
26679
+ return toError(e);
26680
+ }
26681
+ }
26682
+ );
26280
26683
  }
26281
26684
 
26282
26685
  // 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.30",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",