hvip-mcp-server 0.2.0 → 0.2.2

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 +259 -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,12 @@ 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 }),
21221
+ getMarginBalance: (auth, instId, mgnMode) => request("GET", "/api/v5/account/margin-balance", { params: { instId, mgnMode }, auth }),
21214
21222
  getOrdersPending: (auth, instType, instId, ordType) => request("GET", "/api/v5/trade/orders-pending", { params: { instType, instId, ordType }, auth }),
21215
21223
  getFills: (auth, instType, instId, limit) => request("GET", "/api/v5/trade/fills", { params: { instType, instId, limit }, auth }),
21216
21224
  getOrdersHistoryArchive: (auth, instType, limit) => request("GET", "/api/v5/trade/orders-history-archive", { params: { instType, limit }, auth }),
@@ -21790,6 +21798,58 @@ function registerPublicTools(server) {
21790
21798
  }
21791
21799
  }
21792
21800
  );
21801
+ server.tool(
21802
+ "okx_get_underlying",
21803
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2OKX\u652F\u6301\u7684\u6807\u7684\u6307\u6570\u5217\u8868
21804
+ ## \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
21805
+ ## \u5173\u952E\u8BCD\uFF1A\u6807\u7684\u6307\u6570, \u5E95\u5C42\u8D44\u4EA7, underlying, \u5408\u7EA6\u6807\u7684, \u6307\u6570\u5217\u8868
21806
+ ## \u53C2\u6570\uFF1A
21807
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES/OPTION\u3002\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8
21808
+ ## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
21809
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
21810
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
21811
+ ## \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`,
21812
+ {
21813
+ instType: external_exports.enum(["SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8")
21814
+ },
21815
+ async ({ instType }) => {
21816
+ try {
21817
+ const data = await publicApi.getUnderlying(instType);
21818
+ return toResult(data);
21819
+ } catch (e) {
21820
+ return toError(e);
21821
+ }
21822
+ }
21823
+ );
21824
+ server.tool(
21825
+ "okx_get_taker_flow",
21826
+ `## \u529F\u80FD\uFF1A\u83B7\u53D6\u4E3B\u52A8\u4E70\u5356\u6210\u4EA4\u6570\u636E\uFF08Taker\u6D41\u91CF\uFF09
21827
+ ## \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
21828
+ ## \u5173\u952E\u8BCD\uFF1A\u4E3B\u52A8\u6210\u4EA4, taker flow, \u4E70\u5356\u529B\u91CF, \u8D44\u91D1\u6D41\u5411, \u4E3B\u52A8\u4E70\u5356
21829
+ ## \u53C2\u6570\uFF1A
21830
+ ## - ccy: \u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B
21831
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES\u3002\u53EF\u9009
21832
+ ## - begin: \u5F00\u59CB\u65F6\u95F4\u6233(ms)\u3002\u53EF\u9009
21833
+ ## - end: \u7ED3\u675F\u65F6\u95F4\u6233(ms)\u3002\u53EF\u9009
21834
+ ## \u9274\u6743\uFF1APUBLIC \u2014 \u516C\u5F00\u63A5\u53E3\uFF0C\u4E0D\u9700\u8981 API Key
21835
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
21836
+ ## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB
21837
+ ## \u5173\u8054\uFF1Aokx_get_taker_volume \u67E5\u6210\u4EA4\u91CF \u2192 \u672C\u5DE5\u5177\u67E5Taker\u6D41\u5411 \u2192 \u5224\u65AD\u591A\u7A7A\u65B9\u5411`,
21838
+ {
21839
+ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 BTC\u3002\u5FC5\u586B"),
21840
+ instType: external_exports.enum(["SWAP", "FUTURES"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
21841
+ begin: external_exports.string().optional().describe("\u5F00\u59CB\u65F6\u95F4\u6233(ms)"),
21842
+ end: external_exports.string().optional().describe("\u7ED3\u675F\u65F6\u95F4\u6233(ms)")
21843
+ },
21844
+ async ({ ccy, instType, begin, end }) => {
21845
+ try {
21846
+ const data = await publicApi.getTakerFlow(ccy, instType, begin, end);
21847
+ return toResult(data);
21848
+ } catch (e) {
21849
+ return toError(e);
21850
+ }
21851
+ }
21852
+ );
21793
21853
  }
21794
21854
 
21795
21855
  // src/tools/account.ts
@@ -22019,6 +22079,86 @@ function registerAccountTools(server, auth) {
22019
22079
  }
22020
22080
  }
22021
22081
  );
22082
+ server.tool(
22083
+ "okx_get_max_loan",
22084
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2\u67D0\u4EA7\u54C1\u7684\u6700\u5927\u53EF\u501F\u6570\u91CF
22085
+ ## \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
22086
+ ## \u5173\u952E\u8BCD\uFF1A\u6700\u5927\u53EF\u501F, \u501F\u6B3E\u4E0A\u9650, max loan, \u6760\u6746\u501F\u6B3E, \u53EF\u501F\u989D\u5EA6
22087
+ ## \u53C2\u6570\uFF1A
22088
+ ## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B
22089
+ ## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B
22090
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22091
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22092
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5355\u4EA7\u54C1 ~200B \u2014 \u5FAE\u5C0F
22093
+ ## \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`,
22094
+ {
22095
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B"),
22096
+ mgnMode: external_exports.enum(["cross", "isolated"]).describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3")
22097
+ },
22098
+ async ({ instId, mgnMode }) => {
22099
+ if (!auth) return toError(AUTH_REQUIRED);
22100
+ try {
22101
+ const data = await privateApi.getMaxLoan(auth, instId, mgnMode);
22102
+ return toResult(data);
22103
+ } catch (e) {
22104
+ return toError(e);
22105
+ }
22106
+ }
22107
+ );
22108
+ server.tool(
22109
+ "okx_get_interest_accrued",
22110
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2\u501F\u5E01\u5229\u606F\u7D2F\u8BA1\u660E\u7EC6
22111
+ ## \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
22112
+ ## \u5173\u952E\u8BCD\uFF1A\u501F\u5E01\u5229\u606F, \u5229\u606F\u660E\u7EC6, interest accrued, \u501F\u6B3E\u6210\u672C, \u5229\u606F\u7D2F\u8BA1
22113
+ ## \u53C2\u6570\uFF1A
22114
+ ## - instId: \u4EA7\u54C1ID\uFF0C\u53EF\u9009
22115
+ ## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\u3002\u53EF\u9009
22116
+ ## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100
22117
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22118
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22119
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
22120
+ ## \u5173\u8054\uFF1Aokx_get_balance \u67E5\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u5229\u606F \u2192 \u8BA1\u7B97\u51C0\u6536\u76CA`,
22121
+ {
22122
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u53EF\u9009"),
22123
+ ccy: external_exports.string().optional().describe("\u5E01\u79CD\uFF0C\u5982 USDT"),
22124
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22125
+ },
22126
+ async ({ instId, ccy, limit }) => {
22127
+ if (!auth) return toError(AUTH_REQUIRED);
22128
+ try {
22129
+ const data = await privateApi.getInterestAccrued(auth, instId, ccy, limit);
22130
+ return toResult(data);
22131
+ } catch (e) {
22132
+ return toError(e);
22133
+ }
22134
+ }
22135
+ );
22136
+ server.tool(
22137
+ "okx_get_margin_balance",
22138
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2\u67D0\u4EA7\u54C1\u7684\u4FDD\u8BC1\u91D1\u4F59\u989D\u8BE6\u60C5
22139
+ ## \u573A\u666F\uFF1A\u7528\u4E8E\u6760\u6746/\u5408\u7EA6\u4EA4\u6613\u524D\u67E5\u770B\u53EF\u7528\u4FDD\u8BC1\u91D1\u3001\u5360\u7528\u4FDD\u8BC1\u91D1\u3001\u4FDD\u8BC1\u91D1\u7387
22140
+ ## \u5173\u952E\u8BCD\uFF1A\u4FDD\u8BC1\u91D1\u4F59\u989D, \u4FDD\u8BC1\u91D1\u7387, margin balance, \u53EF\u7528\u4FDD\u8BC1\u91D1, \u5360\u7528\u4FDD\u8BC1\u91D1
22141
+ ## \u53C2\u6570\uFF1A
22142
+ ## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B
22143
+ ## - mgnMode: \u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3\u3002\u5FC5\u586B
22144
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22145
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22146
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
22147
+ ## \u5173\u8054\uFF1Aokx_get_balance \u67E5\u603B\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u67E5\u4FDD\u8BC1\u91D1 \u2192 okx_get_positions \u67E5\u6301\u4ED3`,
22148
+ {
22149
+ instId: external_exports.string().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u5FC5\u586B"),
22150
+ mgnMode: external_exports.enum(["cross", "isolated"]).describe("\u4FDD\u8BC1\u91D1\u6A21\u5F0F\u3002cross=\u5168\u4ED3, isolated=\u9010\u4ED3")
22151
+ },
22152
+ async ({ instId, mgnMode }) => {
22153
+ if (!auth) return toError(AUTH_REQUIRED);
22154
+ try {
22155
+ const data = await privateApi.getMarginBalance(auth, instId, mgnMode);
22156
+ return toResult(data);
22157
+ } catch (e) {
22158
+ return toError(e);
22159
+ }
22160
+ }
22161
+ );
22022
22162
  }
22023
22163
 
22024
22164
  // src/tools/trading.ts
@@ -22222,6 +22362,85 @@ function registerTradingTools(server, auth) {
22222
22362
  }
22223
22363
  }
22224
22364
  );
22365
+ server.tool(
22366
+ "okx_amend_batch_orders",
22367
+ `## \u529F\u80FD\uFF1A\u6279\u91CF\u4FEE\u6539\u672A\u6210\u4EA4\u8BA2\u5355
22368
+ ## \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
22369
+ ## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u6539\u5355, \u6279\u91CF\u4FEE\u6539, amend batch orders, \u6279\u91CF\u6539\u4EF7, \u6279\u91CF\u8C03\u91CF
22370
+ ## \u53C2\u6570\uFF1A
22371
+ ## - orders: \u6539\u5355\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\uFF0C\u6BCF\u9879\u542B instId/ordId/newSz/newPx\u3002\u6700\u591A20\u7B14
22372
+ ## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
22373
+ ## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u8BA2\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u786E\u8BA4
22374
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB
22375
+ ## \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`,
22376
+ {
22377
+ 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`)
22378
+ },
22379
+ async ({ orders }) => {
22380
+ if (!auth) return toError(AUTH_REQUIRED);
22381
+ try {
22382
+ const parsed = JSON.parse(orders);
22383
+ const data = await privateApi.amendBatchOrders(auth, parsed);
22384
+ return toResult(data);
22385
+ } catch (e) {
22386
+ return toError(e);
22387
+ }
22388
+ }
22389
+ );
22390
+ server.tool(
22391
+ "okx_get_fills_history",
22392
+ `## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5386\u53F2\u6210\u4EA4\u660E\u7EC6\uFF08\u6700\u8FD13\u4E2A\u6708\uFF09
22393
+ ## \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
22394
+ ## \u5173\u952E\u8BCD\uFF1A\u6210\u4EA4\u5386\u53F2, \u6210\u4EA4\u660E\u7EC6, fills history, \u5386\u53F2\u6210\u4EA4, \u9010\u7B14\u6210\u4EA4\u5386\u53F2
22395
+ ## \u53C2\u6570\uFF1A
22396
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002\u53EF\u9009
22397
+ ## - instId: \u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009
22398
+ ## - limit: \u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100
22399
+ ## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09
22400
+ ## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528
22401
+ ## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB
22402
+ ## \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`,
22403
+ {
22404
+ instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).optional().describe("\u4EA7\u54C1\u7C7B\u578B"),
22405
+ instId: external_exports.string().optional().describe("\u4EA7\u54C1ID\uFF0C\u5982 BTC-USDT"),
22406
+ limit: external_exports.number().int().min(1).max(100).optional().describe("\u8FD4\u56DE\u6761\u6570\uFF0C\u9ED8\u8BA4100")
22407
+ },
22408
+ async ({ instType, instId, limit }) => {
22409
+ if (!auth) return toError(AUTH_REQUIRED);
22410
+ try {
22411
+ const data = await privateApi.getFillsHistory(auth, instType, instId, limit);
22412
+ return toResult(data);
22413
+ } catch (e) {
22414
+ return toError(e);
22415
+ }
22416
+ }
22417
+ );
22418
+ server.tool(
22419
+ "okx_mass_cancel",
22420
+ `## \u529F\u80FD\uFF1A\u6279\u91CF\u64A4\u9500\u67D0\u4EA7\u54C1\u7C7B\u578B\u4E0B\u6240\u6709\u6302\u5355
22421
+ ## \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
22422
+ ## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u64A4\u5355, \u5168\u90E8\u64A4\u5355, mass cancel, \u6E05\u7A7A\u6302\u5355, \u7D27\u6025\u64A4\u5355
22423
+ ## \u53C2\u6570\uFF1A
22424
+ ## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SPOT/MARGIN/SWAP/FUTURES/OPTION\u3002\u5FC5\u586B
22425
+ ## - instFamily: \u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u53EF\u9009\uFF08\u4EC5\u5408\u7EA6\u9700\u8981\uFF09
22426
+ ## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u8C03\u7528\u524D\u987B\u5411\u7528\u6237\u786E\u8BA4
22427
+ ## \u98CE\u9669\uFF1AWRITE \u2014 \u64A4\u9500\u6240\u6709\u6302\u5355\uFF0C\u5F71\u54CD\u8303\u56F4\u5927\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4
22428
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
22429
+ ## \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`,
22430
+ {
22431
+ instType: external_exports.enum(["SPOT", "MARGIN", "SWAP", "FUTURES", "OPTION"]).describe("\u4EA7\u54C1\u7C7B\u578B"),
22432
+ instFamily: external_exports.string().optional().describe("\u4EA7\u54C1\u65CF\uFF0C\u5982 BTC-USDT\u3002\u4EC5\u5408\u7EA6\u9700\u586B")
22433
+ },
22434
+ async ({ instType, instFamily }) => {
22435
+ if (!auth) return toError(AUTH_REQUIRED);
22436
+ try {
22437
+ const data = await privateApi.massCancel(auth, instType, instFamily);
22438
+ return toResult(data);
22439
+ } catch (e) {
22440
+ return toError(e);
22441
+ }
22442
+ }
22443
+ );
22225
22444
  }
22226
22445
 
22227
22446
  // src/tools/algo.ts
@@ -22391,6 +22610,44 @@ function registerFundingTools(server, auth) {
22391
22610
  }
22392
22611
  }
22393
22612
  );
22613
+ server.tool(
22614
+ "okx_withdrawal",
22615
+ `## \u529F\u80FD\uFF1A\u63D0\u5E01\u5230\u5916\u90E8\u5730\u5740
22616
+ ## \u573A\u666F\uFF1A\u5C06\u8D44\u4EA7\u4ECEOKX\u63D0\u73B0\u5230\u5916\u90E8\u94B1\u5305\u6216\u4EA4\u6613\u6240
22617
+ ## \u5173\u952E\u8BCD\uFF1A\u63D0\u5E01, \u63D0\u73B0, withdrawal, \u51FA\u91D1, \u8F6C\u51FA
22618
+ ## \u53C2\u6570\uFF1A
22619
+ ## - ccy: \u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B
22620
+ ## - amt: \u63D0\u5E01\u6570\u91CF\u3002\u5FC5\u586B
22621
+ ## - dest: \u63D0\u5E01\u65B9\u5F0F\u30023=\u5185\u90E8\u8F6C\u8D26, 4=\u94FE\u4E0A\u63D0\u5E01\u3002\u5FC5\u586B
22622
+ ## - toAddr: \u76EE\u6807\u5730\u5740\u3002\u94FE\u4E0A\u63D0\u5E01\u5FC5\u586B
22623
+ ## - chain: \u94FE\u540D\u79F0\uFF0C\u5982 USDT-TRC20\u3002\u94FE\u4E0A\u63D0\u5E01\u5FC5\u586B
22624
+ ## - fee: \u624B\u7EED\u8D39\u3002\u53EF\u9009
22625
+ ## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u63D0\u73B0\uFF09- \u8C03\u7528\u524D\u5FC5\u987B\u4E8C\u6B21\u786E\u8BA4
22626
+ ## \u98CE\u9669\uFF1AFUND_TRANSFER \u2014 \u63D0\u5E01\u64CD\u4F5C\u76F4\u63A5\u8F6C\u51FA\u8D44\u91D1\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u5411\u7528\u6237\u4E8C\u6B21\u786E\u8BA4
22627
+ ## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B
22628
+ ## \u5173\u8054\uFF1Aokx_get_currencies \u67E5\u652F\u6301\u5E01\u79CD \u2192 okx_get_funding_balance \u786E\u8BA4\u4F59\u989D \u2192 \u672C\u5DE5\u5177\u63D0\u5E01`,
22629
+ {
22630
+ ccy: external_exports.string().describe("\u5E01\u79CD\uFF0C\u5982 USDT\u3002\u5FC5\u586B"),
22631
+ amt: external_exports.string().describe("\u63D0\u5E01\u6570\u91CF\u3002\u5FC5\u586B"),
22632
+ dest: external_exports.enum(["3", "4"]).describe("\u63D0\u5E01\u65B9\u5F0F\uFF1A3=\u5185\u90E8\u8F6C\u8D26, 4=\u94FE\u4E0A\u63D0\u5E01"),
22633
+ toAddr: external_exports.string().optional().describe("\u76EE\u6807\u5730\u5740\uFF08\u94FE\u4E0A\u63D0\u5E01\u5FC5\u586B\uFF09"),
22634
+ chain: external_exports.string().optional().describe("\u94FE\u540D\u79F0\uFF0C\u5982 USDT-TRC20"),
22635
+ fee: external_exports.string().optional().describe("\u624B\u7EED\u8D39\uFF0C\u4E0D\u586B\u7528\u9ED8\u8BA4")
22636
+ },
22637
+ async ({ ccy, amt, dest, toAddr, chain, fee }) => {
22638
+ if (!auth) return toError(AUTH_REQUIRED);
22639
+ try {
22640
+ const body = { ccy, amt, dest };
22641
+ if (toAddr) body.toAddr = toAddr;
22642
+ if (chain) body.chain = chain;
22643
+ if (fee) body.fee = fee;
22644
+ const data = await privateApi.withdrawal(auth, body);
22645
+ return toResult(data);
22646
+ } catch (e) {
22647
+ return toError(e);
22648
+ }
22649
+ }
22650
+ );
22394
22651
  }
22395
22652
 
22396
22653
  // src/tools/stats.ts
@@ -23225,7 +23482,7 @@ function registerSignalTools(server, auth) {
23225
23482
 
23226
23483
  // src/index.ts
23227
23484
  async function main() {
23228
- const server = new McpServer({ name: "hvip", version: "0.2.0" });
23485
+ const server = new McpServer({ name: "hvip", version: "0.2.1" });
23229
23486
  const auth = getAuth();
23230
23487
  registerMarketTools(server);
23231
23488
  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.2",
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": {