hvip-mcp-server 0.2.25 → 0.2.26

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 +210 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21355,7 +21355,21 @@ var privateApi = {
21355
21355
  getSpreadFills: (auth, sprdId, limit) => request("GET", "/api/v5/sprd/fills", { params: { sprdId, limit }, auth }),
21356
21356
  // ── 第三批交易收尾 ─────────────────────────────────────────────────────────
21357
21357
  resetMmp: (auth, body) => request("POST", "/api/v5/account/mmp-reset", { body, auth }),
21358
- getOrderByClientId: (auth, instId, clOrdId) => request("GET", "/api/v5/trade/order", { params: { instId, clOrdId }, auth })
21358
+ // ── NEW: sprd affiliate ──
21359
+ getOrderByClientId: (auth, instId, clOrdId) => request("GET", "/api/v5/trade/order", { params: { instId, clOrdId }, auth }),
21360
+ // ── 价差收尾(第一批新缺口) ──────────────────────────────────────────
21361
+ getSpreadOrdersHistoryArchive: (auth, sprdId) => request("GET", "/api/v5/sprd/orders-history-archive", { params: { sprdId }, auth }),
21362
+ getSpreadPublicTrades: (sprdId) => request("GET", "/api/v5/sprd/public-trades", { params: { sprdId } }),
21363
+ getSpreadTradeFills: (auth, sprdId) => request("GET", "/api/v5/sprd/trades", { params: { sprdId }, auth }),
21364
+ // ── 子账户+推广(第三批新缺口) ──────────────────────────────────────
21365
+ createSubAccount: (auth, body) => request("POST", "/api/v5/users/subaccount/create-subaccount", { body, auth }),
21366
+ getEntrustSubAccountList: (auth) => request("GET", "/api/v5/users/entrust-subaccount-list", { auth }),
21367
+ getAffiliateInviteeList: (auth) => request("GET", "/api/v5/affiliate/invitee/list", { auth }),
21368
+ getAffiliateInviteeDetail: (auth, uid) => request("GET", "/api/v5/affiliate/invitee/detail", { params: { uid }, auth }),
21369
+ getAffiliateLinkList: (auth) => request("GET", "/api/v5/affiliate/link/list", { auth }),
21370
+ getAffiliatePerformance: (auth) => request("GET", "/api/v5/affiliate/performance/summary", { auth }),
21371
+ getAffiliateCoInviterList: (auth) => request("GET", "/api/v5/affiliate/co-inviter/list", { auth }),
21372
+ getAffiliateSubAffiliateList: (auth) => request("GET", "/api/v5/affiliate/sub-affiliate/list", { auth })
21359
21373
  };
21360
21374
 
21361
21375
  // src/adapters/hrails.ts
@@ -24015,6 +24029,39 @@ function registerSubAccountTools(server, auth) {
24015
24029
  }
24016
24030
  }
24017
24031
  );
24032
+ server.tool(
24033
+ "okx_create_subaccount",
24034
+ "## \u529F\u80FD\uFF1A\u521B\u5EFA\u65B0\u7684\u5B50\u8D26\u6237\n## \u573A\u666F\uFF1A\u7528\u4E8E\u521B\u5EFA\u5B50\u8D26\u6237\u7BA1\u7406\u591A\u4E2A\u4EA4\u6613\u7B56\u7565\u3001\u9694\u79BB\u8D44\u91D1\u548C\u98CE\u9669\n## \u5173\u952E\u8BCD\uFF1A\u521B\u5EFA\u5B50\u8D26\u6237, create subaccount, \u65B0\u589E\u5B50\u8D26\u53F7\n## \u53C2\u6570\uFF1A\n## - subAcct: \u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B\n## - label: \u5B50\u8D26\u6237\u5907\u6CE8\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981\u4E3B\u8D26\u6237 API Key\uFF08\u7BA1\u7406\uFF09- \u5C06\u521B\u5EFA\u65B0\u5B50\u8D26\u6237\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AADMIN \u2014 \u521B\u5EFA\u5B50\u8D26\u6237\u5F71\u54CD\u8D26\u6237\u7ED3\u6784\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u7531\u7528\u6237\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u521B\u5EFA \u2192 okx_list_subaccounts \u67E5\u770B \u2192 okx_create_subaccount_api_key \u8BBE\u7F6EAPI",
24035
+ {
24036
+ subAcct: external_exports.string().describe("\u5B50\u8D26\u6237\u540D\u79F0\u3002\u5FC5\u586B"),
24037
+ label: external_exports.string().optional().describe("\u5B50\u8D26\u6237\u5907\u6CE8")
24038
+ },
24039
+ async ({ subAcct, label }) => {
24040
+ if (!auth) return toError(AUTH_REQUIRED);
24041
+ try {
24042
+ const body = { subAcct };
24043
+ if (label) body.label = label;
24044
+ const data = await privateApi.createSubAccount(auth, body);
24045
+ return toResult(data);
24046
+ } catch (e) {
24047
+ return toError(e);
24048
+ }
24049
+ }
24050
+ );
24051
+ server.tool(
24052
+ "okx_get_entrust_subaccount_list",
24053
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u59D4\u6258\u5B50\u8D26\u6237\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6258\u7BA1\u5B50\u8D26\u6237\u3001\u7BA1\u7406\u59D4\u6258\u4EA4\u6613\u6743\u9650\n## \u5173\u952E\u8BCD\uFF1A\u59D4\u6258\u5B50\u8D26\u6237, entrust subaccount, \u6258\u7BA1\u8D26\u6237, \u59D4\u6258\u7BA1\u7406\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\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u59D4\u6258\u5B50\u8D26\u6237 \u2192 \u7BA1\u7406\u5B50\u8D26\u6237\u6743\u9650",
24054
+ {},
24055
+ async () => {
24056
+ if (!auth) return toError(AUTH_REQUIRED);
24057
+ try {
24058
+ const data = await privateApi.getEntrustSubAccountList(auth);
24059
+ return toResult(data);
24060
+ } catch (e) {
24061
+ return toError(e);
24062
+ }
24063
+ }
24064
+ );
24018
24065
  }
24019
24066
 
24020
24067
  // src/tools/finance.ts
@@ -24806,6 +24853,77 @@ function registerSpreadTools(server, auth) {
24806
24853
  }
24807
24854
  }
24808
24855
  );
24856
+ server.tool(
24857
+ "okx_get_spread_orders_pending",
24858
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EF7\u5DEE\u5408\u7EA6\u5F53\u524D\u6302\u5355\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u4EF7\u5DEE\u5408\u7EA6\u7684\u672A\u6210\u4EA4\u8BA2\u5355\u5217\u8868\u3001\u76D1\u63A7\u6302\u5355\u72B6\u6001\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u6302\u5355, spread pending, \u4EF7\u5DEE\u59D4\u6258, \u4EF7\u5DEE\u672A\u6210\u4EA4\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1Aokx_place_spread_order \u4E0B\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u770B \u2192 okx_cancel_spread_order \u64A4\u9500",
24859
+ {
24860
+ sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID")
24861
+ },
24862
+ async ({ sprdId }) => {
24863
+ if (!auth) return toError(AUTH_REQUIRED);
24864
+ try {
24865
+ const data = await privateApi.getSpreadOrdersPending(auth, sprdId);
24866
+ return toResult(data);
24867
+ } catch (e) {
24868
+ return toError(e);
24869
+ }
24870
+ }
24871
+ );
24872
+ server.tool(
24873
+ "okx_get_spread_orders_history_archive",
24874
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u4EF7\u5DEE\u5408\u7EA6\u5F52\u6863\u5386\u53F2\u8BA2\u5355\uFF083\u4E2A\u6708\u524D\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u957F\u671F\u590D\u76D8\u4EF7\u5DEE\u4EA4\u6613\u3001\u5E74\u5EA6\u4EA4\u6613\u7EDF\u8BA1\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u5F52\u6863, spread archive, \u4EF7\u5DEE\u5386\u53F2\u5F52\u6863, \u4EF7\u5DEE\u5B58\u6863\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\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\uFF1Aokx_get_spread_orders_history \u67E5\u8FD1\u671F \u2192 \u672C\u5DE5\u5177\u67E5\u5F52\u6863 \u2192 \u5B8C\u6574\u590D\u76D8",
24875
+ {
24876
+ sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID")
24877
+ },
24878
+ async ({ sprdId }) => {
24879
+ if (!auth) return toError(AUTH_REQUIRED);
24880
+ try {
24881
+ const data = await privateApi.getSpreadOrdersHistoryArchive(auth, sprdId);
24882
+ return toResult(data);
24883
+ } catch (e) {
24884
+ return toError(e);
24885
+ }
24886
+ }
24887
+ );
24888
+ server.tool(
24889
+ "okx_get_spread_trades_public",
24890
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u516C\u5F00\u6210\u4EA4\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u65E0\u9700\u9274\u6743\u67E5\u770B\u4EF7\u5DEE\u5E02\u573A\u7684\u6210\u4EA4\u60C5\u51B5\u3001\u5206\u6790\u4EF7\u683C\u8D70\u52BF\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u516C\u5F00\u6210\u4EA4, spread public trades, \u516C\u5F00\u6210\u4EA4, \u4EF7\u5DEE\u6210\u4EA4\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B\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\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1Aokx_get_spread_trades \u770B\u5E26\u8BE6\u60C5\u6210\u4EA4 \u2192 \u672C\u5DE5\u5177\u516C\u5F00\u67E5\u8BE2",
24891
+ {
24892
+ sprdId: external_exports.string().describe("\u4EF7\u5DEE\u5408\u7EA6ID\u3002\u5FC5\u586B")
24893
+ },
24894
+ async ({ sprdId }) => {
24895
+ try {
24896
+ const data = await publicApi.getSpreadPublicTrades(sprdId);
24897
+ const enriched = data.map((item) => ({
24898
+ ...item,
24899
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
24900
+ }));
24901
+ return toResult(enriched);
24902
+ } catch (e) {
24903
+ return toError(e);
24904
+ }
24905
+ }
24906
+ );
24907
+ server.tool(
24908
+ "okx_get_spread_trades_fills",
24909
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4EF7\u5DEE\u5408\u7EA6\u7684\u6210\u4EA4\u660E\u7EC6\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u4EF7\u5DEE\u8BA2\u5355\u7684\u9010\u7B14\u6210\u4EA4\u8BB0\u5F55\u3001\u6838\u5BF9\u6210\u4EA4\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u4EF7\u5DEE\u6210\u4EA4\u660E\u7EC6, spread fills, \u4EF7\u5DEE\u9010\u7B14, \u4EF7\u5DEE\u6210\u4EA4\u8BB0\u5F55\n## \u53C2\u6570\uFF1A\n## - sprdId: \u4EF7\u5DEE\u5408\u7EA6ID\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\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\uFF1Aokx_get_spread_orders \u67E5\u8BA2\u5355 \u2192 \u672C\u5DE5\u5177\u67E5\u6210\u4EA4 \u2192 \u6838\u7B97\u6210\u672C",
24910
+ {
24911
+ sprdId: external_exports.string().optional().describe("\u4EF7\u5DEE\u5408\u7EA6ID")
24912
+ },
24913
+ async ({ sprdId }) => {
24914
+ if (!auth) return toError(AUTH_REQUIRED);
24915
+ try {
24916
+ const data = await privateApi.getSpreadTradeFills(auth, sprdId);
24917
+ const enriched = data.map((item) => ({
24918
+ ...item,
24919
+ tsIso: item.ts ? new Date(parseInt(item.ts)).toISOString() : void 0
24920
+ }));
24921
+ return toResult(enriched);
24922
+ } catch (e) {
24923
+ return toError(e);
24924
+ }
24925
+ }
24926
+ );
24809
24927
  }
24810
24928
 
24811
24929
  // src/tools/copy.ts
@@ -25304,6 +25422,96 @@ function registerRfqTools(server, auth) {
25304
25422
  );
25305
25423
  }
25306
25424
 
25425
+ // src/tools/affiliate.ts
25426
+ function registerAffiliateTools(server, auth) {
25427
+ server.tool(
25428
+ "okx_get_affiliate_invitee_list",
25429
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u9080\u8BF7\u7684\u7528\u6237\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u63A8\u5E7F\u5458\u67E5\u770B\u9080\u8BF7\u4E86\u54EA\u4E9B\u7528\u6237\u3001\u7EDF\u8BA1\u63A8\u5E7F\u6548\u679C\n## \u5173\u952E\u8BCD\uFF1A\u63A8\u5E7F\u5217\u8868, invitee list, \u9080\u8BF7\u5217\u8868, \u63A8\u5E7F\u5927\u4F7F\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\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u9080\u8BF7\u5217\u8868 \u2192 okx_get_affiliate_performance \u67E5\u770B\u63A8\u5E7F\u7EE9\u6548",
25430
+ {},
25431
+ async () => {
25432
+ if (!auth) return toError(AUTH_REQUIRED);
25433
+ try {
25434
+ const data = await privateApi.getAffiliateInviteeList(auth);
25435
+ return toResult(data);
25436
+ } catch (e) {
25437
+ return toError(e);
25438
+ }
25439
+ }
25440
+ );
25441
+ server.tool(
25442
+ "okx_get_affiliate_invitee_detail",
25443
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u9080\u8BF7\u7684\u67D0\u4E2A\u7528\u6237\u8BE6\u7EC6\u4FE1\u606F\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u7279\u5B9A\u88AB\u9080\u8BF7\u7528\u6237\u7684\u4EA4\u6613\u91CF\u548C\u8FD4\u4F63\u8BE6\u60C5\n## \u5173\u952E\u8BCD\uFF1A\u9080\u8BF7\u8BE6\u60C5, invitee detail, \u63A8\u5E7F\u660E\u7EC6, \u7528\u6237\u8BE6\u60C5\n## \u53C2\u6570\uFF1A\n## - uid: \u7528\u6237ID\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u26A0\uFE0F \u9700\u8981 API Key\uFF08\u53EA\u8BFB\uFF09\n## \u98CE\u9669\uFF1AREAD \u2014 \u53EA\u8BFB\u67E5\u8BE2\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1Aokx_get_affiliate_invitee_list \u83B7\u53D6\u7528\u6237\u5217\u8868 \u2192 \u672C\u5DE5\u5177\u67E5\u8BE6\u60C5",
25444
+ {
25445
+ uid: external_exports.string().optional().describe("\u7528\u6237ID")
25446
+ },
25447
+ async ({ uid }) => {
25448
+ if (!auth) return toError(AUTH_REQUIRED);
25449
+ try {
25450
+ const data = await privateApi.getAffiliateInviteeDetail(auth, uid);
25451
+ return toResult(data);
25452
+ } catch (e) {
25453
+ return toError(e);
25454
+ }
25455
+ }
25456
+ );
25457
+ server.tool(
25458
+ "okx_get_affiliate_link_list",
25459
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u94FE\u63A5\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5DF2\u521B\u5EFA\u7684\u63A8\u5E7F\u94FE\u63A5\u3001\u7BA1\u7406\u63A8\u5E7F\u6E20\u9053\n## \u5173\u952E\u8BCD\uFF1A\u63A8\u5E7F\u94FE\u63A5, affiliate link, \u9080\u8BF7\u94FE\u63A5, \u63A8\u5E7F\u6E20\u9053\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\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u94FE\u63A5 \u2192 \u5206\u4EAB\u7ED9\u7528\u6237 \u2192 \u8FFD\u8E2A\u63A8\u5E7F\u6548\u679C",
25460
+ {},
25461
+ async () => {
25462
+ if (!auth) return toError(AUTH_REQUIRED);
25463
+ try {
25464
+ const data = await privateApi.getAffiliateLinkList(auth);
25465
+ return toResult(data);
25466
+ } catch (e) {
25467
+ return toError(e);
25468
+ }
25469
+ }
25470
+ );
25471
+ server.tool(
25472
+ "okx_get_affiliate_performance",
25473
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u63A8\u5E7F\u7EE9\u6548\u6C47\u603B\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u63A8\u5E7F\u6536\u76CA\u3001\u4EA4\u6613\u91CF\u3001\u8FD4\u4F63\u6BD4\u4F8B\u7B49\u6838\u5FC3\u6570\u636E\n## \u5173\u952E\u8BCD\uFF1A\u63A8\u5E7F\u7EE9\u6548, affiliate performance, \u63A8\u5E7F\u6536\u76CA, \u8FD4\u4F63, \u4F63\u91D1\u7EDF\u8BA1\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\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~2KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u603B\u7EE9\u6548 \u2192 okx_get_affiliate_invitee_list \u770B\u660E\u7EC6 \u2192 \u4F18\u5316\u63A8\u5E7F\u7B56\u7565",
25474
+ {},
25475
+ async () => {
25476
+ if (!auth) return toError(AUTH_REQUIRED);
25477
+ try {
25478
+ const data = await privateApi.getAffiliatePerformance(auth);
25479
+ return toResult(data);
25480
+ } catch (e) {
25481
+ return toError(e);
25482
+ }
25483
+ }
25484
+ );
25485
+ server.tool(
25486
+ "okx_get_co_inviter_list",
25487
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u8054\u5408\u9080\u8BF7\u4EBA\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5408\u4F5C\u63A8\u5E7F\u7684\u8054\u5408\u9080\u8BF7\u4EBA\n## \u5173\u952E\u8BCD\uFF1A\u8054\u5408\u9080\u8BF7, co-inviter, \u5408\u4F5C\u63A8\u5E7F, \u5408\u9080\u5217\u8868\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\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u8054\u5408\u9080\u8BF7\u4EBA \u2192 \u7BA1\u7406\u5408\u4F5C\u63A8\u5E7F\u5173\u7CFB",
25488
+ {},
25489
+ async () => {
25490
+ if (!auth) return toError(AUTH_REQUIRED);
25491
+ try {
25492
+ const data = await privateApi.getAffiliateCoInviterList(auth);
25493
+ return toResult(data);
25494
+ } catch (e) {
25495
+ return toError(e);
25496
+ }
25497
+ }
25498
+ );
25499
+ server.tool(
25500
+ "okx_get_sub_affiliate_list",
25501
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6\u4E0B\u7EA7\u63A8\u5E7F\u5458\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u81EA\u5DF1\u7684\u4E0B\u7EA7\u63A8\u5E7F\u5458\u3001\u7BA1\u7406\u63A8\u5E7F\u56E2\u961F\n## \u5173\u952E\u8BCD\uFF1A\u4E0B\u7EA7\u63A8\u5E7F, sub affiliate, \u4E0B\u7EA7\u4EE3\u7406, \u63A8\u5E7F\u56E2\u961F\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\uFF0CAgent \u53EF\u81EA\u52A8\u8C03\u7528\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~5KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u4E0B\u7EA7\u63A8\u5E7F\u5458 \u2192 \u7BA1\u7406\u63A8\u5E7F\u56E2\u961F \u2192 \u5E26\u52A8\u56E2\u961F\u4E1A\u7EE9",
25502
+ {},
25503
+ async () => {
25504
+ if (!auth) return toError(AUTH_REQUIRED);
25505
+ try {
25506
+ const data = await privateApi.getAffiliateSubAffiliateList(auth);
25507
+ return toResult(data);
25508
+ } catch (e) {
25509
+ return toError(e);
25510
+ }
25511
+ }
25512
+ );
25513
+ }
25514
+
25307
25515
  // src/index.ts
25308
25516
  async function main() {
25309
25517
  const server = new McpServer({ name: "hvip", version: "0.2.1" });
@@ -25322,6 +25530,7 @@ async function main() {
25322
25530
  registerFundingTools(server, auth);
25323
25531
  registerSubAccountTools(server, auth);
25324
25532
  registerFinanceTools(server, auth);
25533
+ registerAffiliateTools(server, auth);
25325
25534
  registerRfqTools(server, auth);
25326
25535
  const transport = new StdioServerTransport();
25327
25536
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.25",
3
+ "version": "0.2.26",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",