hvip-mcp-server 0.1.8 → 0.2.1
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 +546 -8
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -21157,11 +21157,13 @@ var publicApi = {
|
|
|
21157
21157
|
getLongShortRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/contracts/long-short-account-ratio", { params: { ccy, begin, end } }),
|
|
21158
21158
|
getTakerVolume: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-volume", { params: { ccy, instType, begin, end } }),
|
|
21159
21159
|
getOpenInterestVolume: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/contracts/open-interest-volume", { params: { ccy, begin, end } }),
|
|
21160
|
+
getOpenInterestHistory: (instId, period, limit) => request("GET", "/api/v5/rubik/stat/contracts/open-interest-history", { params: { instId, period, limit } }),
|
|
21160
21161
|
getLendingRateHistory: (ccy) => request("GET", "/api/v5/rubik/stat/margin/loan-ratio", { params: { ccy } }),
|
|
21161
21162
|
getHistoryCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/history-candles", { params: { instId, bar, after, before, limit } }),
|
|
21162
21163
|
getHistoryTrades: (instId, limit) => request("GET", "/api/v5/market/history-trades", { params: { instId, limit } }),
|
|
21163
21164
|
getSystemStatus: () => request("GET", "/api/v5/system/status"),
|
|
21164
21165
|
getPriceLimitBatch: (instType, uly, instId) => request("GET", "/api/v5/public/price-limit", { params: { instType, uly, instId } }),
|
|
21166
|
+
getPositionTiers: (instType, tdMode, instFamily, uly) => request("GET", "/api/v5/public/position-tiers", { params: { instType, tdMode, instFamily, uly } }),
|
|
21165
21167
|
getOptSummary: (uly, expTime) => request("GET", "/api/v5/public/opt-summary", { params: { uly, expTime } }),
|
|
21166
21168
|
getInsuranceFund: (instType, uly) => request("GET", "/api/v5/public/insurance-fund", { params: { instType, uly } }),
|
|
21167
21169
|
convertContractCoin: (instId, sz, unit, opType) => request("GET", "/api/v5/public/convert-contract-coin", { params: { instId, sz, unit, opType } }),
|
|
@@ -21185,7 +21187,9 @@ var publicApi = {
|
|
|
21185
21187
|
getSpreadCandles: (sprdId, bar, limit) => request("GET", "/api/v5/sprd/candles", { params: { sprdId, bar, limit } }),
|
|
21186
21188
|
// ── 公告(公共) ──────────────────────────────────────────────────────────────
|
|
21187
21189
|
getAnnouncements: (annType, lang) => request("GET", "/api/v5/support/announcements", { params: { annType, lang } }),
|
|
21188
|
-
getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types")
|
|
21190
|
+
getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types"),
|
|
21191
|
+
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 } })
|
|
21189
21193
|
};
|
|
21190
21194
|
var privateApi = {
|
|
21191
21195
|
getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
|
|
@@ -21202,6 +21206,18 @@ var privateApi = {
|
|
|
21202
21206
|
getAccountBills: (auth, instType, ccy, limit) => request("GET", "/api/v5/account/bills", { params: { instType, ccy, limit }, auth }),
|
|
21203
21207
|
getAccountConfig: (auth) => request("GET", "/api/v5/account/config", { auth }),
|
|
21204
21208
|
getLeverageInfo: (auth, instId, mgnMode) => request("GET", "/api/v5/account/leverage-info", { params: { instId, mgnMode }, auth }),
|
|
21209
|
+
getMaxSize: (auth, instId, tdMode, ccy) => request("GET", "/api/v5/account/max-size", { params: { instId, tdMode, ccy }, auth }),
|
|
21210
|
+
getFeeRates: (auth, instType, instId, uly) => request("GET", "/api/v5/account/trade-fee", { params: { instType, instId, uly }, auth }),
|
|
21211
|
+
getPositionsHistory: (auth, instType, instId, limit) => request("GET", "/api/v5/account/positions-history", { params: { instType, instId, limit }, auth }),
|
|
21212
|
+
setLeverage: (auth, body) => request("POST", "/api/v5/account/set-leverage", { body, auth }),
|
|
21213
|
+
batchOrders: (auth, body) => request("POST", "/api/v5/trade/batch-orders", { body, auth }),
|
|
21214
|
+
cancelBatchOrders: (auth, body) => request("POST", "/api/v5/trade/cancel-batch-orders", { body, auth }),
|
|
21215
|
+
closePosition: (auth, body) => request("POST", "/api/v5/trade/close-position", { body, auth }),
|
|
21216
|
+
amendBatchOrders: (auth, body) => request("POST", "/api/v5/trade/amend-batch-orders", { body, auth }),
|
|
21217
|
+
getFillsHistory: (auth, instType, instId, limit) => request("GET", "/api/v5/trade/fills-history", { params: { instType, instId, limit }, auth }),
|
|
21218
|
+
massCancel: (auth, instType, instFamily) => request("POST", "/api/v5/trade/mass-cancel", { body: { instType, instFamily }, auth }),
|
|
21219
|
+
getMaxLoan: (auth, instId, mgnMode) => request("GET", "/api/v5/account/max-loan", { params: { instId, mgnMode }, auth }),
|
|
21220
|
+
getInterestAccrued: (auth, instId, ccy, limit) => request("GET", "/api/v5/account/interest-accrued", { params: { instId, ccy, limit }, auth }),
|
|
21205
21221
|
getOrdersPending: (auth, instType, instId, ordType) => request("GET", "/api/v5/trade/orders-pending", { params: { instType, instId, ordType }, auth }),
|
|
21206
21222
|
getFills: (auth, instType, instId, limit) => request("GET", "/api/v5/trade/fills", { params: { instType, instId, limit }, auth }),
|
|
21207
21223
|
getOrdersHistoryArchive: (auth, instType, limit) => request("GET", "/api/v5/trade/orders-history-archive", { params: { instType, limit }, auth }),
|
|
@@ -21327,9 +21343,34 @@ API Key \u5728 OKX \u5B98\u7F51\u300C\u4E2A\u4EBA\u4E2D\u5FC3 \u2192 API\u300D\u
|
|
|
21327
21343
|
function toResult(data) {
|
|
21328
21344
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
21329
21345
|
}
|
|
21330
|
-
function
|
|
21346
|
+
function classifyError(msg) {
|
|
21347
|
+
const okxMatch = msg.match(/OKX (\d+):/);
|
|
21348
|
+
if (okxMatch && okxMatch[1]) {
|
|
21349
|
+
const code = parseInt(okxMatch[1]);
|
|
21350
|
+
if (code >= 5e4 && code < 50100) return { errorCode: `OKX_${code}`, errorCategory: "AUTH" };
|
|
21351
|
+
if (code >= 51e3) return { errorCode: `OKX_${code}`, errorCategory: "BUSINESS" };
|
|
21352
|
+
if (code >= 50004 && code <= 50014) return { errorCode: `OKX_${code}`, errorCategory: "VALIDATION" };
|
|
21353
|
+
return { errorCode: `OKX_${code}`, errorCategory: "BUSINESS" };
|
|
21354
|
+
}
|
|
21355
|
+
if (msg.startsWith("HTTP ")) {
|
|
21356
|
+
const httpMatch = msg.match(/HTTP (\d+)/);
|
|
21357
|
+
const status = httpMatch && httpMatch[1] ? parseInt(httpMatch[1]) : 0;
|
|
21358
|
+
if (status === 401 || status === 403) return { errorCode: "HTTP_401", errorCategory: "AUTH" };
|
|
21359
|
+
if (status === 429) return { errorCode: "HTTP_429", errorCategory: "RATE_LIMIT" };
|
|
21360
|
+
return { errorCode: "NETWORK_ERROR", errorCategory: "NETWORK" };
|
|
21361
|
+
}
|
|
21362
|
+
if (msg.includes("API Key")) return { errorCode: "AUTH_REQUIRED", errorCategory: "AUTH" };
|
|
21363
|
+
return { errorCode: "UNKNOWN_ERROR", errorCategory: "BUSINESS" };
|
|
21364
|
+
}
|
|
21365
|
+
function toError(e) {
|
|
21331
21366
|
const msg = e instanceof Error ? e.message : String(e);
|
|
21332
|
-
|
|
21367
|
+
const { errorCode, errorCategory } = classifyError(msg);
|
|
21368
|
+
return {
|
|
21369
|
+
content: [{ type: "text", text: msg }],
|
|
21370
|
+
isError: true,
|
|
21371
|
+
errorCode,
|
|
21372
|
+
errorCategory
|
|
21373
|
+
};
|
|
21333
21374
|
}
|
|
21334
21375
|
|
|
21335
21376
|
// src/tools/market.ts
|
|
@@ -21354,7 +21395,9 @@ function registerMarketTools(server) {
|
|
|
21354
21395
|
async ({ instType }) => {
|
|
21355
21396
|
try {
|
|
21356
21397
|
const data = await publicApi.getTickers(instType);
|
|
21357
|
-
|
|
21398
|
+
const arr = data;
|
|
21399
|
+
const top = arr.length > 20 ? arr.slice(0, 20) : arr;
|
|
21400
|
+
return toResult({ total: arr.length, returned: top.length, data: top });
|
|
21358
21401
|
} catch (e) {
|
|
21359
21402
|
return toError(e);
|
|
21360
21403
|
}
|
|
@@ -21387,7 +21430,17 @@ function registerMarketTools(server) {
|
|
|
21387
21430
|
async ({ instId, bar, limit }) => {
|
|
21388
21431
|
try {
|
|
21389
21432
|
const data = await publicApi.getCandles(instId, bar, limit);
|
|
21390
|
-
|
|
21433
|
+
const enriched = data.map((row) => ({
|
|
21434
|
+
ts: row[0],
|
|
21435
|
+
tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
|
|
21436
|
+
open: row[1],
|
|
21437
|
+
high: row[2],
|
|
21438
|
+
low: row[3],
|
|
21439
|
+
close: row[4],
|
|
21440
|
+
vol: row[5],
|
|
21441
|
+
volCcy: row[6]
|
|
21442
|
+
}));
|
|
21443
|
+
return toResult(enriched);
|
|
21391
21444
|
} catch (e) {
|
|
21392
21445
|
return toError(e);
|
|
21393
21446
|
}
|
|
@@ -21422,7 +21475,17 @@ function registerMarketTools(server) {
|
|
|
21422
21475
|
async ({ instId, bar, after, before, limit }) => {
|
|
21423
21476
|
try {
|
|
21424
21477
|
const data = await publicApi.getHistoryCandles(instId, bar, after, before, limit);
|
|
21425
|
-
|
|
21478
|
+
const enriched = data.map((row) => ({
|
|
21479
|
+
ts: row[0],
|
|
21480
|
+
tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
|
|
21481
|
+
open: row[1],
|
|
21482
|
+
high: row[2],
|
|
21483
|
+
low: row[3],
|
|
21484
|
+
close: row[4],
|
|
21485
|
+
vol: row[5],
|
|
21486
|
+
volCcy: row[6]
|
|
21487
|
+
}));
|
|
21488
|
+
return toResult(enriched);
|
|
21426
21489
|
} catch (e) {
|
|
21427
21490
|
return toError(e);
|
|
21428
21491
|
}
|
|
@@ -21466,7 +21529,9 @@ function registerMarketTools(server) {
|
|
|
21466
21529
|
async ({ instType }) => {
|
|
21467
21530
|
try {
|
|
21468
21531
|
const data = await publicApi.getBlockTickers(instType);
|
|
21469
|
-
|
|
21532
|
+
const arr = data;
|
|
21533
|
+
const top = arr.length > 20 ? arr.slice(0, 20) : arr;
|
|
21534
|
+
return toResult({ total: arr.length, returned: top.length, data: top });
|
|
21470
21535
|
} catch (e) {
|
|
21471
21536
|
return toError(e);
|
|
21472
21537
|
}
|
|
@@ -21642,6 +21707,148 @@ function registerPublicTools(server) {
|
|
|
21642
21707
|
}
|
|
21643
21708
|
}
|
|
21644
21709
|
);
|
|
21710
|
+
server.tool(
|
|
21711
|
+
"okx_get_price_limit",
|
|
21712
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EA7\u54C1\u7684\u9650\u4EF7\u4E0A\u4E0B\u9650\uFF08\u6DA8\u8DCC\u505C\u4EF7\u683C\uFF09
|
|
21713
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u67D0\u4EA7\u54C1\u5F53\u524D\u662F\u5426\u63A5\u8FD1\u9650\u4EF7\u3001\u8BA1\u7B97\u53EF\u7528\u4E0B\u5355\u4EF7\u683C\u533A\u95F4\u3001\u6781\u7AEF\u884C\u60C5\u4E0B\u9650\u4EF7\u9884\u8B66
|
|
21714
|
+
## \u5173\u952E\u8BCD\uFF1A\u9650\u4EF7, \u6DA8\u8DCC\u505C, price limit, \u4E0A\u4E0B\u9650, \u4EF7\u683C\u4FDD\u62A4, \u9650\u4EF7\u5355\u8303\u56F4
|
|
21715
|
+
## \u53C2\u6570\uFF1A
|
|
21716
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\uFF0C\u4E0D\u652F\u6301\u5168\u91CF\u67E5\u8BE2
|
|
21717
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
21718
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
21719
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5355\u4EA7\u54C1 ~200B \u2014 \u5FAE\u5C0F
|
|
21720
|
+
## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_instruments \u83B7\u53D6\u53EF\u4EA4\u6613\u4EA7\u54C1\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u67E5\u9650\u4EF7\u8303\u56F4 \u2192 \u7ED3\u5408 okx_get_ticker \u5224\u65AD\u5F53\u524D\u4EF7\u662F\u5426\u63A5\u8FD1\u9650\u4EF7`,
|
|
21721
|
+
{
|
|
21722
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B\uFF0C\u4E0D\u652F\u6301\u5168\u91CF\u67E5\u8BE2")
|
|
21723
|
+
},
|
|
21724
|
+
async ({ instId }) => {
|
|
21725
|
+
try {
|
|
21726
|
+
const data = await publicApi.getPriceLimitBatch("", void 0, instId);
|
|
21727
|
+
const enriched = data.map((item) => ({
|
|
21728
|
+
...item,
|
|
21729
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21730
|
+
}));
|
|
21731
|
+
return toResult(enriched);
|
|
21732
|
+
} catch (e) {
|
|
21733
|
+
return toError(e);
|
|
21734
|
+
}
|
|
21735
|
+
}
|
|
21736
|
+
);
|
|
21737
|
+
server.tool(
|
|
21738
|
+
"okx_get_position_tiers",
|
|
21739
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u6301\u4ED3\u6863\u4F4D\u8868\uFF08\u51B3\u5B9A\u6760\u6746\u4E0A\u9650\u548C\u4FDD\u8BC1\u91D1\u7387\uFF09
|
|
21740
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u4E0D\u540C\u6301\u4ED3\u91CF\u5BF9\u5E94\u7684\u6700\u5927\u6760\u6746\u3001\u8BA1\u7B97\u4FDD\u8BC1\u91D1\u9700\u6C42\u3001\u8BC4\u4F30\u5927\u4ED3\u4F4D\u7206\u4ED3\u98CE\u9669\u3001\u8BBE\u7F6E\u6760\u6746\u524D\u786E\u8BA4\u6863\u4F4D\u9650\u5236
|
|
21741
|
+
## \u5173\u952E\u8BCD\uFF1A\u4ED3\u4F4D\u6863\u4F4D, \u6760\u6746\u9650\u5236, position tiers, \u4FDD\u8BC1\u91D1\u7387, \u6301\u4ED3\u4E0A\u9650, \u6863\u4F4D\u8868, \u6760\u6746\u500D\u6570
|
|
21742
|
+
## \u53C2\u6570\uFF1A
|
|
21743
|
+
## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED\u5408\u7EA6, FUTURES=\u4EA4\u5272\u5408\u7EA6\u3002\u5FC5\u586B
|
|
21744
|
+
## - tdMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B
|
|
21745
|
+
## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u4E0E uly \u4E8C\u9009\u4E00\u5FC5\u586B
|
|
21746
|
+
## - uly: \u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USDT\u3002\u4E0E instFamily \u4E8C\u9009\u4E00\u5FC5\u586B
|
|
21747
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
21748
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
21749
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5927\u578B ~30KB \u2014 \u5355\u4E2A\u4EA7\u54C1\u65CF\u542B\u6570\u5341\u4E2A\u6863\u4F4D\uFF0C\u6570\u636E\u91CF\u5927
|
|
21750
|
+
## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_instruments \u83B7\u53D6 instFamily \u2192 \u672C\u5DE5\u5177\u67E5\u6863\u4F4D \u2192 okx_get_leverage_info \u8BBE\u7F6E\u6760\u6746`,
|
|
21751
|
+
{
|
|
21752
|
+
instType: external_exports.enum(["SWAP", "FUTURES"]).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED\u5408\u7EA6, FUTURES=\u4EA4\u5272\u5408\u7EA6"),
|
|
21753
|
+
tdMode: external_exports.enum(["cross", "isolated"]).describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3"),
|
|
21754
|
+
instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u4E0E uly \u4E8C\u9009\u4E00\u5FC5\u586B"),
|
|
21755
|
+
uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USDT\u3002\u4E0E instFamily \u4E8C\u9009\u4E00\u5FC5\u586B")
|
|
21756
|
+
},
|
|
21757
|
+
async ({ instType, tdMode, instFamily, uly }) => {
|
|
21758
|
+
try {
|
|
21759
|
+
const data = await publicApi.getPositionTiers(instType, tdMode, instFamily, uly);
|
|
21760
|
+
return toResult(data);
|
|
21761
|
+
} catch (e) {
|
|
21762
|
+
return toError(e);
|
|
21763
|
+
}
|
|
21764
|
+
}
|
|
21765
|
+
);
|
|
21766
|
+
server.tool(
|
|
21767
|
+
"okx_get_open_interest_history",
|
|
21768
|
+
`## \u529F\u80FD\uFF1A\u83B7\u53D6\u5408\u7EA6\u6301\u4ED3\u91CF\u5386\u53F2\u8D70\u52BF\u6570\u636E
|
|
21769
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u6301\u4ED3\u91CF\u8D8B\u52BF\uFF08\u589E\u4ED3/\u51CF\u4ED3\u65B9\u5411\uFF09\u3001\u5224\u65AD\u8D44\u91D1\u6D41\u5165\u6D41\u51FA\u3001\u7ED3\u5408\u4EF7\u683C\u8D70\u52BF\u5224\u65AD\u8D8B\u52BF\u5F3A\u5EA6
|
|
21770
|
+
## \u5173\u952E\u8BCD\uFF1A\u6301\u4ED3\u91CF\u5386\u53F2, \u6301\u4ED3\u8D70\u52BF, open interest history, OI\u53D8\u52A8, \u6301\u4ED3\u8D8B\u52BF, \u8D44\u91D1\u6D41\u5165
|
|
21771
|
+
## \u53C2\u6570\uFF1A
|
|
21772
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B
|
|
21773
|
+
## - period: \u65F6\u95F4\u7C92\u5EA6\u30025m/15m/30m/1H/2H/4H/6H/12H/1D/1W\u3002\u9ED8\u8BA45m
|
|
21774
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u592714400
|
|
21775
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
21776
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
21777
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5355\u4EA7\u54C1 ~5KB \u2014 \u5FAE\u5C0F
|
|
21778
|
+
## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_instruments(instType=SWAP) \u83B7\u53D6\u5408\u7EA6\u4EA7\u54C1 \u2192 \u672C\u5DE5\u5177\u67E5\u6301\u4ED3\u8D8B\u52BF \u2192 \u7ED3\u5408 okx_get_ticker \u5224\u65AD\u91CF\u4EF7\u5173\u7CFB`,
|
|
21779
|
+
{
|
|
21780
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
|
|
21781
|
+
period: external_exports.enum(["5m", "15m", "30m", "1H", "2H", "4H", "6H", "12H", "1D", "1W"]).optional().describe("\u65F6\u95F4\u7C92\u5EA6\uFF0C\u9ED8\u8BA45m"),
|
|
21782
|
+
limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\uFF0C\u6700\u592714400")
|
|
21783
|
+
},
|
|
21784
|
+
async ({ instId, period, limit }) => {
|
|
21785
|
+
try {
|
|
21786
|
+
const data = await publicApi.getOpenInterestHistory(instId, period, limit);
|
|
21787
|
+
const enriched = data.map((row) => ({
|
|
21788
|
+
ts: row[0],
|
|
21789
|
+
tsIso: row[0] ? new Date(parseInt(row[0])).toISOString() : void 0,
|
|
21790
|
+
oi: row[1],
|
|
21791
|
+
oiCcy: row[2],
|
|
21792
|
+
vol: row[3]
|
|
21793
|
+
}));
|
|
21794
|
+
return toResult(enriched);
|
|
21795
|
+
} catch (e) {
|
|
21796
|
+
return toError(e);
|
|
21797
|
+
}
|
|
21798
|
+
}
|
|
21799
|
+
);
|
|
21800
|
+
server.tool(
|
|
21801
|
+
"okx_get_underlying",
|
|
21802
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2OKX\u652F\u6301\u7684\u6807\u7684\u6307\u6570\u5217\u8868
|
|
21803
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u83B7\u53D6\u53EF\u4EA4\u6613\u7684\u5E95\u5C42\u8D44\u4EA7\u5217\u8868\u3001\u7B5B\u9009\u7279\u5B9A\u7C7B\u578B\u7684\u5408\u7EA6\u6807\u7684
|
|
21804
|
+
## \u5173\u952E\u8BCD\uFF1A\u6807\u7684\u6307\u6570, \u5E95\u5C42\u8D44\u4EA7, underlying, \u5408\u7EA6\u6807\u7684, \u6307\u6570\u5217\u8868
|
|
21805
|
+
## \u53C2\u6570\uFF1A
|
|
21806
|
+
## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8
|
|
21807
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
21808
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
21809
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
|
|
21810
|
+
## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u83B7\u53D6\u6807\u7684 \u2192 okx_get_instruments \u67E5\u5177\u4F53\u4EA7\u54C1 \u2192 okx_get_ticker \u67E5\u884C\u60C5`,
|
|
21811
|
+
{
|
|
21812
|
+
instType: external_exports.enum(["SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
|
|
21813
|
+
},
|
|
21814
|
+
async ({ instType }) => {
|
|
21815
|
+
try {
|
|
21816
|
+
const data = await publicApi.getUnderlying(instType);
|
|
21817
|
+
return toResult(data);
|
|
21818
|
+
} catch (e) {
|
|
21819
|
+
return toError(e);
|
|
21820
|
+
}
|
|
21821
|
+
}
|
|
21822
|
+
);
|
|
21823
|
+
server.tool(
|
|
21824
|
+
"okx_get_taker_flow",
|
|
21825
|
+
`## \u529F\u80FD\uFF1A\u83B7\u53D6\u4E3B\u52A8\u4E70\u5356\u6210\u4EA4\u6570\u636E\uFF08Taker\u6D41\u91CF\uFF09
|
|
21826
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u591A\u7A7A\u529B\u91CF\u5BF9\u6BD4\uFF08\u4E70\u5165Taker\u591A=\u591A\u5934\u5F3A\uFF09\u3001\u5206\u6790\u8D44\u91D1\u6D41\u5411\u8D8B\u52BF
|
|
21827
|
+
## \u5173\u952E\u8BCD\uFF1A\u4E3B\u52A8\u6210\u4EA4, taker flow, \u4E70\u5356\u529B\u91CF, \u8D44\u91D1\u6D41\u5411, \u4E3B\u52A8\u4E70\u5356
|
|
21828
|
+
## \u53C2\u6570\uFF1A
|
|
21829
|
+
## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B
|
|
21830
|
+
## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES\u3002\u53EF\u9009
|
|
21831
|
+
## - begin: \u5F00\u59CB\u65F6\u95F4\u6233(ms)\u3002\u53EF\u9009
|
|
21832
|
+
## - end: \u7ED3\u675F\u65F6\u95F4\u6233(ms)\u3002\u53EF\u9009
|
|
21833
|
+
## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
|
|
21834
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
21835
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
|
|
21836
|
+
## \u5173\u8054\uFF1Aokx_get_taker_volume \u67E5\u6210\u4EA4\u91CF \u2192 \u672C\u5DE5\u5177\u67E5Taker\u6D41\u5411 \u2192 \u5224\u65AD\u591A\u7A7A\u65B9\u5411`,
|
|
21837
|
+
{
|
|
21838
|
+
ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B"),
|
|
21839
|
+
instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
21840
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233(ms)"),
|
|
21841
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233(ms)")
|
|
21842
|
+
},
|
|
21843
|
+
async ({ ccy, instType, begin, end }) => {
|
|
21844
|
+
try {
|
|
21845
|
+
const data = await publicApi.getTakerFlow(ccy, instType, begin, end);
|
|
21846
|
+
return toResult(data);
|
|
21847
|
+
} catch (e) {
|
|
21848
|
+
return toError(e);
|
|
21849
|
+
}
|
|
21850
|
+
}
|
|
21851
|
+
);
|
|
21645
21852
|
}
|
|
21646
21853
|
|
|
21647
21854
|
// src/tools/account.ts
|
|
@@ -21757,6 +21964,174 @@ function registerAccountTools(server, auth) {
|
|
|
21757
21964
|
}
|
|
21758
21965
|
}
|
|
21759
21966
|
);
|
|
21967
|
+
server.tool(
|
|
21968
|
+
"okx_get_max_size",
|
|
21969
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u67D0\u4EA7\u54C1\u6700\u5927\u53EF\u5F00\u4ED3\u6570\u91CF
|
|
21970
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u4E0B\u5355\u524D\u5224\u65AD\u6700\u5927\u53EF\u4E70\u5356\u6570\u91CF\u3001\u9A8C\u8BC1\u7528\u6237\u8F93\u5165\u7684\u6570\u91CF\u662F\u5426\u8D85\u9650
|
|
21971
|
+
## \u5173\u952E\u8BCD\uFF1A\u6700\u5927\u53EF\u5F00, \u6700\u5927\u4E0B\u5355\u91CF, max size, \u53EF\u5F00\u6570\u91CF, \u4E0B\u5355\u4E0A\u9650
|
|
21972
|
+
## \u53C2\u6570\uFF1A
|
|
21973
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B
|
|
21974
|
+
## - tdMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3, cash=\u975E\u4FDD\u8BC1\u91D1\u3002\u5FC5\u586B
|
|
21975
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
21976
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
21977
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5355\u4EA7\u54C1 ~200B \u2014 \u5FAE\u5C0F
|
|
21978
|
+
## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_instruments \u83B7\u53D6\u4EA7\u54C1 \u2192 \u672C\u5DE5\u5177\u67E5\u6700\u5927\u53EF\u5F00 \u2192 okx_place_order \u4E0B\u5355`,
|
|
21979
|
+
{
|
|
21980
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
|
|
21981
|
+
tdMode: external_exports.enum(["cross", "isolated", "cash"]).describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3, cash=\u975E\u4FDD\u8BC1\u91D1"),
|
|
21982
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF08\u4EC5MARGIN\u5168\u4ED3\u65F6\u9700\u8981\uFF09\uFF0C\u5982 USDT")
|
|
21983
|
+
},
|
|
21984
|
+
async ({ instId, tdMode, ccy }) => {
|
|
21985
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
21986
|
+
try {
|
|
21987
|
+
const data = await privateApi.getMaxSize(auth, instId, tdMode, ccy);
|
|
21988
|
+
return toResult(data);
|
|
21989
|
+
} catch (e) {
|
|
21990
|
+
return toError(e);
|
|
21991
|
+
}
|
|
21992
|
+
}
|
|
21993
|
+
);
|
|
21994
|
+
server.tool(
|
|
21995
|
+
"okx_get_fee_rates",
|
|
21996
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D26\u6237\u5F53\u524D\u624B\u7EED\u8D39\u7387
|
|
21997
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u8BA1\u7B97\u4EA4\u6613\u6210\u672C\u3001\u6BD4\u8F83\u4E0D\u540C\u7B49\u7EA7\u8D39\u7387\u5DEE\u5F02\u3001\u4E0B\u5355\u524D\u4F30\u7B97\u624B\u7EED\u8D39
|
|
21998
|
+
## \u5173\u952E\u8BCD\uFF1A\u624B\u7EED\u8D39, \u8D39\u7387, fee rate, \u4EA4\u6613\u8D39, maker, taker
|
|
21999
|
+
## \u53C2\u6570\uFF1A
|
|
22000
|
+
## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, SWAP=\u6C38\u7EED\u5408\u7EA6\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8
|
|
22001
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009
|
|
22002
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
22003
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22004
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~1KB
|
|
22005
|
+
## \u5173\u8054\uFF1Aokx_get_account_config \u67E5\u8D26\u6237\u914D\u7F6E \u2192 \u672C\u5DE5\u5177\u67E5\u8D39\u7387 \u2192 okx_place_order \u4E0B\u5355\u8BA1\u7B97\u6210\u672C`,
|
|
22006
|
+
{
|
|
22007
|
+
instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
22008
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
22009
|
+
uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USDT")
|
|
22010
|
+
},
|
|
22011
|
+
async ({ instType, instId, uly }) => {
|
|
22012
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22013
|
+
try {
|
|
22014
|
+
const data = await privateApi.getFeeRates(auth, instType, instId, uly);
|
|
22015
|
+
return toResult(data);
|
|
22016
|
+
} catch (e) {
|
|
22017
|
+
return toError(e);
|
|
22018
|
+
}
|
|
22019
|
+
}
|
|
22020
|
+
);
|
|
22021
|
+
server.tool(
|
|
22022
|
+
"okx_get_positions_history",
|
|
22023
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5386\u53F2\u6301\u4ED3\u8BB0\u5F55\uFF08\u5DF2\u5E73\u4ED3\u4ED3\u4F4D\uFF09
|
|
22024
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u590D\u76D8\u5386\u53F2\u4EA4\u6613\u3001\u5206\u6790\u5E73\u4ED3\u76C8\u4E8F\u3001\u7EDF\u8BA1\u80DC\u7387\u3001\u5BA1\u8BA1\u4EA4\u6613\u8BB0\u5F55
|
|
22025
|
+
## \u5173\u952E\u8BCD\uFF1A\u5386\u53F2\u6301\u4ED3, \u5E73\u4ED3\u8BB0\u5F55, positions history, \u5DF2\u5E73\u4ED3, \u5E73\u4ED3\u76C8\u4E8F, \u4EA4\u6613\u590D\u76D8
|
|
22026
|
+
## \u53C2\u6570\uFF1A
|
|
22027
|
+
## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8
|
|
22028
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u53EF\u9009
|
|
22029
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100
|
|
22030
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
22031
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22032
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB
|
|
22033
|
+
## \u5173\u8054\uFF1Aokx_get_positions \u67E5\u5F53\u524D\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2\u5E73\u4ED3 \u2192 okx_get_order_history \u6838\u5BF9\u8BA2\u5355`,
|
|
22034
|
+
{
|
|
22035
|
+
instType: external_exports.enum(["MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
22036
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP"),
|
|
22037
|
+
limit: external_exports.number().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22038
|
+
},
|
|
22039
|
+
async ({ instType, instId, limit }) => {
|
|
22040
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22041
|
+
try {
|
|
22042
|
+
const data = await privateApi.getPositionsHistory(auth, instType, instId, limit);
|
|
22043
|
+
return toResult(data);
|
|
22044
|
+
} catch (e) {
|
|
22045
|
+
return toError(e);
|
|
22046
|
+
}
|
|
22047
|
+
}
|
|
22048
|
+
);
|
|
22049
|
+
server.tool(
|
|
22050
|
+
"okx_set_leverage",
|
|
22051
|
+
`## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u67D0\u4EA7\u54C1\u7684\u6760\u6746\u500D\u6570
|
|
22052
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u6760\u6746\uFF08\u4E0D\u540C\u6301\u4ED3\u91CF\u6863\u4F4D\u5BF9\u5E94\u4E0D\u540C\u6700\u5927\u6760\u6746\uFF09\u3001\u5728\u884C\u60C5\u6CE2\u52A8\u5927\u65F6\u964D\u4F4E\u6760\u6746\u63A7\u5236\u98CE\u9669
|
|
22053
|
+
## \u5173\u952E\u8BCD\uFF1A\u8BBE\u7F6E\u6760\u6746, \u8C03\u6574\u6760\u6746, set leverage, \u6760\u6746\u500D\u6570, \u5168\u4ED3\u9010\u4ED3
|
|
22054
|
+
## \u53C2\u6570\uFF1A
|
|
22055
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B
|
|
22056
|
+
## - lever: \u6760\u6746\u500D\u6570\uFF0C\u5982 10\u3002\u5FC5\u586B\uFF08\u9700\u5728 okx_get_position_tiers \u8FD4\u56DE\u7684\u8303\u56F4\u5185\uFF09
|
|
22057
|
+
## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B
|
|
22058
|
+
## - posSide: \u6301\u4ED3\u65B9\u5411\u3002\u4E0D\u586B\u5219\u53CC\u5411\u751F\u6548
|
|
22059
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22060
|
+
## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539\u8D26\u6237\u914D\u7F6E\uFF0C\u987B\u5411\u7528\u6237\u89E3\u91CA\u6760\u6746\u500D\u6570\u548C\u7206\u4ED3\u98CE\u9669\u540E\u518D\u786E\u8BA4
|
|
22061
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~200B
|
|
22062
|
+
## \u5173\u8054\uFF1A\u5148\u8C03 okx_get_position_tiers \u786E\u8BA4\u6760\u6746\u4E0A\u9650 \u2192 \u672C\u5DE5\u5177\u8BBE\u7F6E\u6760\u6746 \u2192 okx_place_order \u4E0B\u5355`,
|
|
22063
|
+
{
|
|
22064
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
|
|
22065
|
+
lever: external_exports.string().describe("\u6760\u6746\u500D\u6570\uFF0C\u5982 10\u3002\u5FC5\u987B\u5728\u4ED3\u4F4D\u6863\u4F4D\u5141\u8BB8\u8303\u56F4\u5185"),
|
|
22066
|
+
mgnMode: external_exports.enum(["cross", "isolated"]).describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3"),
|
|
22067
|
+
posSide: external_exports.enum(["long", "short"]).optional().describe("\u6301\u4ED3\u65B9\u5411\u3002\u4E0D\u586B\u5219\u53CC\u5411\u751F\u6548")
|
|
22068
|
+
},
|
|
22069
|
+
async ({ instId, lever, mgnMode, posSide }) => {
|
|
22070
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22071
|
+
try {
|
|
22072
|
+
const body = { instId, lever, mgnMode };
|
|
22073
|
+
if (posSide) body.posSide = posSide;
|
|
22074
|
+
const data = await privateApi.setLeverage(auth, body);
|
|
22075
|
+
return toResult(data);
|
|
22076
|
+
} catch (e) {
|
|
22077
|
+
return toError(e);
|
|
22078
|
+
}
|
|
22079
|
+
}
|
|
22080
|
+
);
|
|
22081
|
+
server.tool(
|
|
22082
|
+
"okx_get_max_loan",
|
|
22083
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u67D0\u4EA7\u54C1\u7684\u6700\u5927\u53EF\u501F\u6570\u91CF
|
|
22084
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u6760\u6746\u4EA4\u6613\u524D\u5224\u65AD\u6700\u5927\u53EF\u501F\u989D\u5EA6\u3001\u8BA1\u7B97\u4FDD\u8BC1\u91D1\u4F7F\u7528\u7387
|
|
22085
|
+
## \u5173\u952E\u8BCD\uFF1A\u6700\u5927\u53EF\u501F, \u501F\u6B3E\u4E0A\u9650, max loan, \u6760\u6746\u501F\u6B3E, \u53EF\u501F\u989D\u5EA6
|
|
22086
|
+
## \u53C2\u6570\uFF1A
|
|
22087
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B
|
|
22088
|
+
## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B
|
|
22089
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
22090
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22091
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5355\u4EA7\u54C1 ~200B \u2014 \u5FAE\u5C0F
|
|
22092
|
+
## \u5173\u8054\uFF1Aokx_get_max_size \u67E5\u53EF\u5F00\u6570\u91CF \u2192 \u672C\u5DE5\u5177\u67E5\u53EF\u501F\u989D\u5EA6 \u2192 okx_place_order \u4E0B\u5355`,
|
|
22093
|
+
{
|
|
22094
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B"),
|
|
22095
|
+
mgnMode: external_exports.enum(["cross", "isolated"]).describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3")
|
|
22096
|
+
},
|
|
22097
|
+
async ({ instId, mgnMode }) => {
|
|
22098
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22099
|
+
try {
|
|
22100
|
+
const data = await privateApi.getMaxLoan(auth, instId, mgnMode);
|
|
22101
|
+
return toResult(data);
|
|
22102
|
+
} catch (e) {
|
|
22103
|
+
return toError(e);
|
|
22104
|
+
}
|
|
22105
|
+
}
|
|
22106
|
+
);
|
|
22107
|
+
server.tool(
|
|
22108
|
+
"okx_get_interest_accrued",
|
|
22109
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u501F\u5E01\u5229\u606F\u7D2F\u8BA1\u660E\u7EC6
|
|
22110
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u8BA1\u7B97\u5F53\u524D\u501F\u5E01\u6210\u672C\u3001\u8BC4\u4F30\u6301\u4ED3\u5229\u606F\u8D1F\u62C5\u3001\u51B3\u5B9A\u662F\u5426\u63D0\u524D\u8FD8\u6B3E
|
|
22111
|
+
## \u5173\u952E\u8BCD\uFF1A\u501F\u5E01\u5229\u606F, \u5229\u606F\u660E\u7EC6, interest accrued, \u501F\u6B3E\u6210\u672C, \u5229\u606F\u7D2F\u8BA1
|
|
22112
|
+
## \u53C2\u6570\uFF1A
|
|
22113
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u53EF\u9009
|
|
22114
|
+
## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\u3002\u53EF\u9009
|
|
22115
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100
|
|
22116
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
22117
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22118
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
|
|
22119
|
+
## \u5173\u8054\uFF1Aokx_get_balance \u67E5\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u5229\u606F \u2192 \u8BA1\u7B97\u51C0\u6536\u76CA`,
|
|
22120
|
+
{
|
|
22121
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u53EF\u9009"),
|
|
22122
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 USDT"),
|
|
22123
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22124
|
+
},
|
|
22125
|
+
async ({ instId, ccy, limit }) => {
|
|
22126
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22127
|
+
try {
|
|
22128
|
+
const data = await privateApi.getInterestAccrued(auth, instId, ccy, limit);
|
|
22129
|
+
return toResult(data);
|
|
22130
|
+
} catch (e) {
|
|
22131
|
+
return toError(e);
|
|
22132
|
+
}
|
|
22133
|
+
}
|
|
22134
|
+
);
|
|
21760
22135
|
}
|
|
21761
22136
|
|
|
21762
22137
|
// src/tools/trading.ts
|
|
@@ -21876,6 +22251,169 @@ function registerTradingTools(server, auth) {
|
|
|
21876
22251
|
}
|
|
21877
22252
|
}
|
|
21878
22253
|
);
|
|
22254
|
+
server.tool(
|
|
22255
|
+
"okx_batch_orders",
|
|
22256
|
+
`## \u529F\u80FD\uFF1A\u6279\u91CF\u4E0B\u5355\uFF08\u6700\u591A20\u7B14\uFF09
|
|
22257
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u9700\u8981\u540C\u65F6\u4E0B\u591A\u4E2A\u8BA2\u5355\u7684\u7B56\u7565\uFF08\u5982\u4E00\u7BEE\u5B50\u5EFA\u4ED3\u3001\u591A\u4EA7\u54C1\u5957\u5229\u5E03\u5C40\uFF09
|
|
22258
|
+
## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u4E0B\u5355, \u6279\u91CF\u59D4\u6258, batch orders, \u4E00\u7BEE\u5B50\u8BA2\u5355, \u7EC4\u5408\u4E0B\u5355
|
|
22259
|
+
## \u53C2\u6570\uFF1A
|
|
22260
|
+
## - orders: \u8BA2\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B instId/tdMode/side/ordType/sz/px \u7B49\u5B57\u6BB5\u3002\u6700\u591A20\u7B14
|
|
22261
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u6BCF\u7B14\u8BA2\u5355\u5185\u5BB9
|
|
22262
|
+
## \u98CE\u9669\uFF1AWRITE \u2014 \u521B\u5EFA\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u9010\u7B14\u786E\u8BA4
|
|
22263
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
|
|
22264
|
+
## \u5173\u8054\uFF1Aokx_get_instruments \u83B7\u53D6\u4EA7\u54C1\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u6279\u91CF\u4E0B\u5355 \u2192 okx_batch_cancel_orders \u64A4\u9500`,
|
|
22265
|
+
{
|
|
22266
|
+
orders: external_exports.string().describe(`\u8BA2\u5355\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '[{"instId":"BTC-USDT","tdMode":"cash","side":"buy","ordType":"limit","sz":"0.001","px":"60000"}]'\u3002\u6700\u591A20\u7B14`)
|
|
22267
|
+
},
|
|
22268
|
+
async ({ orders }) => {
|
|
22269
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22270
|
+
try {
|
|
22271
|
+
const parsed = JSON.parse(orders);
|
|
22272
|
+
const data = await privateApi.batchOrders(auth, parsed);
|
|
22273
|
+
return toResult(data);
|
|
22274
|
+
} catch (e) {
|
|
22275
|
+
return toError(e);
|
|
22276
|
+
}
|
|
22277
|
+
}
|
|
22278
|
+
);
|
|
22279
|
+
server.tool(
|
|
22280
|
+
"okx_batch_cancel_orders",
|
|
22281
|
+
`## \u529F\u80FD\uFF1A\u6279\u91CF\u64A4\u9500\u8BA2\u5355
|
|
22282
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u4E00\u952E\u64A4\u9500\u6240\u6709\u672A\u6210\u4EA4\u6302\u5355\u3001\u6E05\u7A7A\u7279\u5B9A\u4EA7\u54C1\u7684\u8BA2\u5355\u961F\u5217
|
|
22283
|
+
## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u64A4\u5355, \u6279\u91CF\u64A4\u9500, batch cancel, \u4E00\u952E\u64A4\u5355, \u6E05\u7A7A\u6302\u5355
|
|
22284
|
+
## \u53C2\u6570\uFF1A
|
|
22285
|
+
## - orders: \u64A4\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B instId/ordId\u3002\u4E0D\u586BinstId\u5219\u64A4\u9500\u8BE5\u4EA7\u54C1\u6240\u6709\u6302\u5355
|
|
22286
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22287
|
+
## \u98CE\u9669\uFF1AWRITE \u2014 \u64A4\u9500\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22288
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
|
|
22289
|
+
## \u5173\u8054\uFF1Aokx_get_orders_pending \u67E5\u770B\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u6279\u91CF\u64A4\u9500 \u2192 okx_get_orders_history \u786E\u8BA4\u64A4\u9500`,
|
|
22290
|
+
{
|
|
22291
|
+
orders: external_exports.string().describe(`\u64A4\u5355\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '[{"instId":"BTC-USDT","ordId":"123456"}]'`)
|
|
22292
|
+
},
|
|
22293
|
+
async ({ orders }) => {
|
|
22294
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22295
|
+
try {
|
|
22296
|
+
const parsed = JSON.parse(orders);
|
|
22297
|
+
const data = await privateApi.cancelBatchOrders(auth, parsed);
|
|
22298
|
+
return toResult(data);
|
|
22299
|
+
} catch (e) {
|
|
22300
|
+
return toError(e);
|
|
22301
|
+
}
|
|
22302
|
+
}
|
|
22303
|
+
);
|
|
22304
|
+
server.tool(
|
|
22305
|
+
"okx_close_position",
|
|
22306
|
+
`## \u529F\u80FD\uFF1A\u5E02\u4EF7\u5168\u5E73\u67D0\u4ED3\u4F4D
|
|
22307
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u7D27\u6025\u5E73\u4ED3\u6B62\u635F/\u6B62\u76C8\u3001\u6E05\u7A7A\u67D0\u65B9\u5411\u5168\u90E8\u6301\u4ED3
|
|
22308
|
+
## \u5173\u952E\u8BCD\uFF1A\u5E73\u4ED3, \u5E02\u4EF7\u5168\u5E73, close position, \u6B62\u635F\u5E73\u4ED3, \u6E05\u4ED3, \u7D27\u6025\u5E73\u4ED3
|
|
22309
|
+
## \u53C2\u6570\uFF1A
|
|
22310
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B
|
|
22311
|
+
## - posSide: \u6301\u4ED3\u65B9\u5411\u3002long=\u5E73\u591A\u5934, short=\u5E73\u7A7A\u5934\u3002\u4E0D\u586B\u5219\u6309mgnMode\u81EA\u52A8\u5224\u65AD
|
|
22312
|
+
## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3
|
|
22313
|
+
## - ccy: \u4FDD\u8BC1\u91D1\u5E01\u79CD\uFF08\u5168\u4ED3\u65F6\u9009\u586B\uFF09
|
|
22314
|
+
## \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\u4E8C\u6B21\u786E\u8BA4
|
|
22315
|
+
## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u5E73\u4ED3\u64CD\u4F5C\u76F4\u63A5\u5F71\u54CD\u6301\u4ED3\u548C\u8D44\u91D1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22316
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B
|
|
22317
|
+
## \u5173\u8054\uFF1Aokx_get_positions \u786E\u8BA4\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u5E02\u4EF7\u5168\u5E73 \u2192 okx_get_orders_history \u786E\u8BA4\u6210\u4EA4`,
|
|
22318
|
+
{
|
|
22319
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3002\u5FC5\u586B"),
|
|
22320
|
+
posSide: external_exports.enum(["long", "short"]).optional().describe("\u6301\u4ED3\u65B9\u5411\u3002long=\u5E73\u591A\u5934, short=\u5E73\u7A7A\u5934\u3002\u5168\u4ED3\u5FC5\u586B"),
|
|
22321
|
+
mgnMode: external_exports.enum(["cross", "isolated"]).optional().describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F"),
|
|
22322
|
+
ccy: external_exports.string().optional().describe("\u4FDD\u8BC1\u91D1\u5E01\u79CD\uFF08\u5168\u4ED3\u53EF\u9009\u586B\uFF09")
|
|
22323
|
+
},
|
|
22324
|
+
async ({ instId, posSide, mgnMode, ccy }) => {
|
|
22325
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22326
|
+
try {
|
|
22327
|
+
const body = { instId };
|
|
22328
|
+
if (posSide) body.posSide = posSide;
|
|
22329
|
+
if (mgnMode) body.mgnMode = mgnMode;
|
|
22330
|
+
if (ccy) body.ccy = ccy;
|
|
22331
|
+
const data = await privateApi.closePosition(auth, body);
|
|
22332
|
+
return toResult(data);
|
|
22333
|
+
} catch (e) {
|
|
22334
|
+
return toError(e);
|
|
22335
|
+
}
|
|
22336
|
+
}
|
|
22337
|
+
);
|
|
22338
|
+
server.tool(
|
|
22339
|
+
"okx_amend_batch_orders",
|
|
22340
|
+
`## \u529F\u80FD\uFF1A\u6279\u91CF\u4FEE\u6539\u672A\u6210\u4EA4\u8BA2\u5355
|
|
22341
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u540C\u65F6\u8C03\u6574\u591A\u4E2A\u9650\u4EF7\u5355\u7684\u4EF7\u683C\u6216\u6570\u91CF\u3001\u6279\u91CF\u66F4\u65B0\u6302\u5355\u7B56\u7565
|
|
22342
|
+
## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u6539\u5355, \u6279\u91CF\u4FEE\u6539, amend batch orders, \u6279\u91CF\u6539\u4EF7, \u6279\u91CF\u8C03\u91CF
|
|
22343
|
+
## \u53C2\u6570\uFF1A
|
|
22344
|
+
## - orders: \u6539\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B instId/ordId/newSz/newPx\u3002\u6700\u591A20\u7B14
|
|
22345
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22346
|
+
## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22347
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
|
|
22348
|
+
## \u5173\u8054\uFF1Aokx_get_orders_pending \u67E5\u770B\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u6279\u91CF\u6539\u5355 \u2192 okx_get_order \u786E\u8BA4\u4FEE\u6539`,
|
|
22349
|
+
{
|
|
22350
|
+
orders: external_exports.string().describe(`\u6539\u5355\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '[{"instId":"BTC-USDT","ordId":"123","newPx":"62000"}]'\u3002\u6700\u591A20\u7B14`)
|
|
22351
|
+
},
|
|
22352
|
+
async ({ orders }) => {
|
|
22353
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22354
|
+
try {
|
|
22355
|
+
const parsed = JSON.parse(orders);
|
|
22356
|
+
const data = await privateApi.amendBatchOrders(auth, parsed);
|
|
22357
|
+
return toResult(data);
|
|
22358
|
+
} catch (e) {
|
|
22359
|
+
return toError(e);
|
|
22360
|
+
}
|
|
22361
|
+
}
|
|
22362
|
+
);
|
|
22363
|
+
server.tool(
|
|
22364
|
+
"okx_get_fills_history",
|
|
22365
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5386\u53F2\u6210\u4EA4\u660E\u7EC6\uFF08\u6700\u8FD13\u4E2A\u6708\uFF09
|
|
22366
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u7CBE\u786E\u8BA1\u7B97\u5386\u53F2\u6210\u4EA4\u5747\u4EF7\u3001\u590D\u76D8\u4EA4\u6613\u8868\u73B0\u3001\u6838\u5BF9\u6210\u4EA4\u8BB0\u5F55
|
|
22367
|
+
## \u5173\u952E\u8BCD\uFF1A\u6210\u4EA4\u5386\u53F2, \u6210\u4EA4\u660E\u7EC6, fills history, \u5386\u53F2\u6210\u4EA4, \u9010\u7B14\u6210\u4EA4\u5386\u53F2
|
|
22368
|
+
## \u53C2\u6570\uFF1A
|
|
22369
|
+
## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002\u53EF\u9009
|
|
22370
|
+
## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009
|
|
22371
|
+
## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100
|
|
22372
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
22373
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
22374
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB
|
|
22375
|
+
## \u5173\u8054\uFF1Aokx_get_fills \u67E5\u6700\u8FD1\u6210\u4EA4 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2\u6210\u4EA4 \u2192 okx_get_orders_history \u5BF9\u8D26`,
|
|
22376
|
+
{
|
|
22377
|
+
instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
22378
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
|
|
22379
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22380
|
+
},
|
|
22381
|
+
async ({ instType, instId, limit }) => {
|
|
22382
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22383
|
+
try {
|
|
22384
|
+
const data = await privateApi.getFillsHistory(auth, instType, instId, limit);
|
|
22385
|
+
return toResult(data);
|
|
22386
|
+
} catch (e) {
|
|
22387
|
+
return toError(e);
|
|
22388
|
+
}
|
|
22389
|
+
}
|
|
22390
|
+
);
|
|
22391
|
+
server.tool(
|
|
22392
|
+
"okx_mass_cancel",
|
|
22393
|
+
`## \u529F\u80FD\uFF1A\u6279\u91CF\u64A4\u9500\u67D0\u4EA7\u54C1\u7C7B\u578B\u4E0B\u6240\u6709\u6302\u5355
|
|
22394
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u6781\u7AEF\u884C\u60C5\u4E0B\u7D27\u6025\u6E05\u7A7A\u6240\u6709\u6302\u5355\u3001\u5FEB\u901F\u91CD\u7F6E\u4EA4\u6613\u7B56\u7565
|
|
22395
|
+
## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u64A4\u5355, \u5168\u90E8\u64A4\u5355, mass cancel, \u6E05\u7A7A\u6302\u5355, \u7D27\u6025\u64A4\u5355
|
|
22396
|
+
## \u53C2\u6570\uFF1A
|
|
22397
|
+
## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION\u3002\u5FC5\u586B
|
|
22398
|
+
## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009\uFF08\u4EC5\u5408\u7EA6\u9700\u8981\uFF09
|
|
22399
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
22400
|
+
## \u98CE\u9669\uFF1AWRITE \u2014 \u64A4\u9500\u6240\u6709\u6302\u5355\uFF0C\u5F71\u54CD\u8303\u56F4\u5927\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4
|
|
22401
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
|
|
22402
|
+
## \u5173\u8054\uFF1Aokx_get_orders_pending \u786E\u8BA4\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u5168\u90E8\u64A4\u9500 \u2192 okx_get_orders_history \u786E\u8BA4`,
|
|
22403
|
+
{
|
|
22404
|
+
instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
22405
|
+
instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u4EC5\u5408\u7EA6\u9700\u586B")
|
|
22406
|
+
},
|
|
22407
|
+
async ({ instType, instFamily }) => {
|
|
22408
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22409
|
+
try {
|
|
22410
|
+
const data = await privateApi.massCancel(auth, instType, instFamily);
|
|
22411
|
+
return toResult(data);
|
|
22412
|
+
} catch (e) {
|
|
22413
|
+
return toError(e);
|
|
22414
|
+
}
|
|
22415
|
+
}
|
|
22416
|
+
);
|
|
21879
22417
|
}
|
|
21880
22418
|
|
|
21881
22419
|
// src/tools/algo.ts
|
|
@@ -22879,7 +23417,7 @@ function registerSignalTools(server, auth) {
|
|
|
22879
23417
|
|
|
22880
23418
|
// src/index.ts
|
|
22881
23419
|
async function main() {
|
|
22882
|
-
const server = new McpServer({ name: "hvip", version: "0.1
|
|
23420
|
+
const server = new McpServer({ name: "hvip", version: "0.2.1" });
|
|
22883
23421
|
const auth = getAuth();
|
|
22884
23422
|
registerMarketTools(server);
|
|
22885
23423
|
registerPublicTools(server);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hvip-mcp-server",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"description": "OKX ecosystem MCP server
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "OKX ecosystem MCP server - full API coverage for AI agents",
|
|
5
5
|
"homepage": "https://hvip.one",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|