hvip-mcp-server 0.2.31 → 0.2.33

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 +167 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21467,7 +21467,18 @@ var privateApi = {
21467
21467
  getStableRewardsProductInfo: (auth) => request("GET", "/api/v5/finance/stable-rewards/product-info", { auth }),
21468
21468
  getStableRewardsQuote: (auth, body) => request("POST", "/api/v5/finance/stable-rewards/quote", { body, auth }),
21469
21469
  getEasyConvertCurrencyList: (auth) => request("GET", "/api/v5/trade/easy-convert-currency-list", { auth }),
21470
- getOneClickRepayCurrencyList: (auth) => request("GET", "/api/v5/trade/one-click-repay-currency-list", { auth })
21470
+ // ── v0.2.31 最后批 ────────────────────────────────────────────────────
21471
+ getLendingRateHistoryDetail: () => request("GET", "/api/v5/finance/savings/lending-rate-history"),
21472
+ setLendingRate: (auth, body) => request("POST", "/api/v5/finance/savings/set-lending-rate", { body, auth }),
21473
+ getStableRewardsApyHistory: (auth) => request("GET", "/api/v5/finance/stable-rewards/apy-history", { auth }),
21474
+ getStableRewardsHistory: (auth) => request("GET", "/api/v5/finance/stable-rewards/subscribe-redeem-history", { auth }),
21475
+ getSfpOrderHistory: (auth) => request("GET", "/api/v5/finance/sfp/dcd/order-history", { auth }),
21476
+ getAccountBillsArchive: (auth) => request("GET", "/api/v5/account/bills-archive", { auth }),
21477
+ setAutoLoan: (auth, body) => request("POST", "/api/v5/account/set-auto-loan", { body, auth }),
21478
+ // ── 最终收尾 ──────────────────────────────────────────────
21479
+ getAssetBalances: (auth, ccy) => request("GET", "/api/v5/asset/balances", { params: { ccy }, auth }),
21480
+ setTradingConfig: (auth, body) => request("POST", "/api/v5/account/set-trading-config", { body, auth }),
21481
+ movePositions: (auth, body) => request("POST", "/api/v5/account/move-positions", { body, auth })
21471
21482
  };
21472
21483
 
21473
21484
  // src/adapters/hrails.ts
@@ -23284,6 +23295,71 @@ function registerAccountTools(server, auth) {
23284
23295
  }
23285
23296
  }
23286
23297
  );
23298
+ server.tool(
23299
+ "okx_get_account_bills_archive",
23300
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5F52\u6863\u8D26\u5355\u6D41\u6C34\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B3\u4E2A\u6708\u524D\u7684\u5386\u53F2\u8D26\u5355\n## \u5173\u952E\u8BCD\uFF1A\u5F52\u6863\u8D26\u5355, bills archive, \u5386\u53F2\u8D26\u5355\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~10KB",
23301
+ {},
23302
+ async () => {
23303
+ if (!auth) return toError(AUTH_REQUIRED);
23304
+ try {
23305
+ const data = await privateApi.getAccountBillsArchive(auth);
23306
+ return toResult(data);
23307
+ } catch (e) {
23308
+ return toError(e);
23309
+ }
23310
+ }
23311
+ );
23312
+ server.tool(
23313
+ "okx_set_auto_loan",
23314
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u81EA\u52A8\u501F\u8D37\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5F00\u542F\u6216\u5173\u95ED\u6760\u6746\u4EA4\u6613\u7684\u81EA\u52A8\u501F\u5E01\u529F\u80FD\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\u3002\u5FC5\u586B\n## - side: \u65B9\u5411\u3002on=\u5F00\u542F, off=\u5173\u95ED\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u81EA\u52A8\u501F\u8D37\u8BBE\u7F6E\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u5F71\u54CD\u6760\u6746\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B",
23315
+ {
23316
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
23317
+ side: external_exports.enum(["on", "off"]).describe("\u65B9\u5411\u3002on=\u5F00\u542F, off=\u5173\u95ED")
23318
+ },
23319
+ async ({ ccy, side }) => {
23320
+ if (!auth) return toError(AUTH_REQUIRED);
23321
+ try {
23322
+ const data = await privateApi.setAutoLoan(auth, { ccy, autoLoan: side === "on" });
23323
+ return toResult(data);
23324
+ } catch (e) {
23325
+ return toError(e);
23326
+ }
23327
+ }
23328
+ );
23329
+ server.tool(
23330
+ "okx_set_trading_config",
23331
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u4EA4\u6613\u914D\u7F6E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u8D26\u6237\u7684\u4EA4\u6613\u53C2\u6570\u8BBE\u7F6E\n## \u53C2\u6570\uFF1A\n## - jsonString: \u914D\u7F6E\u53C2\u6570JSON\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u4EA4\u6613\u914D\u7F6E\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u5F71\u54CD\u4EA4\u6613\u884C\u4E3A\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B",
23332
+ {
23333
+ jsonString: external_exports.string().describe("\u914D\u7F6E\u53C2\u6570JSON\u5B57\u7B26\u4E32\u3002\u5FC5\u586B")
23334
+ },
23335
+ async ({ jsonString }) => {
23336
+ if (!auth) return toError(AUTH_REQUIRED);
23337
+ try {
23338
+ const parsed = JSON.parse(jsonString);
23339
+ const data = await privateApi.setTradingConfig(auth, parsed);
23340
+ return toResult(data);
23341
+ } catch (e) {
23342
+ return toError(e);
23343
+ }
23344
+ }
23345
+ );
23346
+ server.tool(
23347
+ "okx_move_positions",
23348
+ "## \u529F\u80FD\uFF1A\u8FC1\u79FB\u6301\u4ED3\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5C06\u6301\u4ED3\u5728\u4E0D\u540C\u8D26\u6237\u95F4\u8FC1\u79FB\n## \u53C2\u6570\uFF1A\n## - body: \u8FC1\u79FB\u53C2\u6570JSON\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u8FC1\u79FB\u6301\u4ED3\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u5F71\u54CD\u6301\u4ED3\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~2KB",
23349
+ {
23350
+ body: external_exports.string().describe("\u8FC1\u79FB\u53C2\u6570JSON\u5B57\u7B26\u4E32\u3002\u5FC5\u586B")
23351
+ },
23352
+ async ({ body }) => {
23353
+ if (!auth) return toError(AUTH_REQUIRED);
23354
+ try {
23355
+ const parsed = JSON.parse(body);
23356
+ const data = await privateApi.movePositions(auth, parsed);
23357
+ return toResult(data);
23358
+ } catch (e) {
23359
+ return toError(e);
23360
+ }
23361
+ }
23362
+ );
23287
23363
  }
23288
23364
 
23289
23365
  // src/tools/trading.ts
@@ -24199,6 +24275,20 @@ function registerFundingTools(server, auth) {
24199
24275
  }
24200
24276
  }
24201
24277
  );
24278
+ server.tool(
24279
+ "okx_get_asset_balances",
24280
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8D44\u91D1\u8D26\u6237\u4F59\u989D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u8D44\u91D1\u8D26\u6237\u5404\u5E01\u79CD\u53EF\u7528\u548C\u51BB\u7ED3\u4F59\u989D\n## \u53C2\u6570\uFF1A\n## - ccy: \u6307\u5B9A\u5E01\u79CD\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB",
24281
+ { ccy: external_exports.string().optional().describe("\u6307\u5B9A\u5E01\u79CD\uFF0C\u4E0D\u586B\u8FD4\u56DE\u5168\u90E8") },
24282
+ async ({ ccy }) => {
24283
+ if (!auth) return toError(AUTH_REQUIRED);
24284
+ try {
24285
+ const data = await privateApi.getAssetBalances(auth, ccy);
24286
+ return toResult(data);
24287
+ } catch (e) {
24288
+ return toError(e);
24289
+ }
24290
+ }
24291
+ );
24202
24292
  }
24203
24293
 
24204
24294
  // src/tools/stats.ts
@@ -25280,6 +25370,82 @@ function registerFinanceTools(server, auth) {
25280
25370
  }
25281
25371
  }
25282
25372
  );
25373
+ server.tool(
25374
+ "okx_get_lending_rate_history",
25375
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u6D3B\u671F\u501F\u5E01\u5229\u7387\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u5206\u6790\u501F\u5E01\u5229\u7387\u8D70\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u5229\u7387\u5386\u53F2, lending rate history, \u501F\u5E01\u5229\u7387\u8D70\u52BF\n## \u53C2\u6570\uFF1A\u65E0\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\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u5229\u7387\u5386\u53F2 \u2192 okx_get_savings_balance \u770B\u4F59\u989D",
25376
+ {},
25377
+ async () => {
25378
+ try {
25379
+ const data = await privateApi.getLendingRateHistoryDetail();
25380
+ const enriched = data.map((item) => ({
25381
+ ...item,
25382
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
25383
+ }));
25384
+ return toResult(enriched);
25385
+ } catch (e) {
25386
+ return toError(e);
25387
+ }
25388
+ }
25389
+ );
25390
+ server.tool(
25391
+ "okx_set_lending_rate",
25392
+ "## \u529F\u80FD\uFF1A\u8BBE\u7F6E\u6D3B\u671F\u8D5A\u5E01\u51FA\u501F\u5229\u7387\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u6D3B\u671F\u8D5A\u5E01\u7684\u671F\u671B\u51FA\u501F\u5229\u7387\n## \u53C2\u6570\uFF1A\n## - ccy: \u5E01\u79CD\u3002\u5FC5\u586B\n## - rate: \u51FA\u501F\u5229\u7387\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u5229\u7387\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u5229\u7387\u5F71\u54CD\u6536\u76CA\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u8BBE\u5229\u7387 \u2192 okx_get_savings_balance \u786E\u8BA4\u751F\u6548",
25393
+ {
25394
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
25395
+ rate: external_exports.string().describe("\u51FA\u501F\u5229\u7387\u3002\u5FC5\u586B")
25396
+ },
25397
+ async ({ ccy, rate }) => {
25398
+ if (!auth) return toError(AUTH_REQUIRED);
25399
+ try {
25400
+ const data = await privateApi.setLendingRate(auth, { ccy, rate });
25401
+ return toResult(data);
25402
+ } catch (e) {
25403
+ return toError(e);
25404
+ }
25405
+ }
25406
+ );
25407
+ server.tool(
25408
+ "okx_get_stable_rewards_apy",
25409
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u7A33\u5B9A\u5E01\u5956\u52B1APY\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u7A33\u5B9A\u5E01\u7406\u8D22\u7684\u5E74\u5316\u6536\u76CA\u7387\u5386\u53F2\n## \u5173\u952E\u8BCD\uFF1A\u7A33\u5B9A\u5E01APY, stable apy, \u5E74\u5316\u5386\u53F2\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB",
25410
+ {},
25411
+ async () => {
25412
+ if (!auth) return toError(AUTH_REQUIRED);
25413
+ try {
25414
+ const data = await privateApi.getStableRewardsApyHistory(auth);
25415
+ return toResult(data);
25416
+ } catch (e) {
25417
+ return toError(e);
25418
+ }
25419
+ }
25420
+ );
25421
+ server.tool(
25422
+ "okx_get_stable_rewards_history",
25423
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u7A33\u5B9A\u5E01\u5956\u52B1\u7533\u8D2D\u8D4E\u56DE\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u7A33\u5B9A\u5E01\u7406\u8D22\u7684\u64CD\u4F5C\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u7A33\u5B9A\u5E01\u8BB0\u5F55, stable history, \u7533\u8D2D\u8D4E\u56DE\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB",
25424
+ {},
25425
+ async () => {
25426
+ if (!auth) return toError(AUTH_REQUIRED);
25427
+ try {
25428
+ const data = await privateApi.getStableRewardsHistory(auth);
25429
+ return toResult(data);
25430
+ } catch (e) {
25431
+ return toError(e);
25432
+ }
25433
+ }
25434
+ );
25435
+ server.tool(
25436
+ "okx_get_sfp_order_history",
25437
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u9CA8\u9C7C\u9CCD\u4EA7\u54C1\u8BA2\u5355\u5386\u53F2\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u9CA8\u9C7C\u9CCD\u4EA7\u54C1\u7684\u7533\u8D2D\u8D4E\u56DE\u8BB0\u5F55\n## \u5173\u952E\u8BCD\uFF1A\u9CA8\u9C7C\u9CCD\u5386\u53F2, sfp history, \u7ED3\u6784\u4EA7\u54C1\u8BA2\u5355\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB",
25438
+ {},
25439
+ async () => {
25440
+ if (!auth) return toError(AUTH_REQUIRED);
25441
+ try {
25442
+ const data = await privateApi.getSfpOrderHistory(auth);
25443
+ return toResult(data);
25444
+ } catch (e) {
25445
+ return toError(e);
25446
+ }
25447
+ }
25448
+ );
25283
25449
  }
25284
25450
 
25285
25451
  // src/tools/outcomes.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.31",
3
+ "version": "0.2.33",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",