hvip-mcp-server 0.2.24 → 0.2.25
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 +290 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21201,7 +21201,13 @@ var publicApi = {
|
|
|
21201
21201
|
getCallAuctionDetails: (instId) => request("GET", "/api/v5/market/call-auction-details", { params: { instId } }),
|
|
21202
21202
|
getOptionInstrumentFamilyTrades: (instFamily, limit) => request("GET", "/api/v5/market/option/instrument-family-trades", { params: { instFamily, limit } }),
|
|
21203
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")
|
|
21204
|
+
getExchangeRate: () => request("GET", "/api/v5/market/exchange-rate"),
|
|
21205
|
+
getIndexComponents: (index) => request("GET", "/api/v5/market/index-components", { params: { index } }),
|
|
21206
|
+
getEstimatedPrice: (instId) => request("GET", "/api/v5/public/estimated-price", { params: { instId } }),
|
|
21207
|
+
getDiscountRateInterestFreeQuota: () => request("GET", "/api/v5/public/discount-rate-interest-free-quota"),
|
|
21208
|
+
getOptionOiExpiry: (ccy) => request("GET", "/api/v5/rubik/stat/option/open-interest-volume-expiry", { params: { ccy } }),
|
|
21209
|
+
getOptionOiStrike: (ccy, expTime) => request("GET", "/api/v5/rubik/stat/option/open-interest-volume-strike", { params: { ccy, expTime } }),
|
|
21210
|
+
getOptionOpenInterestVolume: (ccy) => request("GET", "/api/v5/rubik/stat/option/open-interest-volume", { params: { ccy } })
|
|
21205
21211
|
};
|
|
21206
21212
|
var privateApi = {
|
|
21207
21213
|
getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
|
|
@@ -21342,7 +21348,14 @@ var privateApi = {
|
|
|
21342
21348
|
// ── 资金收尾(第十七批新增) ──────────────────────────────────────────
|
|
21343
21349
|
getDepositLightning: (auth, ccy) => request("GET", "/api/v5/asset/deposit-lightning", { params: { ccy }, auth }),
|
|
21344
21350
|
withdrawalLightning: (auth, body) => request("POST", "/api/v5/asset/withdrawal-lightning", { body, auth }),
|
|
21345
|
-
getTransferState: (auth, transferId) => request("GET", "/api/v5/asset/transfer-state", { params: { transferId }, auth })
|
|
21351
|
+
getTransferState: (auth, transferId) => request("GET", "/api/v5/asset/transfer-state", { params: { transferId }, auth }),
|
|
21352
|
+
// ── 第二批价差操作 ────────────────────────────────────────────────────────
|
|
21353
|
+
amendSpreadOrder: (auth, body) => request("POST", "/api/v5/sprd/amend-order", { body, auth }),
|
|
21354
|
+
getSpreadOrdersHistory: (auth, sprdId, limit) => request("GET", "/api/v5/sprd/orders-history", { params: { sprdId, limit }, auth }),
|
|
21355
|
+
getSpreadFills: (auth, sprdId, limit) => request("GET", "/api/v5/sprd/fills", { params: { sprdId, limit }, auth }),
|
|
21356
|
+
// ── 第三批交易收尾 ─────────────────────────────────────────────────────────
|
|
21357
|
+
resetMmp: (auth, body) => request("POST", "/api/v5/account/mmp-reset", { body, auth }),
|
|
21358
|
+
getOrderByClientId: (auth, instId, clOrdId) => request("GET", "/api/v5/trade/order", { params: { instId, clOrdId }, auth })
|
|
21346
21359
|
};
|
|
21347
21360
|
|
|
21348
21361
|
// src/adapters/hrails.ts
|
|
@@ -22194,6 +22207,76 @@ function registerPublicTools(server, auth) {
|
|
|
22194
22207
|
}
|
|
22195
22208
|
}
|
|
22196
22209
|
);
|
|
22210
|
+
server.tool(
|
|
22211
|
+
"okx_get_index_components",
|
|
22212
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u6307\u6570\u7684\u6210\u5206\u5E01\u79CD\u53CA\u5176\u6743\u91CD\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E86\u89E3\u6307\u6570\u6784\u6210\u3001\u5206\u6790\u5404\u4EA4\u6613\u6240\u5BF9\u6307\u6570\u4EF7\u683C\u7684\u5F71\u54CD\u6743\u91CD\n## \u5173\u952E\u8BCD\uFF1A\u6307\u6570\u6210\u5206, index components, \u6307\u6570\u6743\u91CD, \u6210\u5206\u5E01\u79CD, \u6210\u5206\u4EA4\u6613\u6240\n## \u53C2\u6570\uFF1A\n## - index: \u6307\u6570\u540D\u79F0\uFF0C\u5982 BTC-USD\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6307\u6570\u6210\u5206 \u2192 okx_get_index_tickers \u770B\u6307\u6570\u4EF7\u683C \u2192 \u5206\u6790\u504F\u5DEE",
|
|
22213
|
+
{
|
|
22214
|
+
index: external_exports.string().describe("\u6307\u6570\u540D\u79F0\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B")
|
|
22215
|
+
},
|
|
22216
|
+
async ({ index }) => {
|
|
22217
|
+
try {
|
|
22218
|
+
const data = await publicApi.getIndexComponents(index);
|
|
22219
|
+
const enriched = typeof data === "object" && !Array.isArray(data) ? {
|
|
22220
|
+
...data,
|
|
22221
|
+
tsIso: data.ts ? new Date(parseInt(data.ts)).toISOString() : void 0
|
|
22222
|
+
} : data;
|
|
22223
|
+
return toResult(enriched);
|
|
22224
|
+
} catch (e) {
|
|
22225
|
+
return toError(e);
|
|
22226
|
+
}
|
|
22227
|
+
}
|
|
22228
|
+
);
|
|
22229
|
+
server.tool(
|
|
22230
|
+
"okx_get_index_components_market",
|
|
22231
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5E02\u573A\u4EF7\u683C\u6307\u6570\u7684\u6210\u5206\u6570\u636E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u83B7\u53D6\u6307\u6570\u6210\u5206\u7684\u6700\u9AD8/\u6700\u4F4E\u4EF7\u3001\u5404\u4EA4\u6613\u6240\u62A5\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u5E02\u573A\u6307\u6570\u6210\u5206, market index components, \u5E02\u573A\u4EF7\u683C\u6307\u6570\n## \u53C2\u6570\uFF1A\n## - index: \u6307\u6570\u540D\u79F0\uFF0C\u5982 BTC-USD\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u5E02\u573A\u6307\u6570\u6210\u5206 \u2192 \u5BF9\u6BD4\u5404\u4EA4\u6613\u6240\u4EF7\u5DEE \u2192 \u53D1\u73B0\u5957\u5229\u673A\u4F1A",
|
|
22232
|
+
{
|
|
22233
|
+
index: external_exports.string().describe("\u6307\u6570\u540D\u79F0\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B")
|
|
22234
|
+
},
|
|
22235
|
+
async ({ index }) => {
|
|
22236
|
+
try {
|
|
22237
|
+
const data = await publicApi.getIndexComponents(index);
|
|
22238
|
+
const enriched = typeof data === "object" && !Array.isArray(data) ? {
|
|
22239
|
+
...data,
|
|
22240
|
+
tsIso: data.ts ? new Date(parseInt(data.ts)).toISOString() : void 0
|
|
22241
|
+
} : data;
|
|
22242
|
+
return toResult(enriched);
|
|
22243
|
+
} catch (e) {
|
|
22244
|
+
return toError(e);
|
|
22245
|
+
}
|
|
22246
|
+
}
|
|
22247
|
+
);
|
|
22248
|
+
server.tool(
|
|
22249
|
+
"okx_get_discount_info",
|
|
22250
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u5404\u5E01\u79CD\u7684\u62B5\u62BC\u54C1\u6298\u6263\u7387\u548C\u514D\u606F\u989D\u5EA6\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E86\u89E3\u5404\u5E01\u79CD\u4F5C\u4E3A\u62B5\u62BC\u54C1\u7684\u4EF7\u503C\u6298\u6263\u3001\u8BA1\u7B97\u53EF\u7528\u62B5\u62BC\u989D\u5EA6\n## \u5173\u952E\u8BCD\uFF1A\u62B5\u62BC\u6298\u6263, discount info, \u62B5\u62BC\u54C1\u6298\u6263\u7387, \u514D\u606F\u989D\u5EA6, \u62C5\u4FDD\u54C1\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6298\u6263\u7387 \u2192 \u8BA1\u7B97\u5B9E\u9645\u62B5\u62BC\u4EF7\u503C \u2192 okx_get_max_loan \u67E5\u53EF\u501F",
|
|
22251
|
+
{},
|
|
22252
|
+
async () => {
|
|
22253
|
+
try {
|
|
22254
|
+
const data = await publicApi.getDiscountRateInterestFreeQuota();
|
|
22255
|
+
return toResult(data);
|
|
22256
|
+
} catch (e) {
|
|
22257
|
+
return toError(e);
|
|
22258
|
+
}
|
|
22259
|
+
}
|
|
22260
|
+
);
|
|
22261
|
+
server.tool(
|
|
22262
|
+
"okx_get_estimated_price",
|
|
22263
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u9884\u4F30\u884C\u6743\u7ED3\u7B97\u4EF7\n## \u573A\u666F\uFF1A\u7528\u4E8E\u671F\u6743\u5230\u671F\u524D\u9884\u4F30\u7ED3\u7B97\u4EF7\u3001\u8BC4\u4F30\u671F\u6743\u5230\u671F\u4EF7\u503C\n## \u5173\u952E\u8BCD\uFF1A\u9884\u4F30\u7ED3\u7B97, estimated price, \u671F\u6743\u7ED3\u7B97, \u884C\u6743\u9884\u4F30, \u4EA4\u5272\u9884\u4F30\u4EF7\n## \u53C2\u6570\uFF1A\n## - instId: \u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u9884\u4F30\u7ED3\u7B97\u4EF7 \u2192 okx_get_opt_summary \u770B\u6CE2\u52A8\u7387 \u2192 \u8BC4\u4F30\u671F\u6743\u4EF7\u503C",
|
|
22264
|
+
{
|
|
22265
|
+
instId: external_exports.string().describe("\u671F\u6743\u4EA7\u54C1ID\uFF0C\u5982 BTC-USD-260612-64000-C\u3002\u5FC5\u586B")
|
|
22266
|
+
},
|
|
22267
|
+
async ({ instId }) => {
|
|
22268
|
+
try {
|
|
22269
|
+
const data = await publicApi.getEstimatedPrice(instId);
|
|
22270
|
+
const enriched = data.map((item) => ({
|
|
22271
|
+
...item,
|
|
22272
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
22273
|
+
}));
|
|
22274
|
+
return toResult(enriched);
|
|
22275
|
+
} catch (e) {
|
|
22276
|
+
return toError(e);
|
|
22277
|
+
}
|
|
22278
|
+
}
|
|
22279
|
+
);
|
|
22197
22280
|
}
|
|
22198
22281
|
|
|
22199
22282
|
// src/tools/account.ts
|
|
@@ -23021,6 +23104,56 @@ function registerTradingTools(server, auth) {
|
|
|
23021
23104
|
}
|
|
23022
23105
|
}
|
|
23023
23106
|
);
|
|
23107
|
+
server.tool(
|
|
23108
|
+
"okx_reset_mmp",
|
|
23109
|
+
"## \u529F\u80FD\uFF1A\u91CD\u7F6EMMP\uFF08\u505A\u5E02\u5546\u4FDD\u62A4\uFF09\u72B6\u6001\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5728\u89E6\u53D1MMP\u4FDD\u62A4\u540E\u624B\u52A8\u91CD\u7F6E\u3001\u6062\u590D\u505A\u5E02\u4EA4\u6613\n## \u5173\u952E\u8BCD\uFF1A\u91CD\u7F6EMMP, reset mmp, \u505A\u5E02\u5546\u91CD\u7F6E, MMP\u590D\u4F4D\n## \u53C2\u6570\uFF1A\n## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u91CD\u7F6EMMP\u4FDD\u62A4\u72B6\u6001\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u91CD\u7F6EMMP\u540E\u505A\u5E02\u5546\u53EF\u6062\u590D\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_mmp_config \u67E5\u770BMMP\u72B6\u6001 \u2192 \u672C\u5DE5\u5177\u91CD\u7F6E \u2192 \u6062\u590D\u6B63\u5E38\u505A\u5E02",
|
|
23110
|
+
{
|
|
23111
|
+
instFamily: external_exports.string().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u5FC5\u586B")
|
|
23112
|
+
},
|
|
23113
|
+
async ({ instFamily }) => {
|
|
23114
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23115
|
+
try {
|
|
23116
|
+
const data = await privateApi.resetMmp(auth, { instFamily });
|
|
23117
|
+
return toResult(data);
|
|
23118
|
+
} catch (e) {
|
|
23119
|
+
return toError(e);
|
|
23120
|
+
}
|
|
23121
|
+
}
|
|
23122
|
+
);
|
|
23123
|
+
server.tool(
|
|
23124
|
+
"okx_get_orders_archive",
|
|
23125
|
+
"## \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\u590D\u76D8\n## \u5173\u952E\u8BCD\uFF1A\u5F52\u6863\u8BA2\u5355, orders archive, \u5386\u53F2\u5F52\u6863, \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\u590D\u76D8",
|
|
23126
|
+
{
|
|
23127
|
+
instType: external_exports.enum(INST_TYPE_TRADE).describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
23128
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA450")
|
|
23129
|
+
},
|
|
23130
|
+
async ({ instType, limit }) => {
|
|
23131
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23132
|
+
try {
|
|
23133
|
+
const data = await privateApi.getOrdersHistoryArchive(auth, instType, limit);
|
|
23134
|
+
return toResult(data);
|
|
23135
|
+
} catch (e) {
|
|
23136
|
+
return toError(e);
|
|
23137
|
+
}
|
|
23138
|
+
}
|
|
23139
|
+
);
|
|
23140
|
+
server.tool(
|
|
23141
|
+
"okx_get_order_by_clOrdId",
|
|
23142
|
+
"## \u529F\u80FD\uFF1A\u901A\u8FC7\u5BA2\u6237\u7AEF\u81EA\u5B9A\u4E49ID\u67E5\u8BE2\u8BA2\u5355\u8BE6\u60C5\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2A\u4F7F\u7528\u81EA\u5B9A\u4E49\u8BA2\u5355ID\u4E0B\u5355\u540E\u7684\u6267\u884C\u72B6\u6001\u3001\u5728\u81EA\u6709\u7CFB\u7EDF\u4E2D\u5173\u8054\u8BA2\u5355\n## \u5173\u952E\u8BCD\uFF1A\u8BA2\u5355ID, clOrdId, \u81EA\u5B9A\u4E49\u8BA2\u5355, \u5BA2\u6237\u7AEFID, \u8BA2\u5355\u67E5\u8BE2\n## \u53C2\u6570\uFF1A\n## - instId: \u4EA7\u54C1ID\u3002\u5FC5\u586B\n## - clOrdId: \u5BA2\u6237\u7AEF\u81EA\u5B9A\u4E49\u8BA2\u5355ID\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_place_order \u4E0B\u5355\u65F6\u8BBE\u7F6EclOrdId \u2192 \u672C\u5DE5\u5177\u67E5\u8BE2 \u2192 \u786E\u8BA4\u8BA2\u5355\u72B6\u6001",
|
|
23143
|
+
{
|
|
23144
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\u3002\u5FC5\u586B"),
|
|
23145
|
+
clOrdId: external_exports.string().describe("\u5BA2\u6237\u7AEF\u81EA\u5B9A\u4E49\u8BA2\u5355ID\u3002\u5FC5\u586B")
|
|
23146
|
+
},
|
|
23147
|
+
async ({ instId, clOrdId }) => {
|
|
23148
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23149
|
+
try {
|
|
23150
|
+
const data = await privateApi.getOrderByClientId(auth, instId, clOrdId);
|
|
23151
|
+
return toResult(data);
|
|
23152
|
+
} catch (e) {
|
|
23153
|
+
return toError(e);
|
|
23154
|
+
}
|
|
23155
|
+
}
|
|
23156
|
+
);
|
|
23024
23157
|
}
|
|
23025
23158
|
|
|
23026
23159
|
// src/tools/algo.ts
|
|
@@ -23598,6 +23731,83 @@ function registerStatsTools(server) {
|
|
|
23598
23731
|
}
|
|
23599
23732
|
}
|
|
23600
23733
|
);
|
|
23734
|
+
server.tool(
|
|
23735
|
+
"okx_get_margin_lending_ratio_history",
|
|
23736
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u6760\u6746\u501F\u5E01\u5229\u7387\u5386\u53F2\u8D70\u52BF\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u501F\u5E01\u5229\u7387\u53D8\u5316\u8D8B\u52BF\u3001\u5224\u65AD\u6760\u6746\u8D44\u91D1\u6210\u672C\u53D8\u5316\n## \u5173\u952E\u8BCD\uFF1A\u501F\u5E01\u5229\u7387\u5386\u53F2, margin lending history, \u5229\u7387\u8D70\u52BF, \u6760\u6746\u6210\u672C\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001USDT\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\uFF1A\u672C\u5DE5\u5177\u770B\u5229\u7387\u5386\u53F2 \u2192 okx_get_margin_lending_ratio \u770B\u5F53\u524D \u2192 \u5224\u65AD\u6760\u6746\u53D8\u5316",
|
|
23737
|
+
{ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001USDT") },
|
|
23738
|
+
async ({ ccy }) => {
|
|
23739
|
+
try {
|
|
23740
|
+
const data = await publicApi.getLendingRateHistory(ccy);
|
|
23741
|
+
const enriched = data.map((item) => ({
|
|
23742
|
+
...item,
|
|
23743
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
23744
|
+
}));
|
|
23745
|
+
return toResult(enriched);
|
|
23746
|
+
} catch (e) {
|
|
23747
|
+
return toError(e);
|
|
23748
|
+
}
|
|
23749
|
+
}
|
|
23750
|
+
);
|
|
23751
|
+
server.tool(
|
|
23752
|
+
"okx_get_option_open_interest",
|
|
23753
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u671F\u6743\u672A\u5E73\u4ED3\u91CF\u548C\u6210\u4EA4\u91CF\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u671F\u6743\u5E02\u573A\u6D3B\u8DC3\u5EA6\u3001\u5224\u65AD\u8D44\u91D1\u6D41\u5165\u6D41\u51FA\u8D8B\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u6301\u4ED3, option oi, \u671F\u6743\u672A\u5E73\u4ED3, \u671F\u6743\u6210\u4EA4\u91CF, \u671F\u6743\u6301\u4ED3\u91CF\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u671F\u6743\u6301\u4ED3 \u2192 okx_get_put_call_ratio \u5206\u6790\u60C5\u7EEA \u2192 okx_get_opt_summary \u770B\u6CE2\u52A8\u7387",
|
|
23754
|
+
{ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u5FC5\u586B") },
|
|
23755
|
+
async ({ ccy }) => {
|
|
23756
|
+
try {
|
|
23757
|
+
const data = await publicApi.getOptionOpenInterestVolume(ccy);
|
|
23758
|
+
return toResult(data);
|
|
23759
|
+
} catch (e) {
|
|
23760
|
+
return toError(e);
|
|
23761
|
+
}
|
|
23762
|
+
}
|
|
23763
|
+
);
|
|
23764
|
+
server.tool(
|
|
23765
|
+
"okx_get_option_oi_expiry",
|
|
23766
|
+
"## \u529F\u80FD\uFF1A\u6309\u5230\u671F\u65E5\u83B7\u53D6\u671F\u6743\u672A\u5E73\u4ED3\u91CF\u548C\u6210\u4EA4\u91CF\u5206\u5E03\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u4E0D\u540C\u5230\u671F\u65E5\u7684\u671F\u6743\u6301\u4ED3\u5206\u5E03\u3001\u5224\u65AD\u5E02\u573A\u7126\u70B9\u5230\u671F\u65E5\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u5230\u671F\u6301\u4ED3, option oi expiry, \u5230\u671F\u65E5\u5206\u5E03, \u5404\u671F\u9650\u6301\u4ED3\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u6309\u5230\u671F\u65E5\u770B\u6301\u4ED3 \u2192 okx_get_option_open_interest \u770B\u603B\u91CF \u2192 \u5206\u6790\u5230\u671F\u65E5\u96C6\u4E2D\u5EA6",
|
|
23767
|
+
{ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u5FC5\u586B") },
|
|
23768
|
+
async ({ ccy }) => {
|
|
23769
|
+
try {
|
|
23770
|
+
const data = await publicApi.getOptionOiExpiry(ccy);
|
|
23771
|
+
const enriched = data.map((row) => ({
|
|
23772
|
+
ts: row[0],
|
|
23773
|
+
tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
|
|
23774
|
+
expTime: row[1],
|
|
23775
|
+
oi: row[2],
|
|
23776
|
+
oiUsd: row[3],
|
|
23777
|
+
vol: row[4],
|
|
23778
|
+
volUsd: row[5]
|
|
23779
|
+
}));
|
|
23780
|
+
return toResult(enriched);
|
|
23781
|
+
} catch (e) {
|
|
23782
|
+
return toError(e);
|
|
23783
|
+
}
|
|
23784
|
+
}
|
|
23785
|
+
);
|
|
23786
|
+
server.tool(
|
|
23787
|
+
"okx_get_option_oi_strike",
|
|
23788
|
+
"## \u529F\u80FD\uFF1A\u6309\u884C\u6743\u4EF7\u83B7\u53D6\u671F\u6743\u672A\u5E73\u4ED3\u91CF\u548C\u6210\u4EA4\u91CF\u5206\u5E03\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u4E0D\u540C\u884C\u6743\u4EF7\u7684\u671F\u6743\u6301\u4ED3\u96C6\u4E2D\u5EA6\u3001\u53D1\u73B0\u6700\u5927\u75DB\u70B9\u3001\u5224\u65AD\u5E02\u573A\u9884\u671F\u4EF7\u683C\u533A\u95F4\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u884C\u6743\u6301\u4ED3, option oi strike, \u884C\u6743\u4EF7\u5206\u5E03, \u6700\u5927\u75DB\u70B9, max pain\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u5FC5\u586B\n## - expTime: \u5230\u671F\u65E5\uFF0C\u683C\u5F0F YYYYMMDD\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 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u884C\u6743\u4EF7\u5206\u5E03 \u2192 \u8BA1\u7B97\u6700\u5927\u75DB\u70B9 \u2192 \u9884\u5224\u5230\u671F\u65E5\u4EF7\u683C\u8D70\u52BF",
|
|
23789
|
+
{
|
|
23790
|
+
ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH\u3002\u5FC5\u586B"),
|
|
23791
|
+
expTime: external_exports.string().describe("\u5230\u671F\u65E5\uFF0C\u683C\u5F0F YYYYMMDD\u3002\u5FC5\u586B")
|
|
23792
|
+
},
|
|
23793
|
+
async ({ ccy, expTime }) => {
|
|
23794
|
+
try {
|
|
23795
|
+
const data = await publicApi.getOptionOiStrike(ccy, expTime);
|
|
23796
|
+
const enriched = data.map((row) => ({
|
|
23797
|
+
ts: row[0],
|
|
23798
|
+
tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
|
|
23799
|
+
strike: row[1],
|
|
23800
|
+
putOi: row[2],
|
|
23801
|
+
callOi: row[3],
|
|
23802
|
+
putVol: row[4],
|
|
23803
|
+
callVol: row[5]
|
|
23804
|
+
}));
|
|
23805
|
+
return toResult(enriched);
|
|
23806
|
+
} catch (e) {
|
|
23807
|
+
return toError(e);
|
|
23808
|
+
}
|
|
23809
|
+
}
|
|
23810
|
+
);
|
|
23601
23811
|
}
|
|
23602
23812
|
|
|
23603
23813
|
// src/tools/subaccount.ts
|
|
@@ -24518,6 +24728,84 @@ function registerSpreadTools(server, auth) {
|
|
|
24518
24728
|
}
|
|
24519
24729
|
}
|
|
24520
24730
|
);
|
|
24731
|
+
server.tool(
|
|
24732
|
+
"okx_amend_spread_order",
|
|
24733
|
+
"## \u529F\u80FD\uFF1A\u4FEE\u6539\u4EF7\u5DEE\u5408\u7EA6\u672A\u6210\u4EA4\u8BA2\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u4EF7\u5DEE\u6302\u5355\u7684\u4EF7\u683C\u6216\u6570\u91CF\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539\u4EF7\u5DEE, amend spread, \u4EF7\u5DEE\u6539\u5355, \u4EF7\u5DEE\u6539\u4EF7\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B\n## - ordId: \u8BA2\u5355ID\u3002\u5FC5\u586B\n## - newSz: \u65B0\u6570\u91CF\u3002\u53EF\u9009\n## - newPx: \u65B0\u4EF7\u683C\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u4EF7\u5DEE\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_spread_orders \u67E5\u770B\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 \u786E\u8BA4\u4FEE\u6539\u7ED3\u679C",
|
|
24734
|
+
{
|
|
24735
|
+
sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B"),
|
|
24736
|
+
ordId: external_exports.string().describe("\u8BA2\u5355ID\u3002\u5FC5\u586B"),
|
|
24737
|
+
newSz: external_exports.string().optional().describe("\u65B0\u6570\u91CF"),
|
|
24738
|
+
newPx: external_exports.string().optional().describe("\u65B0\u4EF7\u683C")
|
|
24739
|
+
},
|
|
24740
|
+
async ({ sprdId, ordId, newSz, newPx }) => {
|
|
24741
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24742
|
+
try {
|
|
24743
|
+
const body = { sprdId, ordId };
|
|
24744
|
+
if (newSz) body.newSz = newSz;
|
|
24745
|
+
if (newPx) body.newPx = newPx;
|
|
24746
|
+
const data = await privateApi.amendSpreadOrder(auth, body);
|
|
24747
|
+
return toResult(data);
|
|
24748
|
+
} catch (e) {
|
|
24749
|
+
return toError(e);
|
|
24750
|
+
}
|
|
24751
|
+
}
|
|
24752
|
+
);
|
|
24753
|
+
server.tool(
|
|
24754
|
+
"okx_get_spread_orders_history",
|
|
24755
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EF7\u5DEE\u5408\u7EA6\u5386\u53F2\u8BA2\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5DF2\u5B8C\u6210\u7684\u5386\u53F2\u4EF7\u5DEE\u8BA2\u5355\u3001\u590D\u76D8\u4EF7\u5DEE\u4EA4\u6613\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u5386\u53F2\u8BA2\u5355, spread orders history, \u4EF7\u5DEE\u6210\u4EA4\u5386\u53F2\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_spread_orders \u67E5\u5F53\u524D\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2 \u2192 \u590D\u76D8\u4EA4\u6613",
|
|
24756
|
+
{
|
|
24757
|
+
sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID"),
|
|
24758
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
24759
|
+
},
|
|
24760
|
+
async ({ sprdId, limit }) => {
|
|
24761
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24762
|
+
try {
|
|
24763
|
+
const data = await privateApi.getSpreadOrdersHistory(auth, sprdId, limit);
|
|
24764
|
+
return toResult(data);
|
|
24765
|
+
} catch (e) {
|
|
24766
|
+
return toError(e);
|
|
24767
|
+
}
|
|
24768
|
+
}
|
|
24769
|
+
);
|
|
24770
|
+
server.tool(
|
|
24771
|
+
"okx_get_spread_fills",
|
|
24772
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EF7\u5DEE\u5408\u7EA6\u6210\u4EA4\u660E\u7EC6\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u4EF7\u5DEE\u8BA2\u5355\u7684\u9010\u7B14\u6210\u4EA4\u8BB0\u5F55\u3001\u6838\u5BF9\u6210\u4EA4\u4EF7\u683C\u548C\u6570\u91CF\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u6210\u4EA4, spread fills, \u4EF7\u5DEE\u6210\u4EA4\u660E\u7EC6, \u4EF7\u5DEE\u9010\u7B14\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1Aokx_get_spread_orders \u67E5\u8BA2\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u6210\u4EA4 \u2192 \u6838\u7B97\u6210\u672C",
|
|
24773
|
+
{
|
|
24774
|
+
sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID"),
|
|
24775
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
24776
|
+
},
|
|
24777
|
+
async ({ sprdId, limit }) => {
|
|
24778
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24779
|
+
try {
|
|
24780
|
+
const data = await privateApi.getSpreadFills(auth, sprdId, limit);
|
|
24781
|
+
return toResult(data);
|
|
24782
|
+
} catch (e) {
|
|
24783
|
+
return toError(e);
|
|
24784
|
+
}
|
|
24785
|
+
}
|
|
24786
|
+
);
|
|
24787
|
+
server.tool(
|
|
24788
|
+
"okx_get_spread_books",
|
|
24789
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u5168\u6DF1\u5EA6\u8BA2\u5355\u7C3F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u4EF7\u5DEE\u5E02\u573A\u6D41\u52A8\u6027\u5168\u8C8C\u3001\u53D1\u73B0\u9690\u85CF\u7684\u5927\u989D\u6302\u5355\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u5168\u6DF1\u5EA6, spread books, \u4EF7\u5DEE\u5B8C\u6574\u6DF1\u5EA6, \u4EF7\u5DEE\u6240\u6709\u6863\u4F4D\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\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\uFF1Aokx_get_spread_orderbook \u770B\u6709\u9650\u6DF1\u5EA6 \u2192 \u672C\u5DE5\u5177\u770B\u5168\u6DF1\u5EA6 \u2192 \u5206\u6790\u6D41\u52A8\u6027",
|
|
24790
|
+
{
|
|
24791
|
+
sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B")
|
|
24792
|
+
},
|
|
24793
|
+
async ({ sprdId }) => {
|
|
24794
|
+
try {
|
|
24795
|
+
const data = await publicApi.getSpreadOrderbook(sprdId);
|
|
24796
|
+
const enriched = data.data || data;
|
|
24797
|
+
if (enriched && typeof enriched === "object" && !Array.isArray(enriched)) {
|
|
24798
|
+
return toResult({
|
|
24799
|
+
...enriched,
|
|
24800
|
+
tsIso: enriched.ts ? new Date(parseInt(enriched.ts)).toISOString() : void 0
|
|
24801
|
+
});
|
|
24802
|
+
}
|
|
24803
|
+
return toResult(data);
|
|
24804
|
+
} catch (e) {
|
|
24805
|
+
return toError(e);
|
|
24806
|
+
}
|
|
24807
|
+
}
|
|
24808
|
+
);
|
|
24521
24809
|
}
|
|
24522
24810
|
|
|
24523
24811
|
// src/tools/copy.ts
|