hvip-mcp-server 0.1.4 → 0.1.6

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.
Files changed (2) hide show
  1. package/dist/index.js +421 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21161,7 +21161,27 @@ var publicApi = {
21161
21161
  getHistoryCandles: (instId, bar, after, before, limit) => request("GET", "/api/v5/market/history-candles", { params: { instId, bar, after, before, limit } }),
21162
21162
  getHistoryTrades: (instId, limit) => request("GET", "/api/v5/market/history-trades", { params: { instId, limit } }),
21163
21163
  getSystemStatus: () => request("GET", "/api/v5/system/status"),
21164
- getPriceLimitBatch: (instType, uly, instId) => request("GET", "/api/v5/public/price-limit", { params: { instType, uly, instId } })
21164
+ getPriceLimitBatch: (instType, uly, instId) => request("GET", "/api/v5/public/price-limit", { params: { instType, uly, instId } }),
21165
+ getOptSummary: (uly, expTime) => request("GET", "/api/v5/public/opt-summary", { params: { uly, expTime } }),
21166
+ getInsuranceFund: (instType, uly) => request("GET", "/api/v5/public/insurance-fund", { params: { instType, uly } }),
21167
+ convertContractCoin: (instId, sz, unit, opType) => request("GET", "/api/v5/public/convert-contract-coin", { params: { instId, sz, unit, opType } }),
21168
+ getSupportCoin: () => request("GET", "/api/v5/rubik/stat/trading-data/support-coin"),
21169
+ getTopTraderLongShortRatio: (instId, begin, end) => request("GET", "/api/v5/rubik/stat/contracts/long-short-account-ratio-contract-top-trader", { params: { instId, begin, end } }),
21170
+ getOptionPutCallRatio: (ccy, begin, end) => request("GET", "/api/v5/rubik/stat/option/open-interest-volume-ratio", { params: { ccy, begin, end } }),
21171
+ getLendingRateSummary: (ccy) => request("GET", "/api/v5/finance/savings/lending-rate-summary", { params: { ccy } }),
21172
+ // ── 网格交易机器人(公共) ────────────────────────────────────────────────────
21173
+ getGridAiParam: (instId, algoOrdType, direction) => request("GET", "/api/v5/tradingBot/grid/ai-param", { params: { instId, algoOrdType, direction } }),
21174
+ // ── 大宗交易行情(公共) ─────────────────────────────────────────────────────
21175
+ getBlockTickers: (instType) => request("GET", "/api/v5/market/block-tickers", { params: { instType } }),
21176
+ // ── 价差交易(公共) ──────────────────────────────────────────────────────────
21177
+ getSpreads: (sprdId, baseCcy, instId, state) => request("GET", "/api/v5/sprd/spreads", { params: { sprdId, baseCcy, instId, state } }),
21178
+ getSpreadTicker: (sprdId) => request("GET", "/api/v5/sprd/ticker", { params: { sprdId } }),
21179
+ getSpreadOrderbook: (sprdId, sz) => request("GET", "/api/v5/sprd/books", { params: { sprdId, sz } }),
21180
+ getSpreadTrades: (sprdId, limit) => request("GET", "/api/v5/sprd/trades", { params: { sprdId, limit } }),
21181
+ getSpreadCandles: (sprdId, bar, limit) => request("GET", "/api/v5/sprd/candles", { params: { sprdId, bar, limit } }),
21182
+ // ── 公告(公共) ──────────────────────────────────────────────────────────────
21183
+ getAnnouncements: (annType, lang) => request("GET", "/api/v5/support/announcements", { params: { annType, lang } }),
21184
+ getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types")
21165
21185
  };
21166
21186
  var privateApi = {
21167
21187
  getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
@@ -21185,6 +21205,16 @@ var privateApi = {
21185
21205
  getDepositAddress: (auth, ccy) => request("GET", "/api/v5/asset/deposit-address", { params: { ccy }, auth }),
21186
21206
  getDepositHistory: (auth, ccy, limit) => request("GET", "/api/v5/asset/deposit-history", { params: { ccy, limit }, auth }),
21187
21207
  getWithdrawalHistory: (auth, ccy, limit) => request("GET", "/api/v5/asset/withdrawal-history", { params: { ccy, limit }, auth }),
21208
+ getEthStakingBalance: (auth) => request("GET", "/api/v5/finance/staking-defi/eth/balance", { auth }),
21209
+ getEthStakingHistory: (auth, limit) => request("GET", "/api/v5/finance/staking-defi/eth/purchase-redeem-history", { params: { limit }, auth }),
21210
+ getSolStakingBalance: (auth) => request("GET", "/api/v5/finance/staking-defi/sol/balance", { auth }),
21211
+ // ── 网格交易机器人(私有) ────────────────────────────────────────────────────
21212
+ getGridOrdersPending: (auth, algoOrdType, instId, instType) => request("GET", "/api/v5/tradingBot/grid/orders-algo-pending", { params: { algoOrdType, instId, instType }, auth }),
21213
+ getGridOrdersHistory: (auth, algoOrdType, instId, instType) => request("GET", "/api/v5/tradingBot/grid/orders-algo-history", { params: { algoOrdType, instId, instType }, auth }),
21214
+ getGridSubOrders: (auth, algoId, algoOrdType, type, groupId) => request("GET", "/api/v5/tradingBot/grid/sub-orders", { params: { algoId, algoOrdType, type, groupId }, auth }),
21215
+ // ── 定投机器人(私有) ────────────────────────────────────────────────────────
21216
+ getRecurringOrdersPending: (auth) => request("GET", "/api/v5/tradingBot/recurring/orders-algo-pending", { auth }),
21217
+ getRecurringOrdersHistory: (auth) => request("GET", "/api/v5/tradingBot/recurring/orders-algo-history", { auth }),
21188
21218
  getAlgoOrders: (auth, ordType, instType) => request("GET", "/api/v5/trade/orders-algo-pending", { params: { ordType, instType }, auth }),
21189
21219
  getAlgoOrdersHistory: (auth, ordType, state, instType) => request("GET", "/api/v5/trade/orders-algo-history", { params: { ordType, state, instType }, auth }),
21190
21220
  placeAlgoOrder: (auth, body) => request("POST", "/api/v5/trade/order-algo", { body, auth }),
@@ -21410,6 +21440,21 @@ function registerMarketTools(server) {
21410
21440
  }
21411
21441
  }
21412
21442
  );
21443
+ server.tool(
21444
+ "okx_get_block_tickers",
21445
+ "\u83B7\u53D6\u5927\u5B97\u4EA4\u6613\uFF08Block Trading\uFF09\u5B9E\u65F6\u884C\u60C5\uFF0C\u542B\u6210\u4EA4\u91CF\u7EDF\u8BA1\u3002\u5927\u5B97\u4EA4\u6613\u4E13\u4E3A\u673A\u6784\u5927\u989D\u4EA4\u6613\u8BBE\u8BA1\uFF0C\u6210\u4EA4\u6570\u636E\u53CD\u6620\u673A\u6784\u8D44\u91D1\u52A8\u5411\u3002",
21446
+ {
21447
+ instType: external_exports.enum(["SPOT", "SWAP", "FUTURES", "OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B")
21448
+ },
21449
+ async ({ instType }) => {
21450
+ try {
21451
+ const data = await publicApi.getBlockTickers(instType);
21452
+ return toResult(data);
21453
+ } catch (e) {
21454
+ return toError(e);
21455
+ }
21456
+ }
21457
+ );
21413
21458
  }
21414
21459
 
21415
21460
  // src/tools/public.ts
@@ -21501,6 +21546,85 @@ function registerPublicTools(server) {
21501
21546
  }
21502
21547
  }
21503
21548
  );
21549
+ server.tool(
21550
+ "okx_get_opt_summary",
21551
+ "\u83B7\u53D6\u671F\u6743\u5E02\u573A\u6458\u8981\u6570\u636E\uFF0C\u542B\u5404\u5230\u671F\u65E5\u7684\u9690\u542B\u6CE2\u52A8\u7387\uFF08IV\uFF09\u3001\u672A\u5E73\u4ED3\u91CF\u548C\u6210\u4EA4\u91CF\u5206\u5E03\u3002\u7528\u4E8E\u671F\u6743\u4EA4\u6613\u524D\u7684\u6574\u4F53\u5E02\u573A\u626B\u63CF\u3002",
21552
+ {
21553
+ uly: external_exports.string().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD\u3001ETH-USD"),
21554
+ expTime: external_exports.string().optional().describe("\u5230\u671F\u65E5\u7B5B\u9009\uFF0C\u683C\u5F0F YYYYMMDD\uFF0C\u5982 20250101")
21555
+ },
21556
+ async ({ uly, expTime }) => {
21557
+ try {
21558
+ const data = await publicApi.getOptSummary(uly, expTime);
21559
+ return toResult(data);
21560
+ } catch (e) {
21561
+ return toError(e);
21562
+ }
21563
+ }
21564
+ );
21565
+ server.tool(
21566
+ "okx_get_insurance_fund",
21567
+ "\u83B7\u53D6OKX\u4FDD\u9669\u57FA\u91D1\u4F59\u989D\u53D8\u52A8\u5386\u53F2\u3002\u4FDD\u9669\u57FA\u91D1\u89C4\u6A21\u53CD\u6620\u4EA4\u6613\u6240\u62B5\u5FA1\u6781\u7AEF\u884C\u60C5\u7684\u80FD\u529B\uFF0C\u4E5F\u662F\u8861\u91CF\u5E73\u53F0\u98CE\u9669\u7684\u6307\u6807\u3002",
21568
+ {
21569
+ instType: external_exports.enum(["SWAP", "FUTURES", "OPTION", "MARGIN"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
21570
+ uly: external_exports.string().optional().describe("\u6807\u7684\u6307\u6570\uFF0C\u5982 BTC-USD\uFF08SWAP/FUTURES/OPTION\u5FC5\u586B\uFF09")
21571
+ },
21572
+ async ({ instType, uly }) => {
21573
+ try {
21574
+ const data = await publicApi.getInsuranceFund(instType, uly);
21575
+ return toResult(data);
21576
+ } catch (e) {
21577
+ return toError(e);
21578
+ }
21579
+ }
21580
+ );
21581
+ server.tool(
21582
+ "okx_convert_contract_coin",
21583
+ "\u5408\u7EA6\u5F20\u6570\u4E0E\u5E01\u6570\u4E92\u6362\u8BA1\u7B97\u3002\u4E0B\u5408\u7EA6\u5355\u65F6\u5148\u7528\u6B64\u63A5\u53E3\u6362\u7B97\u5F20\u6570\uFF0C\u907F\u514D\u6570\u91CF\u586B\u9519\u3002",
21584
+ {
21585
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP"),
21586
+ sz: external_exports.string().describe("\u6570\u91CF\uFF08\u5F20\u6570\u6216\u5E01\u6570\uFF0C\u53D6\u51B3\u4E8Eunit\uFF09"),
21587
+ unit: external_exports.enum(["coin", "usds", "contracts"]).describe("sz\u7684\u5355\u4F4D\uFF1Acoin=\u5E01\uFF0Ccontracts=\u5F20"),
21588
+ opType: external_exports.enum(["open", "close"]).describe("\u5F00\u4ED3\u6216\u5E73\u4ED3")
21589
+ },
21590
+ async ({ instId, sz, unit, opType }) => {
21591
+ try {
21592
+ const data = await publicApi.convertContractCoin(instId, sz, unit, opType);
21593
+ return toResult(data);
21594
+ } catch (e) {
21595
+ return toError(e);
21596
+ }
21597
+ }
21598
+ );
21599
+ server.tool(
21600
+ "okx_get_announcements",
21601
+ "\u83B7\u53D6OKX\u5B98\u65B9\u516C\u544A\u5217\u8868\uFF08\u7EF4\u62A4\u901A\u77E5\u3001\u65B0\u5E01\u4E0A\u7EBF\u3001\u6D3B\u52A8\u7B49\uFF09\u3002\u5B9A\u671F\u67E5\u8BE2\u53EF\u53CA\u65F6\u4E86\u89E3\u5E73\u53F0\u53D8\u5316\uFF0C\u63D0\u524D\u505A\u597D\u98CE\u9669\u51C6\u5907\u3002",
21602
+ {
21603
+ annType: external_exports.string().optional().describe("\u516C\u544A\u7C7B\u578BID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\u3002\u53EF\u5148\u8C03\u7528 okx_get_announcement_types \u67E5\u8BE2\u53EF\u7528\u7C7B\u578B"),
21604
+ lang: external_exports.enum(["zh-Hans", "en-US"]).optional().describe("\u8BED\u8A00\uFF0C\u9ED8\u8BA4\u4E2D\u6587")
21605
+ },
21606
+ async ({ annType, lang }) => {
21607
+ try {
21608
+ const data = await publicApi.getAnnouncements(annType, lang);
21609
+ return toResult(data);
21610
+ } catch (e) {
21611
+ return toError(e);
21612
+ }
21613
+ }
21614
+ );
21615
+ server.tool(
21616
+ "okx_get_announcement_types",
21617
+ "\u83B7\u53D6OKX\u516C\u544A\u5206\u7C7B\u5217\u8868\uFF08\u5982\u7EF4\u62A4\u901A\u77E5\u3001\u4E0A\u65B0\u516C\u544A\u3001\u6D3B\u52A8\u516C\u544A\u7B49\uFF09\u3002\u7528\u4E8E\u7B5B\u9009\u7279\u5B9A\u7C7B\u578B\u516C\u544A\u3002",
21618
+ {},
21619
+ async () => {
21620
+ try {
21621
+ const data = await publicApi.getAnnouncementTypes();
21622
+ return toResult(data);
21623
+ } catch (e) {
21624
+ return toError(e);
21625
+ }
21626
+ }
21627
+ );
21504
21628
  }
21505
21629
 
21506
21630
  // src/tools/account.ts
@@ -21973,6 +22097,66 @@ function registerStatsTools(server) {
21973
22097
  }
21974
22098
  }
21975
22099
  );
22100
+ server.tool(
22101
+ "okx_get_stats_support_coin",
22102
+ "\u83B7\u53D6\u4EA4\u6613\u5927\u6570\u636E\u6A21\u5757\u652F\u6301\u67E5\u8BE2\u7684\u6240\u6709\u5E01\u79CD\u5217\u8868\u3002\u5728\u8C03\u7528\u5176\u4ED6\u4EA4\u6613\u5927\u6570\u636E\u63A5\u53E3\u524D\uFF0C\u53EF\u5148\u67E5\u8BE2\u6B64\u63A5\u53E3\u786E\u8BA4\u5E01\u79CD\u53EF\u7528\u3002",
22103
+ {},
22104
+ async () => {
22105
+ try {
22106
+ const data = await publicApi.getSupportCoin();
22107
+ return toResult(data);
22108
+ } catch (e) {
22109
+ return toError(e);
22110
+ }
22111
+ }
22112
+ );
22113
+ server.tool(
22114
+ "okx_get_top_trader_long_short_ratio",
22115
+ "\u83B7\u53D6\u7CBE\u82F1\u4EA4\u6613\u5458\u591A\u7A7A\u6301\u4ED3\u6BD4\u4F8B\uFF08\u4EC5\u7EDF\u8BA1\u524D5%\u5927\u6237\uFF09\u3002\u5927\u6237\u7684\u4ED3\u4F4D\u6BD4\u6563\u6237\u66F4\u5177\u9884\u6D4B\u4EF7\u503C\uFF0C\u80CC\u79BB\u65F6\u5F80\u5F80\u662F\u9006\u52BF\u4FE1\u53F7\u3002",
22116
+ {
22117
+ instId: external_exports.string().describe("\u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT-SWAP\u3001ETH-USDT-SWAP"),
22118
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
22119
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
22120
+ },
22121
+ async ({ instId, begin, end }) => {
22122
+ try {
22123
+ const data = await publicApi.getTopTraderLongShortRatio(instId, begin, end);
22124
+ return toResult(data);
22125
+ } catch (e) {
22126
+ return toError(e);
22127
+ }
22128
+ }
22129
+ );
22130
+ server.tool(
22131
+ "okx_get_put_call_ratio",
22132
+ "\u83B7\u53D6\u671F\u6743Put/Call\u6BD4\uFF08\u672A\u5E73\u4ED3\u91CF\u548C\u6210\u4EA4\u91CF\uFF09\u3002Put/Call > 1 \u8868\u793A\u5E02\u573A\u504F\u5411\u770B\u8DCC\uFF0C\u662F\u8861\u91CF\u671F\u6743\u5E02\u573A\u60C5\u7EEA\u7684\u7ECF\u5178\u6307\u6807\u3002",
22133
+ {
22134
+ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001ETH"),
22135
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09"),
22136
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09")
22137
+ },
22138
+ async ({ ccy, begin, end }) => {
22139
+ try {
22140
+ const data = await publicApi.getOptionPutCallRatio(ccy, begin, end);
22141
+ return toResult(data);
22142
+ } catch (e) {
22143
+ return toError(e);
22144
+ }
22145
+ }
22146
+ );
22147
+ server.tool(
22148
+ "okx_get_lending_rate_summary",
22149
+ "\u83B7\u53D6\u6D3B\u671F\u501F\u5E01\u5F53\u524D\u5E02\u573A\u5229\u7387\u6C47\u603B\uFF08\u516C\u5F00\u6570\u636E\uFF0C\u65E0\u9700API Key\uFF09\u3002\u7528\u4E8E\u5224\u65AD\u501F\u8D37\u6210\u672C\uFF0C\u6216\u5BFB\u627E\u95F2\u7F6E\u8D44\u91D1\u7684\u6700\u4F18\u51FA\u501F\u5229\u7387\u3002",
22150
+ { ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3001USDT\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8") },
22151
+ async ({ ccy }) => {
22152
+ try {
22153
+ const data = await publicApi.getLendingRateSummary(ccy);
22154
+ return toResult(data);
22155
+ } catch (e) {
22156
+ return toError(e);
22157
+ }
22158
+ }
22159
+ );
21976
22160
  }
21977
22161
 
21978
22162
  // src/tools/subaccount.ts
@@ -22085,6 +22269,50 @@ function registerFinanceTools(server, auth) {
22085
22269
  }
22086
22270
  }
22087
22271
  );
22272
+ server.tool(
22273
+ "okx_get_eth_staking_balance",
22274
+ "\u67E5\u8BE2ETH\u8D28\u62BC\uFF08BETH\uFF09\u6301\u4ED3\u4F59\u989D\uFF0C\u542B\u8D28\u62BC\u603B\u91CF\u3001BETH\u6570\u91CF\u548C\u5F53\u524D\u5E74\u5316\u6536\u76CA\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22275
+ {},
22276
+ async () => {
22277
+ if (!auth) return toError(AUTH_REQUIRED);
22278
+ try {
22279
+ const data = await privateApi.getEthStakingBalance(auth);
22280
+ return toResult(data);
22281
+ } catch (e) {
22282
+ return toError(e);
22283
+ }
22284
+ }
22285
+ );
22286
+ server.tool(
22287
+ "okx_get_eth_staking_history",
22288
+ "\u67E5\u8BE2ETH\u8D28\u62BC/\u8D4E\u56DE\u5386\u53F2\u8BB0\u5F55\uFF0C\u542B\u64CD\u4F5C\u65F6\u95F4\u3001\u6570\u91CF\u548C\u72B6\u6001\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22289
+ {
22290
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22291
+ },
22292
+ async ({ limit }) => {
22293
+ if (!auth) return toError(AUTH_REQUIRED);
22294
+ try {
22295
+ const data = await privateApi.getEthStakingHistory(auth, limit);
22296
+ return toResult(data);
22297
+ } catch (e) {
22298
+ return toError(e);
22299
+ }
22300
+ }
22301
+ );
22302
+ server.tool(
22303
+ "okx_get_sol_staking_balance",
22304
+ "\u67E5\u8BE2SOL\u8D28\u62BC\u6301\u4ED3\u4F59\u989D\uFF0C\u542B\u8D28\u62BC\u603B\u91CF\u548C\u5F53\u524D\u5E74\u5316\u6536\u76CA\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22305
+ {},
22306
+ async () => {
22307
+ if (!auth) return toError(AUTH_REQUIRED);
22308
+ try {
22309
+ const data = await privateApi.getSolStakingBalance(auth);
22310
+ return toResult(data);
22311
+ } catch (e) {
22312
+ return toError(e);
22313
+ }
22314
+ }
22315
+ );
22088
22316
  }
22089
22317
 
22090
22318
  // src/tools/outcomes.ts
@@ -22201,17 +22429,208 @@ function registerOutcomesTools(server) {
22201
22429
  );
22202
22430
  }
22203
22431
 
22432
+ // src/tools/bot.ts
22433
+ function registerBotTools(server, auth) {
22434
+ server.tool(
22435
+ "okx_get_grid_ai_param",
22436
+ "\u83B7\u53D6OKX\u667A\u80FD\u7F51\u683C\u63A8\u8350\u53C2\u6570\uFF08\u65E0\u9700API Key\uFF09\u3002\u5305\u542B\u5EFA\u8BAE\u7684\u7F51\u683C\u4E0A\u4E0B\u754C\u3001\u683C\u6570\u3001\u9884\u671F\u5E74\u5316\u6536\u76CA\u3002\u5F00\u7F51\u683C\u524D\u5FEB\u901F\u8BC4\u4F30\u53C2\u6570\u5408\u7406\u6027\u3002",
22437
+ {
22438
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3001BTC-USDT-SWAP"),
22439
+ algoOrdType: external_exports.enum(["grid", "contract_grid", "moon_grid"]).describe("\u7F51\u683C\u7C7B\u578B\uFF1Agrid=\u73B0\u8D27\u7F51\u683C\uFF0Ccontract_grid=\u5408\u7EA6\u7F51\u683C\uFF0Cmoon_grid=\u5929\u5730\u7F51\u683C"),
22440
+ direction: external_exports.enum(["long", "short", "neutral"]).optional().describe("\u5408\u7EA6\u7F51\u683C\u65B9\u5411\uFF08\u4EC5contract_grid\u9700\u8981\uFF09")
22441
+ },
22442
+ async ({ instId, algoOrdType, direction }) => {
22443
+ try {
22444
+ const data = await publicApi.getGridAiParam(instId, algoOrdType, direction);
22445
+ return toResult(data);
22446
+ } catch (e) {
22447
+ return toError(e);
22448
+ }
22449
+ }
22450
+ );
22451
+ server.tool(
22452
+ "okx_get_grid_orders_pending",
22453
+ "\u67E5\u8BE2\u5F53\u524D\u8FD0\u884C\u4E2D\u7684\u7F51\u683C\u7B56\u7565\u5217\u8868\uFF0C\u542B\u6BCF\u4E2A\u7F51\u683C\u7684\u76C8\u4E8F\u3001\u6210\u4EA4\u6B21\u6570\u548C\u8D44\u91D1\u5360\u7528\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22454
+ {
22455
+ algoOrdType: external_exports.enum(["grid", "contract_grid", "moon_grid"]).describe("\u7F51\u683C\u7C7B\u578B"),
22456
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22457
+ instType: external_exports.enum(["SPOT", "MARGIN", "FUTURES", "SWAP"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009")
22458
+ },
22459
+ async ({ algoOrdType, instId, instType }) => {
22460
+ if (!auth) return toError(AUTH_REQUIRED);
22461
+ try {
22462
+ const data = await privateApi.getGridOrdersPending(auth, algoOrdType, instId, instType);
22463
+ return toResult(data);
22464
+ } catch (e) {
22465
+ return toError(e);
22466
+ }
22467
+ }
22468
+ );
22469
+ server.tool(
22470
+ "okx_get_grid_orders_history",
22471
+ "\u67E5\u8BE2\u5DF2\u505C\u6B62\u7684\u5386\u53F2\u7F51\u683C\u7B56\u7565\uFF0C\u542B\u6700\u7EC8\u76C8\u4E8F\u548C\u8FD0\u884C\u65F6\u957F\u3002\u7528\u4E8E\u8BC4\u4F30\u5386\u53F2\u7B56\u7565\u6548\u679C\uFF0C\u4F18\u5316\u4E0B\u6B21\u53C2\u6570\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22472
+ {
22473
+ algoOrdType: external_exports.enum(["grid", "contract_grid", "moon_grid"]).describe("\u7F51\u683C\u7C7B\u578B"),
22474
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8"),
22475
+ instType: external_exports.enum(["SPOT", "MARGIN", "FUTURES", "SWAP"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\u7B5B\u9009")
22476
+ },
22477
+ async ({ algoOrdType, instId, instType }) => {
22478
+ if (!auth) return toError(AUTH_REQUIRED);
22479
+ try {
22480
+ const data = await privateApi.getGridOrdersHistory(auth, algoOrdType, instId, instType);
22481
+ return toResult(data);
22482
+ } catch (e) {
22483
+ return toError(e);
22484
+ }
22485
+ }
22486
+ );
22487
+ server.tool(
22488
+ "okx_get_grid_sub_orders",
22489
+ "\u67E5\u8BE2\u67D0\u4E2A\u7F51\u683C\u7B56\u7565\u7684\u5B50\u8BA2\u5355\u5217\u8868\uFF08\u6BCF\u4E00\u683C\u7684\u4E70\u5356\u8BB0\u5F55\uFF09\u3002\u7528\u4E8E\u5206\u6790\u7F51\u683C\u6210\u4EA4\u60C5\u51B5\uFF0C\u9A8C\u8BC1\u7B56\u7565\u662F\u5426\u6309\u9884\u671F\u8FD0\u884C\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22490
+ {
22491
+ algoId: external_exports.string().describe("\u7F51\u683C\u7B56\u7565ID"),
22492
+ algoOrdType: external_exports.enum(["grid", "contract_grid", "moon_grid"]).describe("\u7F51\u683C\u7C7B\u578B"),
22493
+ type: external_exports.enum(["filled", "unfilled"]).describe("filled=\u5DF2\u6210\u4EA4\uFF0Cunfilled=\u672A\u6210\u4EA4")
22494
+ },
22495
+ async ({ algoId, algoOrdType, type }) => {
22496
+ if (!auth) return toError(AUTH_REQUIRED);
22497
+ try {
22498
+ const data = await privateApi.getGridSubOrders(auth, algoId, algoOrdType, type);
22499
+ return toResult(data);
22500
+ } catch (e) {
22501
+ return toError(e);
22502
+ }
22503
+ }
22504
+ );
22505
+ server.tool(
22506
+ "okx_get_recurring_orders_pending",
22507
+ "\u67E5\u8BE2\u5F53\u524D\u8FD0\u884C\u4E2D\u7684\u5B9A\u6295\u8BA1\u5212\u5217\u8868\uFF0C\u542B\u6295\u8D44\u5E01\u79CD\u3001\u5468\u671F\u3001\u5DF2\u6295\u603B\u989D\u548C\u5F53\u524D\u76C8\u4E8F\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22508
+ {},
22509
+ async () => {
22510
+ if (!auth) return toError(AUTH_REQUIRED);
22511
+ try {
22512
+ const data = await privateApi.getRecurringOrdersPending(auth);
22513
+ return toResult(data);
22514
+ } catch (e) {
22515
+ return toError(e);
22516
+ }
22517
+ }
22518
+ );
22519
+ server.tool(
22520
+ "okx_get_recurring_orders_history",
22521
+ "\u67E5\u8BE2\u5DF2\u7ED3\u675F\u7684\u5386\u53F2\u5B9A\u6295\u8BA1\u5212\uFF0C\u542B\u603B\u6295\u5165\u3001\u603B\u6536\u76CA\u548C\u5E74\u5316\u6536\u76CA\u7387\u3002\u7528\u4E8E\u8BC4\u4F30\u5B9A\u6295\u7B56\u7565\u957F\u671F\u6548\u679C\u3002\u26A0\uFE0F \u9700\u8981API Key\u9274\u6743\u3002",
22522
+ {},
22523
+ async () => {
22524
+ if (!auth) return toError(AUTH_REQUIRED);
22525
+ try {
22526
+ const data = await privateApi.getRecurringOrdersHistory(auth);
22527
+ return toResult(data);
22528
+ } catch (e) {
22529
+ return toError(e);
22530
+ }
22531
+ }
22532
+ );
22533
+ }
22534
+
22535
+ // src/tools/spread.ts
22536
+ function registerSpreadTools(server) {
22537
+ server.tool(
22538
+ "okx_get_spreads",
22539
+ "\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u4EA7\u54C1\u5217\u8868\u3002\u4EF7\u5DEE\u4EA4\u6613\u662F\u540C\u65F6\u4E70\u5165\u4E00\u4E2A\u5408\u7EA6\u3001\u5356\u51FA\u53E6\u4E00\u4E2A\u5408\u7EA6\uFF0C\u6355\u83B7\u4E24\u8005\u4EF7\u683C\u4E4B\u5DEE\uFF0C\u5E38\u7528\u4E8E\u8DE8\u671F\u5957\u5229\u3002",
22540
+ {
22541
+ sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID\uFF0C\u5982 BTC-USDT_BTC-USDT-SWAP"),
22542
+ baseCcy: external_exports.string().optional().describe("\u6807\u7684\u5E01\u79CD\uFF0C\u5982 BTC"),
22543
+ instId: external_exports.string().optional().describe("\u817F\u5408\u7EA6\u4EA7\u54C1ID\uFF0C\u7CBE\u786E\u7B5B\u9009"),
22544
+ state: external_exports.enum(["live", "expired", "suspend"]).optional().describe("\u5408\u7EA6\u72B6\u6001")
22545
+ },
22546
+ async ({ sprdId, baseCcy, instId, state }) => {
22547
+ try {
22548
+ const data = await publicApi.getSpreads(sprdId, baseCcy, instId, state);
22549
+ return toResult(data);
22550
+ } catch (e) {
22551
+ return toError(e);
22552
+ }
22553
+ }
22554
+ );
22555
+ server.tool(
22556
+ "okx_get_spread_ticker",
22557
+ "\u83B7\u53D6\u5355\u4E2A\u4EF7\u5DEE\u5408\u7EA6\u5B9E\u65F6\u884C\u60C5\uFF0C\u542B\u6700\u65B0\u4EF7\u3001\u4E70\u5356\u4EF7\u5DEE\u3002\u5148\u7528 okx_get_spreads \u67E5\u8BE2\u53EF\u7528\u7684\u4EF7\u5DEE\u5408\u7EA6ID\u3002",
22558
+ {
22559
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID\uFF0C\u5982 BTC-USD-SWAP_BTC-USD-260925")
22560
+ },
22561
+ async ({ sprdId }) => {
22562
+ try {
22563
+ const data = await publicApi.getSpreadTicker(sprdId);
22564
+ return toResult(data);
22565
+ } catch (e) {
22566
+ return toError(e);
22567
+ }
22568
+ }
22569
+ );
22570
+ server.tool(
22571
+ "okx_get_spread_orderbook",
22572
+ "\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u8BA2\u5355\u7C3F\u6DF1\u5EA6\u3002\u5206\u6790\u4E70\u5356\u53CC\u65B9\u6302\u5355\u5206\u5E03\uFF0C\u5224\u65AD\u4EF7\u5DEE\u5E02\u573A\u7684\u6D41\u52A8\u6027\u8D28\u91CF\u3002",
22573
+ {
22574
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID"),
22575
+ sz: external_exports.number().int().min(1).max(400).optional().describe("\u6DF1\u5EA6\u6863\u4F4D\uFF0C\u9ED8\u8BA420")
22576
+ },
22577
+ async ({ sprdId, sz }) => {
22578
+ try {
22579
+ const data = await publicApi.getSpreadOrderbook(sprdId, sz);
22580
+ return toResult(data);
22581
+ } catch (e) {
22582
+ return toError(e);
22583
+ }
22584
+ }
22585
+ );
22586
+ server.tool(
22587
+ "okx_get_spread_trades",
22588
+ "\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u6700\u65B0\u6210\u4EA4\u8BB0\u5F55\u3002\u7528\u4E8E\u5206\u6790\u5E02\u573A\u53C2\u4E0E\u8005\u5BF9\u5F53\u524D\u4EF7\u5DEE\u6C34\u5E73\u7684\u8BA4\u53EF\u5EA6\u3002",
22589
+ {
22590
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID"),
22591
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA420")
22592
+ },
22593
+ async ({ sprdId, limit }) => {
22594
+ try {
22595
+ const data = await publicApi.getSpreadTrades(sprdId, limit);
22596
+ return toResult(data);
22597
+ } catch (e) {
22598
+ return toError(e);
22599
+ }
22600
+ }
22601
+ );
22602
+ server.tool(
22603
+ "okx_get_spread_candles",
22604
+ "\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6K\u7EBF\u6570\u636E\u3002\u7528\u4E8E\u7814\u7A76\u4EF7\u5DEE\u5386\u53F2\u8D70\u52BF\uFF0C\u8BC6\u522B\u5747\u503C\u56DE\u5F52\u673A\u4F1A\u3002",
22605
+ {
22606
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID"),
22607
+ bar: external_exports.enum(["1m", "5m", "15m", "30m", "1H", "4H", "1D"]).optional().describe("K\u7EBF\u5468\u671F\uFF0C\u9ED8\u8BA41H"),
22608
+ limit: external_exports.number().int().min(1).max(300).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22609
+ },
22610
+ async ({ sprdId, bar, limit }) => {
22611
+ try {
22612
+ const data = await publicApi.getSpreadCandles(sprdId, bar, limit);
22613
+ return toResult(data);
22614
+ } catch (e) {
22615
+ return toError(e);
22616
+ }
22617
+ }
22618
+ );
22619
+ }
22620
+
22204
22621
  // src/index.ts
22205
22622
  async function main() {
22206
- const server = new McpServer({ name: "hvip", version: "0.1.0" });
22623
+ const server = new McpServer({ name: "hvip", version: "0.1.5" });
22207
22624
  const auth = getAuth();
22208
22625
  registerMarketTools(server);
22209
22626
  registerPublicTools(server);
22210
22627
  registerStatsTools(server);
22628
+ registerSpreadTools(server);
22211
22629
  registerOutcomesTools(server);
22212
22630
  registerAccountTools(server, auth);
22213
22631
  registerTradingTools(server, auth);
22214
22632
  registerAlgoTools(server, auth);
22633
+ registerBotTools(server, auth);
22215
22634
  registerFundingTools(server, auth);
22216
22635
  registerSubAccountTools(server, auth);
22217
22636
  registerFinanceTools(server, auth);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "OKX ecosystem MCP server — full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",