hvip-mcp-server 0.2.8 → 0.2.10
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 +109 -15
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -21378,12 +21378,21 @@ function toError(e) {
|
|
|
21378
21378
|
function registerMarketTools(server) {
|
|
21379
21379
|
server.tool(
|
|
21380
21380
|
"okx_get_ticker",
|
|
21381
|
-
"\u83B7\u53D6\u5355\
|
|
21382
|
-
{ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3001ETH-USDT-SWAP") },
|
|
21381
|
+
"\u83B7\u53D6\u5355\u4E2A\u6216\u591A\u4E2A\u4EA7\u54C1\u7684\u5B9E\u65F6\u884C\u60C5Ticker\uFF0C\u5305\u542B\u6700\u65B0\u4EF7\u3001\u4E70\u4E00\u4EF7\u3001\u5356\u4E00\u4EF7\u300124h\u6210\u4EA4\u91CF\u7B49\u3002\u652F\u6301\u9017\u53F7\u5206\u9694\u591A\u4EA7\u54C1\u6279\u91CF\u67E5\u8BE2\uFF08\u5982 BTC-USDT,ETH-USDT,SOL-USDT\uFF09\u3002",
|
|
21382
|
+
{ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3001ETH-USDT-SWAP\u3002\u652F\u6301\u9017\u53F7\u5206\u9694\u6279\u91CF\u67E5\u8BE2\uFF0C\u5982 BTC-USDT,ETH-USDT,SOL-USDT") },
|
|
21383
21383
|
async ({ instId }) => {
|
|
21384
21384
|
try {
|
|
21385
|
-
const
|
|
21386
|
-
|
|
21385
|
+
const ids = instId.split(",").map((s) => s.trim()).filter(Boolean);
|
|
21386
|
+
const allData = [];
|
|
21387
|
+
for (const id of ids) {
|
|
21388
|
+
const data = await publicApi.getTicker(id);
|
|
21389
|
+
const enriched = data.map((item) => ({
|
|
21390
|
+
...item,
|
|
21391
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21392
|
+
}));
|
|
21393
|
+
allData.push(...enriched);
|
|
21394
|
+
}
|
|
21395
|
+
return toResult(allData);
|
|
21387
21396
|
} catch (e) {
|
|
21388
21397
|
return toError(e);
|
|
21389
21398
|
}
|
|
@@ -21396,7 +21405,10 @@ function registerMarketTools(server) {
|
|
|
21396
21405
|
async ({ instType }) => {
|
|
21397
21406
|
try {
|
|
21398
21407
|
const data = await publicApi.getTickers(instType);
|
|
21399
|
-
const arr = data
|
|
21408
|
+
const arr = data.map((item) => ({
|
|
21409
|
+
...item,
|
|
21410
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21411
|
+
}));
|
|
21400
21412
|
const top = arr.length > 20 ? arr.slice(0, 20) : arr;
|
|
21401
21413
|
return toResult({ total: arr.length, returned: top.length, data: top });
|
|
21402
21414
|
} catch (e) {
|
|
@@ -21457,7 +21469,11 @@ function registerMarketTools(server) {
|
|
|
21457
21469
|
async ({ instId, limit }) => {
|
|
21458
21470
|
try {
|
|
21459
21471
|
const data = await publicApi.getTrades(instId, limit);
|
|
21460
|
-
|
|
21472
|
+
const enriched = data.map((item) => ({
|
|
21473
|
+
...item,
|
|
21474
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21475
|
+
}));
|
|
21476
|
+
return toResult(enriched);
|
|
21461
21477
|
} catch (e) {
|
|
21462
21478
|
return toError(e);
|
|
21463
21479
|
}
|
|
@@ -21502,7 +21518,11 @@ function registerMarketTools(server) {
|
|
|
21502
21518
|
async ({ instId, limit }) => {
|
|
21503
21519
|
try {
|
|
21504
21520
|
const data = await publicApi.getHistoryTrades(instId, limit);
|
|
21505
|
-
|
|
21521
|
+
const enriched = data.map((item) => ({
|
|
21522
|
+
...item,
|
|
21523
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21524
|
+
}));
|
|
21525
|
+
return toResult(enriched);
|
|
21506
21526
|
} catch (e) {
|
|
21507
21527
|
return toError(e);
|
|
21508
21528
|
}
|
|
@@ -21530,7 +21550,10 @@ function registerMarketTools(server) {
|
|
|
21530
21550
|
async ({ instType }) => {
|
|
21531
21551
|
try {
|
|
21532
21552
|
const data = await publicApi.getBlockTickers(instType);
|
|
21533
|
-
const arr = data
|
|
21553
|
+
const arr = data.map((item) => ({
|
|
21554
|
+
...item,
|
|
21555
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21556
|
+
}));
|
|
21534
21557
|
const top = arr.length > 20 ? arr.slice(0, 20) : arr;
|
|
21535
21558
|
return toResult({ total: arr.length, returned: top.length, data: top });
|
|
21536
21559
|
} catch (e) {
|
|
@@ -21567,7 +21590,13 @@ function registerPublicTools(server) {
|
|
|
21567
21590
|
async ({ instId }) => {
|
|
21568
21591
|
try {
|
|
21569
21592
|
const data = await publicApi.getFundingRate(instId);
|
|
21570
|
-
|
|
21593
|
+
const enriched = data.map((item) => ({
|
|
21594
|
+
...item,
|
|
21595
|
+
fundingTimeIso: item.fundingTime ? new Date(parseInt(item.fundingTime)).toISOString() : void 0,
|
|
21596
|
+
nextFundingTimeIso: item.nextFundingTime ? new Date(parseInt(item.nextFundingTime)).toISOString() : void 0,
|
|
21597
|
+
tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
|
|
21598
|
+
}));
|
|
21599
|
+
return toResult(enriched);
|
|
21571
21600
|
} catch (e) {
|
|
21572
21601
|
return toError(e);
|
|
21573
21602
|
}
|
|
@@ -21808,6 +21837,32 @@ function registerPublicTools(server) {
|
|
|
21808
21837
|
}
|
|
21809
21838
|
}
|
|
21810
21839
|
);
|
|
21840
|
+
server.tool(
|
|
21841
|
+
"okx_search_instruments",
|
|
21842
|
+
"## \u529F\u80FD\uFF1A\u6309\u5173\u952E\u8BCD\u641C\u7D22\u53EF\u4EA4\u6613\u4EA7\u54C1\uFF08\u73B0\u8D27/\u5408\u7EA6/\u671F\u6743\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u7528\u6237\u8F93\u5165\u4EA7\u54C1\u540D\u79F0\u6A21\u7CCA\u67E5\u627E instId\u3001\u53D1\u73B0\u65B0\u4EA7\u54C1\u3001\u786E\u8BA4\u67D0\u5E01\u79CD\u6709\u54EA\u4E9B\u53EF\u4EA4\u6613\u4EA7\u54C1\n## \u5173\u952E\u8BCD\uFF1A\u641C\u7D22, \u67E5\u627E\u4EA7\u54C1, search instruments, \u4EA7\u54C1\u641C\u7D22, \u6A21\u7CCA\u67E5\u8BE2, \u5E01\u79CD\u641C\u7D22, find instrument\n## \u53C2\u6570\uFF1A\n## - keyword: \u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u5982 BTC\u3001ETH\u3001SOL\u3002\u5FC5\u586B\uFF0C\u6700\u5C112\u5B57\u7B26\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009\u3002\u4E0D\u586B\u5219\u641C\u7D22\u5168\u90E8\u7C7B\u578B\n## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB \u2014 \u6700\u591A\u8FD4\u56DE top 20 \u5339\u914D\u7ED3\u679C\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u641C\u7D22\u4EA7\u54C1 \u2192 okx_get_ticker \u67E5\u884C\u60C5 \u2192 okx_place_order \u4E0B\u5355",
|
|
21843
|
+
{
|
|
21844
|
+
keyword: external_exports.string().min(2).describe("\u641C\u7D22\u5173\u952E\u8BCD\uFF0C\u5982 BTC\u3001ETH\u3001SOL\u3002\u6700\u5C112\u4E2A\u5B57\u7B26"),
|
|
21845
|
+
instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009\uFF0C\u4E0D\u586B\u641C\u7D22\u5168\u90E8")
|
|
21846
|
+
},
|
|
21847
|
+
async ({ keyword, instType }) => {
|
|
21848
|
+
try {
|
|
21849
|
+
const types = instType ? [instType] : ["SPOT", "SWAP", "FUTURES", "OPTION"];
|
|
21850
|
+
const allResults = [];
|
|
21851
|
+
for (const t of types) {
|
|
21852
|
+
const data = await publicApi.getInstruments(t);
|
|
21853
|
+
const kw = keyword.toUpperCase();
|
|
21854
|
+
const matches = data.filter(
|
|
21855
|
+
(item) => item.instId?.toUpperCase().includes(kw) || item.baseCcy?.toUpperCase().includes(kw) || item.uly?.toUpperCase().includes(kw) || item.quoteCcy?.toUpperCase().includes(kw)
|
|
21856
|
+
);
|
|
21857
|
+
allResults.push(...matches);
|
|
21858
|
+
}
|
|
21859
|
+
const top = allResults.slice(0, 20);
|
|
21860
|
+
return toResult({ keyword, total: allResults.length, returned: top.length, data: top });
|
|
21861
|
+
} catch (e) {
|
|
21862
|
+
return toError(e);
|
|
21863
|
+
}
|
|
21864
|
+
}
|
|
21865
|
+
);
|
|
21811
21866
|
}
|
|
21812
21867
|
|
|
21813
21868
|
// src/tools/account.ts
|
|
@@ -22905,7 +22960,7 @@ function registerOutcomesTools(server) {
|
|
|
22905
22960
|
},
|
|
22906
22961
|
async ({ pageSize, search, includeMarkets }) => {
|
|
22907
22962
|
const client = getHRailsClient();
|
|
22908
|
-
if (!client) return toError("\u672A\u914D\u7F6E HRAILS_API_KEY"
|
|
22963
|
+
if (!client) return toError(new Error("\u672A\u914D\u7F6E HRAILS_API_KEY"));
|
|
22909
22964
|
try {
|
|
22910
22965
|
const params = {};
|
|
22911
22966
|
if (pageSize !== void 0) params.pageSize = pageSize;
|
|
@@ -22924,7 +22979,7 @@ function registerOutcomesTools(server) {
|
|
|
22924
22979
|
{ eventId: external_exports.string().describe("\u4E8B\u4EF6ID") },
|
|
22925
22980
|
async ({ eventId }) => {
|
|
22926
22981
|
const client = getHRailsClient();
|
|
22927
|
-
if (!client) return toError("\u672A\u914D\u7F6E HRAILS_API_KEY"
|
|
22982
|
+
if (!client) return toError(new Error("\u672A\u914D\u7F6E HRAILS_API_KEY"));
|
|
22928
22983
|
try {
|
|
22929
22984
|
const data = await client.getEvent(eventId);
|
|
22930
22985
|
return toResult(data);
|
|
@@ -22939,7 +22994,7 @@ function registerOutcomesTools(server) {
|
|
|
22939
22994
|
{ marketId: external_exports.string().describe("\u5E02\u573AID") },
|
|
22940
22995
|
async ({ marketId }) => {
|
|
22941
22996
|
const client = getHRailsClient();
|
|
22942
|
-
if (!client) return toError("\u672A\u914D\u7F6E HRAILS_API_KEY"
|
|
22997
|
+
if (!client) return toError(new Error("\u672A\u914D\u7F6E HRAILS_API_KEY"));
|
|
22943
22998
|
try {
|
|
22944
22999
|
const data = await client.getMarket(marketId);
|
|
22945
23000
|
return toResult(data);
|
|
@@ -22957,7 +23012,7 @@ function registerOutcomesTools(server) {
|
|
|
22957
23012
|
},
|
|
22958
23013
|
async ({ marketId, outcome }) => {
|
|
22959
23014
|
const client = getHRailsClient();
|
|
22960
|
-
if (!client) return toError("\u672A\u914D\u7F6E HRAILS_API_KEY"
|
|
23015
|
+
if (!client) return toError(new Error("\u672A\u914D\u7F6E HRAILS_API_KEY"));
|
|
22961
23016
|
try {
|
|
22962
23017
|
const data = await client.getTicker(marketId, outcome);
|
|
22963
23018
|
return toResult(data);
|
|
@@ -22976,7 +23031,7 @@ function registerOutcomesTools(server) {
|
|
|
22976
23031
|
},
|
|
22977
23032
|
async ({ marketId, outcome, size }) => {
|
|
22978
23033
|
const client = getHRailsClient();
|
|
22979
|
-
if (!client) return toError("\u672A\u914D\u7F6E HRAILS_API_KEY"
|
|
23034
|
+
if (!client) return toError(new Error("\u672A\u914D\u7F6E HRAILS_API_KEY"));
|
|
22980
23035
|
try {
|
|
22981
23036
|
const data = await client.getOrderbook(marketId, outcome, size);
|
|
22982
23037
|
return toResult(data);
|
|
@@ -22996,7 +23051,7 @@ function registerOutcomesTools(server) {
|
|
|
22996
23051
|
},
|
|
22997
23052
|
async ({ marketId, outcome, bar, limit }) => {
|
|
22998
23053
|
const client = getHRailsClient();
|
|
22999
|
-
if (!client) return toError("\u672A\u914D\u7F6E HRAILS_API_KEY"
|
|
23054
|
+
if (!client) return toError(new Error("\u672A\u914D\u7F6E HRAILS_API_KEY"));
|
|
23000
23055
|
try {
|
|
23001
23056
|
const data = await client.getCandles(marketId, outcome, bar, limit);
|
|
23002
23057
|
return toResult(data);
|
|
@@ -23005,6 +23060,45 @@ function registerOutcomesTools(server) {
|
|
|
23005
23060
|
}
|
|
23006
23061
|
}
|
|
23007
23062
|
);
|
|
23063
|
+
server.tool(
|
|
23064
|
+
"outcomes_check_arbitrage",
|
|
23065
|
+
"## \u529F\u80FD\uFF1A\u68C0\u6D4B\u9884\u6D4B\u5E02\u573A\u65E0\u98CE\u9669\u5957\u5229\u673A\u4F1A\uFF08YES+NO\u4E70\u4EF7\u4E4B\u548C < 1.0\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u81EA\u52A8\u626B\u63CF\u5957\u5229\u7A97\u53E3\u3001\u4F4E\u98CE\u9669\u5957\u5229\u51B3\u7B56\u53C2\u8003\n## \u5173\u952E\u8BCD\uFF1A\u5957\u5229, \u9884\u6D4B\u5E02\u573A\u5957\u5229, arbitrage, \u65E0\u98CE\u9669\u5957\u5229, YES+NO, \u53CC\u8FB9\u5957\u5229\n## \u53C2\u6570\uFF1A\n## - marketId: \u5E02\u573AID\uFF0C\u5FC5\u586B\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 HRAILS API Key\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u68C0\u6D4B\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u5148\u8C03 outcomes_get_market \u83B7\u53D6\u5E02\u573A \u2192 \u672C\u5DE5\u5177\u68C0\u6D4B\u5957\u5229 \u2192 \u624B\u52A8\u4E0B\u5355",
|
|
23066
|
+
{
|
|
23067
|
+
marketId: external_exports.string().describe("\u5E02\u573AID\uFF0C\u5FC5\u586B")
|
|
23068
|
+
},
|
|
23069
|
+
async ({ marketId }) => {
|
|
23070
|
+
const client = getHRailsClient();
|
|
23071
|
+
if (!client) return toError(new Error("\u672A\u914D\u7F6E HRAILS_API_KEY"));
|
|
23072
|
+
try {
|
|
23073
|
+
const [yesData, noData] = await Promise.all([
|
|
23074
|
+
client.getTicker(marketId, "YES"),
|
|
23075
|
+
client.getTicker(marketId, "NO")
|
|
23076
|
+
]);
|
|
23077
|
+
const yd = yesData;
|
|
23078
|
+
const nd = noData;
|
|
23079
|
+
const yesAsk = parseFloat(yd?.bestAsk ?? yd?.ask ?? "0");
|
|
23080
|
+
const noAsk = parseFloat(nd?.bestAsk ?? nd?.ask ?? "0");
|
|
23081
|
+
const yesBid = parseFloat(yd?.bestBid ?? yd?.bid ?? "0");
|
|
23082
|
+
const noBid = parseFloat(nd?.bestBid ?? nd?.bid ?? "0");
|
|
23083
|
+
const askSum = yesAsk + noAsk;
|
|
23084
|
+
const bidSum = yesBid + noBid;
|
|
23085
|
+
const hasArbitrage = askSum > 0 && askSum < 1;
|
|
23086
|
+
return toResult({
|
|
23087
|
+
marketId,
|
|
23088
|
+
yesAsk,
|
|
23089
|
+
noAsk,
|
|
23090
|
+
askSum: askSum.toFixed(6),
|
|
23091
|
+
hasArbitrage,
|
|
23092
|
+
arbitrageReturn: hasArbitrage ? ((1 - askSum) / askSum * 100).toFixed(4) + "%" : "\u65E0",
|
|
23093
|
+
tip: hasArbitrage ? `\u540C\u65F6\u4E70\u5165 YES@${yesAsk} + NO@${noAsk}\uFF0C\u6210\u672C=${askSum.toFixed(6)}\uFF0C\u5230\u671F\u4EF7\u503C=1.0\uFF0C\u65E0\u98CE\u9669\u6536\u76CA=${(1 - askSum).toFixed(6)} (${((1 - askSum) / askSum * 100).toFixed(2)}%)` : "\u5F53\u524D\u65E0\u5957\u5229\u673A\u4F1A\uFF08YES\u4E70\u4EF7+NO\u4E70\u4EF7 \u2265 1.0\uFF09",
|
|
23094
|
+
bidSum: bidSum.toFixed(6),
|
|
23095
|
+
spread: (askSum - bidSum).toFixed(6)
|
|
23096
|
+
});
|
|
23097
|
+
} catch (e) {
|
|
23098
|
+
return toError(e);
|
|
23099
|
+
}
|
|
23100
|
+
}
|
|
23101
|
+
);
|
|
23008
23102
|
}
|
|
23009
23103
|
|
|
23010
23104
|
// src/tools/bot.ts
|