hvip-mcp-server 0.2.16 → 0.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +512 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21151,6 +21151,9 @@ var publicApi = {
|
|
|
21151
21151
|
getFundingRate: (instId) => request("GET", "/api/v5/public/funding-rate", { params: { instId } }),
|
|
21152
21152
|
getMarkPrice: (instType, instId) => request("GET", "/api/v5/public/mark-price", { params: { instType, instId } }),
|
|
21153
21153
|
getIndexPrice: (instId) => request("GET", "/api/v5/market/index-tickers", { params: { instId } }),
|
|
21154
|
+
getBooksFull: (instId, sz) => request("GET", "/api/v5/market/books-full", { params: { instId, sz } }),
|
|
21155
|
+
getIndexTickers: (quoteCcy, instId) => request("GET", "/api/v5/market/index-tickers", { params: { quoteCcy, instId } }),
|
|
21156
|
+
getIndexCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/index-candles", { params: { instId, bar, after, before, limit } }),
|
|
21154
21157
|
getOpenInterest: (instType, instId) => request("GET", "/api/v5/public/open-interest", { params: { instType, instId } }),
|
|
21155
21158
|
getSystemTime: () => request("GET", "/api/v5/public/time"),
|
|
21156
21159
|
// ── 交易大数据(公共,无需鉴权) ─────────────────────────────────────────────
|
|
@@ -21189,7 +21192,16 @@ var publicApi = {
|
|
|
21189
21192
|
getAnnouncements: (annType, lang) => request("GET", "/api/v5/support/announcements", { params: { annType, lang } }),
|
|
21190
21193
|
getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types"),
|
|
21191
21194
|
getUnderlying: (instType) => request("GET", "/api/v5/public/underlying", { params: { instType } }),
|
|
21192
|
-
getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } })
|
|
21195
|
+
getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } }),
|
|
21196
|
+
getTopTradersContractLSRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/top-traders-contract-ls-ratio", { params: { ccy, begin, end } }),
|
|
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 } }),
|
|
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")
|
|
21193
21205
|
};
|
|
21194
21206
|
var privateApi = {
|
|
21195
21207
|
getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
|
|
@@ -21246,6 +21258,8 @@ var privateApi = {
|
|
|
21246
21258
|
getAlgoOrdersHistory: (auth, ordType, state, instType) => request("GET", "/api/v5/trade/orders-algo-history", { params: { ordType, state, instType }, auth }),
|
|
21247
21259
|
placeAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/order-algo", { body, auth }),
|
|
21248
21260
|
cancelAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/cancel-algos", { body, auth }),
|
|
21261
|
+
amendAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/amend-algos", { body, auth }),
|
|
21262
|
+
getOrdersAlgoPending: (auth, algoId, instType, instId, ordType, limit) => request("GET", "/api/v5/trade/orders-algo-pending", { params: { algoId, instType, instId, ordType, limit }, auth }),
|
|
21249
21263
|
// ── 子账户 ──────────────────────────────────────────────────────────────────
|
|
21250
21264
|
listSubAccounts: (auth, enable) => request("GET", "/api/v5/users/subaccount/list", { params: { enable }, auth }),
|
|
21251
21265
|
getSubAccountBalance: (auth, subAcct) => request("GET", "/api/v5/account/subaccount/balances", { params: { subAcct }, auth }),
|
|
@@ -21261,7 +21275,20 @@ var privateApi = {
|
|
|
21261
21275
|
getSignalPositions: (auth, algoId) => request("GET", "/api/v5/tradingBot/signal/positions", { params: { algoId }, auth }),
|
|
21262
21276
|
getSignalPositionsHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/positions-history", { params: { algoOrdType: "contract", algoId, limit }, auth }),
|
|
21263
21277
|
getSignalSubOrders: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/sub-orders", { params: { algoOrdType: "contract", algoId, limit }, auth }),
|
|
21264
|
-
getSignalEventHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/event-histories", { params: { algoId, limit }, auth })
|
|
21278
|
+
getSignalEventHistory: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/signal/event-histories", { params: { algoId, limit }, auth }),
|
|
21279
|
+
// ── 交易扩展 ──────────────────────────────────────────────────────────────────
|
|
21280
|
+
cancelAllAfter: (auth, body) => request("POST", "/api/v5/trade/cancel-all-after", { body, auth }),
|
|
21281
|
+
orderPrecheck: (auth, body) => request("POST", "/api/v5/trade/order-precheck", { body, auth }),
|
|
21282
|
+
getAccountRateLimit: (auth) => request("GET", "/api/v5/trade/account-rate-limit", { auth }),
|
|
21283
|
+
easyConvert: (auth, body) => request("POST", "/api/v5/trade/easy-convert", { body, auth }),
|
|
21284
|
+
getEasyConvertHistory: (auth, after, before, limit) => request("GET", "/api/v5/trade/easy-convert-history", { params: { after, before, limit }, auth }),
|
|
21285
|
+
// ── 账户+资金(第四批新增) ──────────────────────────────────────────────────
|
|
21286
|
+
setPositionMode: (auth, body) => request("POST", "/api/v5/account/set-position-mode", { body, auth }),
|
|
21287
|
+
getAssetValuation: (auth, ccy) => request("GET", "/api/v5/asset/asset-valuation", { params: { ccy }, auth }),
|
|
21288
|
+
getConvertCurrencies: (auth) => request("GET", "/api/v5/asset/convert/currencies", { auth }),
|
|
21289
|
+
convertTrade: (auth, body) => request("POST", "/api/v5/asset/convert/trade", { body, auth }),
|
|
21290
|
+
getSubAccountFundingBalance: (auth, subAcct) => request("GET", "/api/v5/asset/subaccount/balances", { params: { subAcct }, auth }),
|
|
21291
|
+
setSubAccountTransferOut: (auth, body) => request("POST", "/api/v5/users/subaccount/set-transfer-out", { body, auth })
|
|
21265
21292
|
};
|
|
21266
21293
|
|
|
21267
21294
|
// src/adapters/hrails.ts
|
|
@@ -21582,6 +21609,85 @@ function registerMarketTools(server) {
|
|
|
21582
21609
|
}
|
|
21583
21610
|
}
|
|
21584
21611
|
);
|
|
21612
|
+
server.tool(
|
|
21613
|
+
"okx_get_books_full",
|
|
21614
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EA7\u54C1\u5168\u6DF1\u5EA6\u8BA2\u5355\u7C3F\uFF08\u6240\u6709\u6863\u4F4D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7CBE\u786E\u5206\u6790\u5E02\u573A\u6D41\u52A8\u6027\u5168\u8C8C\u3001\u53D1\u73B0\u9690\u85CF\u7684\u5927\u989D\u6302\u5355\u3001\u8BA1\u7B97\u6DF1\u5EA6\u52A0\u6743\u4EF7\u683C\n## \u5173\u952E\u8BCD\uFF1A\u5168\u6DF1\u5EA6, \u5B8C\u6574\u8BA2\u5355\u7C3F, books full, \u6240\u6709\u6863\u4F4D, \u6DF1\u5EA6\u5206\u6790, \u6D41\u52A8\u6027\u5168\u666F\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - depth: \u6DF1\u5EA6\u6863\u4F4D\uFF0C\u9ED8\u8BA4\u5168\u90E8\uFF0C\u53EF\u9009\u6307\u5B9A\u6863\u4F4D\u6570\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\u3002\u26A0\uFE0F \u6570\u636E\u91CF\u5927\uFF08\u53EF\u8FBE\u6570\u767EKB\uFF09\uFF0C\u614E\u91CD\u5168\u91CF\u8FD4\u56DE\n## \u8FD4\u56DE\u91CF\uFF1A\u5927\u578B ~200KB+\uFF08\u5305\u542B\u6240\u6709\u6863\u4F4D\u6570\u636E\uFF09\n## \u5173\u8054\uFF1Aokx_get_orderbook \u770B\u6709\u9650\u6DF1\u5EA6 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u6DF1\u5EA6 \u2192 \u8BA1\u7B97\u7CBE\u786E\u5E02\u573A\u51B2\u51FB\u6210\u672C",
|
|
21615
|
+
{
|
|
21616
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
21617
|
+
depth: external_exports.number().int().min(1).max(400).optional().describe("\u6DF1\u5EA6\u6863\u4F4D\uFF0C\u9ED8\u8BA4\u5168\u91CF\uFF0C\u53EF\u9009\u9650\u5236")
|
|
21618
|
+
},
|
|
21619
|
+
async ({ instId, depth }) => {
|
|
21620
|
+
try {
|
|
21621
|
+
const data = await publicApi.getBooksFull(instId, depth);
|
|
21622
|
+
const enriched = data.data || data;
|
|
21623
|
+
if (Array.isArray(enriched)) {
|
|
21624
|
+
const withTsIso = enriched.map((item) => ({
|
|
21625
|
+
...item,
|
|
21626
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21627
|
+
}));
|
|
21628
|
+
return toResult(withTsIso);
|
|
21629
|
+
}
|
|
21630
|
+
if (enriched && typeof enriched === "object") {
|
|
21631
|
+
return toResult({
|
|
21632
|
+
...enriched,
|
|
21633
|
+
tsIso: enriched.ts ? new Date(parseInt(enriched.ts)).toISOString() : void 0
|
|
21634
|
+
});
|
|
21635
|
+
}
|
|
21636
|
+
return toResult(data);
|
|
21637
|
+
} catch (e) {
|
|
21638
|
+
return toError(e);
|
|
21639
|
+
}
|
|
21640
|
+
}
|
|
21641
|
+
);
|
|
21642
|
+
server.tool(
|
|
21643
|
+
"okx_get_index_tickers",
|
|
21644
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570\u884C\u60C5\u5217\u8868\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6307\u6570\u73B0\u8D27\u4EF7\u683C\u57FA\u51C6\u3001\u6279\u91CF\u83B7\u53D6\u5404\u5E01\u79CD\u6307\u6570\u4EF7\u683C\u3001\u5224\u65AD\u5408\u7EA6\u6807\u8BB0\u4EF7\u504F\u5DEE\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570\u884C\u60C5, index tickers, \u6307\u6570\u4EF7\u683C, \u52A0\u6743\u5747\u4EF7, \u73B0\u8D27\u57FA\u51C6\n## \u53C2\u6570\uFF1A\n## - quoteCcy: \u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USDT\u3001USD\u3001BTC\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - instId: \u6307\u5B9A\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6307\u6570\u4EF7\u683C \u2192 okx_get_mark_price \u770B\u6807\u8BB0\u4EF7 \u2192 \u5BF9\u6BD4\u504F\u5DEE\u5224\u65AD\u5957\u5229\u7A7A\u95F4",
|
|
21645
|
+
{
|
|
21646
|
+
quoteCcy: external_exports.string().optional().describe("\u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USDT\u3001USD\u3001BTC"),
|
|
21647
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT")
|
|
21648
|
+
},
|
|
21649
|
+
async ({ quoteCcy, instId }) => {
|
|
21650
|
+
try {
|
|
21651
|
+
const data = await publicApi.getIndexTickers(quoteCcy, instId);
|
|
21652
|
+
const enriched = data.map((item) => ({
|
|
21653
|
+
...item,
|
|
21654
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21655
|
+
}));
|
|
21656
|
+
return toResult(enriched);
|
|
21657
|
+
} catch (e) {
|
|
21658
|
+
return toError(e);
|
|
21659
|
+
}
|
|
21660
|
+
}
|
|
21661
|
+
);
|
|
21662
|
+
server.tool(
|
|
21663
|
+
"okx_get_index_candles",
|
|
21664
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570K\u7EBF\u6570\u636E\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\u7684OHLCV\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u73B0\u8D27\u5E02\u573A\u6574\u4F53\u4EF7\u683C\u8D70\u52BF\u3001\u6392\u9664\u5355\u4EA4\u6613\u6240\u5F02\u5E38\u6CE2\u52A8\u3001\u5224\u65AD\u771F\u5B9E\u5E02\u573A\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570K\u7EBF, index candles, \u6307\u6570OHLCV, \u52A0\u6743K\u7EBF, \u73B0\u8D27\u8D8B\u52BF\n## \u53C2\u6570\uFF1A\n## - instId: \u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - bar: K\u7EBF\u5468\u671F\u30021m/3m/5m/15m/30m=\u5206\u949F, 1H=1\u5C0F\u65F6, 4H=4\u5C0F\u65F6, 1D=\u65E5\u7EBF, 1W=\u5468\u7EBF\u3002\u9ED8\u8BA41H\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u5927300\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A100\u6761 ~5KB \u2014 \u5FAE\u5C0F\n## \u5173\u8054\uFF1Aokx_get_candles \u770B\u5355\u4EA4\u6613\u6240K\u7EBF \u2192 \u672C\u5DE5\u5177\u770B\u6307\u6570K\u7EBF \u2192 \u5BF9\u6BD4\u5224\u65AD\u4EA4\u6613\u6240\u504F\u5DEE",
|
|
21665
|
+
{
|
|
21666
|
+
instId: external_exports.string().describe("\u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
21667
|
+
bar: external_exports.enum(["1m", "3m", "5m", "15m", "30m", "1H", "4H", "1D", "1W"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
|
|
21668
|
+
after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
21669
|
+
before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u6570\u636E\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
21670
|
+
limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
21671
|
+
},
|
|
21672
|
+
async ({ instId, bar, after, before, limit }) => {
|
|
21673
|
+
try {
|
|
21674
|
+
const data = await publicApi.getIndexCandles(instId, bar, after, before, limit);
|
|
21675
|
+
const enriched = data.map((row) => ({
|
|
21676
|
+
ts: row[0],
|
|
21677
|
+
tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
|
|
21678
|
+
open: row[1],
|
|
21679
|
+
high: row[2],
|
|
21680
|
+
low: row[3],
|
|
21681
|
+
close: row[4],
|
|
21682
|
+
vol: row[5],
|
|
21683
|
+
volCcy: row[6]
|
|
21684
|
+
}));
|
|
21685
|
+
return toResult(enriched);
|
|
21686
|
+
} catch (e) {
|
|
21687
|
+
return toError(e);
|
|
21688
|
+
}
|
|
21689
|
+
}
|
|
21690
|
+
);
|
|
21585
21691
|
}
|
|
21586
21692
|
|
|
21587
21693
|
// src/tools/public.ts
|
|
@@ -21880,6 +21986,112 @@ function registerPublicTools(server) {
|
|
|
21880
21986
|
}
|
|
21881
21987
|
}
|
|
21882
21988
|
);
|
|
21989
|
+
server.tool(
|
|
21990
|
+
"okx_get_platform_24_volume",
|
|
21991
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u5E73\u53F024\u5C0F\u65F6\u603B\u4EA4\u6613\u91CF\uFF08\u73B0\u8D27+\u5408\u7EA6+\u671F\u6743\u5408\u8BA1\uFF09\uFF0C\u4E0D\u542B\u7279\u5B9A\u5E01\u79CD\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BC4\u4F30\u4EA4\u6613\u6240\u6574\u4F53\u6D3B\u8DC3\u5EA6\u3001\u5224\u65AD\u5E02\u573A\u70ED\u5EA6\u9AD8\u4F4E\u3001\u76D1\u63A7\u5E73\u53F0\u4EA4\u6613\u91CF\u53D8\u5316\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u5E73\u53F0\u4EA4\u6613\u91CF, 24\u5C0F\u65F6\u4EA4\u6613\u91CF, platform volume, \u603B\u6210\u4EA4\u91CF, \u5E02\u573A\u70ED\u5EA6, \u5168\u5E73\u53F0\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u5168\u5E73\u53F0\u70ED\u5EA6 \u2192 okx_get_ticker \u770B\u5177\u4F53\u4EA7\u54C1 \u2192 okx_get_tickers \u626B\u63CF\u5E02\u573A",
|
|
21992
|
+
{},
|
|
21993
|
+
async () => {
|
|
21994
|
+
try {
|
|
21995
|
+
const data = await publicApi.getPlatform24Volume();
|
|
21996
|
+
const enriched = data.map((item) => ({
|
|
21997
|
+
...item,
|
|
21998
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21999
|
+
}));
|
|
22000
|
+
return toResult(enriched);
|
|
22001
|
+
} catch (e) {
|
|
22002
|
+
return toError(e);
|
|
22003
|
+
}
|
|
22004
|
+
}
|
|
22005
|
+
);
|
|
22006
|
+
server.tool(
|
|
22007
|
+
"okx_get_call_auction_details",
|
|
22008
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EA7\u54C1\u96C6\u5408\u7ADE\u4EF7\u8BE6\u60C5\uFF0C\u542B\u5F53\u524D\u7ADE\u4EF7\u7684\u672A\u5339\u914D\u91CF\u548C\u53C2\u8003\u4EF7\u683C\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5F00\u76D8\u524D/\u76D8\u524D\u4EA4\u6613\u65F6\u6BB5\u67E5\u770B\u96C6\u5408\u7ADE\u4EF7\u4F9B\u9700\u3001\u5224\u65AD\u5F00\u76D8\u4EF7\u683C\u533A\u95F4\u3001\u53D1\u73B0\u5F02\u5E38\u7ADE\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u96C6\u5408\u7ADE\u4EF7, call auction, \u7ADE\u4EF7\u8BE6\u60C5, \u5F00\u76D8\u7ADE\u4EF7, \u76D8\u524D\u7ADE\u4EF7, \u672A\u5339\u914D\u91CF\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5355\u4EA7\u54C1 ~500B \u2014 \u5FAE\u5C0F\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u7ADE\u4EF7 \u2192 okx_get_ticker \u770B\u5F00\u76D8\u4EF7 \u2192 \u5F00\u76D8\u540E okx_get_candles \u8DDF\u8E2A\u8D70\u52BF",
|
|
22009
|
+
{
|
|
22010
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B")
|
|
22011
|
+
},
|
|
22012
|
+
async ({ instId }) => {
|
|
22013
|
+
try {
|
|
22014
|
+
const data = await publicApi.getCallAuctionDetails(instId);
|
|
22015
|
+
const enriched = data.map((item) => ({
|
|
22016
|
+
...item,
|
|
22017
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0,
|
|
22018
|
+
auctionEndTimeIso: item.auctionEndTime ? new Date(parseInt(item.auctionEndTime)).toISOString() : void 0
|
|
22019
|
+
}));
|
|
22020
|
+
return toResult(enriched);
|
|
22021
|
+
} catch (e) {
|
|
22022
|
+
return toError(e);
|
|
22023
|
+
}
|
|
22024
|
+
}
|
|
22025
|
+
);
|
|
22026
|
+
server.tool(
|
|
22027
|
+
"okx_get_option_instrument_family_trades",
|
|
22028
|
+
`## \u529F\u80FD\uFF1A\u6309\u4EA7\u54C1\u65CF\u83B7\u53D6\u671F\u6743\u94FE\u6700\u65B0\u6210\u4EA4\uFF08\u6309\u671F\u6743\u7C7B\u578B\u5F52\u7EC4\uFF09
|
|
22029
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u6D4F\u89C8\u67D0BTC/ETH\u671F\u6743\u94FE\u6574\u4F53\u6210\u4EA4\u6982\u51B5\u3001\u5BF9\u6BD4\u770B\u6DA8/\u770B\u8DCC\u6210\u4EA4\u5206\u5E03\u3001\u53D1\u73B0\u5927\u989D\u671F\u6743\u5F02\u52A8
|
|
22030
|
+
## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u65CF\u6210\u4EA4, option family trades, \u671F\u6743\u94FE\u6210\u4EA4, \u671F\u6743\u6210\u4EA4\u6982\u51B5, \u671F\u6743\u6210\u4EA4\u6C47\u603B
|
|
22031
|
+
## \u53C2\u6570\uFF1A
|
|
22032
|
+
## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B
|
|
22033
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u90E8
|
|
22034
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
22035
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22036
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
|
|
22037
|
+
## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_instruments(instType=OPTION) \u83B7\u53D6\u671F\u6743\u4EA7\u54C1 \u2192 \u672C\u5DE5\u5177\u770B\u65CF\u6210\u4EA4 \u2192 okx_get_option_trades \u770B\u5355\u7B14`,
|
|
22038
|
+
{
|
|
22039
|
+
instFamily: external_exports.string().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B"),
|
|
22040
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570")
|
|
22041
|
+
},
|
|
22042
|
+
async ({ instFamily, limit }) => {
|
|
22043
|
+
try {
|
|
22044
|
+
const data = await publicApi.getOptionInstrumentFamilyTrades(instFamily, limit);
|
|
22045
|
+
return toResult(data);
|
|
22046
|
+
} catch (e) {
|
|
22047
|
+
return toError(e);
|
|
22048
|
+
}
|
|
22049
|
+
}
|
|
22050
|
+
);
|
|
22051
|
+
server.tool(
|
|
22052
|
+
"okx_get_option_trades",
|
|
22053
|
+
`## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u9010\u7B14\u6210\u4EA4\u8BB0\u5F55
|
|
22054
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u5177\u4F53\u671F\u6743\u5408\u7EA6\u7684\u6210\u4EA4\u4EF7\u91CF\u5206\u5E03\u3001\u5224\u65AD\u4E3B\u52A8\u4E70\u5356\u65B9\u5411\u3001\u8DDF\u8E2A\u671F\u6743\u5927\u5355
|
|
22055
|
+
## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u6210\u4EA4, option trades, \u9010\u7B14\u671F\u6743\u6210\u4EA4, \u671F\u6743\u660E\u7EC6, \u671F\u6743\u5927\u5355, option fill
|
|
22056
|
+
## \u53C2\u6570\uFF1A
|
|
22057
|
+
## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u4E0EinstId\u4E8C\u9009\u4E00
|
|
22058
|
+
## - instId: \u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u4E0EinstFamily\u4E8C\u9009\u4E00
|
|
22059
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u5927100
|
|
22060
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
22061
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22062
|
+
## \u8FD4\u56DE\u91CF\uFF1A100\u6761 ~5KB \u2014 \u4E2D\u7B49
|
|
22063
|
+
## \u5173\u8054\uFF1Aokx_get_option_instrument_family_trades \u770B\u65CF\u6982\u51B5 \u2192 \u672C\u5DE5\u5177\u770B\u9010\u7B14 \u2192 okx_get_opt_summary \u770B\u6CE2\u52A8\u7387`,
|
|
22064
|
+
{
|
|
22065
|
+
instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u4E0EinstId\u4E8C\u9009\u4E00"),
|
|
22066
|
+
instId: external_exports.string().optional().describe("\u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u4E0EinstFamily\u4E8C\u9009\u4E00"),
|
|
22067
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22068
|
+
},
|
|
22069
|
+
async ({ instFamily, instId, limit }) => {
|
|
22070
|
+
try {
|
|
22071
|
+
const data = await publicApi.getOptionTrades(instFamily, instId, limit);
|
|
22072
|
+
const enriched = data.map((item) => ({
|
|
22073
|
+
...item,
|
|
22074
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
22075
|
+
}));
|
|
22076
|
+
return toResult(enriched);
|
|
22077
|
+
} catch (e) {
|
|
22078
|
+
return toError(e);
|
|
22079
|
+
}
|
|
22080
|
+
}
|
|
22081
|
+
);
|
|
22082
|
+
server.tool(
|
|
22083
|
+
"okx_get_exchange_rate",
|
|
22084
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u5E73\u53F0\u652F\u6301\u7684\u6CD5\u5B9A\u8D27\u5E01\u6C47\u7387\uFF08\u5982USD/CNY\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06\u7F8E\u5143\u8BA1\u4EF7\u76C8\u4E8F\u6362\u7B97\u4E3A\u672C\u5730\u6CD5\u5E01\u3001\u8BA1\u7B97\u6CD5\u5E01\u51FA\u5165\u91D1\u91D1\u989D\n## \u5173\u952E\u8BCD\uFF1A\u6C47\u7387, exchange rate, \u6CD5\u5E01\u6C47\u7387, USD/CNY, \u7F8E\u5143\u6C47\u7387, \u4EBA\u6C11\u5E01\u6C47\u7387\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~100B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u6C47\u7387 \u2192 \u8F85\u52A9\u8BA1\u7B97\u76C8\u4E8F \u2192 \u7528\u6237\u4E86\u89E3\u672C\u5730\u6CD5\u5E01\u4EF7\u503C",
|
|
22085
|
+
{},
|
|
22086
|
+
async () => {
|
|
22087
|
+
try {
|
|
22088
|
+
const data = await publicApi.getExchangeRate();
|
|
22089
|
+
return toResult(data);
|
|
22090
|
+
} catch (e) {
|
|
22091
|
+
return toError(e);
|
|
22092
|
+
}
|
|
22093
|
+
}
|
|
22094
|
+
);
|
|
21883
22095
|
server.tool(
|
|
21884
22096
|
"okx_search_instruments",
|
|
21885
22097
|
"## \u529F\u80FD\uFF1A\u6309\u5173\u952E\u8BCD\u641C\u7D22\u53EF\u4EA4\u6613\u4EA7\u54C1\uFF08\u73B0\u8D27/\u5408\u7EA6/\u671F\u6743\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7528\u6237\u8F93\u5165\u4EA7\u54C1\u540D\u79F0\u6A21\u7CCA\u67E5\u627E instId\u3001\u53D1\u73B0\u65B0\u4EA7\u54C1\u3001\u786E\u8BA4\u67D0\u5E01\u79CD\u6709\u54EA\u4E9B\u53EF\u4EA4\u6613\u4EA7\u54C1\n## \u5173\u952E\u8BCD\uFF1A\u641C\u7D22, \u67E5\u627E\u4EA7\u54C1, search instruments, \u4EA7\u54C1\u641C\u7D22, \u6A21\u7CCA\u67E5\u8BE2, \u5E01\u79CD\u641C\u7D22, find instrument\n## \u53C2\u6570\uFF1A\n## - keyword: \u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u5982 BTC\u3001ETH\u3001SOL\u3002\u5FC5\u586B\uFF0C\u6700\u5C112\u5B57\u7B26\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009\u3002\u4E0D\u586B\u5219\u641C\u7D22\u5168\u90E8\u7C7B\u578B\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB \u2014 \u6700\u591A\u8FD4\u56DE top 20 \u5339\u914D\u7ED3\u679C\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u641C\u7D22\u4EA7\u54C1 \u2192 okx_get_ticker \u67E5\u884C\u60C5 \u2192 okx_place_order \u4E0B\u5355",
|
|
@@ -22131,6 +22343,80 @@ function registerAccountTools(server, auth) {
|
|
|
22131
22343
|
}
|
|
22132
22344
|
}
|
|
22133
22345
|
);
|
|
22346
|
+
server.tool(
|
|
22347
|
+
"okx_set_position_mode",
|
|
22348
|
+
"## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u6301\u4ED3\u6A21\u5F0F\uFF08\u5355\u5411\u6301\u4ED3/\u53CC\u5411\u6301\u4ED3\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5207\u6362\u6301\u4ED3\u6A21\u5F0F\uFF08\u5982\u4ECE\u5355\u5411\u5207\u5230\u53CC\u5411\u652F\u6301\u540C\u65F6\u505A\u591A\u7A7A\uFF09\u3001\u5F00\u5355\u524D\u786E\u8BA4\u6301\u4ED3\u6A21\u5F0F\u6B63\u786E\n## \u5173\u952E\u8BCD\uFF1A\u6301\u4ED3\u6A21\u5F0F, \u6301\u4ED3\u65B9\u5411, position mode, \u53CC\u5411\u6301\u4ED3, \u5355\u5411\u6301\u4ED3, \u9501\u4ED3\n## \u53C2\u6570\uFF1A\n## - posMode: \u6301\u4ED3\u6A21\u5F0F\u3002long_short_mode=\u53CC\u5411\u6301\u4ED3, net_mode=\u5355\u5411\u6301\u4ED3\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539\u8D26\u6237\u914D\u7F6E\uFF0C\u5F71\u54CD\u6240\u6709\u5408\u7EA6/\u6760\u6746\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_account_config \u770B\u5F53\u524D\u6A21\u5F0F \u2192 \u672C\u5DE5\u5177\u5207\u6362 \u2192 \u8C03 okx_set_leverage \u8BBE\u6760\u6746",
|
|
22349
|
+
{
|
|
22350
|
+
posMode: external_exports.enum(["long_short_mode", "net_mode"]).describe("\u6301\u4ED3\u6A21\u5F0F\u3002long_short_mode=\u53CC\u5411\u6301\u4ED3, net_mode=\u5355\u5411\u6301\u4ED3")
|
|
22351
|
+
},
|
|
22352
|
+
async ({ posMode }) => {
|
|
22353
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22354
|
+
try {
|
|
22355
|
+
const data = await privateApi.setPositionMode(auth, { posMode });
|
|
22356
|
+
return toResult(data);
|
|
22357
|
+
} catch (e) {
|
|
22358
|
+
return toError(e);
|
|
22359
|
+
}
|
|
22360
|
+
}
|
|
22361
|
+
);
|
|
22362
|
+
server.tool(
|
|
22363
|
+
"okx_get_asset_valuation",
|
|
22364
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u8D26\u6237\u603B\u8D44\u4EA7\u4F30\u503C\uFF08\u542B\u4EA4\u6613\u8D26\u6237\u548C\u8D44\u91D1\u8D26\u6237\u603B\u6743\u76CA\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u603B\u8D44\u4EA7\u6982\u51B5\u3001\u6309\u5E01\u79CD\u7EDF\u8BA1\u6301\u4ED3\u4EF7\u503C\u3001\u6838\u5BF9\u8D26\u6237\u603B\u6743\u76CA\u53D8\u5316\n## \u5173\u952E\u8BCD\uFF1A\u8D44\u4EA7\u4F30\u503C, \u603B\u8D44\u4EA7, asset valuation, \u8D26\u6237\u603B\u6743\u76CA, \u8D44\u4EA7\u6982\u51B5\n## \u53C2\u6570\uFF1A\n## - ccy: \u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USD\u3001CNY\u3002\u4E0D\u586B\u9ED8\u8BA4\u6309\u6240\u6709\u5E01\u79CD\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u603B\u8D44\u4EA7 \u2192 okx_get_balance \u770B\u4EA4\u6613\u8D26\u6237 \u2192 okx_get_funding_balance \u770B\u8D44\u91D1\u8D26\u6237",
|
|
22365
|
+
{
|
|
22366
|
+
ccy: external_exports.string().optional().describe("\u8BA1\u4EF7\u5E01\u79CD\uFF0C\u5982 USD\u3001CNY\u3002\u4E0D\u586B\u9ED8\u8BA4\u6309\u6240\u6709\u5E01\u79CD")
|
|
22367
|
+
},
|
|
22368
|
+
async ({ ccy }) => {
|
|
22369
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22370
|
+
try {
|
|
22371
|
+
const data = await privateApi.getAssetValuation(auth, ccy);
|
|
22372
|
+
return toResult(data);
|
|
22373
|
+
} catch (e) {
|
|
22374
|
+
return toError(e);
|
|
22375
|
+
}
|
|
22376
|
+
}
|
|
22377
|
+
);
|
|
22378
|
+
server.tool(
|
|
22379
|
+
"okx_get_convert_currencies",
|
|
22380
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u652F\u6301\u7684\u4E00\u952E\u5151\u6362\u5E01\u79CD\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5728\u95EA\u5151\u524D\u67E5\u770B\u652F\u6301\u54EA\u4E9B\u5151\u6362\u5BF9\u3001\u786E\u8BA4\u76EE\u6807\u5E01\u79CD\u662F\u5426\u53EF\u5151\u6362\n## \u5173\u952E\u8BCD\uFF1A\u5151\u6362\u5E01\u79CD, convert currencies, \u95EA\u5151\u5217\u8868, \u5151\u6362\u652F\u6301, \u53EF\u5151\u6362\u5E01\u79CD\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u53EF\u5151\u6362\u5E01\u79CD \u2192 okx_convert_trade \u6267\u884C\u5151\u6362 \u2192 okx_get_easy_convert_history \u67E5\u8BB0\u5F55",
|
|
22381
|
+
{},
|
|
22382
|
+
async () => {
|
|
22383
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22384
|
+
try {
|
|
22385
|
+
const data = await privateApi.getConvertCurrencies(auth);
|
|
22386
|
+
return toResult(data);
|
|
22387
|
+
} catch (e) {
|
|
22388
|
+
return toError(e);
|
|
22389
|
+
}
|
|
22390
|
+
}
|
|
22391
|
+
);
|
|
22392
|
+
server.tool(
|
|
22393
|
+
"okx_convert_trade",
|
|
22394
|
+
`## \u529F\u80FD\uFF1A\u6267\u884C\u8D44\u4EA7\u5151\u6362\uFF08\u5C06\u4E00\u79CD\u8D44\u4EA7\u76F4\u63A5\u6362\u6210\u53E6\u4E00\u79CD\uFF0C\u5982 USDT\u2192BTC\uFF09
|
|
22395
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u6362\u5E01\u3001\u5C0F\u989D\u8D44\u4EA7\u5151\u6362\u3001\u65E0\u9700\u6302\u5355\u7684\u5373\u65F6\u5151\u6362
|
|
22396
|
+
## \u5173\u952E\u8BCD\uFF1A\u5151\u6362, convert trade, \u8D44\u4EA7\u5151\u6362, \u6362\u5E01, \u4E00\u952E\u5151\u6362, \u95EA\u5151
|
|
22397
|
+
## \u53C2\u6570\uFF1A
|
|
22398
|
+
## - fromCcy: \u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B
|
|
22399
|
+
## - toCcy: \u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B
|
|
22400
|
+
## - sz: \u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B
|
|
22401
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u5151\u6362\u65B9\u5411\u548C\u6570\u91CF
|
|
22402
|
+
## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u4EA7\u751F\u771F\u5B9E\u5151\u6362\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22403
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
|
|
22404
|
+
## \u5173\u8054\uFF1Aokx_get_convert_currencies \u67E5\u652F\u6301\u5E01\u79CD \u2192 \u672C\u5DE5\u5177\u5151\u6362 \u2192 okx_get_balance \u786E\u8BA4\u5230\u8D26`,
|
|
22405
|
+
{
|
|
22406
|
+
fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B"),
|
|
22407
|
+
toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B"),
|
|
22408
|
+
sz: external_exports.string().describe("\u5356\u51FA\u6570\u91CF\u3002\u5FC5\u586B")
|
|
22409
|
+
},
|
|
22410
|
+
async ({ fromCcy, toCcy, sz }) => {
|
|
22411
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22412
|
+
try {
|
|
22413
|
+
const data = await privateApi.convertTrade(auth, { fromCcy, toCcy, sz });
|
|
22414
|
+
return toResult(data);
|
|
22415
|
+
} catch (e) {
|
|
22416
|
+
return toError(e);
|
|
22417
|
+
}
|
|
22418
|
+
}
|
|
22419
|
+
);
|
|
22134
22420
|
server.tool(
|
|
22135
22421
|
"okx_get_margin_balance",
|
|
22136
22422
|
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u67D0\u4EA7\u54C1\u7684\u4FDD\u8BC1\u91D1\u4F59\u989D\u8BE6\u60C5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6760\u6746/\u5408\u7EA6\u4EA4\u6613\u524D\u67E5\u770B\u53EF\u7528\u4FDD\u8BC1\u91D1\u3001\u5360\u7528\u4FDD\u8BC1\u91D1\u3001\u4FDD\u8BC1\u91D1\u7387\n## \u5173\u952E\u8BCD\uFF1A\u4FDD\u8BC1\u91D1\u4F59\u989D, \u4FDD\u8BC1\u91D1\u7387, margin balance, \u53EF\u7528\u4FDD\u8BC1\u91D1, \u5360\u7528\u4FDD\u8BC1\u91D1\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B\n## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_balance \u67E5\u603B\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u4FDD\u8BC1\u91D1 \u2192 okx_get_positions \u67E5\u6301\u4ED3",
|
|
@@ -22430,6 +22716,97 @@ function registerTradingTools(server, auth) {
|
|
|
22430
22716
|
}
|
|
22431
22717
|
}
|
|
22432
22718
|
);
|
|
22719
|
+
server.tool(
|
|
22720
|
+
"okx_cancel_all_after",
|
|
22721
|
+
"## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u5B9A\u65F6\u5168\u64A4\uFF08N\u79D2\u540E\u81EA\u52A8\u64A4\u9500\u6240\u6709\u6302\u5355\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6781\u7AEF\u884C\u60C5\u4E0B\u542F\u52A8\u7D27\u6025\u64A4\u5355\u5012\u8BA1\u65F6\u3001\u7A0B\u5E8F\u5316\u98CE\u9669\u63A7\u5236\u3001\u8D85\u65F6\u81EA\u52A8\u6E05\u7A7A\u6302\u5355\n## \u5173\u952E\u8BCD\uFF1A\u5B9A\u65F6\u5168\u64A4, cancel all after, \u5012\u8BA1\u65F6\u64A4\u5355, \u7D27\u6025\u98CE\u63A7, \u81EA\u52A8\u64A4\u5355\n## \u53C2\u6570\uFF1A\n## - timeOut: \u5012\u8BA1\u65F6\u79D2\u6570\u30020=\u53D6\u6D88\u5B9A\u65F6\u5168\u64A4, \u6B63\u6570=\u8BBEN\u79D2\u540E\u5168\u64A4\u3002\u6700\u5927120\u79D2\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u98CE\u63A7\u6838\u5FC3\u5DE5\u5177\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u5B9A\u65F6\u64A4\u9500\u6240\u6709\u6302\u5355\uFF0C\u5F71\u54CD\u8303\u56F4\u6781\u5927\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_orders_pending \u786E\u8BA4\u5F53\u524D\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u8BBE\u5012\u8BA1\u65F6 \u2192 \u5230\u65F6\u95F4\u81EA\u52A8\u64A4\u9500",
|
|
22722
|
+
{
|
|
22723
|
+
timeOut: external_exports.string().describe("\u5012\u8BA1\u65F6\u79D2\u6570\uFF0C0=\u53D6\u6D88\u5B9A\u65F6\u5168\u64A4\uFF0C\u6B63\u6570=\u8BBEN\u79D2\u540E\u5168\u64A4\uFF0C\u6700\u5927120\u79D2")
|
|
22724
|
+
},
|
|
22725
|
+
async ({ timeOut }) => {
|
|
22726
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22727
|
+
try {
|
|
22728
|
+
const data = await privateApi.cancelAllAfter(auth, { timeOut });
|
|
22729
|
+
return toResult(data);
|
|
22730
|
+
} catch (e) {
|
|
22731
|
+
return toError(e);
|
|
22732
|
+
}
|
|
22733
|
+
}
|
|
22734
|
+
);
|
|
22735
|
+
server.tool(
|
|
22736
|
+
"okx_order_precheck",
|
|
22737
|
+
`## \u529F\u80FD\uFF1A\u4E0B\u5355\u9884\u68C0\uFF08\u9A8C\u8BC1\u8BA2\u5355\u53C2\u6570\u662F\u5426\u5408\u6CD5\uFF0C\u4E0D\u5B9E\u9645\u4E0B\u5355\uFF09
|
|
22738
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u4E0B\u5355\u524D\u9A8C\u8BC1\u53C2\u6570\u6B63\u786E\u6027\u3001\u68C0\u67E5\u4F59\u989D\u548C\u98CE\u63A7\u9650\u5236\u3001\u907F\u514D\u56E0\u53C2\u6570\u9519\u8BEF\u5BFC\u81F4\u7684\u8BA2\u5355\u5931\u8D25
|
|
22739
|
+
## \u5173\u952E\u8BCD\uFF1A\u4E0B\u5355\u9884\u68C0, \u9884\u68C0\u67E5, order precheck, \u8BA2\u5355\u9A8C\u8BC1, \u53C2\u6570\u68C0\u67E5
|
|
22740
|
+
## \u53C2\u6570\uFF1A
|
|
22741
|
+
## - params: \u8BA2\u5355\u53C2\u6570JSON\u5BF9\u8C61\uFF0C\u4E0E okx_place_order \u53C2\u6570\u76F8\u540C\u3002\u5FC5\u586B
|
|
22742
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
22743
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u9884\u68C0\uFF0C\u4E0D\u4EA7\u751F\u5B9E\u9645\u8BA2\u5355\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22744
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
|
|
22745
|
+
## \u5173\u8054\uFF1Aokx_place_order \u4E0B\u5355\u524D \u2192 \u672C\u5DE5\u5177\u9884\u68C0\u53C2\u6570 \u2192 \u901A\u8FC7\u540E\u6B63\u5F0F\u4E0B\u5355`,
|
|
22746
|
+
{
|
|
22747
|
+
params: external_exports.string().describe(`\u8BA2\u5355\u53C2\u6570JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '{"instId":"BTC-USDT","tdMode":"cash","side":"buy","ordType":"limit","sz":"0.001","px":"60000"}'`)
|
|
22748
|
+
},
|
|
22749
|
+
async ({ params }) => {
|
|
22750
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22751
|
+
try {
|
|
22752
|
+
const parsed = JSON.parse(params);
|
|
22753
|
+
const data = await privateApi.orderPrecheck(auth, parsed);
|
|
22754
|
+
return toResult(data);
|
|
22755
|
+
} catch (e) {
|
|
22756
|
+
return toError(e);
|
|
22757
|
+
}
|
|
22758
|
+
}
|
|
22759
|
+
);
|
|
22760
|
+
server.tool(
|
|
22761
|
+
"okx_get_account_rate_limit",
|
|
22762
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u8D26\u6237\u7684API\u9891\u7387\u9650\u5236\u4F7F\u7528\u60C5\u51B5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u9AD8\u9891\u4EA4\u6613\u524D\u68C0\u67E5\u5269\u4F59\u914D\u989D\u3001\u907F\u514D\u89E6\u53D1\u9650\u9891\u3001\u8C03\u6574\u8BF7\u6C42\u8282\u594F\n## \u5173\u952E\u8BCD\uFF1A\u9891\u7387\u9650\u5236, rate limit, API\u914D\u989D, \u9650\u9891\u67E5\u8BE2, \u5269\u4F59\u6B21\u6570\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 ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u5269\u4F59\u914D\u989D \u2192 \u9AD8\u9891\u4E0B\u5355\u524D\u786E\u8BA4 \u2192 \u907F\u514D HTTP 429 \u9519\u8BEF",
|
|
22763
|
+
{},
|
|
22764
|
+
async () => {
|
|
22765
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22766
|
+
try {
|
|
22767
|
+
const data = await privateApi.getAccountRateLimit(auth);
|
|
22768
|
+
return toResult(data);
|
|
22769
|
+
} catch (e) {
|
|
22770
|
+
return toError(e);
|
|
22771
|
+
}
|
|
22772
|
+
}
|
|
22773
|
+
);
|
|
22774
|
+
server.tool(
|
|
22775
|
+
"okx_easy_convert",
|
|
22776
|
+
"## \u529F\u80FD\uFF1A\u95EA\u5151\uFF08\u4E00\u952E\u5151\u6362\u4E0D\u540C\u5E01\u79CD\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5FEB\u901F\u5151\u6362USDT\u5230BTC/ETH\u7B49\u3001\u5C0F\u989D\u6362\u5E01\u9700\u6C42\u3001\u65E0\u9700\u6302\u5355\u5373\u65F6\u6210\u4EA4\n## \u5173\u952E\u8BCD\uFF1A\u95EA\u5151, easy convert, \u5E01\u79CD\u5151\u6362, \u4E00\u952E\u6362\u5E01, \u5FEB\u901F\u5151\u6362\n## \u53C2\u6570\uFF1A\n## - fromCcy: \u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B\n## - toCcy: \u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B\n## - sz: \u5356\u51FA\u6570\u91CF\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\u5151\u6362\u5E01\u79CD\u548C\u6570\u91CF\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u4EA7\u751F\u771F\u5B9E\u5151\u6362\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_ticker \u770B\u5F53\u524D\u4EF7 \u2192 \u672C\u5DE5\u5177\u95EA\u5151 \u2192 okx_get_easy_convert_history \u67E5\u8BB0\u5F55",
|
|
22777
|
+
{
|
|
22778
|
+
fromCcy: external_exports.string().describe("\u5356\u51FA\u5E01\u79CD\uFF0C\u5982 USDT"),
|
|
22779
|
+
toCcy: external_exports.string().describe("\u4E70\u5165\u5E01\u79CD\uFF0C\u5982 BTC"),
|
|
22780
|
+
sz: external_exports.string().describe("\u5356\u51FA\u6570\u91CF")
|
|
22781
|
+
},
|
|
22782
|
+
async ({ fromCcy, toCcy, sz }) => {
|
|
22783
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22784
|
+
try {
|
|
22785
|
+
const data = await privateApi.easyConvert(auth, { fromCcy, toCcy, sz });
|
|
22786
|
+
return toResult(data);
|
|
22787
|
+
} catch (e) {
|
|
22788
|
+
return toError(e);
|
|
22789
|
+
}
|
|
22790
|
+
}
|
|
22791
|
+
);
|
|
22792
|
+
server.tool(
|
|
22793
|
+
"okx_get_easy_convert_history",
|
|
22794
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u95EA\u5151\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u95EA\u5151\u4EA4\u6613\u3001\u6838\u5BF9\u5151\u6362\u6C47\u7387\u3001\u7EDF\u8BA1\u6362\u5E01\u6210\u672C\n## \u5173\u952E\u8BCD\uFF1A\u95EA\u5151\u5386\u53F2, easy convert history, \u5151\u6362\u8BB0\u5F55, \u6362\u5E01\u5386\u53F2\n## \u53C2\u6570\uFF1A\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\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_easy_convert \u95EA\u5151 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 okx_get_account_bills \u5BF9\u8D26",
|
|
22795
|
+
{
|
|
22796
|
+
after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
22797
|
+
before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
22798
|
+
limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22799
|
+
},
|
|
22800
|
+
async ({ after, before, limit }) => {
|
|
22801
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22802
|
+
try {
|
|
22803
|
+
const data = await privateApi.getEasyConvertHistory(auth, after, before, limit);
|
|
22804
|
+
return toResult(data);
|
|
22805
|
+
} catch (e) {
|
|
22806
|
+
return toError(e);
|
|
22807
|
+
}
|
|
22808
|
+
}
|
|
22809
|
+
);
|
|
22433
22810
|
}
|
|
22434
22811
|
|
|
22435
22812
|
// src/tools/algo.ts
|
|
@@ -22500,6 +22877,43 @@ function registerAlgoTools(server, auth) {
|
|
|
22500
22877
|
}
|
|
22501
22878
|
}
|
|
22502
22879
|
);
|
|
22880
|
+
server.tool(
|
|
22881
|
+
"okx_get_orders_algo_pending",
|
|
22882
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F85\u89E6\u53D1\u7684\u7B56\u7565\u59D4\u6258\u5355\uFF08\u66F4\u7075\u6D3B\u7684\u67E5\u8BE2\u65B9\u5F0F\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6240\u6709\u5F85\u89E6\u53D1\u7B56\u7565\u3001\u6309\u4EA7\u54C1\u6216ID\u7CBE\u786E\u67E5\u627E\u7B56\u7565\u5355\u3001\u76D1\u63A7\u81EA\u52A8\u4EA4\u6613\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u7B56\u7565\u6302\u5355, orders algo pending, \u5F85\u89E6\u53D1, \u6761\u4EF6\u5355\u67E5\u8BE2, \u6B62\u76C8\u6B62\u635F\u67E5\u8BE2\n## \u53C2\u6570\uFF1A\n## - algoId: \u7B56\u7565\u8BA2\u5355ID\uFF0C\u7CBE\u786E\u67E5\u8BE2\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## - ordType: \u7B56\u7565\u7C7B\u578B\u3002conditional/trigger/oco/move_order_stop/iceberg/twap\n## - limit: \u8FD4\u56DE\u6761\u6570\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\u8BE2\u5F85\u89E6\u53D1\u7B56\u7565 \u2192 okx_place_algo_order \u4E0B\u7B56\u7565\u5355 \u2192 okx_cancel_algo_order \u64A4\u9500",
|
|
22883
|
+
{
|
|
22884
|
+
algoId: external_exports.string().optional().describe("\u7B56\u7565\u8BA2\u5355ID\uFF0C\u7CBE\u786E\u67E5\u8BE2"),
|
|
22885
|
+
instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
22886
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
22887
|
+
ordType: external_exports.enum(["conditional", "oco", "trigger", "move_order_stop", "iceberg", "twap"]).optional().describe("\u7B56\u7565\u7C7B\u578B"),
|
|
22888
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570")
|
|
22889
|
+
},
|
|
22890
|
+
async ({ algoId, instType, instId, ordType, limit }) => {
|
|
22891
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22892
|
+
try {
|
|
22893
|
+
const data = await privateApi.getOrdersAlgoPending(auth, algoId, instType, instId, ordType, limit);
|
|
22894
|
+
return toResult(data);
|
|
22895
|
+
} catch (e) {
|
|
22896
|
+
return toError(e);
|
|
22897
|
+
}
|
|
22898
|
+
}
|
|
22899
|
+
);
|
|
22900
|
+
server.tool(
|
|
22901
|
+
"okx_amend_algo_order",
|
|
22902
|
+
"## \u529F\u80FD\uFF1A\u4FEE\u6539\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u4EF7\u683C\u3001\u89E6\u53D1\u6761\u4EF6\u7B49\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u6B62\u76C8\u6B62\u635F\u4EF7\u683C\u3001\u4FEE\u6539\u89E6\u53D1\u6761\u4EF6\u3001\u66F4\u65B0\u7B56\u7565\u5355\u53C2\u6570\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539\u7B56\u7565, amend algo, \u8C03\u6574\u6B62\u76C8\u6B62\u635F, \u4FEE\u6539\u6761\u4EF6\u5355, \u66F4\u65B0\u7B56\u7565\n## \u53C2\u6570\uFF1A\n## - orders: \u4FEE\u6539\u7B56\u7565\u8BA2\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B algoId/instId \u53CA\u9700\u4FEE\u6539\u7684\u5B57\u6BB5\uFF08\u5982 newSz/newPx/slTriggerPx/tpTriggerPx\uFF09\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\uFF1AWRITE \u2014 \u4FEE\u6539\u7B56\u7565\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_orders_algo_pending \u67E5\u8BE2\u7B56\u7565 \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 okx_get_algo_orders \u786E\u8BA4\u4FEE\u6539",
|
|
22903
|
+
{
|
|
22904
|
+
orders: external_exports.string().describe(`\u4FEE\u6539\u7B56\u7565\u8BA2\u5355\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '[{"algoId":"123","instId":"BTC-USDT","newTpTriggerPx":"65000"}]'`)
|
|
22905
|
+
},
|
|
22906
|
+
async ({ orders }) => {
|
|
22907
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22908
|
+
try {
|
|
22909
|
+
const parsed = JSON.parse(orders);
|
|
22910
|
+
const data = await privateApi.amendAlgoOrder(auth, parsed);
|
|
22911
|
+
return toResult(data);
|
|
22912
|
+
} catch (e) {
|
|
22913
|
+
return toError(e);
|
|
22914
|
+
}
|
|
22915
|
+
}
|
|
22916
|
+
);
|
|
22503
22917
|
}
|
|
22504
22918
|
|
|
22505
22919
|
// src/tools/funding.ts
|
|
@@ -22777,6 +23191,69 @@ function registerStatsTools(server) {
|
|
|
22777
23191
|
}
|
|
22778
23192
|
}
|
|
22779
23193
|
);
|
|
23194
|
+
server.tool(
|
|
23195
|
+
"okx_get_top_traders_contract_ls_ratio",
|
|
23196
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u7CBE\u82F1\u4EA4\u6613\u5458\u591A\u7A7A\u6301\u4ED3\u6BD4\u4F8B\uFF08\u5168\u90E8\u5408\u7EA6\u6C47\u603B\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u7CBE\u82F1\u7FA4\u4F53\u6574\u4F53\u6301\u4ED3\u65B9\u5411\u3001\u5206\u6790\u5927\u6237\u60C5\u7EEA\u53D8\u5316\u8D8B\u52BF\u3001\u53D1\u73B0\u6781\u7AEF\u6301\u4ED3\u7684\u8F6C\u6298\u4FE1\u53F7\n## \u5173\u952E\u8BCD\uFF1A\u7CBE\u82F1\u591A\u7A7A\u6BD4, \u5168\u90E8\u5408\u7EA6, top traders LS ratio, \u5927\u6237\u60C5\u7EEA, \u6301\u4ED3\u6C47\u603B\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_top_trader_long_short_ratio \u770B\u5355\u4E00\u5408\u7EA6\u5927\u6237 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5224\u65AD\u6574\u4F53\u5927\u6237\u65B9\u5411",
|
|
23197
|
+
{
|
|
23198
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
23199
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
23200
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
|
|
23201
|
+
},
|
|
23202
|
+
async ({ ccy, begin, end }) => {
|
|
23203
|
+
try {
|
|
23204
|
+
const data = await publicApi.getTopTradersContractLSRatio(ccy, begin, end);
|
|
23205
|
+
const enriched = data.map((item) => ({
|
|
23206
|
+
...item,
|
|
23207
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
23208
|
+
}));
|
|
23209
|
+
return toResult(enriched);
|
|
23210
|
+
} catch (e) {
|
|
23211
|
+
return toError(e);
|
|
23212
|
+
}
|
|
23213
|
+
}
|
|
23214
|
+
);
|
|
23215
|
+
server.tool(
|
|
23216
|
+
"okx_get_contracts_taker_volume",
|
|
23217
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u4E3B\u52A8\u4E70\u5356\u91CF\u7EDF\u8BA1\uFF08\u5168\u90E8\u5408\u7EA6\u6C47\u603B\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u6574\u4F53\u5408\u7EA6\u5E02\u573A\u7684\u4E70\u5356\u529B\u91CF\u5BF9\u6BD4\u3001\u5206\u6790\u5168\u5E02\u573A\u8D44\u91D1\u6D41\u5411\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u5408\u7EA6\u4E70\u5356\u91CF, contracts taker volume, \u4E3B\u52A8\u4E70\u5356, \u5168\u90E8\u5408\u7EA6, \u4E70\u5356\u529B\u91CF\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_taker_volume \u770B\u5206\u7C7B\u578B\u4E70\u5356\u91CF \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5224\u65AD\u6574\u4F53\u5E02\u573A\u65B9\u5411",
|
|
23218
|
+
{
|
|
23219
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
23220
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
23221
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
|
|
23222
|
+
},
|
|
23223
|
+
async ({ ccy, begin, end }) => {
|
|
23224
|
+
try {
|
|
23225
|
+
const data = await publicApi.getContractsTakerVolume(ccy, begin, end);
|
|
23226
|
+
const enriched = data.map((item) => ({
|
|
23227
|
+
...item,
|
|
23228
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
23229
|
+
}));
|
|
23230
|
+
return toResult(enriched);
|
|
23231
|
+
} catch (e) {
|
|
23232
|
+
return toError(e);
|
|
23233
|
+
}
|
|
23234
|
+
}
|
|
23235
|
+
);
|
|
23236
|
+
server.tool(
|
|
23237
|
+
"okx_get_contracts_long_short_ratio",
|
|
23238
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5168\u90E8\u5408\u7EA6\u591A\u7A7A\u6301\u4ED3\u6BD4\u4F8B\uFF08\u591A\u7A7A\u6BD4\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u6574\u4F53\u5408\u7EA6\u5E02\u573A\u60C5\u7EEA\uFF08>1\u591A\u5934\u504F\u591A\uFF0C<1\u7A7A\u5934\u504F\u591A\uFF09\u3001\u53D1\u73B0\u6781\u7AEF\u60C5\u7EEA\u7684\u8F6C\u6298\u4FE1\u53F7\n## \u5173\u952E\u8BCD\uFF1A\u5408\u7EA6\u591A\u7A7A\u6BD4, contracts LS ratio, \u5168\u90E8\u5408\u7EA6\u6301\u4ED3, \u5E02\u573A\u60C5\u7EEA, \u591A\u7A7A\u8D26\u6237\u6BD4\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_long_short_ratio \u770B\u5206\u5408\u7EA6\u591A\u7A7A\u6BD4 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u90E8\u5408\u7EA6\u6C47\u603B \u2192 \u5BF9\u6BD4\u5224\u65AD\u60C5\u7EEA\u65B9\u5411",
|
|
23239
|
+
{
|
|
23240
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
23241
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
23242
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
|
|
23243
|
+
},
|
|
23244
|
+
async ({ ccy, begin, end }) => {
|
|
23245
|
+
try {
|
|
23246
|
+
const data = await publicApi.getContractsLongShortRatio(ccy, begin, end);
|
|
23247
|
+
const enriched = data.map((item) => ({
|
|
23248
|
+
...item,
|
|
23249
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
23250
|
+
}));
|
|
23251
|
+
return toResult(enriched);
|
|
23252
|
+
} catch (e) {
|
|
23253
|
+
return toError(e);
|
|
23254
|
+
}
|
|
23255
|
+
}
|
|
23256
|
+
);
|
|
22780
23257
|
}
|
|
22781
23258
|
|
|
22782
23259
|
// src/tools/subaccount.ts
|
|
@@ -22837,6 +23314,39 @@ function registerSubAccountTools(server, auth) {
|
|
|
22837
23314
|
}
|
|
22838
23315
|
}
|
|
22839
23316
|
);
|
|
23317
|
+
server.tool(
|
|
23318
|
+
"okx_subaccount_set_transfer_out",
|
|
23319
|
+
"## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u8F6C\u51FA\u6743\u9650\n## \u573A\u666F\uFF1A\u7528\u4E8E\u63A7\u5236\u5B50\u8D26\u6237\u662F\u5426\u53EF\u4EE5\u5411\u5916\u90E8\u8F6C\u51FA\u8D44\u91D1\u3001\u7BA1\u7406\u591A\u7B56\u7565\u8D26\u6237\u7684\u8D44\u91D1\u6743\u9650\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u8F6C\u51FA, \u8F6C\u51FA\u6743\u9650, set transfer out, \u5B50\u8D26\u6237\u6743\u9650, \u98CE\u63A7, \u8D44\u91D1\u7BA1\u7406\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - canTransferOut: \u662F\u5426\u5141\u8BB8\u8F6C\u51FA\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u7BA1\u7406\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539\u5B50\u8D26\u6237\u6743\u9650\uFF0C\u5F71\u54CD\u8D44\u91D1\u5B89\u5168\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~200B\n## \u5173\u8054\uFF1Aokx_list_subaccounts \u83B7\u53D6\u5B50\u8D26\u6237\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u7BA1\u7406\u6743\u9650 \u2192 okx_transfer_subaccount \u5212\u8F6C",
|
|
23320
|
+
{
|
|
23321
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23322
|
+
canTransferOut: external_exports.boolean().describe("\u662F\u5426\u5141\u8BB8\u8F6C\u51FA\u3002true=\u5141\u8BB8, false=\u7981\u6B62")
|
|
23323
|
+
},
|
|
23324
|
+
async ({ subAcct, canTransferOut }) => {
|
|
23325
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23326
|
+
try {
|
|
23327
|
+
const data = await privateApi.setSubAccountTransferOut(auth, { subAcct, canTransOut: canTransferOut });
|
|
23328
|
+
return toResult(data);
|
|
23329
|
+
} catch (e) {
|
|
23330
|
+
return toError(e);
|
|
23331
|
+
}
|
|
23332
|
+
}
|
|
23333
|
+
);
|
|
23334
|
+
server.tool(
|
|
23335
|
+
"okx_get_subaccount_assets",
|
|
23336
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u8D26\u6237\u4F59\u989D\uFF08\u975E\u4EA4\u6613\u8D26\u6237\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5B50\u8D26\u6237\u7684\u5145\u503C\u8D44\u91D1\u3001\u786E\u8BA4\u5B50\u8D26\u6237\u8D44\u91D1\u8D26\u6237\u8D44\u4EA7\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u8D44\u4EA7, subaccount assets, \u5B50\u8D26\u6237\u8D44\u91D1, \u5B50\u8D26\u6237\u4F59\u989D, \u5B50\u8D26\u53F7\u8D44\u91D1\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1Aokx_get_subaccount_balance \u770B\u4EA4\u6613\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u770B\u8D44\u91D1\u4F59\u989D \u2192 \u7EFC\u5408\u8BC4\u4F30\u5B50\u8D26\u6237\u8D44\u4EA7",
|
|
23337
|
+
{
|
|
23338
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B")
|
|
23339
|
+
},
|
|
23340
|
+
async ({ subAcct }) => {
|
|
23341
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23342
|
+
try {
|
|
23343
|
+
const data = await privateApi.getSubAccountFundingBalance(auth, subAcct);
|
|
23344
|
+
return toResult(data);
|
|
23345
|
+
} catch (e) {
|
|
23346
|
+
return toError(e);
|
|
23347
|
+
}
|
|
23348
|
+
}
|
|
23349
|
+
);
|
|
22840
23350
|
}
|
|
22841
23351
|
|
|
22842
23352
|
// src/tools/finance.ts
|