hvip-mcp-server 0.2.33 → 0.2.35
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/README.md +3 -3
- package/dist/index.js +264 -18
- package/package.json +41 -41
package/README.md
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
# OKX MCP Server
|
|
2
|
-
|
|
3
|
-
OKX API 全景图 —— 让任何 AI Agent 都能使用 OKX 的全部能力。
|
|
1
|
+
# OKX MCP Server
|
|
2
|
+
|
|
3
|
+
OKX API 全景图 —— 让任何 AI Agent 都能使用 OKX 的全部能力。
|
package/dist/index.js
CHANGED
|
@@ -21394,6 +21394,7 @@ var privateApi = {
|
|
|
21394
21394
|
getFundingRateHistory: (instId, before, after, limit) => request("GET", "/api/v5/public/funding-rate-history", { params: { instId, before, after, limit } }),
|
|
21395
21395
|
getInterestRateLoanQuota: () => request("GET", "/api/v5/public/interest-rate-loan-quota"),
|
|
21396
21396
|
getPremiumHistory: (instId, period) => request("GET", "/api/v5/public/premium-history", { params: { instId, period } }),
|
|
21397
|
+
getInstrumentTickBands: (instType) => request("GET", "/api/v5/public/instrument-tick-bands", { params: { instType } }),
|
|
21397
21398
|
getSettlementHistory: (instType, instFamily, uly) => request("GET", "/api/v5/public/settlement-history", { params: { instType, instFamily, uly } }),
|
|
21398
21399
|
getEventSeries: () => request("GET", "/api/v5/public/event-contract/series"),
|
|
21399
21400
|
getEventMarkets: (seriesId) => request("GET", "/api/v5/public/event-contract/markets", { params: { seriesId } }),
|
|
@@ -22053,7 +22054,7 @@ function registerPublicTools(server, auth) {
|
|
|
22053
22054
|
);
|
|
22054
22055
|
server.tool(
|
|
22055
22056
|
"okx_get_mark_price",
|
|
22056
|
-
"\
|
|
22057
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u6807\u8BB0\u4EF7\u683C\uFF0C\u7528\u4E8E\u8BA1\u7B97\u6D6E\u52A8\u76C8\u4E8F\u548C\u5F3A\u5E73\u4EF7\u683C\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5408\u7EA6\u5F53\u524D\u6807\u8BB0\u4EF7\u3001\u5224\u65AD\u4E0E\u6307\u6570\u4EF7\u683C\u504F\u5DEE\u3001\u53D1\u73B0\u5957\u5229\u7A7A\u95F4\u3001\u6279\u91CF\u76D1\u63A7\u6807\u8BB0\u4EF7\u683C\n## \u5173\u952E\u8BCD\uFF1A\u6807\u8BB0\u4EF7\u683C, mark price, \u6807\u8BB0\u4EF7, \u5F3A\u5E73\u4EF7\u683C, \u6D6E\u52A8\u76C8\u4E8F, \u5957\u5229\u7A7A\u95F4\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\n## - instId: \u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u8BE5\u7C7B\u578B\u5168\u91CF\uFF08~30KB\uFF0C\u5DF2\u81EA\u52A8\u622A\u65ADtop20\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\u5355\u4EA7\u54C1 ~500B\uFF0C\u5168\u91CF ~30KB\uFF08\u5DF2\u81EA\u52A8\u622A\u65AD top 20\uFF09\n## \u5173\u8054\uFF1Aokx_get_index_price \u770B\u6307\u6570\u4EF7 \u2192 \u672C\u5DE5\u5177\u770B\u6807\u8BB0\u4EF7 \u2192 \u5BF9\u6BD4\u57FA\u5DEE \u2192 okx_get_ticker \u770B\u6700\u65B0\u4EF7",
|
|
22057
22058
|
{
|
|
22058
22059
|
instType: external_exports.enum(INST_TYPE_PUBLIC).describe("\u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
|
|
22059
22060
|
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u8BE5\u7C7B\u578B\u5168\u91CF")
|
|
@@ -22074,7 +22075,7 @@ function registerPublicTools(server, auth) {
|
|
|
22074
22075
|
);
|
|
22075
22076
|
server.tool(
|
|
22076
22077
|
"okx_get_index_price",
|
|
22077
|
-
"\u83B7\u53D6\u6307\u6570\u4EF7\u683C\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\uFF09\
|
|
22078
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570\u4EF7\u683C\uFF08\u591A\u4EA4\u6613\u6240\u52A0\u6743\u5747\u4EF7\uFF09\uFF0C\u53CD\u6620\u73B0\u8D27\u5E02\u573A\u6574\u4F53\u4EF7\u683C\u57FA\u51C6\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u73B0\u8D27\u5E02\u573A\u6574\u4F53\u4EF7\u683C\u3001\u4E0E\u6807\u8BB0\u4EF7\u683C\u5BF9\u6BD4\u53D1\u73B0\u504F\u5DEE\u3001\u8BC4\u4F30\u5408\u7EA6\u6EA2\u4EF7/\u6298\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570\u4EF7\u683C, index price, \u52A0\u6743\u5747\u4EF7, \u73B0\u8D27\u57FA\u51C6, \u6307\u6570\u4EF7, \u591A\u4EA4\u6613\u6240\u5747\u4EF7\n## \u53C2\u6570\uFF1A\n## - instId: \u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6307\u6570\u4EF7 \u2192 okx_get_mark_price \u770B\u6807\u8BB0\u4EF7 \u2192 \u5BF9\u6BD4\u504F\u5DEE \u2192 \u5224\u65AD\u5957\u5229\u7A7A\u95F4",
|
|
22078
22079
|
{ instId: external_exports.string().describe("\u6307\u6570\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT") },
|
|
22079
22080
|
async ({ instId }) => {
|
|
22080
22081
|
try {
|
|
@@ -22091,7 +22092,7 @@ function registerPublicTools(server, auth) {
|
|
|
22091
22092
|
);
|
|
22092
22093
|
server.tool(
|
|
22093
22094
|
"okx_get_open_interest",
|
|
22094
|
-
"\u83B7\u53D6\u5408\u7EA6\u6301\u4ED3\u91CF\
|
|
22095
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u6301\u4ED3\u91CF\u6570\u636E\uFF0C\u53CD\u6620\u5E02\u573A\u53C2\u4E0E\u5EA6\u548C\u8D44\u91D1\u6D41\u5411\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u65B0\u8D44\u91D1\u5165\u573A\uFF08\u6301\u4ED3\u91CF\u5FEB\u901F\u589E\u52A0\uFF09\u3001\u5206\u6790\u8D8B\u52BF\u5F3A\u5EA6\u3001\u6279\u91CF\u76D1\u63A7\u5408\u7EA6\u6301\u4ED3\n## \u5173\u952E\u8BCD\uFF1A\u6301\u4ED3\u91CF, open interest, OI, \u672A\u5E73\u4ED3\u91CF, \u8D44\u91D1\u6D41\u5165, \u5E02\u573A\u53C2\u4E0E\u5EA6, \u5408\u7EA6\u6301\u4ED3\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\n## - instId: \u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u91CF\uFF08~77KB\uFF0C\u5DF2\u81EA\u52A8\u622A\u65ADtop20\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\u5355\u4EA7\u54C1 ~500B\uFF0C\u5168\u91CF ~77KB\uFF08\u5DF2\u81EA\u52A8\u622A\u65AD top 20\uFF09\n## \u5173\u8054\uFF1Aokx_get_ticker \u770B\u4EF7\u683C\u65B9\u5411 \u2192 \u672C\u5DE5\u5177\u770B\u6301\u4ED3\u91CF\u53D8\u5316 \u2192 \u91CF\u4EF7\u7ED3\u5408\u5224\u65AD\u8D8B\u52BF",
|
|
22095
22096
|
{
|
|
22096
22097
|
instType: external_exports.enum(INST_TYPE_CONTRACTS).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
|
|
22097
22098
|
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u91CF")
|
|
@@ -22112,7 +22113,7 @@ function registerPublicTools(server, auth) {
|
|
|
22112
22113
|
);
|
|
22113
22114
|
server.tool(
|
|
22114
22115
|
"okx_get_system_time",
|
|
22115
|
-
"\u83B7\u53D6OKX\u670D\u52A1\u5668\u5F53\u524D\u65F6\u95F4\u6233\
|
|
22116
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u670D\u52A1\u5668\u5F53\u524D\u65F6\u95F4\u6233\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6821\u51C6\u672C\u5730\u65F6\u95F4\u504F\u5DEE\u3001\u786E\u4FDD\u7B7E\u540D\u8BF7\u6C42\u7684\u65F6\u95F4\u6233\u5728\u6709\u6548\u8303\u56F4\u5185\uFF08\xB130\u79D2\uFF09\u3001\u6392\u67E5\u9274\u6743\u5931\u8D25\n## \u5173\u952E\u8BCD\uFF1A\u670D\u52A1\u5668\u65F6\u95F4, system time, \u65F6\u95F4\u6233, \u65F6\u95F4\u6821\u51C6, \u7B7E\u540D\u65F6\u95F4, \u9274\u6743\u65F6\u95F4\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 ~200B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u6821\u51C6\u65F6\u95F4 \u2192 \u6240\u6709\u9274\u6743\u63A5\u53E3\u4F9D\u8D56\u6B63\u786E\u65F6\u95F4\u6233 \u2192 okx_place_order \u7B49\u4E0B\u5355",
|
|
22116
22117
|
{},
|
|
22117
22118
|
async () => {
|
|
22118
22119
|
try {
|
|
@@ -22125,7 +22126,7 @@ function registerPublicTools(server, auth) {
|
|
|
22125
22126
|
);
|
|
22126
22127
|
server.tool(
|
|
22127
22128
|
"okx_get_opt_summary",
|
|
22128
|
-
"\u83B7\u53D6\u671F\u6743\u5E02\u573A\u6458\u8981\u6570\u636E\uFF0C\u542B\u5404\u5230\u671F\u65E5\u7684\u9690\u542B\u6CE2\u52A8\u7387\uFF08IV\uFF09\u3001\u672A\u5E73\u4ED3\u91CF\u548C\u6210\u4EA4\u91CF\u5206\u5E03\
|
|
22129
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u5E02\u573A\u6458\u8981\u6570\u636E\uFF0C\u542B\u5404\u5230\u671F\u65E5\u7684\u9690\u542B\u6CE2\u52A8\u7387\uFF08IV\uFF09\u3001\u672A\u5E73\u4ED3\u91CF\u548C\u6210\u4EA4\u91CF\u5206\u5E03\n## \u573A\u666F\uFF1A\u7528\u4E8E\u671F\u6743\u4EA4\u6613\u524D\u5E02\u573A\u626B\u63CF\u3001\u5206\u6790\u6CE2\u52A8\u7387\u671F\u9650\u7ED3\u6784\u3001\u53D1\u73B0\u5F02\u5E38IV\u3001\u6309\u5230\u671F\u65E5\u7B5B\u9009\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u6458\u8981, opt summary, \u9690\u542B\u6CE2\u52A8\u7387, IV, \u671F\u6743\u672A\u5E73\u4ED3, \u6CE2\u52A8\u7387\u66F2\u7EBF, \u671F\u6743\u5E02\u573A\n## \u53C2\u6570\uFF1A\n## - uly: \u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD\u3001ETH-USD\n## - expTime: \u5230\u671F\u65E5\u7B5B\u9009\uFF0C\u683C\u5F0F YYYYMMDD\uFF0C\u5982 20250101\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\u626B\u63CF\u671F\u6743\u5E02\u573A \u2192 okx_get_instruments(instType=OPTION) \u83B7\u53D6\u5177\u4F53\u5408\u7EA6 \u2192 okx_get_ticker \u67E5\u671F\u6743\u884C\u60C5",
|
|
22129
22130
|
{
|
|
22130
22131
|
uly: external_exports.string().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD\u3001ETH-USD"),
|
|
22131
22132
|
expTime: external_exports.string().optional().describe("\u5230\u671F\u65E5\u7B5B\u9009\uFF0C\u683C\u5F0F YYYYMMDD\uFF0C\u5982 20250101")
|
|
@@ -22145,7 +22146,7 @@ function registerPublicTools(server, auth) {
|
|
|
22145
22146
|
);
|
|
22146
22147
|
server.tool(
|
|
22147
22148
|
"okx_get_insurance_fund",
|
|
22148
|
-
"\u83B7\u53D6OKX\u4FDD\u9669\u57FA\u91D1\u4F59\u989D\u53D8\u52A8\u5386\u53F2\
|
|
22149
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u4FDD\u9669\u57FA\u91D1\u4F59\u989D\u53D8\u52A8\u5386\u53F2\uFF0C\u53CD\u6620\u4EA4\u6613\u6240\u62B5\u5FA1\u6781\u7AEF\u884C\u60C5\u7684\u80FD\u529B\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BC4\u4F30\u5E73\u53F0\u98CE\u9669\u3001\u76D1\u63A7\u4FDD\u9669\u57FA\u91D1\u89C4\u6A21\u53D8\u5316\u3001\u6781\u7AEF\u884C\u60C5\u524D\u540E\u5BF9\u6BD4\u57FA\u91D1\u6D88\u8017\n## \u5173\u952E\u8BCD\uFF1A\u4FDD\u9669\u57FA\u91D1, insurance fund, \u5E73\u53F0\u98CE\u9669, \u6781\u7AEF\u884C\u60C5, \u4EA4\u6613\u6240\u4FDD\u969C, \u98CE\u9669\u6307\u6807\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\n## - uly: \u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD\uFF08SWAP/FUTURES/OPTION\u5FC5\u586B\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_instruments \u83B7\u53D6\u4EA7\u54C1 \u2192 \u672C\u5DE5\u5177\u770B\u4FDD\u9669\u57FA\u91D1 \u2192 \u8BC4\u4F30\u5E73\u53F0\u5065\u5EB7\u5EA6",
|
|
22149
22150
|
{
|
|
22150
22151
|
instType: external_exports.enum(INST_TYPE_MARGIN_PUB).describe("\u4EA7\u54C1\u7C7B\u578B\u3002MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
|
|
22151
22152
|
uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD\uFF08SWAP/FUTURES/OPTION\u5FC5\u586B\uFF09")
|
|
@@ -22165,7 +22166,7 @@ function registerPublicTools(server, auth) {
|
|
|
22165
22166
|
);
|
|
22166
22167
|
server.tool(
|
|
22167
22168
|
"okx_convert_contract_coin",
|
|
22168
|
-
"\u5408\u7EA6\u5F20\u6570\u4E0E\u5E01\u6570\u4E92\u6362\u8BA1\u7B97\
|
|
22169
|
+
"## \u529F\u80FD\uFF1A\u5408\u7EA6\u5F20\u6570\u4E0E\u5E01\u6570\u4E92\u6362\u8BA1\u7B97\uFF0C\u4E0B\u5408\u7EA6\u5355\u524D\u6362\u7B97\u6570\u91CF\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E0B\u5355\u524D\u5C06\u5E01\u6570\u6362\u7B97\u4E3A\u5408\u7EA6\u5F20\u6570\u3001\u5F20\u6570\u6362\u5E01\u6570\u3001\u907F\u514D\u6570\u91CF\u586B\u9519\u5BFC\u81F4\u8BA2\u5355\u5931\u8D25\n## \u5173\u952E\u8BCD\uFF1A\u5F20\u6570\u6362\u7B97, \u5E01\u6570\u6362\u7B97, convert contract, \u5408\u7EA6\u6362\u7B97, \u5F20\u6570\u8BA1\u7B97, \u4E0B\u5355\u51C6\u5907\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\n## - sz: \u6570\u91CF\uFF08\u5F20\u6570\u6216\u5E01\u6570\uFF0C\u53D6\u51B3\u4E8Eunit\u53C2\u6570\u7684\u8BBE\u7F6E\uFF09\n## - unit: sz\u7684\u5355\u4F4D\u3002coin=\u5E01\uFF0Ccontracts=\u5F20\n## - opType: \u5F00\u4ED3\u6216\u5E73\u4ED3\u3002open=\u5F00\u4ED3, close=\u5E73\u4ED3\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\u4E0B\u5355\u524D\u5FC5\u8C03 \u2192 \u672C\u5DE5\u5177\u6362\u7B97\u6570\u91CF \u2192 okx_place_order \u4E0B\u5355",
|
|
22169
22170
|
{
|
|
22170
22171
|
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP"),
|
|
22171
22172
|
sz: external_exports.string().describe("\u6570\u91CF\uFF08\u5F20\u6570\u6216\u5E01\u6570\uFF0C\u53D6\u51B3\u4E8Eunit\uFF09"),
|
|
@@ -22183,7 +22184,7 @@ function registerPublicTools(server, auth) {
|
|
|
22183
22184
|
);
|
|
22184
22185
|
server.tool(
|
|
22185
22186
|
"okx_get_announcements",
|
|
22186
|
-
"\u83B7\u53D6OKX\u5B98\u65B9\u516C\u544A\u5217\u8868\uFF08\u7EF4\u62A4\u901A\u77E5\u3001\u65B0\u5E01\u4E0A\u7EBF\u3001\u6D3B\u52A8\u7B49\uFF09\
|
|
22187
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u5B98\u65B9\u516C\u544A\u5217\u8868\uFF08\u7EF4\u62A4\u901A\u77E5\u3001\u65B0\u5E01\u4E0A\u7EBF\u3001\u6D3B\u52A8\u7B49\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u53CA\u65F6\u4E86\u89E3\u5E73\u53F0\u7EF4\u62A4\u8BA1\u5212\u3001\u8DDF\u8E2A\u65B0\u5E01\u4E0A\u7EBF\u4FE1\u606F\u3001\u63D0\u524D\u505A\u597D\u98CE\u9669\u51C6\u5907\n## \u5173\u952E\u8BCD\uFF1A\u516C\u544A, announcements, \u7EF4\u62A4\u901A\u77E5, \u65B0\u5E01\u4E0A\u7EBF, \u5E73\u53F0\u516C\u544A, \u6D3B\u52A8\u901A\u77E5\n## \u53C2\u6570\uFF1A\n## - annType: \u516C\u544A\u7C7B\u578BID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\u3002\u53EF\u5148\u8C03\u7528 okx_get_announcement_types \u67E5\u8BE2\u53EF\u7528\u7C7B\u578B\n## - lang: \u8BED\u8A00\u3002zh-Hans=\u4E2D\u6587, en-US=\u82F1\u6587\u3002\u9ED8\u8BA4\u4E2D\u6587\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_announcement_types \u83B7\u53D6\u7C7B\u578B\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u6309\u7C7B\u578B\u7B5B\u9009\u516C\u544A \u2192 \u8BC4\u4F30\u5BF9\u4EA4\u6613\u7684\u5F71\u54CD",
|
|
22187
22188
|
{
|
|
22188
22189
|
annType: external_exports.string().optional().describe("\u516C\u544A\u7C7B\u578BID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\u3002\u53EF\u5148\u8C03\u7528 okx_get_announcement_types \u67E5\u8BE2\u53EF\u7528\u7C7B\u578B"),
|
|
22189
22190
|
lang: external_exports.enum(["zh-Hans", "en-US"]).optional().describe("\u8BED\u8A00\uFF0C\u9ED8\u8BA4\u4E2D\u6587")
|
|
@@ -22640,6 +22641,21 @@ function registerPublicTools(server, auth) {
|
|
|
22640
22641
|
}
|
|
22641
22642
|
}
|
|
22642
22643
|
);
|
|
22644
|
+
server.tool(
|
|
22645
|
+
"okx_get_instrument_tick_bands",
|
|
22646
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EA7\u54C1\u6700\u5C0F\u4EF7\u683C\u7CBE\u5EA6\u6863\u4F4D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E86\u89E3\u671F\u6743\u4EA7\u54C1\u7684\u4EF7\u683C\u6700\u5C0F\u53D8\u52A8\u5355\u4F4D\uFF08tick size\uFF09\n## \u5173\u952E\u8BCD\uFF1ATick\u6863\u4F4D, tick bands, \u6700\u5C0F\u4EF7\u683C\u53D8\u52A8, \u4EF7\u683C\u7CBE\u5EA6\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002\u4EC5 OPTION \u652F\u6301\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\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1A\u6B64\u5DE5\u5177\u67E5\u7CBE\u5EA6 \u2192 okx_get_instruments \u67E5\u4EA7\u54C1\u89C4\u683C \u2192 \u4E0B\u5355\u65F6\u4F7F\u7528\u6B63\u786E\u4EF7\u683C",
|
|
22647
|
+
{
|
|
22648
|
+
instType: external_exports.enum(["OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B\u3002\u4EC5 OPTION \u652F\u6301\u6B64\u67E5\u8BE2")
|
|
22649
|
+
},
|
|
22650
|
+
async ({ instType }) => {
|
|
22651
|
+
try {
|
|
22652
|
+
const data = await publicApi.getInstrumentTickBands(instType);
|
|
22653
|
+
return toResult(data);
|
|
22654
|
+
} catch (e) {
|
|
22655
|
+
return toError(e);
|
|
22656
|
+
}
|
|
22657
|
+
}
|
|
22658
|
+
);
|
|
22643
22659
|
}
|
|
22644
22660
|
|
|
22645
22661
|
// src/tools/account.ts
|
|
@@ -23366,7 +23382,7 @@ function registerAccountTools(server, auth) {
|
|
|
23366
23382
|
function registerTradingTools(server, auth) {
|
|
23367
23383
|
server.tool(
|
|
23368
23384
|
"okx_place_order",
|
|
23369
|
-
"\u5728OKX\u4E0B\u5355\
|
|
23385
|
+
"## \u529F\u80FD\uFF1A\u5728OKX\u4E0B\u5355\uFF08\u5E02\u4EF7/\u9650\u4EF7/\u53EA\u6302/\u5168\u90E8\u6210\u4EA4\u6216\u53D6\u6D88/\u7ACB\u5373\u6210\u4EA4\u5E76\u53D6\u6D88\u5269\u4F59\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5F00\u4ED3\u505A\u591A/\u505A\u7A7A\u3001\u9650\u4EF7\u6302\u5355\u3001\u5E02\u4EF7\u5FEB\u901F\u6210\u4EA4\u3001\u53EA\u6302\u5355\u4E0D\u6210\u4EA4\uFF08post_only\uFF09\n## \u5173\u952E\u8BCD\uFF1A\u4E0B\u5355, place order, \u5E02\u4EF7\u5355, \u9650\u4EF7\u5355, \u5F00\u4ED3, \u5E73\u4ED3, \u4E70\u5165, \u5356\u51FA\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## - tdMode: \u4EA4\u6613\u6A21\u5F0F\u3002cash=\u73B0\u8D27, isolated=\u9010\u4ED3, cross=\u5168\u4ED3\n## - side: \u4E70\u5356\u65B9\u5411\u3002buy=\u4E70\u5165, sell=\u5356\u51FA\n## - ordType: \u8BA2\u5355\u7C7B\u578B\u3002market=\u5E02\u4EF7, limit=\u9650\u4EF7, post_only=\u53EA\u6302, fok=\u5168\u6210\u6216\u53D6\u6D88, ioc=\u7ACB\u5373\u6210\u4EA4\u5E76\u53D6\u6D88\n## - sz: \u59D4\u6258\u6570\u91CF\uFF08\u6839\u636E\u4EA7\u54C1\u4E0D\u540C\u53EF\u4E3A\u5F20\u6570\u6216\u5E01\u6570\uFF0C\u4E0B\u5355\u524D\u5EFA\u8BAE\u5148\u7528 okx_convert_contract_coin \u6362\u7B97\uFF09\n## - px: \u59D4\u6258\u4EF7\u683C\uFF08\u9650\u4EF7\u5355\u5FC5\u586B\uFF09\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u4F1A\u4EA7\u751F\u771F\u5B9E\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u660E\u786E\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u521B\u5EFA\u771F\u5B9E\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\u4EA7\u54C1\u3001\u65B9\u5411\u3001\u6570\u91CF\u548C\u4EF7\u683C\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_ticker \u770B\u4EF7\u683C \u2192 okx_get_balance \u786E\u8BA4\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u4E0B\u5355 \u2192 okx_get_order \u786E\u8BA4\u6210\u4EA4",
|
|
23370
23386
|
{
|
|
23371
23387
|
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
23372
23388
|
tdMode: external_exports.enum(["cash", "isolated", "cross"]).describe("\u4EA4\u6613\u6A21\u5F0F\uFF1Acash=\u73B0\u8D27\uFF0Cisolated=\u9010\u4ED3\uFF0Ccross=\u5168\u4ED3"),
|
|
@@ -23389,7 +23405,7 @@ function registerTradingTools(server, auth) {
|
|
|
23389
23405
|
);
|
|
23390
23406
|
server.tool(
|
|
23391
23407
|
"okx_cancel_order",
|
|
23392
|
-
"\u64A4\u9500\u6307\u5B9A\u8BA2\u5355\
|
|
23408
|
+
"## \u529F\u80FD\uFF1A\u64A4\u9500\u6307\u5B9A\u8BA2\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u53D6\u6D88\u672A\u6210\u4EA4\u7684\u9650\u4EF7\u5355\u3001\u7EA0\u6B63\u8BEF\u4E0B\u5355\u3001\u6E05\u7A7A\u67D0\u4EA7\u54C1\u6302\u5355\n## \u5173\u952E\u8BCD\uFF1A\u64A4\u5355, cancel order, \u64A4\u9500\u8BA2\u5355, \u53D6\u6D88\u6302\u5355, \u53D6\u6D88\u59D4\u6258\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## - ordId: \u8BA2\u5355ID\uFF0C\u7531 okx_place_order \u8FD4\u56DE\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 \u64A4\u9500\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_place_order \u4E0B\u5355 \u2192 okx_get_orders_pending \u67E5\u770B\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u64A4\u5355 \u2192 okx_get_order \u786E\u8BA4\u64A4\u9500",
|
|
23393
23409
|
{
|
|
23394
23410
|
instId: external_exports.string().describe("\u4EA7\u54C1ID"),
|
|
23395
23411
|
ordId: external_exports.string().describe("\u8BA2\u5355ID")
|
|
@@ -23406,7 +23422,7 @@ function registerTradingTools(server, auth) {
|
|
|
23406
23422
|
);
|
|
23407
23423
|
server.tool(
|
|
23408
23424
|
"okx_amend_order",
|
|
23409
|
-
"\u4FEE\u6539\u672A\u6210\u4EA4\u8BA2\u5355\u7684\u4EF7\u683C\u6216\u6570\u91CF\
|
|
23425
|
+
"## \u529F\u80FD\uFF1A\u4FEE\u6539\u672A\u6210\u4EA4\u8BA2\u5355\u7684\u4EF7\u683C\u6216\u6570\u91CF\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u9650\u4EF7\u5355\u4EF7\u683C\u8DDF\u8FDB\u5E02\u573A\u3001\u51CF\u5C11\u59D4\u6258\u6570\u91CF\u3001\u4FEE\u6539\u6302\u5355\u53C2\u6570\n## \u5173\u952E\u8BCD\uFF1A\u6539\u5355, amend order, \u4FEE\u6539\u8BA2\u5355, \u6539\u4EF7, \u6539\u91CF, \u8C03\u6574\u59D4\u6258\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## - ordId: \u8BA2\u5355ID\n## - newSz: \u65B0\u59D4\u6258\u6570\u91CF\uFF08\u53EF\u9009\uFF09\n## - newPx: \u65B0\u59D4\u6258\u4EF7\u683C\uFF08\u53EF\u9009\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\u8BA2\u5355\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 \u67E5\u770B\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u6539\u5355 \u2192 okx_get_order \u786E\u8BA4\u4FEE\u6539",
|
|
23410
23426
|
{
|
|
23411
23427
|
instId: external_exports.string().describe("\u4EA7\u54C1ID"),
|
|
23412
23428
|
ordId: external_exports.string().describe("\u8BA2\u5355ID"),
|
|
@@ -23428,7 +23444,7 @@ function registerTradingTools(server, auth) {
|
|
|
23428
23444
|
);
|
|
23429
23445
|
server.tool(
|
|
23430
23446
|
"okx_get_orders_pending",
|
|
23431
|
-
"\u67E5\u8BE2\u5F53\u524D\u6240\u6709\u672A\u6210\u4EA4\u6302\u5355\u5217\u8868\
|
|
23447
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u6240\u6709\u672A\u6210\u4EA4\u6302\u5355\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u76D1\u63A7\u672A\u6210\u4EA4\u8BA2\u5355\u3001\u68C0\u67E5\u9650\u4EF7\u5355\u662F\u5426\u4ECD\u5728\u961F\u5217\u4E2D\u3001\u6279\u91CF\u67E5\u770B\u6302\u5355\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u6302\u5355\u67E5\u8BE2, orders pending, \u672A\u6210\u4EA4\u8BA2\u5355, \u9650\u4EF7\u5355\u72B6\u6001, \u59D4\u6258\u5217\u8868, \u5F53\u524D\u6302\u5355\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\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## - instId: \u4EA7\u54C1ID\uFF0C\u7CBE\u786E\u7B5B\u9009\n## - ordType: \u8BA2\u5355\u7C7B\u578B\u7B5B\u9009\u3002market/limit/post_only/fok/ioc\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\uFF1Aokx_place_order \u4E0B\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u770B\u6302\u5355 \u2192 okx_cancel_order \u64A4\u5355 / okx_amend_order \u6539\u5355",
|
|
23432
23448
|
{
|
|
23433
23449
|
instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
23434
23450
|
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u7CBE\u786E\u7B5B\u9009"),
|
|
@@ -23446,7 +23462,7 @@ function registerTradingTools(server, auth) {
|
|
|
23446
23462
|
);
|
|
23447
23463
|
server.tool(
|
|
23448
23464
|
"okx_get_fills",
|
|
23449
|
-
"\u67E5\u8BE2\u6700\u8FD1\u7684\u6210\u4EA4\u660E\u7EC6\uFF08\u9010\u7B14\u6210\u4EA4\uFF09\uFF0C\u542B\u6210\u4EA4\u4EF7\u3001\u6210\u4EA4\u91CF\u548C\u624B\u7EED\u8D39\
|
|
23465
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6700\u8FD1\u7684\u6210\u4EA4\u660E\u7EC6\uFF08\u9010\u7B14\u6210\u4EA4\uFF09\uFF0C\u542B\u6210\u4EA4\u4EF7\u3001\u6210\u4EA4\u91CF\u548C\u624B\u7EED\u8D39\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7CBE\u786E\u8BA1\u7B97\u6210\u4EA4\u5747\u4EF7\u3001\u6838\u5BF9\u6BCF\u7B14\u6210\u4EA4\u624B\u7EED\u8D39\u3001\u6BD4\u8BA2\u5355\u5386\u53F2\u66F4\u7EC6\u7C92\u5EA6\u5730\u590D\u76D8\n## \u5173\u952E\u8BCD\uFF1A\u6210\u4EA4\u660E\u7EC6, fills, \u9010\u7B14\u6210\u4EA4, \u6210\u4EA4\u8BB0\u5F55, \u624B\u7EED\u8D39\u660E\u7EC6, \u5747\u4EF7\u8BA1\u7B97\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: \u4EA7\u54C1ID\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u5927100\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\uFF1A100\u6761 ~10KB \u2014 \u4E2D\u7B49\n## \u5173\u8054\uFF1Aokx_place_order \u4E0B\u5355 \u2192 \u672C\u5DE5\u5177\u770B\u6210\u4EA4\u660E\u7EC6 \u2192 okx_get_fills_history \u67E5\u5386\u53F2\u6210\u4EA4",
|
|
23450
23466
|
{
|
|
23451
23467
|
instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
|
|
23452
23468
|
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID"),
|
|
@@ -23464,7 +23480,7 @@ function registerTradingTools(server, auth) {
|
|
|
23464
23480
|
);
|
|
23465
23481
|
server.tool(
|
|
23466
23482
|
"okx_get_orders_history_archive",
|
|
23467
|
-
"\u67E5\u8BE23\u4E2A\u6708\u4EE5\u524D\u7684\u5B8C\u6574\u5386\u53F2\u8BA2\u5355\uFF08\u5F52\u6863\u6570\u636E\uFF09\
|
|
23483
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE23\u4E2A\u6708\u4EE5\u524D\u7684\u5B8C\u6574\u5386\u53F2\u8BA2\u5355\uFF08\u5F52\u6863\u6570\u636E\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u957F\u671F\u4EA4\u6613\u8BB0\u5F55\u5206\u6790\u3001\u5E74\u5EA6\u4EA4\u6613\u590D\u76D8\u3001\u5BA1\u8BA1\u5F52\u6863\u6570\u636E\n## \u5173\u952E\u8BCD\uFF1A\u5F52\u6863\u8BA2\u5355, orders history archive, \u5386\u53F2\u5F52\u6863, \u957F\u671F\u8BB0\u5F55, \u8BA2\u5355\u5B58\u6863\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## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA450\uFF0C\u6700\u5927100\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\uFF1Aokx_get_orders_history \u67E5\u8FD1\u671F\u8BA2\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u5F52\u6863 \u2192 \u5B8C\u6574\u4EA4\u6613\u590D\u76D8",
|
|
23468
23484
|
{
|
|
23469
23485
|
instType: external_exports.enum(INST_TYPE_TRADE).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743"),
|
|
23470
23486
|
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA450")
|
|
@@ -23897,7 +23913,7 @@ function registerTradingTools(server, auth) {
|
|
|
23897
23913
|
function registerAlgoTools(server, auth) {
|
|
23898
23914
|
server.tool(
|
|
23899
23915
|
"okx_get_algo_orders",
|
|
23900
|
-
"\u67E5\u8BE2\u5F53\u524D\u6302\u5355\u4E2D\u7684\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u3001\u51B0\u5C71\u3001\u65F6\u95F4\u52A0\u6743\u7B49\uFF09\
|
|
23916
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u6302\u5355\u4E2D\u7684\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u3001\u51B0\u5C71\u3001\u65F6\u95F4\u52A0\u6743\u7B49\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5F53\u524D\u751F\u6548\u7684\u7B56\u7565\u5355\u3001\u76D1\u63A7\u6B62\u76C8\u6B62\u635F\u6302\u5355\u3001\u68C0\u67E5\u51B0\u5C71/TWAP\u6267\u884C\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u7B56\u7565\u59D4\u6258, algo orders, \u6B62\u76C8\u6B62\u635F, \u6761\u4EF6\u5355, \u51B0\u5C71\u59D4\u6258, TWAP, \u7B56\u7565\u5355\u67E5\u8BE2\n## \u53C2\u6570\uFF1A\n## - ordType: \u7B56\u7565\u7C7B\u578B\u3002conditional=\u6761\u4EF6\u5355, oco=OCO\u8BA2\u5355, trigger=\u89E6\u53D1\u5355, move_order_stop=\u79FB\u52A8\u6B62\u635F, iceberg=\u51B0\u5C71, twap=\u65F6\u95F4\u52A0\u6743\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\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_place_algo_order \u4E0B\u7B56\u7565\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u770B\u6302\u5355 \u2192 okx_cancel_algo_order \u64A4\u9500",
|
|
23901
23917
|
{
|
|
23902
23918
|
ordType: external_exports.enum(["conditional", "oco", "trigger", "move_order_stop", "iceberg", "twap"]).describe("\u7B56\u7565\u7C7B\u578B"),
|
|
23903
23919
|
instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743")
|
|
@@ -23914,7 +23930,7 @@ function registerAlgoTools(server, auth) {
|
|
|
23914
23930
|
);
|
|
23915
23931
|
server.tool(
|
|
23916
23932
|
"okx_get_algo_orders_history",
|
|
23917
|
-
"\u67E5\u8BE2\u5386\u53F2\u7B56\u7565\u59D4\u6258\u5355\u8BB0\u5F55\
|
|
23933
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5386\u53F2\u7B56\u7565\u59D4\u6258\u5355\u8BB0\u5F55\uFF08\u5DF2\u89E6\u53D1/\u5DF2\u64A4\u9500/\u5931\u8D25\u7684\u7B56\u7565\u5355\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u7B56\u7565\u5355\u6267\u884C\u60C5\u51B5\u3001\u5206\u6790\u6B62\u76C8\u6B62\u635F\u89E6\u53D1\u5386\u53F2\u3001\u6392\u67E5\u7B56\u7565\u5931\u8D25\u539F\u56E0\n## \u5173\u952E\u8BCD\uFF1A\u7B56\u7565\u5386\u53F2, algo orders history, \u7B56\u7565\u8BB0\u5F55, \u5386\u53F2\u6761\u4EF6\u5355, \u6B62\u76C8\u6B62\u635F\u5386\u53F2, \u7B56\u7565\u590D\u76D8\n## \u53C2\u6570\uFF1A\n## - ordType: \u7B56\u7565\u7C7B\u578B\u3002conditional=\u6761\u4EF6\u5355, oco=OCO, trigger=\u89E6\u53D1\u5355, move_order_stop=\u79FB\u52A8\u6B62\u635F, iceberg=\u51B0\u5C71, twap=\u65F6\u95F4\u52A0\u6743\n## - state: \u8BA2\u5355\u72B6\u6001\u3002effective=\u5DF2\u751F\u6548, canceled=\u5DF2\u64A4\u9500, order_failed=\u5931\u8D25\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\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\uFF1Aokx_get_algo_orders \u67E5\u770B\u5F53\u524D\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 \u5206\u6790\u7B56\u7565\u6548\u679C",
|
|
23918
23934
|
{
|
|
23919
23935
|
ordType: external_exports.enum(["conditional", "oco", "trigger", "move_order_stop", "iceberg", "twap"]).describe("\u7B56\u7565\u7C7B\u578B"),
|
|
23920
23936
|
state: external_exports.enum(["effective", "canceled", "order_failed"]).describe("\u8BA2\u5355\u72B6\u6001"),
|
|
@@ -23932,7 +23948,7 @@ function registerAlgoTools(server, auth) {
|
|
|
23932
23948
|
);
|
|
23933
23949
|
server.tool(
|
|
23934
23950
|
"okx_place_algo_order",
|
|
23935
|
-
"\u4E0B\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u3001\u6761\u4EF6\u5355\u7B49\uFF09\u3002\
|
|
23951
|
+
"## \u529F\u80FD\uFF1A\u4E0B\u7B56\u7565\u59D4\u6258\u5355\uFF08\u6B62\u76C8\u6B62\u635F\u3001\u6761\u4EF6\u5355\u3001OCO\u7B49\uFF09\uFF0C\u5728\u6EE1\u8DB3\u6761\u4EF6\u65F6\u81EA\u52A8\u89E6\u53D1\u4E0B\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BBE\u7F6E\u6B62\u76C8\u6B62\u635F\u81EA\u52A8\u5E73\u4ED3\u3001\u5728\u4EF7\u683C\u7A81\u7834\u65F6\u81EA\u52A8\u5F00\u4ED3\u3001\u8BBE\u7F6EOCO\u4E8C\u9009\u4E00\u8BA2\u5355\n## \u5173\u952E\u8BCD\uFF1A\u4E0B\u7B56\u7565\u5355, place algo, \u6B62\u76C8\u6B62\u635F\u4E0B\u5355, \u6761\u4EF6\u5355, OCO\u4E0B\u5355, \u81EA\u52A8\u89E6\u53D1\n## \u53C2\u6570\uFF1A\n## - params: \u8BA2\u5355\u53C2\u6570\uFF08JSON\u5BF9\u8C61\uFF09\uFF0C\u53C2\u8003OKX\u6587\u6863\u3002\u542B instId/tdMode/side/ordType/sz/px \u53CA\u7B56\u7565\u53C2\u6570\u5982 slTriggerPx/tpTriggerPx\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u4F1A\u4EA7\u751F\u771F\u5B9E\u7B56\u7565\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u521B\u5EFA\u7B56\u7565\u8BA2\u5355\uFF0C\u53EF\u80FD\u81EA\u52A8\u89E6\u53D1\u771F\u5B9E\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_algo_orders \u67E5\u770B\u5F53\u524D\u7B56\u7565 \u2192 \u672C\u5DE5\u5177\u4E0B\u7B56\u7565\u5355 \u2192 okx_get_algo_orders \u786E\u8BA4",
|
|
23936
23952
|
{ params: external_exports.record(external_exports.unknown()).describe("\u8BA2\u5355\u53C2\u6570\uFF0C\u53C2\u8003OKX\u6587\u6863") },
|
|
23937
23953
|
async ({ params }) => {
|
|
23938
23954
|
if (!auth) return toError(AUTH_REQUIRED);
|
|
@@ -23946,7 +23962,7 @@ function registerAlgoTools(server, auth) {
|
|
|
23946
23962
|
);
|
|
23947
23963
|
server.tool(
|
|
23948
23964
|
"okx_cancel_algo_order",
|
|
23949
|
-
"\u64A4\u9500\u7B56\u7565\u59D4\u6258\u5355\
|
|
23965
|
+
"## \u529F\u80FD\uFF1A\u64A4\u9500\u6307\u5B9A\u7684\u7B56\u7565\u59D4\u6258\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u53D6\u6D88\u4E0D\u518D\u9700\u8981\u7684\u6B62\u76C8\u6B62\u635F\u3001\u5173\u95ED\u6761\u4EF6\u5355\u3001\u8C03\u6574\u7B56\u7565\u524D\u5148\u64A4\u65E7\u5355\n## \u5173\u952E\u8BCD\uFF1A\u64A4\u9500\u7B56\u7565, cancel algo, \u53D6\u6D88\u6B62\u76C8\u6B62\u635F, \u64A4\u7B56\u7565\u5355, \u53D6\u6D88\u6761\u4EF6\u5355\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\n## - algoId: \u7B56\u7565\u8BA2\u5355ID\uFF0C\u7531 okx_place_algo_order \u8FD4\u56DE\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 \u64A4\u9500\u7B56\u7565\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_algo_orders \u67E5\u770B\u7B56\u7565\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u64A4\u9500 \u2192 okx_get_algo_orders_history \u786E\u8BA4\u64A4\u9500",
|
|
23950
23966
|
{
|
|
23951
23967
|
instId: external_exports.string().describe("\u4EA7\u54C1ID"),
|
|
23952
23968
|
algoId: external_exports.string().describe("\u7B56\u7565\u8BA2\u5355ID")
|
|
@@ -27129,6 +27145,235 @@ function registerFiatTools(server, auth) {
|
|
|
27129
27145
|
);
|
|
27130
27146
|
}
|
|
27131
27147
|
|
|
27148
|
+
// src/tools/agent-utils.ts
|
|
27149
|
+
function registerAgentUtils(server, auth) {
|
|
27150
|
+
server.tool(
|
|
27151
|
+
"okx_account_overview",
|
|
27152
|
+
'## \u529F\u80FD\uFF1A\u4E00\u952E\u83B7\u53D6\u8D26\u6237\u5168\u666F\uFF1A\u4F59\u989D\u3001\u6301\u4ED3\u3001\u914D\u7F6E\u3001\u603B\u4F30\u503C\uFF0C\u66FF\u4EE3\u4E32\u884C\u8C03\u7528 4 \u4E2A\u5DE5\u5177\n## \u573A\u666F\uFF1A\u7528\u4E8EAgent\u9996\u6B21\u4E86\u89E3\u7528\u6237\u8D26\u6237\u5168\u8C8C\u3001\u56DE\u7B54"\u6211\u8D26\u6237\u73B0\u5728\u4EC0\u4E48\u60C5\u51B5"\u3001\u6BCF\u65E5\u8D44\u4EA7\u6982\u89C8\n## \u5173\u952E\u8BCD\uFF1A\u8D26\u6237\u5168\u666F, \u8D26\u6237\u6982\u89C8, account overview, \u8D44\u4EA7\u5FEB\u7167, \u6301\u4ED3\u6C47\u603B, \u4E00\u952E\u67E5\u8D26\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 ~3KB \u2014 \u7ED3\u6784\u5316\u6458\u8981\uFF0C\u975E\u539F\u59CBJSON\u5806\u780C\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u5168\u666F \u2192 okx_get_positions \u6DF1\u5165\u5355\u4ED3\u4F4D \u2192 okx_get_balance \u770B\u5404\u5E01\u79CD \u2192 okx_place_order \u4EA4\u6613',
|
|
27153
|
+
{},
|
|
27154
|
+
async () => {
|
|
27155
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
27156
|
+
try {
|
|
27157
|
+
const [balance, positions, config2, valuation] = await Promise.allSettled([
|
|
27158
|
+
privateApi.getBalance(auth),
|
|
27159
|
+
privateApi.getPositions(auth),
|
|
27160
|
+
privateApi.getAccountConfig(auth),
|
|
27161
|
+
privateApi.getAssetValuation(auth)
|
|
27162
|
+
]);
|
|
27163
|
+
const balanceData = balance.status === "fulfilled" ? balance.value : [];
|
|
27164
|
+
const totalEq = balanceData.length > 0 ? balanceData[0]?.totalEq : "N/A";
|
|
27165
|
+
const details = balanceData.length > 0 ? balanceData[0]?.details ?? [] : [];
|
|
27166
|
+
const nonZero = details.filter((d) => parseFloat(d.availBal || d.cashBal || "0") > 0);
|
|
27167
|
+
const balanceSummary = nonZero.map((d) => ({
|
|
27168
|
+
ccy: d.ccy,
|
|
27169
|
+
equity: d.eq ?? d.cashBal,
|
|
27170
|
+
avail: d.availBal ?? d.cashBal,
|
|
27171
|
+
frozen: d.frozenBal ?? "0",
|
|
27172
|
+
upl: d.upl
|
|
27173
|
+
}));
|
|
27174
|
+
const posData = positions.status === "fulfilled" ? positions.value : [];
|
|
27175
|
+
const activePositions = posData.filter(
|
|
27176
|
+
(p) => parseFloat(p.avgPx || "0") > 0 || parseFloat(p.pos || "0") !== 0
|
|
27177
|
+
);
|
|
27178
|
+
const posSummary = activePositions.map((p) => ({
|
|
27179
|
+
instId: p.instId,
|
|
27180
|
+
posSide: p.posSide,
|
|
27181
|
+
pos: p.pos,
|
|
27182
|
+
avgPx: p.avgPx,
|
|
27183
|
+
markPx: p.markPx,
|
|
27184
|
+
upl: p.upl,
|
|
27185
|
+
uplRatio: p.uplRatio,
|
|
27186
|
+
lever: p.lever,
|
|
27187
|
+
margin: p.margin,
|
|
27188
|
+
liqPx: p.liqPx
|
|
27189
|
+
}));
|
|
27190
|
+
const cfg = config2.status === "fulfilled" ? config2.value?.[0] ?? {} : {};
|
|
27191
|
+
const val = valuation.status === "fulfilled" ? valuation.value?.[0] ?? {} : {};
|
|
27192
|
+
const overview = {
|
|
27193
|
+
totalEquity: totalEq,
|
|
27194
|
+
totalValue: val.totalBal ?? "N/A",
|
|
27195
|
+
valuationCurrency: val.ccy ?? "USD",
|
|
27196
|
+
balance: {
|
|
27197
|
+
currencyCount: balanceSummary.length,
|
|
27198
|
+
currencies: balanceSummary.slice(0, 10)
|
|
27199
|
+
// top 10 非零币种
|
|
27200
|
+
},
|
|
27201
|
+
positions: {
|
|
27202
|
+
activeCount: posSummary.length,
|
|
27203
|
+
list: posSummary.slice(0, 20)
|
|
27204
|
+
// top 20
|
|
27205
|
+
},
|
|
27206
|
+
config: {
|
|
27207
|
+
acctLv: cfg.acctLv,
|
|
27208
|
+
posMode: cfg.posMode,
|
|
27209
|
+
autoLoan: cfg.autoLoan
|
|
27210
|
+
},
|
|
27211
|
+
errors: [
|
|
27212
|
+
balance.status === "rejected" ? `\u4F59\u989D\u67E5\u8BE2\u5931\u8D25: ${balance.reason?.message}` : null,
|
|
27213
|
+
positions.status === "rejected" ? `\u6301\u4ED3\u67E5\u8BE2\u5931\u8D25: ${positions.reason?.message}` : null,
|
|
27214
|
+
config2.status === "rejected" ? `\u914D\u7F6E\u67E5\u8BE2\u5931\u8D25: ${config2.reason?.message}` : null,
|
|
27215
|
+
valuation.status === "rejected" ? `\u4F30\u503C\u67E5\u8BE2\u5931\u8D25: ${valuation.reason?.message}` : null
|
|
27216
|
+
].filter(Boolean)
|
|
27217
|
+
};
|
|
27218
|
+
return toResult(overview);
|
|
27219
|
+
} catch (e) {
|
|
27220
|
+
return toError(e);
|
|
27221
|
+
}
|
|
27222
|
+
}
|
|
27223
|
+
);
|
|
27224
|
+
server.tool(
|
|
27225
|
+
"okx_quick_market",
|
|
27226
|
+
'## \u529F\u80FD\uFF1A\u5355\u6B21\u8C03\u7528\u8FD4\u56DE\u6307\u5B9A\u4EA7\u54C1\u7684\u884C\u60C5+5\u6863\u6DF1\u5EA6+\u8D44\u91D1\u8D39\u7387+\u4EA7\u54C1\u89C4\u683C\u7684\u7ED3\u6784\u5316\u6458\u8981\n## \u573A\u666F\uFF1A\u7528\u4E8EAgent\u56DE\u7B54"\u73B0\u5728BTC\u4EC0\u4E48\u60C5\u51B5"\u65F6\u4E00\u6B21\u62FF\u5230\u5168\u90E8\u4FE1\u606F\u3001\u5FEB\u901F\u5224\u65AD\u4EA4\u6613\u65F6\u673A\n## \u5173\u952E\u8BCD\uFF1A\u5E02\u573A\u901F\u89C8, quick market, \u884C\u60C5+\u6DF1\u5EA6, \u4E00\u952E\u770B\u76D8, \u7EFC\u5408\u884C\u60C5, \u5E02\u573A\u6982\u51B5\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3001ETH-USDT-SWAP\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 \u7CBE\u7B805\u6863\u6DF1\u5EA6\uFF0C\u975E\u5168\u91CF\u8BA2\u5355\u7C3F\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u901F\u89C8 \u2192 okx_get_candles \u6DF1\u5165K\u7EBF\u5206\u6790 \u2192 okx_get_orderbook \u770B\u5168\u6DF1\u5EA6 \u2192 okx_place_order \u4E0B\u5355',
|
|
27227
|
+
{
|
|
27228
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3001ETH-USDT-SWAP")
|
|
27229
|
+
},
|
|
27230
|
+
async ({ instId }) => {
|
|
27231
|
+
try {
|
|
27232
|
+
const isSwap = instId.toUpperCase().includes("-SWAP");
|
|
27233
|
+
const isMargin = instId.toUpperCase().includes("MARGIN");
|
|
27234
|
+
const fetchers = [
|
|
27235
|
+
["ticker", publicApi.getTicker(instId)],
|
|
27236
|
+
["orderbook", publicApi.getOrderbook(instId, 5)]
|
|
27237
|
+
];
|
|
27238
|
+
if (isSwap) {
|
|
27239
|
+
fetchers.push(["fundingRate", publicApi.getFundingRate(instId)]);
|
|
27240
|
+
}
|
|
27241
|
+
const keys = fetchers.map((f) => f[0]);
|
|
27242
|
+
const results = await Promise.allSettled(fetchers.map((f) => f[1]));
|
|
27243
|
+
const tickerIdx = keys.indexOf("ticker");
|
|
27244
|
+
const tickerRaw = results[tickerIdx]?.status === "fulfilled" ? results[tickerIdx].value : [];
|
|
27245
|
+
const tk = tickerRaw.length > 0 ? tickerRaw[0] : {};
|
|
27246
|
+
const obIdx = keys.indexOf("orderbook");
|
|
27247
|
+
const obRaw = results[obIdx]?.status === "fulfilled" ? results[obIdx].value : null;
|
|
27248
|
+
const obData = obRaw?.data?.[0] ?? obRaw;
|
|
27249
|
+
const asks = (obData?.asks ?? []).slice(0, 5);
|
|
27250
|
+
const bids = (obData?.bids ?? []).slice(0, 5);
|
|
27251
|
+
const spread = asks.length > 0 && bids.length > 0 ? (parseFloat(asks[0]?.[0] ?? "0") - parseFloat(bids[0]?.[0] ?? "0")).toFixed(2) : "N/A";
|
|
27252
|
+
let fundingRate = null;
|
|
27253
|
+
if (isSwap) {
|
|
27254
|
+
const frIdx = keys.indexOf("fundingRate");
|
|
27255
|
+
const frRaw = results[frIdx]?.status === "fulfilled" ? results[frIdx].value : [];
|
|
27256
|
+
const fr = frRaw.length > 0 ? frRaw[0] : {};
|
|
27257
|
+
fundingRate = {
|
|
27258
|
+
fundingRate: fr.fundingRate,
|
|
27259
|
+
nextFundingTime: fr.nextFundingTime ? new Date(parseInt(fr.nextFundingTime)).toISOString() : void 0
|
|
27260
|
+
};
|
|
27261
|
+
}
|
|
27262
|
+
const summary = {
|
|
27263
|
+
instId,
|
|
27264
|
+
productType: isSwap ? "\u6C38\u7EED\u5408\u7EA6" : isMargin ? "\u6760\u6746" : "\u73B0\u8D27/\u5176\u4ED6",
|
|
27265
|
+
ticker: {
|
|
27266
|
+
last: tk.last,
|
|
27267
|
+
bid: tk.bidPx,
|
|
27268
|
+
ask: tk.askPx,
|
|
27269
|
+
high24h: tk.high24h,
|
|
27270
|
+
low24h: tk.low24h,
|
|
27271
|
+
vol24h: tk.vol24h,
|
|
27272
|
+
change24h: tk.sodUtc8 ? `${tk.sodUtc8} (${tk.sodUtc0 ?? "-"}%)` : void 0
|
|
27273
|
+
},
|
|
27274
|
+
depth: {
|
|
27275
|
+
spread,
|
|
27276
|
+
top5Asks: asks.map((a) => ({ px: a[0], sz: a[1], orders: a[3] })),
|
|
27277
|
+
top5Bids: bids.map((b) => ({ px: b[0], sz: b[1], orders: b[3] }))
|
|
27278
|
+
},
|
|
27279
|
+
fundingRate,
|
|
27280
|
+
errors: results.map((r, i) => r.status === "rejected" ? `${keys[i]}\u5931\u8D25: ${r.reason?.message}` : null).filter(Boolean)
|
|
27281
|
+
};
|
|
27282
|
+
return toResult(summary);
|
|
27283
|
+
} catch (e) {
|
|
27284
|
+
return toError(e);
|
|
27285
|
+
}
|
|
27286
|
+
}
|
|
27287
|
+
);
|
|
27288
|
+
server.tool(
|
|
27289
|
+
"okx_preflight_check",
|
|
27290
|
+
"## \u529F\u80FD\uFF1A\u4E0B\u5355\u524D\u4E00\u6B21\u6027\u68C0\u67E5\uFF1A\u6700\u5927\u53EF\u5F00\u6570\u91CF\u3001\u9650\u4EF7\u8303\u56F4\u3001\u5408\u7EA6\u5F20\u6570\u6362\u7B97\u3001\u5F53\u524D\u4EF7\u683C\uFF0C\u907F\u514D\u4E0B\u5355\u540E\u62A5\u9519\n## \u573A\u666F\uFF1A\u7528\u4E8EAgent\u4E0B\u5355\u524D\u5FC5\u8C03\u3001\u9A8C\u8BC1\u7528\u6237\u8F93\u5165\u7684\u6570\u91CF\u548C\u4EF7\u683C\u662F\u5426\u5408\u6CD5\u3001\u907F\u514D\u56E0\u53C2\u6570\u9519\u8BEF\u88AB\u62D2\n## \u5173\u952E\u8BCD\uFF1A\u4E0B\u5355\u9884\u68C0, preflight, \u4E0B\u5355\u524D\u68C0\u67E5, \u6570\u91CF\u6362\u7B97, \u9650\u4EF7\u68C0\u67E5, \u53EF\u5F00\u68C0\u67E5\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\n## - tdMode: \u4EA4\u6613\u6A21\u5F0F\u3002cash=\u73B0\u8D27, cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B\n## - sz: \u7528\u6237\u60F3\u4E0B\u5355\u7684\u6570\u91CF\u3002\u5FC5\u586B\uFF08\u5E01\u6570\uFF0C\u4F1A\u81EA\u52A8\u6362\u7B97\u4E3A\u5F20\u6570\uFF09\n## - px: \u7528\u6237\u60F3\u4E0B\u5355\u7684\u4EF7\u683C\uFF08\u9009\u586B\uFF0C\u586B\u4E86\u4F1A\u68C0\u67E5\u662F\u5426\u5728\u9650\u4EF7\u8303\u56F4\u5185\uFF09\n## - side: \u4E70\u5356\u65B9\u5411\u3002buy=\u4E70\u5165, sell=\u5356\u51FA\u3002\u586B\u4E86\u4F1A\u67E5\u5BF9\u5E94\u65B9\u5411\u7684\u6700\u5927\u53EF\u5F00\n## - ordType: \u8BA2\u5355\u7C7B\u578B\u3002\u586B\u4E86\u4F1A\u68C0\u67E5\u662F\u5426\u5728\u9650\u4EF7\u8303\u56F4\u5185\uFF08\u9650\u4EF7\u5355\u624D\u9700\u8981\uFF09\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09- \u53EA\u67E5\u8BE2\u4E0D\u4EA7\u751F\u8BA2\u5355\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~1KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u9884\u68C0\u901A\u8FC7 \u2192 okx_place_order \u4E0B\u5355 \u2192 okx_get_order \u786E\u8BA4\u6210\u4EA4",
|
|
27291
|
+
{
|
|
27292
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
|
|
27293
|
+
tdMode: external_exports.enum(["cash", "cross", "isolated"]).describe("\u4EA4\u6613\u6A21\u5F0F\u3002cash=\u73B0\u8D27, cross=\u5168\u4ED3, isolated=\u9010\u4ED3"),
|
|
27294
|
+
sz: external_exports.string().describe("\u7528\u6237\u60F3\u4E0B\u5355\u7684\u6570\u91CF\uFF08\u5E01\u6570\uFF0C\u4F1A\u81EA\u52A8\u6362\u7B97\uFF09"),
|
|
27295
|
+
px: external_exports.string().optional().describe("\u7528\u6237\u60F3\u4E0B\u5355\u7684\u4EF7\u683C\uFF08\u9009\u586B\uFF09"),
|
|
27296
|
+
side: external_exports.enum(["buy", "sell"]).optional().describe("\u4E70\u5356\u65B9\u5411"),
|
|
27297
|
+
ordType: external_exports.enum(["market", "limit", "post_only", "fok", "ioc"]).optional().describe("\u8BA2\u5355\u7C7B\u578B")
|
|
27298
|
+
},
|
|
27299
|
+
async ({ instId, tdMode, sz, px, side, ordType }) => {
|
|
27300
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
27301
|
+
try {
|
|
27302
|
+
const calls = [
|
|
27303
|
+
["maxSize", privateApi.getMaxSize(auth, instId, tdMode)],
|
|
27304
|
+
["priceLimit", publicApi.getPriceLimitBatch("", void 0, instId)],
|
|
27305
|
+
["convertCoin", publicApi.convertContractCoin(instId, sz, "coin", "open")],
|
|
27306
|
+
["ticker", publicApi.getTicker(instId)]
|
|
27307
|
+
];
|
|
27308
|
+
const keys = calls.map((c) => c[0]);
|
|
27309
|
+
const results = await Promise.allSettled(calls.map((c) => c[1]));
|
|
27310
|
+
const get = (name) => {
|
|
27311
|
+
const idx = keys.indexOf(name);
|
|
27312
|
+
if (idx < 0) return null;
|
|
27313
|
+
return results[idx].status === "fulfilled" ? results[idx].value : null;
|
|
27314
|
+
};
|
|
27315
|
+
const maxSizeData = get("maxSize");
|
|
27316
|
+
const maxSz = maxSizeData?.[0];
|
|
27317
|
+
const limitData = get("priceLimit");
|
|
27318
|
+
const limit = limitData?.[0];
|
|
27319
|
+
const convertData = get("convertCoin");
|
|
27320
|
+
const converted = convertData?.[0];
|
|
27321
|
+
const tickerData = get("ticker");
|
|
27322
|
+
const tk = tickerData?.[0] ?? {};
|
|
27323
|
+
const checks = {
|
|
27324
|
+
instId,
|
|
27325
|
+
tdMode,
|
|
27326
|
+
userInput: { sz, px, side, ordType },
|
|
27327
|
+
currentPrice: {
|
|
27328
|
+
last: tk.last,
|
|
27329
|
+
bid: tk.bidPx,
|
|
27330
|
+
ask: tk.askPx
|
|
27331
|
+
},
|
|
27332
|
+
maxSize: maxSz ? {
|
|
27333
|
+
maxBuy: maxSz.maxBuy,
|
|
27334
|
+
maxSell: maxSz.maxSell,
|
|
27335
|
+
ccy: maxSz.ccy
|
|
27336
|
+
} : null,
|
|
27337
|
+
priceLimit: limit ? {
|
|
27338
|
+
highest: limit.highest,
|
|
27339
|
+
lowest: limit.lowest,
|
|
27340
|
+
pxWithinLimit: px ? parseFloat(px) >= parseFloat(limit.lowest ?? "0") && parseFloat(px) <= parseFloat(limit.highest ?? "Infinity") : null
|
|
27341
|
+
} : null,
|
|
27342
|
+
contractConversion: converted ? {
|
|
27343
|
+
fromCoin: sz,
|
|
27344
|
+
toContracts: converted.sz,
|
|
27345
|
+
unit: "contracts"
|
|
27346
|
+
} : null,
|
|
27347
|
+
warnings: [],
|
|
27348
|
+
errors: results.map((r, i) => r.status === "rejected" ? `${keys[i]}\u67E5\u8BE2\u5931\u8D25: ${r.reason?.message}` : null).filter(Boolean)
|
|
27349
|
+
};
|
|
27350
|
+
if (limit && px) {
|
|
27351
|
+
const lowest = parseFloat(limit.lowest ?? "0");
|
|
27352
|
+
const highest = parseFloat(limit.highest ?? "Infinity");
|
|
27353
|
+
const price = parseFloat(px);
|
|
27354
|
+
if (price < lowest) checks.warnings.push(`\u4EF7\u683C ${px} \u4F4E\u4E8E\u4E0B\u9650 ${limit.lowest}`);
|
|
27355
|
+
if (price > highest) checks.warnings.push(`\u4EF7\u683C ${px} \u9AD8\u4E8E\u4E0A\u9650 ${limit.highest}`);
|
|
27356
|
+
}
|
|
27357
|
+
if (maxSz && side) {
|
|
27358
|
+
const maxBuy = parseFloat(maxSz.maxBuy ?? "0");
|
|
27359
|
+
const maxSell = parseFloat(maxSz.maxSell ?? "0");
|
|
27360
|
+
const qty = parseFloat(sz);
|
|
27361
|
+
if (side === "buy" && qty > maxBuy) checks.warnings.push(`\u6570\u91CF ${sz} \u8D85\u8FC7\u6700\u5927\u53EF\u4E70 ${maxSz.maxBuy}`);
|
|
27362
|
+
if (side === "sell" && qty > maxSell) checks.warnings.push(`\u6570\u91CF ${sz} \u8D85\u8FC7\u6700\u5927\u53EF\u5356 ${maxSz.maxSell}`);
|
|
27363
|
+
}
|
|
27364
|
+
if (converted) {
|
|
27365
|
+
const contractSz = converted.sz;
|
|
27366
|
+
if (parseFloat(contractSz ?? "0") < 1) checks.warnings.push(`\u6362\u7B97\u540E\u5F20\u6570 ${contractSz} < 1\uFF0C\u53EF\u80FD\u65E0\u6CD5\u4E0B\u5355`);
|
|
27367
|
+
}
|
|
27368
|
+
checks.passed = checks.warnings.length === 0 && checks.errors.length === 0;
|
|
27369
|
+
return toResult(checks);
|
|
27370
|
+
} catch (e) {
|
|
27371
|
+
return toError(e);
|
|
27372
|
+
}
|
|
27373
|
+
}
|
|
27374
|
+
);
|
|
27375
|
+
}
|
|
27376
|
+
|
|
27132
27377
|
// src/index.ts
|
|
27133
27378
|
async function main() {
|
|
27134
27379
|
const server = new McpServer({ name: "hvip", version: "0.2.1" });
|
|
@@ -27150,6 +27395,7 @@ async function main() {
|
|
|
27150
27395
|
registerAffiliateTools(server, auth);
|
|
27151
27396
|
registerFiatTools(server, auth);
|
|
27152
27397
|
registerRfqTools(server, auth);
|
|
27398
|
+
registerAgentUtils(server, auth);
|
|
27153
27399
|
const transport = new StdioServerTransport();
|
|
27154
27400
|
await server.connect(transport);
|
|
27155
27401
|
}
|
package/package.json
CHANGED
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "hvip-mcp-server",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "OKX ecosystem MCP server - full API coverage for AI agents",
|
|
5
|
-
"homepage": "https://hvip.one",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"bin": {
|
|
8
|
-
"hvip-mcp": "dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"dist/index.js"
|
|
12
|
-
],
|
|
13
|
-
"scripts": {
|
|
14
|
-
"build": "node build.mjs",
|
|
15
|
-
"dev": "tsx watch src/index.ts",
|
|
16
|
-
"start": "node dist/index.js",
|
|
17
|
-
"verify": "tsx tests/verify.mts",
|
|
18
|
-
"test": "vitest run",
|
|
19
|
-
"test:watch": "vitest",
|
|
20
|
-
"lint": "eslint src",
|
|
21
|
-
"typecheck": "tsc --noEmit"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
25
|
-
"dotenv": "^16.4.0",
|
|
26
|
-
"zod": "^3.23.0"
|
|
27
|
-
},
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"@types/node": "^22.0.0",
|
|
30
|
-
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
31
|
-
"@typescript-eslint/parser": "^8.0.0",
|
|
32
|
-
"esbuild": "^0.28.0",
|
|
33
|
-
"eslint": "^9.0.0",
|
|
34
|
-
"tsx": "^4.16.0",
|
|
35
|
-
"typescript": "^5.5.0",
|
|
36
|
-
"vitest": "^2.0.0"
|
|
37
|
-
},
|
|
38
|
-
"engines": {
|
|
39
|
-
"node": ">=20"
|
|
40
|
-
}
|
|
41
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "hvip-mcp-server",
|
|
3
|
+
"version": "0.2.35",
|
|
4
|
+
"description": "OKX ecosystem MCP server - full API coverage for AI agents",
|
|
5
|
+
"homepage": "https://hvip.one",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"bin": {
|
|
8
|
+
"hvip-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/index.js"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "node build.mjs",
|
|
15
|
+
"dev": "tsx watch src/index.ts",
|
|
16
|
+
"start": "node dist/index.js",
|
|
17
|
+
"verify": "tsx tests/verify.mts",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"lint": "eslint src",
|
|
21
|
+
"typecheck": "tsc --noEmit"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
25
|
+
"dotenv": "^16.4.0",
|
|
26
|
+
"zod": "^3.23.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^22.0.0",
|
|
30
|
+
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
31
|
+
"@typescript-eslint/parser": "^8.0.0",
|
|
32
|
+
"esbuild": "^0.28.0",
|
|
33
|
+
"eslint": "^9.0.0",
|
|
34
|
+
"tsx": "^4.16.0",
|
|
35
|
+
"typescript": "^5.5.0",
|
|
36
|
+
"vitest": "^2.0.0"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=20"
|
|
40
|
+
}
|
|
41
|
+
}
|