hvip-mcp-server 0.2.17 → 0.2.19
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.
- package/dist/index.js +432 -4
- 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 }),
|
|
@@ -21235,6 +21241,11 @@ var privateApi = {
|
|
|
21235
21241
|
getEthStakingBalance: (auth) => request("GET", "/api/v5/finance/staking-defi/eth/balance", { auth }),
|
|
21236
21242
|
getEthStakingHistory: (auth, limit) => request("GET", "/api/v5/finance/staking-defi/eth/purchase-redeem-history", { params: { limit }, auth }),
|
|
21237
21243
|
getSolStakingBalance: (auth) => request("GET", "/api/v5/finance/staking-defi/sol/balance", { auth }),
|
|
21244
|
+
// ── 质押操作(第七批新增) ─────────────────────────────────────────────────
|
|
21245
|
+
getStakingOrders: (auth, productId, state, limit) => request("GET", "/api/v5/finance/staking-defi/orders", { params: { productId, state, limit }, auth }),
|
|
21246
|
+
purchaseEthStaking: (auth, body) => request("POST", "/api/v5/finance/staking-defi/eth/purchase", { body, auth }),
|
|
21247
|
+
redeemEthStaking: (auth, body) => request("POST", "/api/v5/finance/staking-defi/eth/redeem", { body, auth }),
|
|
21248
|
+
getSolStakingHistory: (auth, limit) => request("GET", "/api/v5/finance/staking-defi/sol/history", { params: { limit }, auth }),
|
|
21238
21249
|
// ── 跟单(私有) ─────────────────────────────────────────────────────────────
|
|
21239
21250
|
getMyLeadPositions: (auth, instType) => request("GET", "/api/v5/copytrading/current-subpositions", { params: { instType }, auth }),
|
|
21240
21251
|
getMyLeadHistory: (auth, instType, limit) => request("GET", "/api/v5/copytrading/subpositions-history", { params: { instType, limit }, auth }),
|
|
@@ -21275,7 +21286,22 @@ var privateApi = {
|
|
|
21275
21286
|
orderPrecheck: (auth, body) => request("POST", "/api/v5/trade/order-precheck", { body, auth }),
|
|
21276
21287
|
getAccountRateLimit: (auth) => request("GET", "/api/v5/trade/account-rate-limit", { auth }),
|
|
21277
21288
|
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 })
|
|
21289
|
+
getEasyConvertHistory: (auth, after, before, limit) => request("GET", "/api/v5/trade/easy-convert-history", { params: { after, before, limit }, auth }),
|
|
21290
|
+
// ── 公开数据(从public移入,实需鉴权) ─────────────────────────────────
|
|
21291
|
+
getEconomicCalendar: (auth, begin, end, limit) => request("GET", "/api/v5/public/economic-calendar", { params: { begin, end, limit }, auth }),
|
|
21292
|
+
// ── 子账户(第六批新增) ──────────────────────────────────────────────────
|
|
21293
|
+
getSubAccountApiKey: (auth, subAcct) => request("GET", "/api/v5/users/subaccount/apikey", { params: { subAcct }, auth }),
|
|
21294
|
+
createSubAccountApiKey: (auth, body) => request("POST", "/api/v5/users/subaccount/apikey", { body, auth }),
|
|
21295
|
+
modifySubAccountApiKey: (auth, body) => request("POST", "/api/v5/users/subaccount/modify-apikey", { body, auth }),
|
|
21296
|
+
deleteSubAccountApiKey: (auth, body) => request("POST", "/api/v5/users/subaccount/delete-apikey", { body, auth }),
|
|
21297
|
+
getSubAccountBills: (auth, subAcct, after, before, limit) => request("GET", "/api/v5/asset/subaccount/bills", { params: { subAcct, after, before, limit }, auth }),
|
|
21298
|
+
// ── 账户+资金(第四批新增) ──────────────────────────────────────────────────
|
|
21299
|
+
setPositionMode: (auth, body) => request("POST", "/api/v5/account/set-position-mode", { body, auth }),
|
|
21300
|
+
getAssetValuation: (auth, ccy) => request("GET", "/api/v5/asset/asset-valuation", { params: { ccy }, auth }),
|
|
21301
|
+
getConvertCurrencies: (auth) => request("GET", "/api/v5/asset/convert/currencies", { auth }),
|
|
21302
|
+
convertTrade: (auth, body) => request("POST", "/api/v5/asset/convert/trade", { body, auth }),
|
|
21303
|
+
getSubAccountFundingBalance: (auth, subAcct) => request("GET", "/api/v5/asset/subaccount/balances", { params: { subAcct }, auth }),
|
|
21304
|
+
setSubAccountTransferOut: (auth, body) => request("POST", "/api/v5/users/subaccount/set-transfer-out", { body, auth })
|
|
21279
21305
|
};
|
|
21280
21306
|
|
|
21281
21307
|
// src/adapters/hrails.ts
|
|
@@ -21678,7 +21704,7 @@ function registerMarketTools(server) {
|
|
|
21678
21704
|
}
|
|
21679
21705
|
|
|
21680
21706
|
// src/tools/public.ts
|
|
21681
|
-
function registerPublicTools(server) {
|
|
21707
|
+
function registerPublicTools(server, auth) {
|
|
21682
21708
|
server.tool(
|
|
21683
21709
|
"okx_get_instruments",
|
|
21684
21710
|
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u53EF\u4EA4\u6613\u4EA7\u54C1\u5217\u8868\uFF0C\u542B\u4EA7\u54C1\u89C4\u683C\u3001\u6700\u5C0F\u4E0B\u5355\u91CF\u3001\u624B\u7EED\u8D39\u7B49\u7EA7\u7B49\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u786E\u8BA4\u67D0\u4EA7\u54C1\u662F\u5426\u53EF\u4EA4\u6613\u3001\u83B7\u53D6\u7CBE\u5EA6\u53C2\u6570\u3001\u4E0B\u5355\u524D\u9A8C\u8BC1\u4EA7\u54C1\u89C4\u683C\n## \u5173\u952E\u8BCD\uFF1A\u4EA7\u54C1\u5217\u8868, instruments, \u53EF\u4EA4\u6613\u54C1\u79CD, \u89C4\u683C\u53C2\u6570, \u6700\u5C0F\u4E0B\u5355, \u7CBE\u5EA6\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\n## - instId: \u6307\u5B9A\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u91CF\u3002\u4E0D\u4F20instType\u5C06\u8FD4\u56DE\u5168\u91CF\u6570\u636E(~200KB)\uFF0C\u5DF2\u81EA\u52A8\u622A\u65ADtop20\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\u7C7B\u578B ~50KB\uFF0C\u5168\u91CF ~200KB\uFF08\u5DF2\u81EA\u52A8\u622A\u65AD top 20\uFF09\n## \u5173\u8054\uFF1A\u51E0\u4E4E\u6240\u6709\u5DE5\u5177\u7684\u524D\u7F6E\u5DE5\u5177 \u2192 \u83B7\u53D6 instId/instFamily \u540E\u7528\u4E8E okx_get_ticker\u3001okx_place_order \u7B49",
|
|
@@ -21973,6 +21999,112 @@ function registerPublicTools(server) {
|
|
|
21973
21999
|
}
|
|
21974
22000
|
}
|
|
21975
22001
|
);
|
|
22002
|
+
server.tool(
|
|
22003
|
+
"okx_get_platform_24_volume",
|
|
22004
|
+
"## \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",
|
|
22005
|
+
{},
|
|
22006
|
+
async () => {
|
|
22007
|
+
try {
|
|
22008
|
+
const data = await publicApi.getPlatform24Volume();
|
|
22009
|
+
const enriched = data.map((item) => ({
|
|
22010
|
+
...item,
|
|
22011
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
22012
|
+
}));
|
|
22013
|
+
return toResult(enriched);
|
|
22014
|
+
} catch (e) {
|
|
22015
|
+
return toError(e);
|
|
22016
|
+
}
|
|
22017
|
+
}
|
|
22018
|
+
);
|
|
22019
|
+
server.tool(
|
|
22020
|
+
"okx_get_call_auction_details",
|
|
22021
|
+
"## \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",
|
|
22022
|
+
{
|
|
22023
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B")
|
|
22024
|
+
},
|
|
22025
|
+
async ({ instId }) => {
|
|
22026
|
+
try {
|
|
22027
|
+
const data = await publicApi.getCallAuctionDetails(instId);
|
|
22028
|
+
const enriched = data.map((item) => ({
|
|
22029
|
+
...item,
|
|
22030
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0,
|
|
22031
|
+
auctionEndTimeIso: item.auctionEndTime ? new Date(parseInt(item.auctionEndTime)).toISOString() : void 0
|
|
22032
|
+
}));
|
|
22033
|
+
return toResult(enriched);
|
|
22034
|
+
} catch (e) {
|
|
22035
|
+
return toError(e);
|
|
22036
|
+
}
|
|
22037
|
+
}
|
|
22038
|
+
);
|
|
22039
|
+
server.tool(
|
|
22040
|
+
"okx_get_option_instrument_family_trades",
|
|
22041
|
+
`## \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
|
|
22042
|
+
## \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
|
|
22043
|
+
## \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
|
|
22044
|
+
## \u53C2\u6570\uFF1A
|
|
22045
|
+
## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B
|
|
22046
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u90E8
|
|
22047
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
22048
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22049
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
|
|
22050
|
+
## \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`,
|
|
22051
|
+
{
|
|
22052
|
+
instFamily: external_exports.string().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B"),
|
|
22053
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570")
|
|
22054
|
+
},
|
|
22055
|
+
async ({ instFamily, limit }) => {
|
|
22056
|
+
try {
|
|
22057
|
+
const data = await publicApi.getOptionInstrumentFamilyTrades(instFamily, limit);
|
|
22058
|
+
return toResult(data);
|
|
22059
|
+
} catch (e) {
|
|
22060
|
+
return toError(e);
|
|
22061
|
+
}
|
|
22062
|
+
}
|
|
22063
|
+
);
|
|
22064
|
+
server.tool(
|
|
22065
|
+
"okx_get_option_trades",
|
|
22066
|
+
`## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u9010\u7B14\u6210\u4EA4\u8BB0\u5F55
|
|
22067
|
+
## \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
|
|
22068
|
+
## \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
|
|
22069
|
+
## \u53C2\u6570\uFF1A
|
|
22070
|
+
## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u4E0EinstId\u4E8C\u9009\u4E00
|
|
22071
|
+
## - instId: \u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u4E0EinstFamily\u4E8C\u9009\u4E00
|
|
22072
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u5927100
|
|
22073
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
22074
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22075
|
+
## \u8FD4\u56DE\u91CF\uFF1A100\u6761 ~5KB \u2014 \u4E2D\u7B49
|
|
22076
|
+
## \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`,
|
|
22077
|
+
{
|
|
22078
|
+
instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u4E0EinstId\u4E8C\u9009\u4E00"),
|
|
22079
|
+
instId: external_exports.string().optional().describe("\u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u4E0EinstFamily\u4E8C\u9009\u4E00"),
|
|
22080
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22081
|
+
},
|
|
22082
|
+
async ({ instFamily, instId, limit }) => {
|
|
22083
|
+
try {
|
|
22084
|
+
const data = await publicApi.getOptionTrades(instFamily, instId, limit);
|
|
22085
|
+
const enriched = data.map((item) => ({
|
|
22086
|
+
...item,
|
|
22087
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
22088
|
+
}));
|
|
22089
|
+
return toResult(enriched);
|
|
22090
|
+
} catch (e) {
|
|
22091
|
+
return toError(e);
|
|
22092
|
+
}
|
|
22093
|
+
}
|
|
22094
|
+
);
|
|
22095
|
+
server.tool(
|
|
22096
|
+
"okx_get_exchange_rate",
|
|
22097
|
+
"## \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",
|
|
22098
|
+
{},
|
|
22099
|
+
async () => {
|
|
22100
|
+
try {
|
|
22101
|
+
const data = await publicApi.getExchangeRate();
|
|
22102
|
+
return toResult(data);
|
|
22103
|
+
} catch (e) {
|
|
22104
|
+
return toError(e);
|
|
22105
|
+
}
|
|
22106
|
+
}
|
|
22107
|
+
);
|
|
21976
22108
|
server.tool(
|
|
21977
22109
|
"okx_search_instruments",
|
|
21978
22110
|
"## \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",
|
|
@@ -21999,6 +22131,28 @@ function registerPublicTools(server) {
|
|
|
21999
22131
|
}
|
|
22000
22132
|
}
|
|
22001
22133
|
);
|
|
22134
|
+
server.tool(
|
|
22135
|
+
"okx_get_economic_calendar",
|
|
22136
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u7ECF\u6D4E\u65E5\u5386\u6570\u636E\uFF08\u91CD\u8981\u7ECF\u6D4E\u4E8B\u4EF6\u3001\u6570\u636E\u516C\u5E03\u65F6\u95F4\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2A\u5B8F\u89C2\u7ECF\u6D4E\u4E8B\u4EF6\u3001\u8BC4\u4F30\u5E02\u573A\u6CE2\u52A8\u89E6\u53D1\u56E0\u7D20\u3001\u63D0\u524D\u51C6\u5907\u5E94\u5BF9\u91CD\u8981\u6570\u636E\u516C\u5E03\n## \u5173\u952E\u8BCD\uFF1A\u7ECF\u6D4E\u65E5\u5386, economic calendar, \u7ECF\u6D4E\u6570\u636E, \u5B8F\u89C2\u7ECF\u6D4E, \u975E\u519C, CPI, \u5229\u7387\u51B3\u8BAE\n## \u53C2\u6570\uFF1A\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\u3002\u53EF\u9009\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u83B7\u53D6\u7ECF\u6D4E\u4E8B\u4EF6 \u2192 \u9884\u5224\u5E02\u573A\u6CE2\u52A8 \u2192 \u7ED3\u5408 okx_get_ticker \u76D1\u63A7\u884C\u60C5\u53D8\u5316",
|
|
22137
|
+
{
|
|
22138
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
22139
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
22140
|
+
limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22141
|
+
},
|
|
22142
|
+
async ({ begin, end, limit }) => {
|
|
22143
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22144
|
+
try {
|
|
22145
|
+
const data = await privateApi.getEconomicCalendar(auth, begin, end, limit);
|
|
22146
|
+
const enriched = data.map((item) => ({
|
|
22147
|
+
...item,
|
|
22148
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
22149
|
+
}));
|
|
22150
|
+
return toResult(enriched);
|
|
22151
|
+
} catch (e) {
|
|
22152
|
+
return toError(e);
|
|
22153
|
+
}
|
|
22154
|
+
}
|
|
22155
|
+
);
|
|
22002
22156
|
}
|
|
22003
22157
|
|
|
22004
22158
|
// src/tools/account.ts
|
|
@@ -22224,6 +22378,80 @@ function registerAccountTools(server, auth) {
|
|
|
22224
22378
|
}
|
|
22225
22379
|
}
|
|
22226
22380
|
);
|
|
22381
|
+
server.tool(
|
|
22382
|
+
"okx_set_position_mode",
|
|
22383
|
+
"## \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",
|
|
22384
|
+
{
|
|
22385
|
+
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")
|
|
22386
|
+
},
|
|
22387
|
+
async ({ posMode }) => {
|
|
22388
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22389
|
+
try {
|
|
22390
|
+
const data = await privateApi.setPositionMode(auth, { posMode });
|
|
22391
|
+
return toResult(data);
|
|
22392
|
+
} catch (e) {
|
|
22393
|
+
return toError(e);
|
|
22394
|
+
}
|
|
22395
|
+
}
|
|
22396
|
+
);
|
|
22397
|
+
server.tool(
|
|
22398
|
+
"okx_get_asset_valuation",
|
|
22399
|
+
"## \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",
|
|
22400
|
+
{
|
|
22401
|
+
ccy: external_exports.string().optional().describe("\u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USD\u3001CNY\u3002\u4E0D\u586B\u9ED8\u8BA4\u6309\u6240\u6709\u5E01\u79CD")
|
|
22402
|
+
},
|
|
22403
|
+
async ({ ccy }) => {
|
|
22404
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22405
|
+
try {
|
|
22406
|
+
const data = await privateApi.getAssetValuation(auth, ccy);
|
|
22407
|
+
return toResult(data);
|
|
22408
|
+
} catch (e) {
|
|
22409
|
+
return toError(e);
|
|
22410
|
+
}
|
|
22411
|
+
}
|
|
22412
|
+
);
|
|
22413
|
+
server.tool(
|
|
22414
|
+
"okx_get_convert_currencies",
|
|
22415
|
+
"## \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",
|
|
22416
|
+
{},
|
|
22417
|
+
async () => {
|
|
22418
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22419
|
+
try {
|
|
22420
|
+
const data = await privateApi.getConvertCurrencies(auth);
|
|
22421
|
+
return toResult(data);
|
|
22422
|
+
} catch (e) {
|
|
22423
|
+
return toError(e);
|
|
22424
|
+
}
|
|
22425
|
+
}
|
|
22426
|
+
);
|
|
22427
|
+
server.tool(
|
|
22428
|
+
"okx_convert_trade",
|
|
22429
|
+
`## \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
|
|
22430
|
+
## \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
|
|
22431
|
+
## \u5173\u952E\u8BCD\uFF1A\u5151\u6362, convert trade, \u8D44\u4EA7\u5151\u6362, \u6362\u5E01, \u4E00\u952E\u5151\u6362, \u95EA\u5151
|
|
22432
|
+
## \u53C2\u6570\uFF1A
|
|
22433
|
+
## - fromCcy: \u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B
|
|
22434
|
+
## - toCcy: \u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B
|
|
22435
|
+
## - sz: \u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B
|
|
22436
|
+
## \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
|
|
22437
|
+
## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u4EA7\u751F\u771F\u5B9E\u5151\u6362\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22438
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
|
|
22439
|
+
## \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`,
|
|
22440
|
+
{
|
|
22441
|
+
fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B"),
|
|
22442
|
+
toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B"),
|
|
22443
|
+
sz: external_exports.string().describe("\u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B")
|
|
22444
|
+
},
|
|
22445
|
+
async ({ fromCcy, toCcy, sz }) => {
|
|
22446
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22447
|
+
try {
|
|
22448
|
+
const data = await privateApi.convertTrade(auth, { fromCcy, toCcy, sz });
|
|
22449
|
+
return toResult(data);
|
|
22450
|
+
} catch (e) {
|
|
22451
|
+
return toError(e);
|
|
22452
|
+
}
|
|
22453
|
+
}
|
|
22454
|
+
);
|
|
22227
22455
|
server.tool(
|
|
22228
22456
|
"okx_get_margin_balance",
|
|
22229
22457
|
"## \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 +23349,137 @@ function registerSubAccountTools(server, auth) {
|
|
|
23121
23349
|
}
|
|
23122
23350
|
}
|
|
23123
23351
|
);
|
|
23352
|
+
server.tool(
|
|
23353
|
+
"okx_subaccount_set_transfer_out",
|
|
23354
|
+
"## \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",
|
|
23355
|
+
{
|
|
23356
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23357
|
+
canTransferOut: external_exports.boolean().describe("\u662F\u5426\u5141\u8BB8\u8F6C\u51FA\u3002true=\u5141\u8BB8, false=\u7981\u6B62")
|
|
23358
|
+
},
|
|
23359
|
+
async ({ subAcct, canTransferOut }) => {
|
|
23360
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23361
|
+
try {
|
|
23362
|
+
const data = await privateApi.setSubAccountTransferOut(auth, { subAcct, canTransOut: canTransferOut });
|
|
23363
|
+
return toResult(data);
|
|
23364
|
+
} catch (e) {
|
|
23365
|
+
return toError(e);
|
|
23366
|
+
}
|
|
23367
|
+
}
|
|
23368
|
+
);
|
|
23369
|
+
server.tool(
|
|
23370
|
+
"okx_get_subaccount_api_key",
|
|
23371
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684API Key\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7BA1\u7406\u5B50\u8D26\u6237\u7684API\u6743\u9650\u3001\u67E5\u770B\u5404\u5B50\u8D26\u6237\u5DF2\u521B\u5EFA\u7684API Key\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237API, subaccount apikey, \u5B50\u8D26\u6237\u79D8\u94A5, API\u7BA1\u7406\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 ~1KB\n## \u5173\u8054\uFF1Aokx_list_subaccounts \u83B7\u53D6\u5B50\u8D26\u6237 \u2192 \u672C\u5DE5\u5177\u67E5API Key \u2192 okx_create_subaccount_api_key \u521B\u5EFA",
|
|
23372
|
+
{
|
|
23373
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B")
|
|
23374
|
+
},
|
|
23375
|
+
async ({ subAcct }) => {
|
|
23376
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23377
|
+
try {
|
|
23378
|
+
const data = await privateApi.getSubAccountApiKey(auth, subAcct);
|
|
23379
|
+
return toResult(data);
|
|
23380
|
+
} catch (e) {
|
|
23381
|
+
return toError(e);
|
|
23382
|
+
}
|
|
23383
|
+
}
|
|
23384
|
+
);
|
|
23385
|
+
server.tool(
|
|
23386
|
+
"okx_create_subaccount_api_key",
|
|
23387
|
+
"## \u529F\u80FD\uFF1A\u4E3A\u5B50\u8D26\u6237\u521B\u5EFA\u65B0\u7684API Key\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E3A\u5B50\u8D26\u6237\u5F00\u901AAPI\u6743\u9650\u3001\u5206\u914D\u4EA4\u6613\u989D\u5EA6\n## \u5173\u952E\u8BCD\uFF1A\u521B\u5EFAAPI, create apikey, \u5B50\u8D26\u6237\u521B\u5EFA\u79D8\u94A5, API\u521B\u5EFA\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - label: API Key\u5907\u6CE8\u540D\u79F0\u3002\u5FC5\u586B\n## - passphrase: API Key\u4EA4\u6613\u5BC6\u7801\u3002\u5FC5\u586B\n## - perm: \u6743\u9650\u5B57\u7B26\u4E32\uFF0C\u5982 read_only\u3001trade\u3002\u5FC5\u586B\n## - ip: IP\u767D\u540D\u5355\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694\u3002\u53EF\u9009\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 \u521B\u5EFAAPI Key\u5F71\u54CD\u5B50\u8D26\u6237\u8BBF\u95EE\u6743\u9650\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_subaccount_api_key \u67E5\u770B\u73B0\u6709 \u2192 \u672C\u5DE5\u5177\u521B\u5EFA \u2192 okx_reset_subaccount_api_key \u91CD\u7F6E",
|
|
23388
|
+
{
|
|
23389
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23390
|
+
label: external_exports.string().describe("API Key\u5907\u6CE8\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23391
|
+
passphrase: external_exports.string().describe("API Key\u4EA4\u6613\u5BC6\u7801\u3002\u5FC5\u586B"),
|
|
23392
|
+
perm: external_exports.string().describe("\u6743\u9650\u5B57\u7B26\u4E32\uFF0C\u5982 read_only\u3001trade"),
|
|
23393
|
+
ip: external_exports.string().optional().describe("IP\u767D\u540D\u5355\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694")
|
|
23394
|
+
},
|
|
23395
|
+
async ({ subAcct, label, passphrase, perm, ip }) => {
|
|
23396
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23397
|
+
try {
|
|
23398
|
+
const body = { subAcct, label, passphrase, perm };
|
|
23399
|
+
if (ip) body.ip = ip;
|
|
23400
|
+
const data = await privateApi.createSubAccountApiKey(auth, body);
|
|
23401
|
+
return toResult(data);
|
|
23402
|
+
} catch (e) {
|
|
23403
|
+
return toError(e);
|
|
23404
|
+
}
|
|
23405
|
+
}
|
|
23406
|
+
);
|
|
23407
|
+
server.tool(
|
|
23408
|
+
"okx_reset_subaccount_api_key",
|
|
23409
|
+
"## \u529F\u80FD\uFF1A\u4FEE\u6539\u5B50\u8D26\u6237\u7684API Key\uFF08\u91CD\u7F6E\u6743\u9650\u3001IP\u767D\u540D\u5355\u6216\u5907\u6CE8\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u66F4\u65B0\u5B50\u8D26\u6237API Key\u7684\u6743\u9650\u8303\u56F4\u3001\u4FEE\u6539IP\u767D\u540D\u5355\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539API, reset apikey, \u91CD\u7F6E\u79D8\u94A5, \u66F4\u65B0API\u6743\u9650\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - apiKey: \u9700\u8981\u4FEE\u6539\u7684API Key\u3002\u5FC5\u586B\n## - label: API Key\u65B0\u5907\u6CE8\u3002\u53EF\u9009\n## - perm: \u65B0\u6743\u9650\u5B57\u7B26\u4E32\u3002\u53EF\u9009\n## - ip: \u65B0IP\u767D\u540D\u5355\u3002\u53EF\u9009\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\u6539API Key\u5F71\u54CD\u5B50\u8D26\u6237\u8BBF\u95EE\u6743\u9650\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_create_subaccount_api_key \u521B\u5EFA \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 okx_delete_subaccount_api_key \u5220\u9664",
|
|
23410
|
+
{
|
|
23411
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23412
|
+
apiKey: external_exports.string().describe("\u9700\u8981\u4FEE\u6539\u7684API Key\u3002\u5FC5\u586B"),
|
|
23413
|
+
label: external_exports.string().optional().describe("API Key\u65B0\u5907\u6CE8"),
|
|
23414
|
+
perm: external_exports.string().optional().describe("\u65B0\u6743\u9650\u5B57\u7B26\u4E32"),
|
|
23415
|
+
ip: external_exports.string().optional().describe("\u65B0IP\u767D\u540D\u5355\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694")
|
|
23416
|
+
},
|
|
23417
|
+
async ({ subAcct, apiKey, label, perm, ip }) => {
|
|
23418
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23419
|
+
try {
|
|
23420
|
+
const body = { subAcct, apiKey };
|
|
23421
|
+
if (label) body.label = label;
|
|
23422
|
+
if (perm) body.perm = perm;
|
|
23423
|
+
if (ip) body.ip = ip;
|
|
23424
|
+
const data = await privateApi.modifySubAccountApiKey(auth, body);
|
|
23425
|
+
return toResult(data);
|
|
23426
|
+
} catch (e) {
|
|
23427
|
+
return toError(e);
|
|
23428
|
+
}
|
|
23429
|
+
}
|
|
23430
|
+
);
|
|
23431
|
+
server.tool(
|
|
23432
|
+
"okx_delete_subaccount_api_key",
|
|
23433
|
+
"## \u529F\u80FD\uFF1A\u5220\u9664\u5B50\u8D26\u6237\u7684API Key\n## \u573A\u666F\uFF1A\u7528\u4E8E\u64A4\u9500\u5B50\u8D26\u6237\u7684API\u8BBF\u95EE\u6743\u9650\u3001\u5B50\u8D26\u6237\u4E0D\u518D\u9700\u8981\u4EA4\u6613\u65F6\u6E05\u7406API Key\n## \u5173\u952E\u8BCD\uFF1A\u5220\u9664API, delete apikey, \u79FB\u9664\u79D8\u94A5, \u64A4\u9500API\u6743\u9650\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - apiKey: \u9700\u8981\u5220\u9664\u7684API Key\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 \u5220\u9664API Key\u540E\u5B50\u8D26\u6237\u5C06\u65E0\u6CD5\u901A\u8FC7API\u8BBF\u95EE\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_subaccount_api_key \u67E5\u770B\u73B0\u6709 \u2192 \u672C\u5DE5\u5177\u5220\u9664 \u2192 okx_list_subaccounts \u9A8C\u8BC1",
|
|
23434
|
+
{
|
|
23435
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23436
|
+
apiKey: external_exports.string().describe("\u9700\u8981\u5220\u9664\u7684API Key\u3002\u5FC5\u586B")
|
|
23437
|
+
},
|
|
23438
|
+
async ({ subAcct, apiKey }) => {
|
|
23439
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23440
|
+
try {
|
|
23441
|
+
const data = await privateApi.deleteSubAccountApiKey(auth, { subAcct, apiKey });
|
|
23442
|
+
return toResult(data);
|
|
23443
|
+
} catch (e) {
|
|
23444
|
+
return toError(e);
|
|
23445
|
+
}
|
|
23446
|
+
}
|
|
23447
|
+
);
|
|
23448
|
+
server.tool(
|
|
23449
|
+
"okx_get_subaccount_bills",
|
|
23450
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u6D41\u6C34\uFF08\u8D26\u5355\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5BA1\u8BA1\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u53D8\u52A8\u3001\u8FFD\u8E2A\u5B50\u8D26\u6237\u7684\u5212\u8F6C\u548C\u4EA4\u6613\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u8D26\u5355, subaccount bills, \u5B50\u8D26\u6237\u6D41\u6C34, \u8D44\u91D1\u53D8\u52A8, \u5B50\u8D26\u6237\u5BF9\u8D26\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\u3002\u53EF\u9009\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\u3002\u53EF\u9009\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\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1Aokx_get_subaccount_balance \u67E5\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u6D41\u6C34 \u2192 okx_transfer_subaccount \u5212\u8F6C",
|
|
23451
|
+
{
|
|
23452
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23453
|
+
after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
23454
|
+
before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
23455
|
+
limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
23456
|
+
},
|
|
23457
|
+
async ({ subAcct, after, before, limit }) => {
|
|
23458
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23459
|
+
try {
|
|
23460
|
+
const data = await privateApi.getSubAccountBills(auth, subAcct, after, before, limit);
|
|
23461
|
+
return toResult(data);
|
|
23462
|
+
} catch (e) {
|
|
23463
|
+
return toError(e);
|
|
23464
|
+
}
|
|
23465
|
+
}
|
|
23466
|
+
);
|
|
23467
|
+
server.tool(
|
|
23468
|
+
"okx_get_subaccount_assets",
|
|
23469
|
+
"## \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",
|
|
23470
|
+
{
|
|
23471
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B")
|
|
23472
|
+
},
|
|
23473
|
+
async ({ subAcct }) => {
|
|
23474
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23475
|
+
try {
|
|
23476
|
+
const data = await privateApi.getSubAccountFundingBalance(auth, subAcct);
|
|
23477
|
+
return toResult(data);
|
|
23478
|
+
} catch (e) {
|
|
23479
|
+
return toError(e);
|
|
23480
|
+
}
|
|
23481
|
+
}
|
|
23482
|
+
);
|
|
23124
23483
|
}
|
|
23125
23484
|
|
|
23126
23485
|
// src/tools/finance.ts
|
|
@@ -23217,6 +23576,75 @@ function registerFinanceTools(server, auth) {
|
|
|
23217
23576
|
}
|
|
23218
23577
|
}
|
|
23219
23578
|
);
|
|
23579
|
+
server.tool(
|
|
23580
|
+
"okx_get_staking_orders",
|
|
23581
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u94FE\u4E0A\u8D28\u62BC\u7684\u8BA2\u5355/\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770BETH/SOL\u8D28\u62BC\u7684\u7533\u8D2D\u548C\u8D4E\u56DE\u8BB0\u5F55\u3001\u8FFD\u8E2A\u8D28\u62BC\u64CD\u4F5C\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u8D28\u62BC\u8BA2\u5355, staking orders, \u8D28\u62BC\u8BB0\u5F55, \u8D28\u62BC\u5386\u53F2, \u7533\u8D2D\u8D4E\u56DE\n## \u53C2\u6570\uFF1A\n## - productId: \u4EA7\u54C1ID\uFF0C\u5982 ETH\u3002\u53EF\u9009\n## - state: \u8BA2\u5355\u72B6\u6001\u30021=\u7B49\u5F85\u7533\u8D2D, 2=\u7533\u8D2D\u4E2D, 3=\u7533\u8D2D\u6210\u529F, 4=\u8D4E\u56DE\u4E2D, 5=\u8D4E\u56DE\u6210\u529F, 6=\u5DF2\u53D6\u6D88\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u8BB0\u5F55 \u2192 okx_stake_eth/okx_unstake_eth \u64CD\u4F5C \u2192 okx_get_eth_staking_balance \u786E\u8BA4",
|
|
23582
|
+
{
|
|
23583
|
+
productId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 ETH\u3002\u53EF\u9009"),
|
|
23584
|
+
state: external_exports.string().optional().describe("\u8BA2\u5355\u72B6\u6001\u30021=\u7B49\u5F85\u7533\u8D2D, 2=\u7533\u8D2D\u4E2D, 3=\u7533\u8D2D\u6210\u529F, 4=\u8D4E\u56DE\u4E2D, 5=\u8D4E\u56DE\u6210\u529F, 6=\u5DF2\u53D6\u6D88"),
|
|
23585
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
23586
|
+
},
|
|
23587
|
+
async ({ productId, state, limit }) => {
|
|
23588
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23589
|
+
try {
|
|
23590
|
+
const data = await privateApi.getStakingOrders(auth, productId, state, limit);
|
|
23591
|
+
return toResult(data);
|
|
23592
|
+
} catch (e) {
|
|
23593
|
+
return toError(e);
|
|
23594
|
+
}
|
|
23595
|
+
}
|
|
23596
|
+
);
|
|
23597
|
+
server.tool(
|
|
23598
|
+
"okx_stake_eth",
|
|
23599
|
+
"## \u529F\u80FD\uFF1A\u7533\u8D2DETH\u94FE\u4E0A\u8D28\u62BC\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06ETH\u5B58\u5165\u8D28\u62BC\u4EE5\u8D5A\u53D6\u5E74\u5316\u6536\u76CA\u3001\u957F\u671F\u6301\u6709ETH\u7684\u88AB\u52A8\u6536\u76CA\n## \u5173\u952E\u8BCD\uFF1AETH\u8D28\u62BC, stake eth, \u7533\u8D2D\u8D28\u62BC, ETH\u5B58\u5165, \u8D28\u62BC\u7533\u8D2D\n## \u53C2\u6570\uFF1A\n## - amt: \u8D28\u62BC\u6570\u91CF\uFF08ETH\uFF09\u3002\u5FC5\u586B\n## - rate: \u6536\u76CA\u7387\u7C7B\u578B\u30020.5=\u6D3B\u671F, 0.01=\u5B9A\u671F\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u7533\u8D2D\u6570\u91CF\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8D28\u62BCETH\u5C06\u9501\u4ED3\uFF0C\u63D0\u73B0\u5230\u8D26\u6709\u5EF6\u8FDF\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_eth_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u7533\u8D2D \u2192 okx_get_staking_orders \u786E\u8BA4",
|
|
23600
|
+
{
|
|
23601
|
+
amt: external_exports.string().describe("\u8D28\u62BC\u6570\u91CF\uFF08ETH\uFF09\u3002\u5FC5\u586B"),
|
|
23602
|
+
rate: external_exports.string().optional().describe("\u6536\u76CA\u7387\u7C7B\u578B\u30020.5=\u6D3B\u671F, 0.01=\u5B9A\u671F\u3002\u4E0D\u586B\u9ED8\u8BA4\u6D3B\u671F")
|
|
23603
|
+
},
|
|
23604
|
+
async ({ amt, rate }) => {
|
|
23605
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23606
|
+
try {
|
|
23607
|
+
const body = { amt };
|
|
23608
|
+
if (rate) body.rate = rate;
|
|
23609
|
+
const data = await privateApi.purchaseEthStaking(auth, body);
|
|
23610
|
+
return toResult(data);
|
|
23611
|
+
} catch (e) {
|
|
23612
|
+
return toError(e);
|
|
23613
|
+
}
|
|
23614
|
+
}
|
|
23615
|
+
);
|
|
23616
|
+
server.tool(
|
|
23617
|
+
"okx_unstake_eth",
|
|
23618
|
+
"## \u529F\u80FD\uFF1A\u8D4E\u56DEETH\u94FE\u4E0A\u8D28\u62BC\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06\u8D28\u62BC\u7684ETH\u8D4E\u56DE\u3001\u63D0\u53D6\u8D28\u62BC\u6536\u76CA\u3001\u5E94\u5BF9\u63D0\u73B0\u9700\u6C42\n## \u5173\u952E\u8BCD\uFF1A\u8D4E\u56DEETH, unstake eth, \u89E3\u9664\u8D28\u62BC, ETH\u8D4E\u56DE, \u63D0\u53D6\u8D28\u62BC\n## \u53C2\u6570\uFF1A\n## - amt: \u8D4E\u56DE\u6570\u91CF\uFF08ETH\uFF09\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\u8D4E\u56DE\u6570\u91CF\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8D4E\u56DEETH\u9700\u8981\u7B49\u5F85\u94FE\u4E0A\u786E\u8BA4\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_eth_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u8D4E\u56DE \u2192 okx_get_eth_staking_history \u786E\u8BA4",
|
|
23619
|
+
{
|
|
23620
|
+
amt: external_exports.string().describe("\u8D4E\u56DE\u6570\u91CF\uFF08ETH\uFF09\u3002\u5FC5\u586B")
|
|
23621
|
+
},
|
|
23622
|
+
async ({ amt }) => {
|
|
23623
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23624
|
+
try {
|
|
23625
|
+
const data = await privateApi.redeemEthStaking(auth, { amt });
|
|
23626
|
+
return toResult(data);
|
|
23627
|
+
} catch (e) {
|
|
23628
|
+
return toError(e);
|
|
23629
|
+
}
|
|
23630
|
+
}
|
|
23631
|
+
);
|
|
23632
|
+
server.tool(
|
|
23633
|
+
"okx_get_sol_staking_history",
|
|
23634
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2SOL\u8D28\u62BC\u7684\u7533\u8D2D/\u8D4E\u56DE\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2ASOL\u8D28\u62BC\u64CD\u4F5C\u3001\u6838\u5BF9\u8D28\u62BC\u548C\u8D4E\u56DE\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1ASOL\u8D28\u62BC\u5386\u53F2, sol staking history, \u8D28\u62BC\u8BB0\u5F55, SOL\u8D4E\u56DE\u8BB0\u5F55\n## \u53C2\u6570\uFF1A\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_sol_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u770B\u64CD\u4F5C\u5386\u53F2 \u2192 \u8BA1\u7B97\u6536\u76CA",
|
|
23635
|
+
{
|
|
23636
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
23637
|
+
},
|
|
23638
|
+
async ({ limit }) => {
|
|
23639
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23640
|
+
try {
|
|
23641
|
+
const data = await privateApi.getSolStakingHistory(auth, limit);
|
|
23642
|
+
return toResult(data);
|
|
23643
|
+
} catch (e) {
|
|
23644
|
+
return toError(e);
|
|
23645
|
+
}
|
|
23646
|
+
}
|
|
23647
|
+
);
|
|
23220
23648
|
}
|
|
23221
23649
|
|
|
23222
23650
|
// src/tools/outcomes.ts
|
|
@@ -23833,7 +24261,7 @@ async function main() {
|
|
|
23833
24261
|
const server = new McpServer({ name: "hvip", version: "0.2.1" });
|
|
23834
24262
|
const auth = getAuth();
|
|
23835
24263
|
registerMarketTools(server);
|
|
23836
|
-
registerPublicTools(server);
|
|
24264
|
+
registerPublicTools(server, auth);
|
|
23837
24265
|
registerStatsTools(server);
|
|
23838
24266
|
registerSpreadTools(server);
|
|
23839
24267
|
registerOutcomesTools(server);
|