hvip-mcp-server 0.2.18 → 0.2.19
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 +204 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21241,6 +21241,11 @@ var privateApi = {
|
|
|
21241
21241
|
getEthStakingBalance: (auth) => request("GET", "/api/v5/finance/staking-defi/eth/balance", { auth }),
|
|
21242
21242
|
getEthStakingHistory: (auth, limit) => request("GET", "/api/v5/finance/staking-defi/eth/purchase-redeem-history", { params: { limit }, auth }),
|
|
21243
21243
|
getSolStakingBalance: (auth) => request("GET", "/api/v5/finance/staking-defi/sol/balance", { auth }),
|
|
21244
|
+
// ── 质押操作(第七批新增) ─────────────────────────────────────────────────
|
|
21245
|
+
getStakingOrders: (auth, productId, state, limit) => request("GET", "/api/v5/finance/staking-defi/orders", { params: { productId, state, limit }, auth }),
|
|
21246
|
+
purchaseEthStaking: (auth, body) => request("POST", "/api/v5/finance/staking-defi/eth/purchase", { body, auth }),
|
|
21247
|
+
redeemEthStaking: (auth, body) => request("POST", "/api/v5/finance/staking-defi/eth/redeem", { body, auth }),
|
|
21248
|
+
getSolStakingHistory: (auth, limit) => request("GET", "/api/v5/finance/staking-defi/sol/history", { params: { limit }, auth }),
|
|
21244
21249
|
// ── 跟单(私有) ─────────────────────────────────────────────────────────────
|
|
21245
21250
|
getMyLeadPositions: (auth, instType) => request("GET", "/api/v5/copytrading/current-subpositions", { params: { instType }, auth }),
|
|
21246
21251
|
getMyLeadHistory: (auth, instType, limit) => request("GET", "/api/v5/copytrading/subpositions-history", { params: { instType, limit }, auth }),
|
|
@@ -21282,6 +21287,14 @@ var privateApi = {
|
|
|
21282
21287
|
getAccountRateLimit: (auth) => request("GET", "/api/v5/trade/account-rate-limit", { auth }),
|
|
21283
21288
|
easyConvert: (auth, body) => request("POST", "/api/v5/trade/easy-convert", { body, auth }),
|
|
21284
21289
|
getEasyConvertHistory: (auth, after, before, limit) => request("GET", "/api/v5/trade/easy-convert-history", { params: { after, before, limit }, auth }),
|
|
21290
|
+
// ── 公开数据(从public移入,实需鉴权) ─────────────────────────────────
|
|
21291
|
+
getEconomicCalendar: (auth, begin, end, limit) => request("GET", "/api/v5/public/economic-calendar", { params: { begin, end, limit }, auth }),
|
|
21292
|
+
// ── 子账户(第六批新增) ──────────────────────────────────────────────────
|
|
21293
|
+
getSubAccountApiKey: (auth, subAcct) => request("GET", "/api/v5/users/subaccount/apikey", { params: { subAcct }, auth }),
|
|
21294
|
+
createSubAccountApiKey: (auth, body) => request("POST", "/api/v5/users/subaccount/apikey", { body, auth }),
|
|
21295
|
+
modifySubAccountApiKey: (auth, body) => request("POST", "/api/v5/users/subaccount/modify-apikey", { body, auth }),
|
|
21296
|
+
deleteSubAccountApiKey: (auth, body) => request("POST", "/api/v5/users/subaccount/delete-apikey", { body, auth }),
|
|
21297
|
+
getSubAccountBills: (auth, subAcct, after, before, limit) => request("GET", "/api/v5/asset/subaccount/bills", { params: { subAcct, after, before, limit }, auth }),
|
|
21285
21298
|
// ── 账户+资金(第四批新增) ──────────────────────────────────────────────────
|
|
21286
21299
|
setPositionMode: (auth, body) => request("POST", "/api/v5/account/set-position-mode", { body, auth }),
|
|
21287
21300
|
getAssetValuation: (auth, ccy) => request("GET", "/api/v5/asset/asset-valuation", { params: { ccy }, auth }),
|
|
@@ -21691,7 +21704,7 @@ function registerMarketTools(server) {
|
|
|
21691
21704
|
}
|
|
21692
21705
|
|
|
21693
21706
|
// src/tools/public.ts
|
|
21694
|
-
function registerPublicTools(server) {
|
|
21707
|
+
function registerPublicTools(server, auth) {
|
|
21695
21708
|
server.tool(
|
|
21696
21709
|
"okx_get_instruments",
|
|
21697
21710
|
"## \u529F\u80FD\uFF1A\u83B7\u53D6OKX\u53EF\u4EA4\u6613\u4EA7\u54C1\u5217\u8868\uFF0C\u542B\u4EA7\u54C1\u89C4\u683C\u3001\u6700\u5C0F\u4E0B\u5355\u91CF\u3001\u624B\u7EED\u8D39\u7B49\u7EA7\u7B49\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u786E\u8BA4\u67D0\u4EA7\u54C1\u662F\u5426\u53EF\u4EA4\u6613\u3001\u83B7\u53D6\u7CBE\u5EA6\u53C2\u6570\u3001\u4E0B\u5355\u524D\u9A8C\u8BC1\u4EA7\u54C1\u89C4\u683C\n## \u5173\u952E\u8BCD\uFF1A\u4EA7\u54C1\u5217\u8868, instruments, \u53EF\u4EA4\u6613\u54C1\u79CD, \u89C4\u683C\u53C2\u6570, \u6700\u5C0F\u4E0B\u5355, \u7CBE\u5EA6\n## \u53C2\u6570\uFF1A\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT=\u73B0\u8D27, MARGIN=\u6760\u6746, SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272, OPTION=\u671F\u6743\n## - instId: \u6307\u5B9A\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u5219\u8FD4\u56DE\u5168\u91CF\u3002\u4E0D\u4F20instType\u5C06\u8FD4\u56DE\u5168\u91CF\u6570\u636E(~200KB)\uFF0C\u5DF2\u81EA\u52A8\u622A\u65ADtop20\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5355\u7C7B\u578B ~50KB\uFF0C\u5168\u91CF ~200KB\uFF08\u5DF2\u81EA\u52A8\u622A\u65AD top 20\uFF09\n## \u5173\u8054\uFF1A\u51E0\u4E4E\u6240\u6709\u5DE5\u5177\u7684\u524D\u7F6E\u5DE5\u5177 \u2192 \u83B7\u53D6 instId/instFamily \u540E\u7528\u4E8E okx_get_ticker\u3001okx_place_order \u7B49",
|
|
@@ -22118,6 +22131,28 @@ function registerPublicTools(server) {
|
|
|
22118
22131
|
}
|
|
22119
22132
|
}
|
|
22120
22133
|
);
|
|
22134
|
+
server.tool(
|
|
22135
|
+
"okx_get_economic_calendar",
|
|
22136
|
+
"## \u529F\u80FD\uFF1A\u83B7\u53D6\u7ECF\u6D4E\u65E5\u5386\u6570\u636E\uFF08\u91CD\u8981\u7ECF\u6D4E\u4E8B\u4EF6\u3001\u6570\u636E\u516C\u5E03\u65F6\u95F4\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2A\u5B8F\u89C2\u7ECF\u6D4E\u4E8B\u4EF6\u3001\u8BC4\u4F30\u5E02\u573A\u6CE2\u52A8\u89E6\u53D1\u56E0\u7D20\u3001\u63D0\u524D\u51C6\u5907\u5E94\u5BF9\u91CD\u8981\u6570\u636E\u516C\u5E03\n## \u5173\u952E\u8BCD\uFF1A\u7ECF\u6D4E\u65E5\u5386, economic calendar, \u7ECF\u6D4E\u6570\u636E, \u5B8F\u89C2\u7ECF\u6D4E, \u975E\u519C, CPI, \u5229\u7387\u51B3\u8BAE\n## \u53C2\u6570\uFF1A\n## - begin: \u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\u3002\u53EF\u9009\n## - end: \u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\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 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u83B7\u53D6\u7ECF\u6D4E\u4E8B\u4EF6 \u2192 \u9884\u5224\u5E02\u573A\u6CE2\u52A8 \u2192 \u7ED3\u5408 okx_get_ticker \u76D1\u63A7\u884C\u60C5\u53D8\u5316",
|
|
22137
|
+
{
|
|
22138
|
+
begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
22139
|
+
end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
|
|
22140
|
+
limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
22141
|
+
},
|
|
22142
|
+
async ({ begin, end, limit }) => {
|
|
22143
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
22144
|
+
try {
|
|
22145
|
+
const data = await privateApi.getEconomicCalendar(auth, begin, end, limit);
|
|
22146
|
+
const enriched = data.map((item) => ({
|
|
22147
|
+
...item,
|
|
22148
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
22149
|
+
}));
|
|
22150
|
+
return toResult(enriched);
|
|
22151
|
+
} catch (e) {
|
|
22152
|
+
return toError(e);
|
|
22153
|
+
}
|
|
22154
|
+
}
|
|
22155
|
+
);
|
|
22121
22156
|
}
|
|
22122
22157
|
|
|
22123
22158
|
// src/tools/account.ts
|
|
@@ -23331,6 +23366,104 @@ function registerSubAccountTools(server, auth) {
|
|
|
23331
23366
|
}
|
|
23332
23367
|
}
|
|
23333
23368
|
);
|
|
23369
|
+
server.tool(
|
|
23370
|
+
"okx_get_subaccount_api_key",
|
|
23371
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684API Key\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7BA1\u7406\u5B50\u8D26\u6237\u7684API\u6743\u9650\u3001\u67E5\u770B\u5404\u5B50\u8D26\u6237\u5DF2\u521B\u5EFA\u7684API Key\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237API, subaccount apikey, \u5B50\u8D26\u6237\u79D8\u94A5, API\u7BA1\u7406\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~1KB\n## \u5173\u8054\uFF1Aokx_list_subaccounts \u83B7\u53D6\u5B50\u8D26\u6237 \u2192 \u672C\u5DE5\u5177\u67E5API Key \u2192 okx_create_subaccount_api_key \u521B\u5EFA",
|
|
23372
|
+
{
|
|
23373
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B")
|
|
23374
|
+
},
|
|
23375
|
+
async ({ subAcct }) => {
|
|
23376
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23377
|
+
try {
|
|
23378
|
+
const data = await privateApi.getSubAccountApiKey(auth, subAcct);
|
|
23379
|
+
return toResult(data);
|
|
23380
|
+
} catch (e) {
|
|
23381
|
+
return toError(e);
|
|
23382
|
+
}
|
|
23383
|
+
}
|
|
23384
|
+
);
|
|
23385
|
+
server.tool(
|
|
23386
|
+
"okx_create_subaccount_api_key",
|
|
23387
|
+
"## \u529F\u80FD\uFF1A\u4E3A\u5B50\u8D26\u6237\u521B\u5EFA\u65B0\u7684API Key\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E3A\u5B50\u8D26\u6237\u5F00\u901AAPI\u6743\u9650\u3001\u5206\u914D\u4EA4\u6613\u989D\u5EA6\n## \u5173\u952E\u8BCD\uFF1A\u521B\u5EFAAPI, create apikey, \u5B50\u8D26\u6237\u521B\u5EFA\u79D8\u94A5, API\u521B\u5EFA\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - label: API Key\u5907\u6CE8\u540D\u79F0\u3002\u5FC5\u586B\n## - passphrase: API Key\u4EA4\u6613\u5BC6\u7801\u3002\u5FC5\u586B\n## - perm: \u6743\u9650\u5B57\u7B26\u4E32\uFF0C\u5982 read_only\u3001trade\u3002\u5FC5\u586B\n## - ip: IP\u767D\u540D\u5355\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u7BA1\u7406\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u521B\u5EFAAPI Key\u5F71\u54CD\u5B50\u8D26\u6237\u8BBF\u95EE\u6743\u9650\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_subaccount_api_key \u67E5\u770B\u73B0\u6709 \u2192 \u672C\u5DE5\u5177\u521B\u5EFA \u2192 okx_reset_subaccount_api_key \u91CD\u7F6E",
|
|
23388
|
+
{
|
|
23389
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23390
|
+
label: external_exports.string().describe("API Key\u5907\u6CE8\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23391
|
+
passphrase: external_exports.string().describe("API Key\u4EA4\u6613\u5BC6\u7801\u3002\u5FC5\u586B"),
|
|
23392
|
+
perm: external_exports.string().describe("\u6743\u9650\u5B57\u7B26\u4E32\uFF0C\u5982 read_only\u3001trade"),
|
|
23393
|
+
ip: external_exports.string().optional().describe("IP\u767D\u540D\u5355\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694")
|
|
23394
|
+
},
|
|
23395
|
+
async ({ subAcct, label, passphrase, perm, ip }) => {
|
|
23396
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23397
|
+
try {
|
|
23398
|
+
const body = { subAcct, label, passphrase, perm };
|
|
23399
|
+
if (ip) body.ip = ip;
|
|
23400
|
+
const data = await privateApi.createSubAccountApiKey(auth, body);
|
|
23401
|
+
return toResult(data);
|
|
23402
|
+
} catch (e) {
|
|
23403
|
+
return toError(e);
|
|
23404
|
+
}
|
|
23405
|
+
}
|
|
23406
|
+
);
|
|
23407
|
+
server.tool(
|
|
23408
|
+
"okx_reset_subaccount_api_key",
|
|
23409
|
+
"## \u529F\u80FD\uFF1A\u4FEE\u6539\u5B50\u8D26\u6237\u7684API Key\uFF08\u91CD\u7F6E\u6743\u9650\u3001IP\u767D\u540D\u5355\u6216\u5907\u6CE8\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u66F4\u65B0\u5B50\u8D26\u6237API Key\u7684\u6743\u9650\u8303\u56F4\u3001\u4FEE\u6539IP\u767D\u540D\u5355\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539API, reset apikey, \u91CD\u7F6E\u79D8\u94A5, \u66F4\u65B0API\u6743\u9650\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - apiKey: \u9700\u8981\u4FEE\u6539\u7684API Key\u3002\u5FC5\u586B\n## - label: API Key\u65B0\u5907\u6CE8\u3002\u53EF\u9009\n## - perm: \u65B0\u6743\u9650\u5B57\u7B26\u4E32\u3002\u53EF\u9009\n## - ip: \u65B0IP\u767D\u540D\u5355\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u7BA1\u7406\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u4FEE\u6539API Key\u5F71\u54CD\u5B50\u8D26\u6237\u8BBF\u95EE\u6743\u9650\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_create_subaccount_api_key \u521B\u5EFA \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 okx_delete_subaccount_api_key \u5220\u9664",
|
|
23410
|
+
{
|
|
23411
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23412
|
+
apiKey: external_exports.string().describe("\u9700\u8981\u4FEE\u6539\u7684API Key\u3002\u5FC5\u586B"),
|
|
23413
|
+
label: external_exports.string().optional().describe("API Key\u65B0\u5907\u6CE8"),
|
|
23414
|
+
perm: external_exports.string().optional().describe("\u65B0\u6743\u9650\u5B57\u7B26\u4E32"),
|
|
23415
|
+
ip: external_exports.string().optional().describe("\u65B0IP\u767D\u540D\u5355\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694")
|
|
23416
|
+
},
|
|
23417
|
+
async ({ subAcct, apiKey, label, perm, ip }) => {
|
|
23418
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23419
|
+
try {
|
|
23420
|
+
const body = { subAcct, apiKey };
|
|
23421
|
+
if (label) body.label = label;
|
|
23422
|
+
if (perm) body.perm = perm;
|
|
23423
|
+
if (ip) body.ip = ip;
|
|
23424
|
+
const data = await privateApi.modifySubAccountApiKey(auth, body);
|
|
23425
|
+
return toResult(data);
|
|
23426
|
+
} catch (e) {
|
|
23427
|
+
return toError(e);
|
|
23428
|
+
}
|
|
23429
|
+
}
|
|
23430
|
+
);
|
|
23431
|
+
server.tool(
|
|
23432
|
+
"okx_delete_subaccount_api_key",
|
|
23433
|
+
"## \u529F\u80FD\uFF1A\u5220\u9664\u5B50\u8D26\u6237\u7684API Key\n## \u573A\u666F\uFF1A\u7528\u4E8E\u64A4\u9500\u5B50\u8D26\u6237\u7684API\u8BBF\u95EE\u6743\u9650\u3001\u5B50\u8D26\u6237\u4E0D\u518D\u9700\u8981\u4EA4\u6613\u65F6\u6E05\u7406API Key\n## \u5173\u952E\u8BCD\uFF1A\u5220\u9664API, delete apikey, \u79FB\u9664\u79D8\u94A5, \u64A4\u9500API\u6743\u9650\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - apiKey: \u9700\u8981\u5220\u9664\u7684API Key\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u7BA1\u7406\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u5220\u9664API Key\u540E\u5B50\u8D26\u6237\u5C06\u65E0\u6CD5\u901A\u8FC7API\u8BBF\u95EE\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_subaccount_api_key \u67E5\u770B\u73B0\u6709 \u2192 \u672C\u5DE5\u5177\u5220\u9664 \u2192 okx_list_subaccounts \u9A8C\u8BC1",
|
|
23434
|
+
{
|
|
23435
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23436
|
+
apiKey: external_exports.string().describe("\u9700\u8981\u5220\u9664\u7684API Key\u3002\u5FC5\u586B")
|
|
23437
|
+
},
|
|
23438
|
+
async ({ subAcct, apiKey }) => {
|
|
23439
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23440
|
+
try {
|
|
23441
|
+
const data = await privateApi.deleteSubAccountApiKey(auth, { subAcct, apiKey });
|
|
23442
|
+
return toResult(data);
|
|
23443
|
+
} catch (e) {
|
|
23444
|
+
return toError(e);
|
|
23445
|
+
}
|
|
23446
|
+
}
|
|
23447
|
+
);
|
|
23448
|
+
server.tool(
|
|
23449
|
+
"okx_get_subaccount_bills",
|
|
23450
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u6D41\u6C34\uFF08\u8D26\u5355\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5BA1\u8BA1\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u53D8\u52A8\u3001\u8FFD\u8E2A\u5B50\u8D26\u6237\u7684\u5212\u8F6C\u548C\u4EA4\u6613\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u8D26\u5355, subaccount bills, \u5B50\u8D26\u6237\u6D41\u6C34, \u8D44\u91D1\u53D8\u52A8, \u5B50\u8D26\u6237\u5BF9\u8D26\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - after: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\u3002\u53EF\u9009\n## - before: \u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09\u3002\u53EF\u9009\n## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB\n## \u5173\u8054\uFF1Aokx_get_subaccount_balance \u67E5\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u6D41\u6C34 \u2192 okx_transfer_subaccount \u5212\u8F6C",
|
|
23451
|
+
{
|
|
23452
|
+
subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
|
|
23453
|
+
after: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u540E\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
23454
|
+
before: external_exports.string().optional().describe("\u67E5\u8BE2\u6B64\u65F6\u95F4\u6233\u4E4B\u524D\u7684\u8BB0\u5F55\uFF08\u6BEB\u79D2Unix\u65F6\u95F4\u6233\uFF09"),
|
|
23455
|
+
limit: external_exports.string().optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
23456
|
+
},
|
|
23457
|
+
async ({ subAcct, after, before, limit }) => {
|
|
23458
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23459
|
+
try {
|
|
23460
|
+
const data = await privateApi.getSubAccountBills(auth, subAcct, after, before, limit);
|
|
23461
|
+
return toResult(data);
|
|
23462
|
+
} catch (e) {
|
|
23463
|
+
return toError(e);
|
|
23464
|
+
}
|
|
23465
|
+
}
|
|
23466
|
+
);
|
|
23334
23467
|
server.tool(
|
|
23335
23468
|
"okx_get_subaccount_assets",
|
|
23336
23469
|
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5B50\u8D26\u6237\u7684\u8D44\u91D1\u8D26\u6237\u4F59\u989D\uFF08\u975E\u4EA4\u6613\u8D26\u6237\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5B50\u8D26\u6237\u7684\u5145\u503C\u8D44\u91D1\u3001\u786E\u8BA4\u5B50\u8D26\u6237\u8D44\u91D1\u8D26\u6237\u8D44\u4EA7\n## \u5173\u952E\u8BCD\uFF1A\u5B50\u8D26\u6237\u8D44\u4EA7, subaccount assets, \u5B50\u8D26\u6237\u8D44\u91D1, \u5B50\u8D26\u6237\u4F59\u989D, \u5B50\u8D26\u53F7\u8D44\u91D1\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1Aokx_get_subaccount_balance \u770B\u4EA4\u6613\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u770B\u8D44\u91D1\u4F59\u989D \u2192 \u7EFC\u5408\u8BC4\u4F30\u5B50\u8D26\u6237\u8D44\u4EA7",
|
|
@@ -23443,6 +23576,75 @@ function registerFinanceTools(server, auth) {
|
|
|
23443
23576
|
}
|
|
23444
23577
|
}
|
|
23445
23578
|
);
|
|
23579
|
+
server.tool(
|
|
23580
|
+
"okx_get_staking_orders",
|
|
23581
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2\u94FE\u4E0A\u8D28\u62BC\u7684\u8BA2\u5355/\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770BETH/SOL\u8D28\u62BC\u7684\u7533\u8D2D\u548C\u8D4E\u56DE\u8BB0\u5F55\u3001\u8FFD\u8E2A\u8D28\u62BC\u64CD\u4F5C\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u8D28\u62BC\u8BA2\u5355, staking orders, \u8D28\u62BC\u8BB0\u5F55, \u8D28\u62BC\u5386\u53F2, \u7533\u8D2D\u8D4E\u56DE\n## \u53C2\u6570\uFF1A\n## - productId: \u4EA7\u54C1ID\uFF0C\u5982 ETH\u3002\u53EF\u9009\n## - state: \u8BA2\u5355\u72B6\u6001\u30021=\u7B49\u5F85\u7533\u8D2D, 2=\u7533\u8D2D\u4E2D, 3=\u7533\u8D2D\u6210\u529F, 4=\u8D4E\u56DE\u4E2D, 5=\u8D4E\u56DE\u6210\u529F, 6=\u5DF2\u53D6\u6D88\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\uFF1A\u672C\u5DE5\u5177\u67E5\u8BB0\u5F55 \u2192 okx_stake_eth/okx_unstake_eth \u64CD\u4F5C \u2192 okx_get_eth_staking_balance \u786E\u8BA4",
|
|
23582
|
+
{
|
|
23583
|
+
productId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 ETH\u3002\u53EF\u9009"),
|
|
23584
|
+
state: external_exports.string().optional().describe("\u8BA2\u5355\u72B6\u6001\u30021=\u7B49\u5F85\u7533\u8D2D, 2=\u7533\u8D2D\u4E2D, 3=\u7533\u8D2D\u6210\u529F, 4=\u8D4E\u56DE\u4E2D, 5=\u8D4E\u56DE\u6210\u529F, 6=\u5DF2\u53D6\u6D88"),
|
|
23585
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
23586
|
+
},
|
|
23587
|
+
async ({ productId, state, limit }) => {
|
|
23588
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23589
|
+
try {
|
|
23590
|
+
const data = await privateApi.getStakingOrders(auth, productId, state, limit);
|
|
23591
|
+
return toResult(data);
|
|
23592
|
+
} catch (e) {
|
|
23593
|
+
return toError(e);
|
|
23594
|
+
}
|
|
23595
|
+
}
|
|
23596
|
+
);
|
|
23597
|
+
server.tool(
|
|
23598
|
+
"okx_stake_eth",
|
|
23599
|
+
"## \u529F\u80FD\uFF1A\u7533\u8D2DETH\u94FE\u4E0A\u8D28\u62BC\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06ETH\u5B58\u5165\u8D28\u62BC\u4EE5\u8D5A\u53D6\u5E74\u5316\u6536\u76CA\u3001\u957F\u671F\u6301\u6709ETH\u7684\u88AB\u52A8\u6536\u76CA\n## \u5173\u952E\u8BCD\uFF1AETH\u8D28\u62BC, stake eth, \u7533\u8D2D\u8D28\u62BC, ETH\u5B58\u5165, \u8D28\u62BC\u7533\u8D2D\n## \u53C2\u6570\uFF1A\n## - amt: \u8D28\u62BC\u6570\u91CF\uFF08ETH\uFF09\u3002\u5FC5\u586B\n## - rate: \u6536\u76CA\u7387\u7C7B\u578B\u30020.5=\u6D3B\u671F, 0.01=\u5B9A\u671F\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u7533\u8D2D\u6570\u91CF\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8D28\u62BCETH\u5C06\u9501\u4ED3\uFF0C\u63D0\u73B0\u5230\u8D26\u6709\u5EF6\u8FDF\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_eth_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u7533\u8D2D \u2192 okx_get_staking_orders \u786E\u8BA4",
|
|
23600
|
+
{
|
|
23601
|
+
amt: external_exports.string().describe("\u8D28\u62BC\u6570\u91CF\uFF08ETH\uFF09\u3002\u5FC5\u586B"),
|
|
23602
|
+
rate: external_exports.string().optional().describe("\u6536\u76CA\u7387\u7C7B\u578B\u30020.5=\u6D3B\u671F, 0.01=\u5B9A\u671F\u3002\u4E0D\u586B\u9ED8\u8BA4\u6D3B\u671F")
|
|
23603
|
+
},
|
|
23604
|
+
async ({ amt, rate }) => {
|
|
23605
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23606
|
+
try {
|
|
23607
|
+
const body = { amt };
|
|
23608
|
+
if (rate) body.rate = rate;
|
|
23609
|
+
const data = await privateApi.purchaseEthStaking(auth, body);
|
|
23610
|
+
return toResult(data);
|
|
23611
|
+
} catch (e) {
|
|
23612
|
+
return toError(e);
|
|
23613
|
+
}
|
|
23614
|
+
}
|
|
23615
|
+
);
|
|
23616
|
+
server.tool(
|
|
23617
|
+
"okx_unstake_eth",
|
|
23618
|
+
"## \u529F\u80FD\uFF1A\u8D4E\u56DEETH\u94FE\u4E0A\u8D28\u62BC\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06\u8D28\u62BC\u7684ETH\u8D4E\u56DE\u3001\u63D0\u53D6\u8D28\u62BC\u6536\u76CA\u3001\u5E94\u5BF9\u63D0\u73B0\u9700\u6C42\n## \u5173\u952E\u8BCD\uFF1A\u8D4E\u56DEETH, unstake eth, \u89E3\u9664\u8D28\u62BC, ETH\u8D4E\u56DE, \u63D0\u53D6\u8D28\u62BC\n## \u53C2\u6570\uFF1A\n## - amt: \u8D4E\u56DE\u6570\u91CF\uFF08ETH\uFF09\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4\u8D4E\u56DE\u6570\u91CF\n## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u8D4E\u56DEETH\u9700\u8981\u7B49\u5F85\u94FE\u4E0A\u786E\u8BA4\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_eth_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u8D4E\u56DE \u2192 okx_get_eth_staking_history \u786E\u8BA4",
|
|
23619
|
+
{
|
|
23620
|
+
amt: external_exports.string().describe("\u8D4E\u56DE\u6570\u91CF\uFF08ETH\uFF09\u3002\u5FC5\u586B")
|
|
23621
|
+
},
|
|
23622
|
+
async ({ amt }) => {
|
|
23623
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23624
|
+
try {
|
|
23625
|
+
const data = await privateApi.redeemEthStaking(auth, { amt });
|
|
23626
|
+
return toResult(data);
|
|
23627
|
+
} catch (e) {
|
|
23628
|
+
return toError(e);
|
|
23629
|
+
}
|
|
23630
|
+
}
|
|
23631
|
+
);
|
|
23632
|
+
server.tool(
|
|
23633
|
+
"okx_get_sol_staking_history",
|
|
23634
|
+
"## \u529F\u80FD\uFF1A\u67E5\u8BE2SOL\u8D28\u62BC\u7684\u7533\u8D2D/\u8D4E\u56DE\u5386\u53F2\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8FFD\u8E2ASOL\u8D28\u62BC\u64CD\u4F5C\u3001\u6838\u5BF9\u8D28\u62BC\u548C\u8D4E\u56DE\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1ASOL\u8D28\u62BC\u5386\u53F2, sol staking history, \u8D28\u62BC\u8BB0\u5F55, SOL\u8D4E\u56DE\u8BB0\u5F55\n## \u53C2\u6570\uFF1A\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_sol_staking_balance \u770B\u6301\u4ED3 \u2192 \u672C\u5DE5\u5177\u770B\u64CD\u4F5C\u5386\u53F2 \u2192 \u8BA1\u7B97\u6536\u76CA",
|
|
23635
|
+
{
|
|
23636
|
+
limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
|
|
23637
|
+
},
|
|
23638
|
+
async ({ limit }) => {
|
|
23639
|
+
if (!auth) return toError(AUTH_REQUIRED);
|
|
23640
|
+
try {
|
|
23641
|
+
const data = await privateApi.getSolStakingHistory(auth, limit);
|
|
23642
|
+
return toResult(data);
|
|
23643
|
+
} catch (e) {
|
|
23644
|
+
return toError(e);
|
|
23645
|
+
}
|
|
23646
|
+
}
|
|
23647
|
+
);
|
|
23446
23648
|
}
|
|
23447
23649
|
|
|
23448
23650
|
// src/tools/outcomes.ts
|
|
@@ -24059,7 +24261,7 @@ async function main() {
|
|
|
24059
24261
|
const server = new McpServer({ name: "hvip", version: "0.2.1" });
|
|
24060
24262
|
const auth = getAuth();
|
|
24061
24263
|
registerMarketTools(server);
|
|
24062
|
-
registerPublicTools(server);
|
|
24264
|
+
registerPublicTools(server, auth);
|
|
24063
24265
|
registerStatsTools(server);
|
|
24064
24266
|
registerSpreadTools(server);
|
|
24065
24267
|
registerOutcomesTools(server);
|