hvip-mcp-server 0.2.20 → 0.2.22
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 +353 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21301,7 +21301,26 @@ var privateApi = {
|
|
|
21301
21301
|
getConvertCurrencies: (auth) => request("GET", "/api/v5/asset/convert/currencies", { auth }),
|
|
21302
21302
|
convertTrade: (auth, body) => request("POST", "/api/v5/asset/convert/trade", { body, auth }),
|
|
21303
21303
|
getSubAccountFundingBalance: (auth, subAcct) => request("GET", "/api/v5/asset/subaccount/balances", { params: { subAcct }, auth }),
|
|
21304
|
-
setSubAccountTransferOut: (auth, body) => request("POST", "/api/v5/users/subaccount/set-transfer-out", { body, auth })
|
|
21304
|
+
setSubAccountTransferOut: (auth, body) => request("POST", "/api/v5/users/subaccount/set-transfer-out", { body, auth }),
|
|
21305
|
+
// ── 资金账户补完(第九批新增) ──────────────────────────────────────────
|
|
21306
|
+
getInterestRate: (auth, ccy) => request("GET", "/api/v5/account/interest-rate", { params: { ccy }, auth }),
|
|
21307
|
+
getMaxWithdrawal: (auth, ccy) => request("GET", "/api/v5/account/max-withdrawal", { params: { ccy }, auth }),
|
|
21308
|
+
getAccountGreeks: (auth, instType, instFamily, uly, instId) => request("GET", "/api/v5/account/greeks", { params: { instType, instFamily, uly, instId }, auth }),
|
|
21309
|
+
setAccountLevel: (auth, body) => request("POST", "/api/v5/account/set-account-level", { body, auth }),
|
|
21310
|
+
// ── 跟单操作(第十批新增) ──────────────────────────────────────────────
|
|
21311
|
+
setCopySettings: (auth, body) => request("POST", "/api/v5/copytrading/copy-settings", { body, auth }),
|
|
21312
|
+
closeSubposition: (auth, body) => request("POST", "/api/v5/copytrading/close-subposition", { body, auth }),
|
|
21313
|
+
getCopySettings: (auth) => request("GET", "/api/v5/copytrading/copy-settings", { auth }),
|
|
21314
|
+
updateCopySettings: (auth, body) => request("POST", "/api/v5/copytrading/set-copy-settings", { body, auth }),
|
|
21315
|
+
// ── 定投操作(第十一批新增) ────────────────────────────────────────────
|
|
21316
|
+
createRecurringPlan: (auth, body) => request("POST", "/api/v5/tradingBot/recurring/order-algo", { body, auth }),
|
|
21317
|
+
stopRecurringPlan: (auth, body) => request("POST", "/api/v5/tradingBot/recurring/stop-order-algo", { body, auth }),
|
|
21318
|
+
getRecurringSubOrders: (auth, algoId, limit) => request("GET", "/api/v5/tradingBot/recurring/sub-orders", { params: { algoId, limit }, auth }),
|
|
21319
|
+
// ── 大宗交易(第十二批新增) ────────────────────────────────────────────
|
|
21320
|
+
createRfq: (auth, body) => request("POST", "/api/v5/rfq/create-rfq", { body, auth }),
|
|
21321
|
+
executeRfqQuote: (auth, body) => request("POST", "/api/v5/rfq/execute-quote", { body, auth }),
|
|
21322
|
+
getRfqs: (auth, state) => request("GET", "/api/v5/rfq/rfqs", { params: { state }, auth }),
|
|
21323
|
+
getRfqQuotes: (auth, rfqId) => request("GET", "/api/v5/rfq/quotes", { params: { rfqId }, auth })
|
|
21305
21324
|
};
|
|
21306
21325
|
|
|
21307
21326
|
// src/adapters/hrails.ts
|
|
@@ -22469,6 +22488,95 @@ function registerAccountTools(server, auth) {
|
|
|
22469
22488
|
}
|
|
22470
22489
|
}
|
|
22471
22490
|
);
|
|
22491
|
+
server.tool(
|
|
22492
|
+
"okx_get_bills",
|
|
22493
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D26\u6237\u8D26\u5355\u6D41\u6C34\uFF08\u6240\u6709\u5E01\u79CD\u7684\u5168\u90E8\u4EA4\u6613\u6D41\u6C34\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5BA1\u8BA1\u4EA4\u6613\u8BB0\u5F55\u3001\u67E5\u770B\u8D44\u91D1\u6D41\u5411\u3001\u8C03\u8BD5\u4E0D\u660E\u6263\u6B3E\n## \u5173\u952E\u8BCD\uFF1A\u8D26\u5355, bills, \u8D44\u91D1\u6D41\u6C34, \u4EA4\u6613\u6D41\u6C34, \u8D26\u6237\u8D26\u5355\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION\u3002\u53EF\u9009\n## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\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 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u6D41\u6C34 \u2192 okx_get_account_bills \u67E5\u8D26\u5355\u8BE6\u60C5 \u2192 \u5BF9\u8D26",
|
|
22494
|
+
{
|
|
22495
|
+
instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
|
|
22496
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 USDT"),
|
|
22497
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22498
|
+
},
|
|
22499
|
+
async ({ instType, ccy, limit }) => {
|
|
22500
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22501
|
+
try {
|
|
22502
|
+
const data = await privateApi.getAccountBills(auth, instType, ccy, limit);
|
|
22503
|
+
return toResult(data);
|
|
22504
|
+
} catch (e) {
|
|
22505
|
+
return toError(e);
|
|
22506
|
+
}
|
|
22507
|
+
}
|
|
22508
|
+
);
|
|
22509
|
+
server.tool(
|
|
22510
|
+
"okx_get_interest_rates",
|
|
22511
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5404\u5E01\u79CD\u7684\u501F\u5E01\u5229\u7387\n## \u573A\u666F\uFF1A\u7528\u4E8E\u6BD4\u8F83\u4E0D\u540C\u5E01\u79CD\u7684\u501F\u8D37\u6210\u672C\u3001\u8BA1\u7B97\u6301\u4ED3\u5229\u606F\u3001\u9009\u62E9\u4F4E\u6210\u672C\u501F\u5E01\u5E01\u79CD\n## \u5173\u952E\u8BCD\uFF1A\u501F\u5E01\u5229\u7387, interest rate, \u5229\u7387\u67E5\u8BE2, \u501F\u8D37\u6210\u672C, \u5E01\u79CD\u5229\u7387\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\u3001BTC\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\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 ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u5229\u7387 \u2192 okx_get_interest_accrued \u67E5\u5DF2\u8BA1\u5229\u606F \u2192 \u8BA1\u7B97\u603B\u6210\u672C",
|
|
22512
|
+
{
|
|
22513
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 USDT\u3001BTC\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
|
|
22514
|
+
},
|
|
22515
|
+
async ({ ccy }) => {
|
|
22516
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22517
|
+
try {
|
|
22518
|
+
const data = await privateApi.getInterestRate(auth, ccy);
|
|
22519
|
+
const enriched = data.map((item) => ({
|
|
22520
|
+
...item,
|
|
22521
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
22522
|
+
}));
|
|
22523
|
+
return toResult(enriched);
|
|
22524
|
+
} catch (e) {
|
|
22525
|
+
return toError(e);
|
|
22526
|
+
}
|
|
22527
|
+
}
|
|
22528
|
+
);
|
|
22529
|
+
server.tool(
|
|
22530
|
+
"okx_get_max_withdrawal",
|
|
22531
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5404\u5E01\u79CD\u7684\u6700\u5927\u53EF\u63D0\u73B0\u6570\u91CF\n## \u573A\u666F\uFF1A\u7528\u4E8E\u63D0\u73B0\u524D\u786E\u8BA4\u53EF\u63D0\u989D\u5EA6\u3001\u5224\u65AD\u8D26\u6237\u662F\u5426\u6709\u8DB3\u591F\u8D44\u91D1\u8F6C\u51FA\n## \u5173\u952E\u8BCD\uFF1A\u6700\u5927\u63D0\u73B0, \u53EF\u63D0\u9650\u989D, max withdrawal, \u63D0\u73B0\u989D\u5EA6, \u51FA\u91D1\u4E0A\u9650\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\u3002\u53EF\u9009\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\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 ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u53EF\u63D0\u989D\u5EA6 \u2192 okx_get_balance \u786E\u8BA4\u4F59\u989D \u2192 okx_withdrawal \u63D0\u73B0",
|
|
22532
|
+
{
|
|
22533
|
+
ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
|
|
22534
|
+
},
|
|
22535
|
+
async ({ ccy }) => {
|
|
22536
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22537
|
+
try {
|
|
22538
|
+
const data = await privateApi.getMaxWithdrawal(auth, ccy);
|
|
22539
|
+
return toResult(data);
|
|
22540
|
+
} catch (e) {
|
|
22541
|
+
return toError(e);
|
|
22542
|
+
}
|
|
22543
|
+
}
|
|
22544
|
+
);
|
|
22545
|
+
server.tool(
|
|
22546
|
+
"okx_get_account_greeks",
|
|
22547
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u671F\u6743 Greeks \u98CE\u9669\u53C2\u6570\uFF08Delta/Gamma/Vega/Theta\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u671F\u6743\u6301\u4ED3\u98CE\u9669\u8BC4\u4F30\u3001\u8BA1\u7B97\u5BF9\u51B2\u6BD4\u4F8B\u3001\u7BA1\u7406\u671F\u6743\u655E\u53E3\n## \u5173\u952E\u8BCD\uFF1A\u671F\u6743\u98CE\u9669, greeks, \u671F\u6743\u53C2\u6570, Delta, Gamma, Vega, Theta, \u671F\u6743\u655E\u53E3\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u53EF\u9009\n## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD\u3002\u53EF\u9009\n## - uly: \u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD\u3002\u53EF\u9009\n## - instId: \u4EA7\u54C1ID\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u98CE\u9669\u53C2\u6570 \u2192 okx_get_positions \u770B\u6301\u4ED3 \u2192 \u8C03\u6574\u5BF9\u51B2",
|
|
22548
|
+
{
|
|
22549
|
+
instType: external_exports.enum(INST_TYPE_TRADE).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION"),
|
|
22550
|
+
instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USD"),
|
|
22551
|
+
uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD"),
|
|
22552
|
+
instId: external_exports.string().optional().describe("\u4EA7\u54C1ID")
|
|
22553
|
+
},
|
|
22554
|
+
async ({ instType, instFamily, uly, instId }) => {
|
|
22555
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22556
|
+
try {
|
|
22557
|
+
const data = await privateApi.getAccountGreeks(auth, instType, instFamily, uly, instId);
|
|
22558
|
+
return toResult(data);
|
|
22559
|
+
} catch (e) {
|
|
22560
|
+
return toError(e);
|
|
22561
|
+
}
|
|
22562
|
+
}
|
|
22563
|
+
);
|
|
22564
|
+
server.tool(
|
|
22565
|
+
"okx_set_account_mode",
|
|
22566
|
+
"## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u8D26\u6237\u6A21\u5F0F\uFF08\u5355\u5E01\u79CD/\u591A\u5E01\u79CD/\u7EC4\u5408\u4FDD\u8BC1\u91D1\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5207\u6362\u8D26\u6237\u6A21\u5F0F\u4EE5\u652F\u6301\u4E0D\u540C\u4EA4\u6613\u7B56\u7565\u3001\u5347\u7EA7\u5230\u9AD8\u7EA7\u4FDD\u8BC1\u91D1\u6A21\u5F0F\n## \u5173\u952E\u8BCD\uFF1A\u8D26\u6237\u6A21\u5F0F, set account level, \u4FDD\u8BC1\u91D1\u6A21\u5F0F, \u5355\u5E01\u79CD, \u591A\u5E01\u79CD, \u7EC4\u5408\u4FDD\u8BC1\u91D1\n## \u53C2\u6570\uFF1A\n## - acctLv: \u8D26\u6237\u5C42\u7EA7\u30021=\u7B80\u5355\u4EA4\u6613\u6A21\u5F0F, 2=\u5355\u5E01\u79CD\u4FDD\u8BC1\u91D1\u6A21\u5F0F, 3=\u591A\u5E01\u79CD\u4FDD\u8BC1\u91D1\u6A21\u5F0F, 4=\u7EC4\u5408\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u4FEE\u6539\u8D26\u6237\u6A21\u5F0F\u5F71\u54CD\u8D44\u91D1\u4F7F\u7528\u65B9\u5F0F\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539\u8D26\u6237\u914D\u7F6E\uFF0C\u5F71\u54CD\u6240\u6709\u4EA4\u6613\u884C\u4E3A\u548C\u4FDD\u8BC1\u91D1\u8BA1\u7B97\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_account_config \u67E5\u770B\u5F53\u524D\u6A21\u5F0F \u2192 \u672C\u5DE5\u5177\u5207\u6362 \u2192 \u8C03\u6574\u4EA4\u6613\u7B56\u7565",
|
|
22567
|
+
{
|
|
22568
|
+
acctLv: external_exports.enum(["1", "2", "3", "4"]).describe("\u8D26\u6237\u5C42\u7EA7\u30021=\u7B80\u5355\u4EA4\u6613, 2=\u5355\u5E01\u79CD\u4FDD\u8BC1\u91D1, 3=\u591A\u5E01\u79CD\u4FDD\u8BC1\u91D1, 4=\u7EC4\u5408\u4FDD\u8BC1\u91D1")
|
|
22569
|
+
},
|
|
22570
|
+
async ({ acctLv }) => {
|
|
22571
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22572
|
+
try {
|
|
22573
|
+
const data = await privateApi.setAccountLevel(auth, { acctLv });
|
|
22574
|
+
return toResult(data);
|
|
22575
|
+
} catch (e) {
|
|
22576
|
+
return toError(e);
|
|
22577
|
+
}
|
|
22578
|
+
}
|
|
22579
|
+
);
|
|
22472
22580
|
}
|
|
22473
22581
|
|
|
22474
22582
|
// src/tools/trading.ts
|
|
@@ -23997,6 +24105,58 @@ function registerBotTools(server, auth) {
|
|
|
23997
24105
|
}
|
|
23998
24106
|
}
|
|
23999
24107
|
);
|
|
24108
|
+
server.tool(
|
|
24109
|
+
"okx_create_recurring_plan",
|
|
24110
|
+
"## \u529F\u80FD\uFF1A\u521B\u5EFA\u5B9A\u6295\u8BA1\u5212\uFF08DCA\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BBE\u7F6E\u5B9A\u671F\u4E70\u5165\u8BA1\u5212\u3001\u81EA\u52A8\u5316\u5B9A\u6295\u7B56\u7565\u3001\u5206\u6279\u5EFA\u4ED3\n## \u5173\u952E\u8BCD\uFF1A\u521B\u5EFA\u5B9A\u6295, create recurring, DCA, \u5B9A\u6295\u8BA1\u5212, \u81EA\u52A8\u5B9A\u6295\n## \u53C2\u6570\uFF1A\n## - instId: \u5B9A\u6295\u4EA7\u54C1ID\u3002\u5FC5\u586B\n## - currency: \u5B9A\u6295\u5E01\u79CD\u3002\u5FC5\u586B\n## - amount: \u6BCF\u671F\u6295\u8D44\u6570\u91CF\u3002\u5FC5\u586B\n## - period: \u5B9A\u6295\u5468\u671F\u3002daily=\u6BCF\u65E5, weekly=\u6BCF\u5468, monthly=\u6BCF\u6708\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u521B\u5EFA\u81EA\u52A8\u5B9A\u6295\u8BA1\u5212\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u521B\u5EFA\u5B9A\u6295\u8BA1\u5212\u540E\u7CFB\u7EDF\u5C06\u81EA\u52A8\u6267\u884C\u6295\u8D44\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u521B\u5EFA \u2192 okx_get_recurring_orders_pending \u67E5\u770B\u72B6\u6001 \u2192 okx_stop_recurring_plan \u505C\u6B62",
|
|
24111
|
+
{
|
|
24112
|
+
instId: external_exports.string().describe("\u5B9A\u6295\u4EA7\u54C1ID\u3002\u5FC5\u586B"),
|
|
24113
|
+
currency: external_exports.string().describe("\u5B9A\u6295\u8D44\u91D1\u5E01\u79CD\u3002\u5FC5\u586B"),
|
|
24114
|
+
amount: external_exports.string().describe("\u6BCF\u671F\u6295\u8D44\u6570\u91CF\u3002\u5FC5\u586B"),
|
|
24115
|
+
period: external_exports.enum(["daily", "weekly", "monthly"]).describe("\u5B9A\u6295\u5468\u671F\u3002daily=\u6BCF\u65E5, weekly=\u6BCF\u5468, monthly=\u6BCF\u6708")
|
|
24116
|
+
},
|
|
24117
|
+
async ({ instId, currency, amount, period }) => {
|
|
24118
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24119
|
+
try {
|
|
24120
|
+
const data = await privateApi.createRecurringPlan(auth, { instId, currency, amount, period });
|
|
24121
|
+
return toResult(data);
|
|
24122
|
+
} catch (e) {
|
|
24123
|
+
return toError(e);
|
|
24124
|
+
}
|
|
24125
|
+
}
|
|
24126
|
+
);
|
|
24127
|
+
server.tool(
|
|
24128
|
+
"okx_stop_recurring_plan",
|
|
24129
|
+
"## \u529F\u80FD\uFF1A\u505C\u6B62\u5B9A\u6295\u8BA1\u5212\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7EC8\u6B62\u8FD0\u884C\u4E2D\u7684\u5B9A\u6295\u8BA1\u5212\u3001\u4E0D\u518D\u7EE7\u7EED\u81EA\u52A8\u5B9A\u6295\n## \u5173\u952E\u8BCD\uFF1A\u505C\u6B62\u5B9A\u6295, stop recurring, \u7EC8\u6B62\u5B9A\u6295, \u53D6\u6D88\u5B9A\u6295\n## \u53C2\u6570\uFF1A\n## - algoId: \u5B9A\u6295\u8BA1\u5212ID\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u505C\u6B62\u81EA\u52A8\u5B9A\u6295\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u505C\u6B62\u540E\u4E0D\u518D\u81EA\u52A8\u6295\u8D44\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_recurring_orders_pending \u67E5\u770B\u8FD0\u884C\u4E2D\u8BA1\u5212 \u2192 \u672C\u5DE5\u5177\u505C\u6B62",
|
|
24130
|
+
{
|
|
24131
|
+
algoId: external_exports.string().describe("\u5B9A\u6295\u8BA1\u5212ID\u3002\u5FC5\u586B")
|
|
24132
|
+
},
|
|
24133
|
+
async ({ algoId }) => {
|
|
24134
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24135
|
+
try {
|
|
24136
|
+
const data = await privateApi.stopRecurringPlan(auth, { algoId });
|
|
24137
|
+
return toResult(data);
|
|
24138
|
+
} catch (e) {
|
|
24139
|
+
return toError(e);
|
|
24140
|
+
}
|
|
24141
|
+
}
|
|
24142
|
+
);
|
|
24143
|
+
server.tool(
|
|
24144
|
+
"okx_get_recurring_sub_orders",
|
|
24145
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B9A\u6295\u8BA1\u5212\u7684\u5B50\u8BA2\u5355\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5B9A\u6295\u8BA1\u5212\u7684\u6BCF\u6B21\u6267\u884C\u8BB0\u5F55\u3001\u68C0\u67E5\u6BCF\u6B21\u6210\u4EA4\u4EF7\u683C\u548C\u6570\u91CF\n## \u5173\u952E\u8BCD\uFF1A\u5B9A\u6295\u5B50\u8BA2\u5355, recurring sub orders, \u5B9A\u6295\u660E\u7EC6, DCA\u8BA2\u5355, \u5B9A\u6295\u6210\u4EA4\n## \u53C2\u6570\uFF1A\n## - algoId: \u5B9A\u6295\u8BA1\u5212ID\u3002\u5FC5\u586B\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_recurring_orders_pending \u67E5\u8BA1\u5212 \u2192 \u672C\u5DE5\u5177\u67E5\u6BCF\u6B21\u6267\u884C \u2192 \u8BA1\u7B97\u5E73\u5747\u6210\u672C",
|
|
24146
|
+
{
|
|
24147
|
+
algoId: external_exports.string().describe("\u5B9A\u6295\u8BA1\u5212ID\u3002\u5FC5\u586B"),
|
|
24148
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
24149
|
+
},
|
|
24150
|
+
async ({ algoId, limit }) => {
|
|
24151
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24152
|
+
try {
|
|
24153
|
+
const data = await privateApi.getRecurringSubOrders(auth, algoId, limit);
|
|
24154
|
+
return toResult(data);
|
|
24155
|
+
} catch (e) {
|
|
24156
|
+
return toError(e);
|
|
24157
|
+
}
|
|
24158
|
+
}
|
|
24159
|
+
);
|
|
24000
24160
|
}
|
|
24001
24161
|
|
|
24002
24162
|
// src/tools/spread.ts
|
|
@@ -24244,6 +24404,83 @@ function registerCopyTools(server, auth) {
|
|
|
24244
24404
|
}
|
|
24245
24405
|
}
|
|
24246
24406
|
);
|
|
24407
|
+
server.tool(
|
|
24408
|
+
"okx_copy_trader",
|
|
24409
|
+
"## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u8DDF\u5355\uFF08\u8DDF\u5355\u6307\u5B9A\u5E26\u5355\u5458\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5F00\u59CB\u8DDF\u5355\u67D0\u4E2A\u5E26\u5355\u5458\u3001\u8BBE\u7F6E\u8DDF\u5355\u53C2\u6570\n## \u5173\u952E\u8BCD\uFF1A\u8DDF\u5355, copy trade, \u5F00\u59CB\u8DDF\u5355, \u8BBE\u7F6E\u8DDF\u5355\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272\u3002\u5FC5\u586B\n## - amount: \u8DDF\u5355\u6570\u91CF\u3002\u5FC5\u586B\n## - amountType: \u6570\u91CF\u7C7B\u578B\u30021=\u56FA\u5B9A\u5F20\u6570, 2=\u56FA\u5B9A\u91D1\u989D, 3=\u6BD4\u4F8B\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u5F00\u59CB\u8DDF\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u5F00\u59CB\u8DDF\u5355\u540E\u7CFB\u7EDF\u5C06\u81EA\u52A8\u590D\u5236\u5E26\u5355\u5458\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_lead_trader_stats \u8BC4\u4F30\u5E26\u5355\u5458 \u2192 \u672C\u5DE5\u5177\u8DDF\u5355 \u2192 okx_get_copy_settings \u67E5\u770B\u8BBE\u7F6E",
|
|
24410
|
+
{
|
|
24411
|
+
uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B"),
|
|
24412
|
+
instType: external_exports.enum(INST_TYPE_SWAP_FUT).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272"),
|
|
24413
|
+
amount: external_exports.string().describe("\u8DDF\u5355\u6570\u91CF"),
|
|
24414
|
+
amountType: external_exports.string().optional().describe("\u6570\u91CF\u7C7B\u578B\u30021=\u56FA\u5B9A\u5F20\u6570, 2=\u56FA\u5B9A\u91D1\u989D, 3=\u6BD4\u4F8B")
|
|
24415
|
+
},
|
|
24416
|
+
async ({ uniqueCode, instType, amount, amountType }) => {
|
|
24417
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24418
|
+
try {
|
|
24419
|
+
const body = { uniqueCode, instType, amount };
|
|
24420
|
+
if (amountType) body.amountType = amountType;
|
|
24421
|
+
const data = await privateApi.setCopySettings(auth, body);
|
|
24422
|
+
return toResult(data);
|
|
24423
|
+
} catch (e) {
|
|
24424
|
+
return toError(e);
|
|
24425
|
+
}
|
|
24426
|
+
}
|
|
24427
|
+
);
|
|
24428
|
+
server.tool(
|
|
24429
|
+
"okx_stop_copy_trader",
|
|
24430
|
+
"## \u529F\u80FD\uFF1A\u505C\u6B62\u8DDF\u5355\uFF08\u5173\u95ED\u5B50\u6301\u4ED3\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u505C\u6B62\u8DDF\u968F\u67D0\u5E26\u5355\u5458\u7684\u4EA4\u6613\u3001\u5E73\u6389\u6240\u6709\u8DDF\u968F\u4ED3\u4F4D\n## \u5173\u952E\u8BCD\uFF1A\u505C\u6B62\u8DDF\u5355, stop copy, \u5173\u95ED\u8DDF\u5355, \u53D6\u6D88\u8DDF\u5355\n## \u53C2\u6570\uFF1A\n## - subPosId: \u5B50\u6301\u4ED3ID\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u5E73\u6389\u8DDF\u5355\u4ED3\u4F4D\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u5E73\u4ED3\u64CD\u4F5C\u5F71\u54CD\u6301\u4ED3\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u505C\u6B62\u8DDF\u5355 \u2192 okx_get_my_lead_history \u786E\u8BA4\u7ED3\u679C",
|
|
24431
|
+
{
|
|
24432
|
+
subPosId: external_exports.string().optional().describe("\u5B50\u6301\u4ED3ID")
|
|
24433
|
+
},
|
|
24434
|
+
async ({ subPosId }) => {
|
|
24435
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24436
|
+
try {
|
|
24437
|
+
const body = {};
|
|
24438
|
+
if (subPosId) body.subPosId = subPosId;
|
|
24439
|
+
const data = await privateApi.closeSubposition(auth, body);
|
|
24440
|
+
return toResult(data);
|
|
24441
|
+
} catch (e) {
|
|
24442
|
+
return toError(e);
|
|
24443
|
+
}
|
|
24444
|
+
}
|
|
24445
|
+
);
|
|
24446
|
+
server.tool(
|
|
24447
|
+
"okx_get_copy_settings",
|
|
24448
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F53\u524D\u8DDF\u5355\u8BBE\u7F6E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5DF2\u8BBE\u7F6E\u7684\u8DDF\u5355\u89C4\u5219\u3001\u8DDF\u5355\u6570\u91CF\u548C\u7C7B\u578B\n## \u5173\u952E\u8BCD\uFF1A\u8DDF\u5355\u8BBE\u7F6E, copy settings, \u8DDF\u5355\u89C4\u5219, \u8DDF\u5355\u914D\u7F6E\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 ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u8BBE\u7F6E \u2192 okx_set_copy_settings \u4FEE\u6539 \u2192 \u7BA1\u7406\u8DDF\u5355\u7B56\u7565",
|
|
24449
|
+
{},
|
|
24450
|
+
async () => {
|
|
24451
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24452
|
+
try {
|
|
24453
|
+
const data = await privateApi.getCopySettings(auth);
|
|
24454
|
+
return toResult(data);
|
|
24455
|
+
} catch (e) {
|
|
24456
|
+
return toError(e);
|
|
24457
|
+
}
|
|
24458
|
+
}
|
|
24459
|
+
);
|
|
24460
|
+
server.tool(
|
|
24461
|
+
"okx_set_copy_settings",
|
|
24462
|
+
"## \u529F\u80FD\uFF1A\u4FEE\u6539\u8DDF\u5355\u8BBE\u7F6E\uFF08\u8DDF\u5355\u6570\u91CF/\u6BD4\u4F8B\u7B49\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u5DF2\u6709\u8DDF\u5355\u7684\u53C2\u6570\u3001\u4FEE\u6539\u8DDF\u5355\u91D1\u989D\u6216\u6BD4\u4F8B\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539\u8DDF\u5355, update copy settings, \u8C03\u6574\u8DDF\u5355, \u8DDF\u5355\u53C2\u6570\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u53EF\u9009\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES\u3002\u53EF\u9009\n## - amount: \u8DDF\u5355\u6570\u91CF\u3002\u53EF\u9009\n## - amountType: \u6570\u91CF\u7C7B\u578B\u30021=\u56FA\u5B9A\u5F20\u6570, 2=\u56FA\u5B9A\u91D1\u989D, 3=\u6BD4\u4F8B\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u4FEE\u6539\u8DDF\u5355\u8BBE\u7F6E\u5F71\u54CD\u540E\u7EED\u8DDF\u5355\uFF0C\u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u8DDF\u5355\u53C2\u6570\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_copy_settings \u67E5\u770B\u5F53\u524D \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 \u786E\u8BA4\u53D8\u66F4\u751F\u6548",
|
|
24463
|
+
{
|
|
24464
|
+
uniqueCode: external_exports.string().optional().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801"),
|
|
24465
|
+
instType: external_exports.enum(INST_TYPE_SWAP_FUT).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
|
|
24466
|
+
amount: external_exports.string().optional().describe("\u8DDF\u5355\u6570\u91CF"),
|
|
24467
|
+
amountType: external_exports.string().optional().describe("\u6570\u91CF\u7C7B\u578B\u30021=\u56FA\u5B9A\u5F20\u6570, 2=\u56FA\u5B9A\u91D1\u989D, 3=\u6BD4\u4F8B")
|
|
24468
|
+
},
|
|
24469
|
+
async ({ uniqueCode, instType, amount, amountType }) => {
|
|
24470
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24471
|
+
try {
|
|
24472
|
+
const body = {};
|
|
24473
|
+
if (uniqueCode) body.uniqueCode = uniqueCode;
|
|
24474
|
+
if (instType) body.instType = instType;
|
|
24475
|
+
if (amount) body.amount = amount;
|
|
24476
|
+
if (amountType) body.amountType = amountType;
|
|
24477
|
+
const data = await privateApi.updateCopySettings(auth, body);
|
|
24478
|
+
return toResult(data);
|
|
24479
|
+
} catch (e) {
|
|
24480
|
+
return toError(e);
|
|
24481
|
+
}
|
|
24482
|
+
}
|
|
24483
|
+
);
|
|
24247
24484
|
}
|
|
24248
24485
|
|
|
24249
24486
|
// src/tools/signal.ts
|
|
@@ -24352,6 +24589,120 @@ function registerSignalTools(server, auth) {
|
|
|
24352
24589
|
);
|
|
24353
24590
|
}
|
|
24354
24591
|
|
|
24592
|
+
// src/tools/rfq.ts
|
|
24593
|
+
function registerRfqTools(server, auth) {
|
|
24594
|
+
server.tool(
|
|
24595
|
+
"okx_create_rfq",
|
|
24596
|
+
`## \u529F\u80FD\uFF1A\u521B\u5EFA\u62A5\u4EF7\u8BF7\u6C42\uFF08RFQ\uFF0CRequest For Quote\uFF09\uFF0C\u7528\u4E8E\u5927\u5B97\u4EA4\u6613\u8BE2\u4EF7
|
|
24597
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u5411\u505A\u5E02\u5546\u6216\u5BF9\u624B\u65B9\u53D1\u8D77\u5927\u5B97\u4EA4\u6613\u8BE2\u4EF7\u3001\u83B7\u53D6\u5B9A\u5236\u62A5\u4EF7
|
|
24598
|
+
## \u5173\u952E\u8BCD\uFF1A\u8BE2\u4EF7, RFQ, \u62A5\u4EF7\u8BF7\u6C42, \u5927\u5B97\u4EA4\u6613\u8BE2\u4EF7, \u8BF7\u6C42\u62A5\u4EF7
|
|
24599
|
+
## \u53C2\u6570\uFF1A
|
|
24600
|
+
## - instId: \u4EA7\u54C1ID\u3002\u5FC5\u586B
|
|
24601
|
+
## - side: \u4E70\u5356\u65B9\u5411\u3002buy=\u4E70\u5165, sell=\u5356\u51FA\u3002\u5FC5\u586B
|
|
24602
|
+
## - sz: \u6570\u91CF\u3002\u5FC5\u586B
|
|
24603
|
+
## - szType: \u6570\u91CF\u7C7B\u578B\u3002base=\u6309\u5E01, quote=\u6309\u8BA1\u4EF7\u5E01\u3002\u53EF\u9009
|
|
24604
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u53D1\u9001\u5927\u5B97\u4EA4\u6613\u8BE2\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
24605
|
+
## \u98CE\u9669\uFF1AWRITE \u2014 \u53D1\u9001RFQ\u540E\u4F1A\u6536\u5230\u62A5\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4
|
|
24606
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
|
|
24607
|
+
## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u8BE2\u4EF7 \u2192 okx_get_quotes \u67E5\u6536\u5230\u7684\u62A5\u4EF7 \u2192 okx_execute_quote \u6267\u884C\u62A5\u4EF7`,
|
|
24608
|
+
{
|
|
24609
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\u3002\u5FC5\u586B"),
|
|
24610
|
+
side: external_exports.enum(["buy", "sell"]).describe("\u4E70\u5356\u65B9\u5411\u3002buy=\u4E70\u5165, sell=\u5356\u51FA"),
|
|
24611
|
+
sz: external_exports.string().describe("\u6570\u91CF\u3002\u5FC5\u586B"),
|
|
24612
|
+
szType: external_exports.enum(["base", "quote"]).optional().describe("\u6570\u91CF\u7C7B\u578B\u3002base=\u6309\u5E01, quote=\u6309\u8BA1\u4EF7\u5E01")
|
|
24613
|
+
},
|
|
24614
|
+
async ({ instId, side, sz, szType }) => {
|
|
24615
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24616
|
+
try {
|
|
24617
|
+
const body = { instId, side, sz };
|
|
24618
|
+
if (szType) body.szType = szType;
|
|
24619
|
+
const data = await privateApi.createRfq(auth, body);
|
|
24620
|
+
return toResult(data);
|
|
24621
|
+
} catch (e) {
|
|
24622
|
+
return toError(e);
|
|
24623
|
+
}
|
|
24624
|
+
}
|
|
24625
|
+
);
|
|
24626
|
+
server.tool(
|
|
24627
|
+
"okx_execute_quote",
|
|
24628
|
+
`## \u529F\u80FD\uFF1A\u6267\u884C\u62A5\u4EF7\uFF08\u63A5\u53D7\u5BF9\u624B\u65B9\u7684\u5927\u5B97\u4EA4\u6613\u62A5\u4EF7\uFF09
|
|
24629
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u63A5\u53D7RFQ\u62A5\u4EF7\u3001\u786E\u8BA4\u5927\u5B97\u4EA4\u6613\u6210\u4EA4
|
|
24630
|
+
## \u5173\u952E\u8BCD\uFF1A\u6267\u884C\u62A5\u4EF7, execute quote, \u63A5\u53D7\u62A5\u4EF7, \u5927\u5B97\u6210\u4EA4, \u786E\u8BA4\u4EA4\u6613
|
|
24631
|
+
## \u53C2\u6570\uFF1A
|
|
24632
|
+
## - instId: \u4EA7\u54C1ID\u3002\u5FC5\u586B
|
|
24633
|
+
## - quoteId: \u62A5\u4EF7ID\u3002\u5FC5\u586B
|
|
24634
|
+
## - rfqId: RFQ ID\u3002\u5FC5\u586B
|
|
24635
|
+
## - sz: \u6210\u4EA4\u6570\u91CF\u3002\u5FC5\u586B
|
|
24636
|
+
## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u6267\u884C\u5927\u5B97\u4EA4\u6613\u6210\u4EA4\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
|
|
24637
|
+
## \u98CE\u9669\uFF1AWRITE \u2014 \u6267\u884C\u62A5\u4EF7\u540E\u5373\u6210\u4EA4\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4
|
|
24638
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
|
|
24639
|
+
## \u5173\u8054\uFF1Aokx_create_rfq \u53D1\u8D77\u8BE2\u4EF7 \u2192 okx_get_quotes \u67E5\u770B\u62A5\u4EF7 \u2192 \u672C\u5DE5\u5177\u6210\u4EA4`,
|
|
24640
|
+
{
|
|
24641
|
+
instId: external_exports.string().describe("\u4EA7\u54C1ID\u3002\u5FC5\u586B"),
|
|
24642
|
+
quoteId: external_exports.string().describe("\u62A5\u4EF7ID\u3002\u5FC5\u586B"),
|
|
24643
|
+
rfqId: external_exports.string().describe("RFQ ID\u3002\u5FC5\u586B"),
|
|
24644
|
+
sz: external_exports.string().describe("\u6210\u4EA4\u6570\u91CF\u3002\u5FC5\u586B")
|
|
24645
|
+
},
|
|
24646
|
+
async ({ instId, quoteId, rfqId, sz }) => {
|
|
24647
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24648
|
+
try {
|
|
24649
|
+
const data = await privateApi.executeRfqQuote(auth, { instId, quoteId, rfqId, sz });
|
|
24650
|
+
return toResult(data);
|
|
24651
|
+
} catch (e) {
|
|
24652
|
+
return toError(e);
|
|
24653
|
+
}
|
|
24654
|
+
}
|
|
24655
|
+
);
|
|
24656
|
+
server.tool(
|
|
24657
|
+
"okx_get_rfqs",
|
|
24658
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8BE2\u4EF7\u8BB0\u5F55\u5217\u8868
|
|
24659
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5386\u53F2RFQ\u3001\u8FFD\u8E2A\u8BE2\u4EF7\u72B6\u6001\u3001\u786E\u8BA4\u8BE2\u4EF7\u662F\u5426\u5DF2\u62A5\u4EF7
|
|
24660
|
+
## \u5173\u952E\u8BCD\uFF1A\u8BE2\u4EF7\u8BB0\u5F55, RFQ\u5217\u8868, \u8BE2\u4EF7\u5386\u53F2, RFQ\u8BB0\u5F55, \u62A5\u4EF7\u8BF7\u6C42\u8BB0\u5F55
|
|
24661
|
+
## \u53C2\u6570\uFF1A
|
|
24662
|
+
## - state: \u72B6\u6001\u7B5B\u9009\u3002active=\u8FDB\u884C\u4E2D, executed=\u5DF2\u6210\u4EA4, canceled=\u5DF2\u53D6\u6D88\u3002\u53EF\u9009
|
|
24663
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
24664
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
24665
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
|
|
24666
|
+
## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u8BE2\u4EF7\u5217\u8868 \u2192 okx_get_quotes \u67E5\u770B\u5BF9\u5E94\u62A5\u4EF7 \u2192 \u7BA1\u7406\u5927\u5B97\u4EA4\u6613`,
|
|
24667
|
+
{
|
|
24668
|
+
state: external_exports.enum(["active", "executed", "canceled"]).optional().describe("\u72B6\u6001\u7B5B\u9009\u3002active=\u8FDB\u884C\u4E2D, executed=\u5DF2\u6210\u4EA4, canceled=\u5DF2\u53D6\u6D88")
|
|
24669
|
+
},
|
|
24670
|
+
async ({ state }) => {
|
|
24671
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24672
|
+
try {
|
|
24673
|
+
const data = await privateApi.getRfqs(auth, state);
|
|
24674
|
+
return toResult(data);
|
|
24675
|
+
} catch (e) {
|
|
24676
|
+
return toError(e);
|
|
24677
|
+
}
|
|
24678
|
+
}
|
|
24679
|
+
);
|
|
24680
|
+
server.tool(
|
|
24681
|
+
"okx_get_quotes",
|
|
24682
|
+
`## \u529F\u80FD\uFF1A\u67E5\u8BE2\u9488\u5BF9\u67D0RFQ\u7684\u62A5\u4EF7\u5217\u8868
|
|
24683
|
+
## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5BF9\u624B\u65B9\u5BF9RFQ\u7684\u56DE\u590D\u62A5\u4EF7\u3001\u9009\u62E9\u6700\u4F18\u62A5\u4EF7\u6267\u884C
|
|
24684
|
+
## \u5173\u952E\u8BCD\uFF1A\u62A5\u4EF7\u5217\u8868, quotes, RFQ\u62A5\u4EF7, \u67E5\u8BE2\u62A5\u4EF7, \u5BF9\u624B\u65B9\u62A5\u4EF7
|
|
24685
|
+
## \u53C2\u6570\uFF1A
|
|
24686
|
+
## - rfqId: RFQ ID\u3002\u5FC5\u586B
|
|
24687
|
+
## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
|
|
24688
|
+
## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
|
|
24689
|
+
## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
|
|
24690
|
+
## \u5173\u8054\uFF1Aokx_get_rfqs \u67E5\u8BE2\u4EF7 \u2192 \u672C\u5DE5\u5177\u67E5\u770B\u62A5\u4EF7 \u2192 okx_execute_quote \u6267\u884C`,
|
|
24691
|
+
{
|
|
24692
|
+
rfqId: external_exports.string().describe("RFQ ID\u3002\u5FC5\u586B")
|
|
24693
|
+
},
|
|
24694
|
+
async ({ rfqId }) => {
|
|
24695
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
24696
|
+
try {
|
|
24697
|
+
const data = await privateApi.getRfqQuotes(auth, rfqId);
|
|
24698
|
+
return toResult(data);
|
|
24699
|
+
} catch (e) {
|
|
24700
|
+
return toError(e);
|
|
24701
|
+
}
|
|
24702
|
+
}
|
|
24703
|
+
);
|
|
24704
|
+
}
|
|
24705
|
+
|
|
24355
24706
|
// src/index.ts
|
|
24356
24707
|
async function main() {
|
|
24357
24708
|
const server = new McpServer({ name: "hvip", version: "0.2.1" });
|
|
@@ -24370,6 +24721,7 @@ async function main() {
|
|
|
24370
24721
|
registerFundingTools(server, auth);
|
|
24371
24722
|
registerSubAccountTools(server, auth);
|
|
24372
24723
|
registerFinanceTools(server, auth);
|
|
24724
|
+
registerRfqTools(server, auth);
|
|
24373
24725
|
const transport = new StdioServerTransport();
|
|
24374
24726
|
await server.connect(transport);
|
|
24375
24727
|
}
|