hvip-mcp-server 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +194 -2
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -21187,7 +21187,9 @@ var publicApi = {
21187
21187
  getSpreadCandles: (sprdId, bar, limit) => request("GET", "/api/v5/sprd/candles", { params: { sprdId, bar, limit } }),
21188
21188
  // ── 公告(公共) ──────────────────────────────────────────────────────────────
21189
21189
  getAnnouncements: (annType, lang) => request("GET", "/api/v5/support/announcements", { params: { annType, lang } }),
21190
- getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types")
21190
+ getAnnouncementTypes: () => request("GET", "/api/v5/support/announcement-types"),
21191
+ getUnderlying: (instType) => request("GET", "/api/v5/public/underlying", { params: { instType } }),
21192
+ getTakerFlow: (ccy, instType, begin, end) => request("GET", "/api/v5/rubik/stat/taker-flow", { params: { ccy, instType, begin, end } })
21191
21193
  };
21192
21194
  var privateApi = {
21193
21195
  getBalance: (auth, ccy) => request("GET", "/api/v5/account/balance", { params: { ccy }, auth }),
@@ -21211,6 +21213,11 @@ var privateApi = {
21211
21213
  batchOrders: (auth, body) => request("POST", "/api/v5/trade/batch-orders", { body, auth }),
21212
21214
  cancelBatchOrders: (auth, body) => request("POST", "/api/v5/trade/cancel-batch-orders", { body, auth }),
21213
21215
  closePosition: (auth, body) => request("POST", "/api/v5/trade/close-position", { body, auth }),
21216
+ amendBatchOrders: (auth, body) => request("POST", "/api/v5/trade/amend-batch-orders", { body, auth }),
21217
+ getFillsHistory: (auth, instType, instId, limit) => request("GET", "/api/v5/trade/fills-history", { params: { instType, instId, limit }, auth }),
21218
+ massCancel: (auth, instType, instFamily) => request("POST", "/api/v5/trade/mass-cancel", { body: { instType, instFamily }, auth }),
21219
+ getMaxLoan: (auth, instId, mgnMode) => request("GET", "/api/v5/account/max-loan", { params: { instId, mgnMode }, auth }),
21220
+ getInterestAccrued: (auth, instId, ccy, limit) => request("GET", "/api/v5/account/interest-accrued", { params: { instId, ccy, limit }, auth }),
21214
21221
  getOrdersPending: (auth, instType, instId, ordType) => request("GET", "/api/v5/trade/orders-pending", { params: { instType, instId, ordType }, auth }),
21215
21222
  getFills: (auth, instType, instId, limit) => request("GET", "/api/v5/trade/fills", { params: { instType, instId, limit }, auth }),
21216
21223
  getOrdersHistoryArchive: (auth, instType, limit) => request("GET", "/api/v5/trade/orders-history-archive", { params: { instType, limit }, auth }),
@@ -21790,6 +21797,58 @@ function registerPublicTools(server) {
21790
21797
  }
21791
21798
  }
21792
21799
  );
21800
+ server.tool(
21801
+ "okx_get_underlying",
21802
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2OKX\u652F\u6301\u7684\u6807\u7684\u6307\u6570\u5217\u8868
21803
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u83B7\u53D6\u53EF\u4EA4\u6613\u7684\u5E95\u5C42\u8D44\u4EA7\u5217\u8868\u3001\u7B5B\u9009\u7279\u5B9A\u7C7B\u578B\u7684\u5408\u7EA6\u6807\u7684
21804
+ ## \u5173\u952E\u8BCD\uFF1A\u6807\u7684\u6307\u6570, \u5E95\u5C42\u8D44\u4EA7, underlying, \u5408\u7EA6\u6807\u7684, \u6307\u6570\u5217\u8868
21805
+ ## \u53C2\u6570\uFF1A
21806
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8
21807
+ ## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
21808
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
21809
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
21810
+ ## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u83B7\u53D6\u6807\u7684 \u2192 okx_get_instruments \u67E5\u5177\u4F53\u4EA7\u54C1 \u2192 okx_get_ticker \u67E5\u884C\u60C5`,
21811
+ {
21812
+ instType: external_exports.enum(["SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
21813
+ },
21814
+ async ({ instType }) => {
21815
+ try {
21816
+ const data = await publicApi.getUnderlying(instType);
21817
+ return toResult(data);
21818
+ } catch (e) {
21819
+ return toError(e);
21820
+ }
21821
+ }
21822
+ );
21823
+ server.tool(
21824
+ "okx_get_taker_flow",
21825
+ `## \u529F\u80FD\uFF1A\u83B7\u53D6\u4E3B\u52A8\u4E70\u5356\u6210\u4EA4\u6570\u636E\uFF08Taker\u6D41\u91CF\uFF09
21826
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u5224\u65AD\u591A\u7A7A\u529B\u91CF\u5BF9\u6BD4\uFF08\u4E70\u5165Taker\u591A=\u591A\u5934\u5F3A\uFF09\u3001\u5206\u6790\u8D44\u91D1\u6D41\u5411\u8D8B\u52BF
21827
+ ## \u5173\u952E\u8BCD\uFF1A\u4E3B\u52A8\u6210\u4EA4, taker flow, \u4E70\u5356\u529B\u91CF, \u8D44\u91D1\u6D41\u5411, \u4E3B\u52A8\u4E70\u5356
21828
+ ## \u53C2\u6570\uFF1A
21829
+ ## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B
21830
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES\u3002\u53EF\u9009
21831
+ ## - begin: \u5F00\u59CB\u65F6\u95F4\u6233(ms)\u3002\u53EF\u9009
21832
+ ## - end: \u7ED3\u675F\u65F6\u95F4\u6233(ms)\u3002\u53EF\u9009
21833
+ ## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
21834
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
21835
+ ## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
21836
+ ## \u5173\u8054\uFF1Aokx_get_taker_volume \u67E5\u6210\u4EA4\u91CF \u2192 \u672C\u5DE5\u5177\u67E5Taker\u6D41\u5411 \u2192 \u5224\u65AD\u591A\u7A7A\u65B9\u5411`,
21837
+ {
21838
+ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B"),
21839
+ instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
21840
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233(ms)"),
21841
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233(ms)")
21842
+ },
21843
+ async ({ ccy, instType, begin, end }) => {
21844
+ try {
21845
+ const data = await publicApi.getTakerFlow(ccy, instType, begin, end);
21846
+ return toResult(data);
21847
+ } catch (e) {
21848
+ return toError(e);
21849
+ }
21850
+ }
21851
+ );
21793
21852
  }
21794
21853
 
21795
21854
  // src/tools/account.ts
@@ -22019,6 +22078,60 @@ function registerAccountTools(server, auth) {
22019
22078
  }
22020
22079
  }
22021
22080
  );
22081
+ server.tool(
22082
+ "okx_get_max_loan",
22083
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2\u67D0\u4EA7\u54C1\u7684\u6700\u5927\u53EF\u501F\u6570\u91CF
22084
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u6760\u6746\u4EA4\u6613\u524D\u5224\u65AD\u6700\u5927\u53EF\u501F\u989D\u5EA6\u3001\u8BA1\u7B97\u4FDD\u8BC1\u91D1\u4F7F\u7528\u7387
22085
+ ## \u5173\u952E\u8BCD\uFF1A\u6700\u5927\u53EF\u501F, \u501F\u6B3E\u4E0A\u9650, max loan, \u6760\u6746\u501F\u6B3E, \u53EF\u501F\u989D\u5EA6
22086
+ ## \u53C2\u6570\uFF1A
22087
+ ## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B
22088
+ ## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B
22089
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22090
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22091
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5355\u4EA7\u54C1 ~200B \u2014 \u5FAE\u5C0F
22092
+ ## \u5173\u8054\uFF1Aokx_get_max_size \u67E5\u53EF\u5F00\u6570\u91CF \u2192 \u672C\u5DE5\u5177\u67E5\u53EF\u501F\u989D\u5EA6 \u2192 okx_place_order \u4E0B\u5355`,
22093
+ {
22094
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B"),
22095
+ mgnMode: external_exports.enum(["cross", "isolated"]).describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3")
22096
+ },
22097
+ async ({ instId, mgnMode }) => {
22098
+ if (!auth) return toError(AUTH_REQUIRED);
22099
+ try {
22100
+ const data = await privateApi.getMaxLoan(auth, instId, mgnMode);
22101
+ return toResult(data);
22102
+ } catch (e) {
22103
+ return toError(e);
22104
+ }
22105
+ }
22106
+ );
22107
+ server.tool(
22108
+ "okx_get_interest_accrued",
22109
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2\u501F\u5E01\u5229\u606F\u7D2F\u8BA1\u660E\u7EC6
22110
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u8BA1\u7B97\u5F53\u524D\u501F\u5E01\u6210\u672C\u3001\u8BC4\u4F30\u6301\u4ED3\u5229\u606F\u8D1F\u62C5\u3001\u51B3\u5B9A\u662F\u5426\u63D0\u524D\u8FD8\u6B3E
22111
+ ## \u5173\u952E\u8BCD\uFF1A\u501F\u5E01\u5229\u606F, \u5229\u606F\u660E\u7EC6, interest accrued, \u501F\u6B3E\u6210\u672C, \u5229\u606F\u7D2F\u8BA1
22112
+ ## \u53C2\u6570\uFF1A
22113
+ ## - instId: \u4EA7\u54C1ID\uFF0C\u53EF\u9009
22114
+ ## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\u3002\u53EF\u9009
22115
+ ## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100
22116
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22117
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22118
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
22119
+ ## \u5173\u8054\uFF1Aokx_get_balance \u67E5\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u5229\u606F \u2192 \u8BA1\u7B97\u51C0\u6536\u76CA`,
22120
+ {
22121
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u53EF\u9009"),
22122
+ ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 USDT"),
22123
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22124
+ },
22125
+ async ({ instId, ccy, limit }) => {
22126
+ if (!auth) return toError(AUTH_REQUIRED);
22127
+ try {
22128
+ const data = await privateApi.getInterestAccrued(auth, instId, ccy, limit);
22129
+ return toResult(data);
22130
+ } catch (e) {
22131
+ return toError(e);
22132
+ }
22133
+ }
22134
+ );
22022
22135
  }
22023
22136
 
22024
22137
  // src/tools/trading.ts
@@ -22222,6 +22335,85 @@ function registerTradingTools(server, auth) {
22222
22335
  }
22223
22336
  }
22224
22337
  );
22338
+ server.tool(
22339
+ "okx_amend_batch_orders",
22340
+ `## \u529F\u80FD\uFF1A\u6279\u91CF\u4FEE\u6539\u672A\u6210\u4EA4\u8BA2\u5355
22341
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u540C\u65F6\u8C03\u6574\u591A\u4E2A\u9650\u4EF7\u5355\u7684\u4EF7\u683C\u6216\u6570\u91CF\u3001\u6279\u91CF\u66F4\u65B0\u6302\u5355\u7B56\u7565
22342
+ ## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u6539\u5355, \u6279\u91CF\u4FEE\u6539, amend batch orders, \u6279\u91CF\u6539\u4EF7, \u6279\u91CF\u8C03\u91CF
22343
+ ## \u53C2\u6570\uFF1A
22344
+ ## - orders: \u6539\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B instId/ordId/newSz/newPx\u3002\u6700\u591A20\u7B14
22345
+ ## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
22346
+ ## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
22347
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
22348
+ ## \u5173\u8054\uFF1Aokx_get_orders_pending \u67E5\u770B\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u6279\u91CF\u6539\u5355 \u2192 okx_get_order \u786E\u8BA4\u4FEE\u6539`,
22349
+ {
22350
+ orders: external_exports.string().describe(`\u6539\u5355\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '[{"instId":"BTC-USDT","ordId":"123","newPx":"62000"}]'\u3002\u6700\u591A20\u7B14`)
22351
+ },
22352
+ async ({ orders }) => {
22353
+ if (!auth) return toError(AUTH_REQUIRED);
22354
+ try {
22355
+ const parsed = JSON.parse(orders);
22356
+ const data = await privateApi.amendBatchOrders(auth, parsed);
22357
+ return toResult(data);
22358
+ } catch (e) {
22359
+ return toError(e);
22360
+ }
22361
+ }
22362
+ );
22363
+ server.tool(
22364
+ "okx_get_fills_history",
22365
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5386\u53F2\u6210\u4EA4\u660E\u7EC6\uFF08\u6700\u8FD13\u4E2A\u6708\uFF09
22366
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u7CBE\u786E\u8BA1\u7B97\u5386\u53F2\u6210\u4EA4\u5747\u4EF7\u3001\u590D\u76D8\u4EA4\u6613\u8868\u73B0\u3001\u6838\u5BF9\u6210\u4EA4\u8BB0\u5F55
22367
+ ## \u5173\u952E\u8BCD\uFF1A\u6210\u4EA4\u5386\u53F2, \u6210\u4EA4\u660E\u7EC6, fills history, \u5386\u53F2\u6210\u4EA4, \u9010\u7B14\u6210\u4EA4\u5386\u53F2
22368
+ ## \u53C2\u6570\uFF1A
22369
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002\u53EF\u9009
22370
+ ## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009
22371
+ ## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100
22372
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22373
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22374
+ ## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB
22375
+ ## \u5173\u8054\uFF1Aokx_get_fills \u67E5\u6700\u8FD1\u6210\u4EA4 \u2192 \u672C\u5DE5\u5177\u67E5\u5386\u53F2\u6210\u4EA4 \u2192 okx_get_orders_history \u5BF9\u8D26`,
22376
+ {
22377
+ instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
22378
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
22379
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22380
+ },
22381
+ async ({ instType, instId, limit }) => {
22382
+ if (!auth) return toError(AUTH_REQUIRED);
22383
+ try {
22384
+ const data = await privateApi.getFillsHistory(auth, instType, instId, limit);
22385
+ return toResult(data);
22386
+ } catch (e) {
22387
+ return toError(e);
22388
+ }
22389
+ }
22390
+ );
22391
+ server.tool(
22392
+ "okx_mass_cancel",
22393
+ `## \u529F\u80FD\uFF1A\u6279\u91CF\u64A4\u9500\u67D0\u4EA7\u54C1\u7C7B\u578B\u4E0B\u6240\u6709\u6302\u5355
22394
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u6781\u7AEF\u884C\u60C5\u4E0B\u7D27\u6025\u6E05\u7A7A\u6240\u6709\u6302\u5355\u3001\u5FEB\u901F\u91CD\u7F6E\u4EA4\u6613\u7B56\u7565
22395
+ ## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u64A4\u5355, \u5168\u90E8\u64A4\u5355, mass cancel, \u6E05\u7A7A\u6302\u5355, \u7D27\u6025\u64A4\u5355
22396
+ ## \u53C2\u6570\uFF1A
22397
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION\u3002\u5FC5\u586B
22398
+ ## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009\uFF08\u4EC5\u5408\u7EA6\u9700\u8981\uFF09
22399
+ ## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
22400
+ ## \u98CE\u9669\uFF1AWRITE \u2014 \u64A4\u9500\u6240\u6709\u6302\u5355\uFF0C\u5F71\u54CD\u8303\u56F4\u5927\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4
22401
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
22402
+ ## \u5173\u8054\uFF1Aokx_get_orders_pending \u786E\u8BA4\u6302\u5355 \u2192 \u672C\u5DE5\u5177\u5168\u90E8\u64A4\u9500 \u2192 okx_get_orders_history \u786E\u8BA4`,
22403
+ {
22404
+ instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
22405
+ instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u4EC5\u5408\u7EA6\u9700\u586B")
22406
+ },
22407
+ async ({ instType, instFamily }) => {
22408
+ if (!auth) return toError(AUTH_REQUIRED);
22409
+ try {
22410
+ const data = await privateApi.massCancel(auth, instType, instFamily);
22411
+ return toResult(data);
22412
+ } catch (e) {
22413
+ return toError(e);
22414
+ }
22415
+ }
22416
+ );
22225
22417
  }
22226
22418
 
22227
22419
  // src/tools/algo.ts
@@ -23225,7 +23417,7 @@ function registerSignalTools(server, auth) {
23225
23417
 
23226
23418
  // src/index.ts
23227
23419
  async function main() {
23228
- const server = new McpServer({ name: "hvip", version: "0.2.0" });
23420
+ const server = new McpServer({ name: "hvip", version: "0.2.1" });
23229
23421
  const auth = getAuth();
23230
23422
  registerMarketTools(server);
23231
23423
  registerPublicTools(server);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.0",
4
- "description": "OKX ecosystem MCP server full API coverage for AI agents",
3
+ "version": "0.2.1",
4
+ "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",
7
7
  "bin": {