hvip-mcp-server 0.2.31 → 0.2.32

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 +151 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21467,7 +21467,16 @@ 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
+ setTradingConfig: (auth, body) => request("POST", "/api/v5/account/set-trading-config", { body, auth }),
21479
+ movePositions: (auth, body) => request("POST", "/api/v5/account/move-positions", { body, auth })
21471
21480
  };
21472
21481
 
21473
21482
  // src/adapters/hrails.ts
@@ -23284,6 +23293,71 @@ function registerAccountTools(server, auth) {
23284
23293
  }
23285
23294
  }
23286
23295
  );
23296
+ server.tool(
23297
+ "okx_get_account_bills_archive",
23298
+ "## \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",
23299
+ {},
23300
+ async () => {
23301
+ if (!auth) return toError(AUTH_REQUIRED);
23302
+ try {
23303
+ const data = await privateApi.getAccountBillsArchive(auth);
23304
+ return toResult(data);
23305
+ } catch (e) {
23306
+ return toError(e);
23307
+ }
23308
+ }
23309
+ );
23310
+ server.tool(
23311
+ "okx_set_auto_loan",
23312
+ "## \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",
23313
+ {
23314
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
23315
+ side: external_exports.enum(["on", "off"]).describe("\u65B9\u5411\u3002on=\u5F00\u542F, off=\u5173\u95ED")
23316
+ },
23317
+ async ({ ccy, side }) => {
23318
+ if (!auth) return toError(AUTH_REQUIRED);
23319
+ try {
23320
+ const data = await privateApi.setAutoLoan(auth, { ccy, autoLoan: side === "on" });
23321
+ return toResult(data);
23322
+ } catch (e) {
23323
+ return toError(e);
23324
+ }
23325
+ }
23326
+ );
23327
+ server.tool(
23328
+ "okx_set_trading_config",
23329
+ "## \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",
23330
+ {
23331
+ jsonString: external_exports.string().describe("\u914D\u7F6E\u53C2\u6570JSON\u5B57\u7B26\u4E32\u3002\u5FC5\u586B")
23332
+ },
23333
+ async ({ jsonString }) => {
23334
+ if (!auth) return toError(AUTH_REQUIRED);
23335
+ try {
23336
+ const parsed = JSON.parse(jsonString);
23337
+ const data = await privateApi.setTradingConfig(auth, parsed);
23338
+ return toResult(data);
23339
+ } catch (e) {
23340
+ return toError(e);
23341
+ }
23342
+ }
23343
+ );
23344
+ server.tool(
23345
+ "okx_move_positions",
23346
+ "## \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",
23347
+ {
23348
+ body: external_exports.string().describe("\u8FC1\u79FB\u53C2\u6570JSON\u5B57\u7B26\u4E32\u3002\u5FC5\u586B")
23349
+ },
23350
+ async ({ body }) => {
23351
+ if (!auth) return toError(AUTH_REQUIRED);
23352
+ try {
23353
+ const parsed = JSON.parse(body);
23354
+ const data = await privateApi.movePositions(auth, parsed);
23355
+ return toResult(data);
23356
+ } catch (e) {
23357
+ return toError(e);
23358
+ }
23359
+ }
23360
+ );
23287
23361
  }
23288
23362
 
23289
23363
  // src/tools/trading.ts
@@ -25280,6 +25354,82 @@ function registerFinanceTools(server, auth) {
25280
25354
  }
25281
25355
  }
25282
25356
  );
25357
+ server.tool(
25358
+ "okx_get_lending_rate_history",
25359
+ "## \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",
25360
+ {},
25361
+ async () => {
25362
+ try {
25363
+ const data = await privateApi.getLendingRateHistoryDetail();
25364
+ const enriched = data.map((item) => ({
25365
+ ...item,
25366
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
25367
+ }));
25368
+ return toResult(enriched);
25369
+ } catch (e) {
25370
+ return toError(e);
25371
+ }
25372
+ }
25373
+ );
25374
+ server.tool(
25375
+ "okx_set_lending_rate",
25376
+ "## \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",
25377
+ {
25378
+ ccy: external_exports.string().describe("\u5E01\u79CD\u3002\u5FC5\u586B"),
25379
+ rate: external_exports.string().describe("\u51FA\u501F\u5229\u7387\u3002\u5FC5\u586B")
25380
+ },
25381
+ async ({ ccy, rate }) => {
25382
+ if (!auth) return toError(AUTH_REQUIRED);
25383
+ try {
25384
+ const data = await privateApi.setLendingRate(auth, { ccy, rate });
25385
+ return toResult(data);
25386
+ } catch (e) {
25387
+ return toError(e);
25388
+ }
25389
+ }
25390
+ );
25391
+ server.tool(
25392
+ "okx_get_stable_rewards_apy",
25393
+ "## \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",
25394
+ {},
25395
+ async () => {
25396
+ if (!auth) return toError(AUTH_REQUIRED);
25397
+ try {
25398
+ const data = await privateApi.getStableRewardsApyHistory(auth);
25399
+ return toResult(data);
25400
+ } catch (e) {
25401
+ return toError(e);
25402
+ }
25403
+ }
25404
+ );
25405
+ server.tool(
25406
+ "okx_get_stable_rewards_history",
25407
+ "## \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",
25408
+ {},
25409
+ async () => {
25410
+ if (!auth) return toError(AUTH_REQUIRED);
25411
+ try {
25412
+ const data = await privateApi.getStableRewardsHistory(auth);
25413
+ return toResult(data);
25414
+ } catch (e) {
25415
+ return toError(e);
25416
+ }
25417
+ }
25418
+ );
25419
+ server.tool(
25420
+ "okx_get_sfp_order_history",
25421
+ "## \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",
25422
+ {},
25423
+ async () => {
25424
+ if (!auth) return toError(AUTH_REQUIRED);
25425
+ try {
25426
+ const data = await privateApi.getSfpOrderHistory(auth);
25427
+ return toResult(data);
25428
+ } catch (e) {
25429
+ return toError(e);
25430
+ }
25431
+ }
25432
+ );
25283
25433
  }
25284
25434
 
25285
25435
  // 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.32",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",