hvip-mcp-server 0.2.28 → 0.2.29

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 +274 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -21407,7 +21407,28 @@ var privateApi = {
21407
21407
  getTakerVolumeContract: (ccy, instId) => request("GET", "/api/v5/rubik/stat/taker-volume-contract", { params: { ccy, instId } }),
21408
21408
  getOptionTakerBlockVolume: (ccy) => request("GET", "/api/v5/rubik/stat/option/taker-block-volume", { params: { ccy } }),
21409
21409
  getTopTraderPositionRatio: (instId) => request("GET", "/api/v5/rubik/stat/contracts/long-short-position-ratio-contract-top-trader", { params: { instId } }),
21410
- applyMonthlyStatement: (auth) => request("POST", "/api/v5/asset/monthly-statement", { auth })
21410
+ applyMonthlyStatement: (auth) => request("POST", "/api/v5/asset/monthly-statement", { auth }),
21411
+ // ── RFQ 收尾(第八批新增) ────────────────────────────────────────────
21412
+ getRfqCounterparties: (auth) => request("GET", "/api/v5/rfq/counterparties", { auth }),
21413
+ cancelRfq: (auth, body) => request("POST", "/api/v5/rfq/cancel-rfq", { body, auth }),
21414
+ cancelBatchRfqs: (auth, body) => request("POST", "/api/v5/rfq/cancel-batch-rfqs", { body, auth }),
21415
+ cancelAllRfqs: (auth) => request("POST", "/api/v5/rfq/cancel-all-rfqs", { auth }),
21416
+ createRfqQuote: (auth, body) => request("POST", "/api/v5/rfq/create-quote", { body, auth }),
21417
+ cancelRfqQuote: (auth, body) => request("POST", "/api/v5/rfq/cancel-quote", { body, auth }),
21418
+ cancelBatchQuotes: (auth, body) => request("POST", "/api/v5/rfq/cancel-batch-quotes", { body, auth }),
21419
+ cancelAllQuotes: (auth) => request("POST", "/api/v5/rfq/cancel-all-quotes", { auth }),
21420
+ getRfqTrades: (auth) => request("GET", "/api/v5/rfq/trades", { auth }),
21421
+ // ── Copytrading 收尾(第九批新增) ────────────────────────────────────
21422
+ getPublicLeadTraders: () => request("GET", "/api/v5/copytrading/public-lead-traders"),
21423
+ getPublicCopyConfig: () => request("GET", "/api/v5/copytrading/public-config"),
21424
+ getPublicLeadTraderPnl: (uniqueCode, lastDays) => request("GET", "/api/v5/copytrading/public-pnl", { params: { uniqueCode, lastDays } }),
21425
+ getPublicLeadTraderStats: (uniqueCode, instType, lastDays) => request("GET", "/api/v5/copytrading/public-stats", { params: { uniqueCode, instType, lastDays } }),
21426
+ getCopyTraders: (auth) => request("GET", "/api/v5/copytrading/copy-traders", { auth }),
21427
+ firstCopySettings: (auth, body) => request("POST", "/api/v5/copytrading/first-copy-settings", { body, auth }),
21428
+ getUnrealizedProfitSharing: (auth) => request("GET", "/api/v5/copytrading/unrealized-profit-sharing-details", { auth }),
21429
+ getTotalUnrealizedProfitSharing: (auth) => request("GET", "/api/v5/copytrading/total-unrealized-profit-sharing", { auth }),
21430
+ amendProfitSharingRatio: (auth, body) => request("POST", "/api/v5/copytrading/amend-profit-sharing-ratio", { body, auth }),
21431
+ amendCopySettings: (auth, body) => request("POST", "/api/v5/copytrading/amend-copy-settings", { body, auth })
21411
21432
  };
21412
21433
 
21413
21434
  // src/adapters/hrails.ts
@@ -25721,6 +25742,148 @@ function registerCopyTools(server, auth) {
25721
25742
  }
25722
25743
  }
25723
25744
  );
25745
+ server.tool(
25746
+ "okx_get_public_lead_traders",
25747
+ "## \u529F\u80FD\uFF1A\u516C\u5F00\u67E5\u8BE2\u5E26\u5355\u5458\u6392\u884C\u699C\n## \u573A\u666F\uFF1A\u7528\u4E8E\u53D1\u73B0\u4F18\u79C0\u5E26\u5355\u5458\u3001\u8BC4\u4F30\u5E26\u5355\u5458\u7EFC\u5408\u8868\u73B0\n## \u5173\u952E\u8BCD\uFF1A\u5E26\u5355\u5458\u6392\u884C, public lead traders, \u5E26\u5355\u6392\u884C\u699C, \u8DDF\u5355\u63A8\u8350\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 ~10KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6392\u884C\u699C \u2192 okx_get_lead_trader_stats \u770B\u8BE6\u60C5 \u2192 \u9009\u62E9\u8DDF\u5355",
25748
+ {},
25749
+ async () => {
25750
+ try {
25751
+ const data = await publicApi.getPublicLeadTraders();
25752
+ return toResult(data);
25753
+ } catch (e) {
25754
+ return toError(e);
25755
+ }
25756
+ }
25757
+ );
25758
+ server.tool(
25759
+ "okx_get_public_copy_config",
25760
+ "## \u529F\u80FD\uFF1A\u516C\u5F00\u67E5\u8BE2\u8DDF\u5355\u7CFB\u7EDF\u914D\u7F6E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E86\u89E3\u8DDF\u5355\u89C4\u5219\u3001\u6700\u4F4E\u8DDF\u5355\u91D1\u989D\u3001\u6700\u5927\u8DDF\u5355\u6BD4\u4F8B\u7B49\n## \u5173\u952E\u8BCD\uFF1A\u8DDF\u5355\u914D\u7F6E, copy config, \u8DDF\u5355\u89C4\u5219, \u8DDF\u5355\u9650\u5236\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\u5FAE\u5C0F ~1KB\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u67E5\u770B\u89C4\u5219 \u2192 \u8BBE\u7F6E\u8DDF\u5355\u53C2\u6570",
25761
+ {},
25762
+ async () => {
25763
+ try {
25764
+ const data = await publicApi.getPublicCopyConfig();
25765
+ return toResult(data);
25766
+ } catch (e) {
25767
+ return toError(e);
25768
+ }
25769
+ }
25770
+ );
25771
+ server.tool(
25772
+ "okx_get_public_lead_trader_pnl",
25773
+ "## \u529F\u80FD\uFF1A\u516C\u5F00\u67E5\u8BE2\u5E26\u5355\u5458\u6536\u76CA\u6570\u636E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8BC4\u4F30\u5E26\u5355\u5458\u7684\u5386\u53F2\u6536\u76CA\u8868\u73B0\n## \u5173\u952E\u8BCD\uFF1A\u5E26\u5355\u6536\u76CA, lead trader pnl, \u8DDF\u5355\u6536\u76CA, \u5E26\u5355\u76C8\u5229\u7387\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B\n## - lastDays: \u7EDF\u8BA1\u5468\u671F\uFF08\u5929\uFF09\uFF1A7/30/90/180\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\u5F31 ~500B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u6536\u76CA \u2192 okx_get_lead_trader_stats \u770B\u7EDF\u8BA1 \u2192 \u51B3\u5B9A\u662F\u5426\u8DDF\u5355",
25774
+ {
25775
+ uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B"),
25776
+ lastDays: external_exports.enum(["7", "30", "90", "180"]).describe("\u7EDF\u8BA1\u5468\u671F\uFF08\u5929\uFF09\uFF1A7/30/90/180")
25777
+ },
25778
+ async ({ uniqueCode, lastDays }) => {
25779
+ try {
25780
+ const data = await publicApi.getPublicLeadTraderPnl(uniqueCode, lastDays);
25781
+ return toResult(data);
25782
+ } catch (e) {
25783
+ return toError(e);
25784
+ }
25785
+ }
25786
+ );
25787
+ server.tool(
25788
+ "okx_get_copy_traders",
25789
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u8DDF\u5355\u6211\u7684\u4EA4\u6613\u5458\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6709\u54EA\u4E9B\u4EA4\u6613\u5458\u5728\u8DDF\u5355\u81EA\u5DF1\u3001\u7BA1\u7406\u8DDF\u5355\u5173\u7CFB\n## \u5173\u952E\u8BCD\uFF1A\u6211\u7684\u8DDF\u5355\u8005, copy traders, \u8DDF\u5355\u5458, \u7C89\u4E1D\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\u8DDF\u5355\u8005 \u2192 \u7BA1\u7406\u8DDF\u5355\u5173\u7CFB",
25790
+ {},
25791
+ async () => {
25792
+ if (!auth) return toError(AUTH_REQUIRED);
25793
+ try {
25794
+ const data = await privateApi.getCopyTraders(auth);
25795
+ return toResult(data);
25796
+ } catch (e) {
25797
+ return toError(e);
25798
+ }
25799
+ }
25800
+ );
25801
+ server.tool(
25802
+ "okx_first_copy_settings",
25803
+ "## \u529F\u80FD\uFF1A\u9996\u6B21\u8BBE\u7F6E\u8DDF\u5355\uFF08\u521D\u59CB\u914D\u7F6E\u8DDF\u5355\u53C2\u6570\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u9996\u6B21\u5F00\u59CB\u8DDF\u5355\u65F6\u8BBE\u7F6E\u5168\u90E8\u53C2\u6570\n## \u5173\u952E\u8BCD\uFF1A\u9996\u6B21\u8DDF\u5355, first copy, \u521D\u6B21\u8DDF\u5355, \u8DDF\u5355\u521D\u59CB\u5316\n## \u53C2\u6570\uFF1A\n## - uniqueCode: \u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B\n## - instType: \u4EA7\u54C1\u7C7B\u578B\u3002SWAP/FUTURES\u3002\u5FC5\u586B\n## - amount: \u8DDF\u5355\u6570\u91CF\u3002\u5FC5\u586B\n## - amountType: \u6570\u91CF\u7C7B\u578B\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u5F00\u59CB\u8DDF\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u9996\u6B21\u8DDF\u5355\u8BBE\u7F6E\u540E\u5C06\u81EA\u52A8\u590D\u5236\u4EA4\u6613\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_lead_trader_stats \u8BC4\u4F30 \u2192 \u672C\u5DE5\u5177\u9996\u6B21\u8DDF\u5355 \u2192 okx_get_copy_settings \u786E\u8BA4",
25804
+ {
25805
+ uniqueCode: external_exports.string().describe("\u5E26\u5355\u5458\u552F\u4E00\u6807\u8BC6\u7801\u3002\u5FC5\u586B"),
25806
+ instType: external_exports.enum(INST_TYPE_SWAP_FUT).describe("\u4EA7\u54C1\u7C7B\u578B\u3002SWAP=\u6C38\u7EED, FUTURES=\u4EA4\u5272"),
25807
+ amount: external_exports.string().describe("\u8DDF\u5355\u6570\u91CF\u3002\u5FC5\u586B"),
25808
+ amountType: external_exports.string().optional().describe("\u6570\u91CF\u7C7B\u578B\u30021=\u56FA\u5B9A\u5F20\u6570, 2=\u56FA\u5B9A\u91D1\u989D, 3=\u6BD4\u4F8B")
25809
+ },
25810
+ async ({ uniqueCode, instType, amount, amountType }) => {
25811
+ if (!auth) return toError(AUTH_REQUIRED);
25812
+ try {
25813
+ const body = { uniqueCode, instType, amount };
25814
+ if (amountType) body.amountType = amountType;
25815
+ const data = await privateApi.firstCopySettings(auth, body);
25816
+ return toResult(data);
25817
+ } catch (e) {
25818
+ return toError(e);
25819
+ }
25820
+ }
25821
+ );
25822
+ server.tool(
25823
+ "okx_get_unrealized_profit_sharing",
25824
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5E26\u5355\u672A\u5B9E\u73B0\u7684\u5206\u6210\u91D1\u989D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5F53\u524D\u6301\u4ED3\u4E2D\u5C1A\u672A\u7ED3\u7B97\u7684\u6F5C\u5728\u5206\u6210\u6536\u5165\n## \u5173\u952E\u8BCD\uFF1A\u672A\u5B9E\u73B0\u5206\u6210, unrealized profit, \u5F85\u7ED3\u7B97\u5206\u6210, \u6301\u4ED3\u5206\u6210\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\u5F31 ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u672A\u5B9E\u73B0\u5206\u6210 \u2192 okx_get_profit_sharing_total \u770B\u5DF2\u5B9E\u73B0\u5206\u6210",
25825
+ {},
25826
+ async () => {
25827
+ if (!auth) return toError(AUTH_REQUIRED);
25828
+ try {
25829
+ const data = await privateApi.getUnrealizedProfitSharing(auth);
25830
+ return toResult(data);
25831
+ } catch (e) {
25832
+ return toError(e);
25833
+ }
25834
+ }
25835
+ );
25836
+ server.tool(
25837
+ "okx_get_total_unrealized_profit_sharing",
25838
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2\u5E26\u5355\u7D2F\u8BA1\u672A\u5B9E\u73B0\u5206\u6210\u603B\u989D\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u6240\u6709\u5E26\u5355\u7684\u7D2F\u8BA1\u6F5C\u5728\u5206\u6210\u6536\u5165\n## \u5173\u952E\u8BCD\uFF1A\u7D2F\u8BA1\u672A\u5B9E\u73B0, total unrealized, \u672A\u5B9E\u73B0\u603B\u989D, \u6F5C\u5728\u5206\u6210\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\u5F31 ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u770B\u7D2F\u8BA1\u672A\u5B9E\u73B0 \u2192 okx_get_unrealized_profit_sharing \u770B\u660E\u7EC6",
25839
+ {},
25840
+ async () => {
25841
+ if (!auth) return toError(AUTH_REQUIRED);
25842
+ try {
25843
+ const data = await privateApi.getTotalUnrealizedProfitSharing(auth);
25844
+ return toResult(data);
25845
+ } catch (e) {
25846
+ return toError(e);
25847
+ }
25848
+ }
25849
+ );
25850
+ server.tool(
25851
+ "okx_amend_profit_sharing_ratio",
25852
+ "## \u529F\u80FD\uFF1A\u4FEE\u6539\u5E26\u5355\u5206\u6210\u6BD4\u4F8B\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u8DDF\u5355\u8005\u7684\u76C8\u5229\u5206\u6210\u6BD4\u4F8B\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539\u5206\u6210, profit ratio, \u5206\u6210\u6BD4\u4F8B, \u8C03\u6574\u5206\u6210\n## \u53C2\u6570\uFF1A\n## - profitSharingRatio: \u5206\u6210\u6BD4\u4F8B\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u5206\u6210\u6BD4\u4F8B\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u5206\u6210\u6BD4\u4F8B\u5F71\u54CD\u6536\u5165\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_profit_sharing_total \u770B\u5F53\u524D\u5206\u6210 \u2192 \u672C\u5DE5\u5177\u4FEE\u6539\u6BD4\u4F8B",
25853
+ {
25854
+ profitSharingRatio: external_exports.string().describe("\u5206\u6210\u6BD4\u4F8B\u3002\u5FC5\u586B")
25855
+ },
25856
+ async ({ profitSharingRatio }) => {
25857
+ if (!auth) return toError(AUTH_REQUIRED);
25858
+ try {
25859
+ const data = await privateApi.amendProfitSharingRatio(auth, { profitSharingRatio });
25860
+ return toResult(data);
25861
+ } catch (e) {
25862
+ return toError(e);
25863
+ }
25864
+ }
25865
+ );
25866
+ server.tool(
25867
+ "okx_amend_copy_settings",
25868
+ "## \u529F\u80FD\uFF1A\u4FEE\u6539\u8DDF\u5355\u8BBE\u7F6E\n## \u573A\u666F\uFF1A\u7528\u4E8E\u8C03\u6574\u5DF2\u6709\u8DDF\u5355\u7684\u53C2\u6570\u3001\u66F4\u65B0\u8DDF\u5355\u6570\u91CF\u6216\u7C7B\u578B\n## \u5173\u952E\u8BCD\uFF1A\u4FEE\u6539\u8DDF\u5355, amend copy, \u8DDF\u5355\u8C03\u6574, \u8DDF\u5355\u53C2\u6570\u4FEE\u6539\n## \u53C2\u6570\uFF1A\n## - subPosId: \u5B50\u6301\u4ED3ID\u3002\u5FC5\u586B\n## - amount: \u65B0\u8DDF\u5355\u6570\u91CF\u3002\u53EF\u9009\n## - amountType: \u65B0\u6570\u91CF\u7C7B\u578B\u3002\u53EF\u9009\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u4FEE\u6539\u8DDF\u5355\u8BBE\u7F6E\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u4FEE\u6539\u8DDF\u5355\u53C2\u6570\u5F71\u54CD\u540E\u7EED\u8DDF\u5355\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_copy_settings \u67E5\u770B\u5F53\u524D \u2192 \u672C\u5DE5\u5177\u4FEE\u6539 \u2192 \u786E\u8BA4\u53D8\u66F4",
25869
+ {
25870
+ subPosId: external_exports.string().describe("\u5B50\u6301\u4ED3ID\u3002\u5FC5\u586B"),
25871
+ amount: external_exports.string().optional().describe("\u65B0\u8DDF\u5355\u6570\u91CF"),
25872
+ amountType: external_exports.string().optional().describe("\u65B0\u6570\u91CF\u7C7B\u578B\u30021=\u56FA\u5B9A\u5F20\u6570, 2=\u56FA\u5B9A\u91D1\u989D, 3=\u6BD4\u4F8B")
25873
+ },
25874
+ async ({ subPosId, amount, amountType }) => {
25875
+ if (!auth) return toError(AUTH_REQUIRED);
25876
+ try {
25877
+ const body = { subPosId };
25878
+ if (amount) body.amount = amount;
25879
+ if (amountType) body.amountType = amountType;
25880
+ const data = await privateApi.amendCopySettings(auth, body);
25881
+ return toResult(data);
25882
+ } catch (e) {
25883
+ return toError(e);
25884
+ }
25885
+ }
25886
+ );
25724
25887
  }
25725
25888
 
25726
25889
  // src/tools/signal.ts
@@ -26004,6 +26167,116 @@ function registerRfqTools(server, auth) {
26004
26167
  }
26005
26168
  }
26006
26169
  );
26170
+ server.tool(
26171
+ "okx_get_rfq_counterparties",
26172
+ "## \u529F\u80FD\uFF1A\u83B7\u53D6RFQ\u5BF9\u624B\u65B9\u5217\u8868\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u53EF\u8BE2\u4EF7\u7684\u505A\u5E02\u5546\u548C\u5BF9\u624B\u65B9\n## \u5173\u952E\u8BCD\uFF1ARFQ\u5BF9\u624B\u65B9, counterparties, \u62A5\u4EF7\u5BF9\u624B, \u8BE2\u4EF7\u5BF9\u624B\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\u5BF9\u624B\u65B9 \u2192 okx_create_rfq \u53D1\u8D77\u8BE2\u4EF7",
26173
+ {},
26174
+ async () => {
26175
+ if (!auth) return toError(AUTH_REQUIRED);
26176
+ try {
26177
+ const data = await privateApi.getRfqCounterparties(auth);
26178
+ return toResult(data);
26179
+ } catch (e) {
26180
+ return toError(e);
26181
+ }
26182
+ }
26183
+ );
26184
+ server.tool(
26185
+ "okx_cancel_rfq",
26186
+ "## \u529F\u80FD\uFF1A\u53D6\u6D88RFQ\u62A5\u4EF7\u8BF7\u6C42\n## \u573A\u666F\uFF1A\u7528\u4E8E\u53D6\u6D88\u5DF2\u53D1\u9001\u4F46\u672A\u6536\u5230\u62A5\u4EF7\u7684\u8BE2\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u53D6\u6D88\u8BE2\u4EF7, cancel rfq, \u64A4\u9500\u8BE2\u4EF7\n## \u53C2\u6570\uFF1A\n## - rfqId: RFQ ID\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u53D6\u6D88\u8BE2\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u53D6\u6D88\u8BE2\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_rfqs \u67E5\u770B\u8BE2\u4EF7 \u2192 \u672C\u5DE5\u5177\u53D6\u6D88 \u2192 \u91CD\u65B0\u8BE2\u4EF7",
26187
+ {
26188
+ rfqId: external_exports.string().describe("RFQ ID\u3002\u5FC5\u586B")
26189
+ },
26190
+ async ({ rfqId }) => {
26191
+ if (!auth) return toError(AUTH_REQUIRED);
26192
+ try {
26193
+ const data = await privateApi.cancelRfq(auth, { rfqId });
26194
+ return toResult(data);
26195
+ } catch (e) {
26196
+ return toError(e);
26197
+ }
26198
+ }
26199
+ );
26200
+ server.tool(
26201
+ "okx_cancel_batch_rfqs",
26202
+ "## \u529F\u80FD\uFF1A\u6279\u91CF\u53D6\u6D88RFQ\u62A5\u4EF7\u8BF7\u6C42\n## \u573A\u666F\uFF1A\u7528\u4E8E\u540C\u65F6\u53D6\u6D88\u591A\u4E2A\u8BE2\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u6279\u91CF\u53D6\u6D88, cancel batch rfqs, \u6279\u91CF\u64A4\u9500\u8BE2\u4EF7\n## \u53C2\u6570\uFF1A\n## - rfqIds: RFQ ID\u6570\u7EC4\uFF08JSON\u6570\u7EC4\u5B57\u7B26\u4E32\uFF09\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u6279\u91CF\u53D6\u6D88\u8BE2\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u6279\u91CF\u53D6\u6D88\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u4E2D\u7B49 ~2KB\n## \u5173\u8054\uFF1Aokx_get_rfqs \u67E5\u770B\u8BE2\u4EF7 \u2192 \u672C\u5DE5\u5177\u6279\u91CF\u53D6\u6D88",
26203
+ {
26204
+ rfqIds: external_exports.string().describe(`RFQ ID\u6570\u7EC4JSON\u5B57\u7B26\u4E32\uFF0C\u5982 '["123","456"]'`)
26205
+ },
26206
+ async ({ rfqIds }) => {
26207
+ if (!auth) return toError(AUTH_REQUIRED);
26208
+ try {
26209
+ const parsed = JSON.parse(rfqIds);
26210
+ const data = await privateApi.cancelBatchRfqs(auth, parsed);
26211
+ return toResult(data);
26212
+ } catch (e) {
26213
+ return toError(e);
26214
+ }
26215
+ }
26216
+ );
26217
+ server.tool(
26218
+ "okx_cancel_all_rfqs",
26219
+ "## \u529F\u80FD\uFF1A\u53D6\u6D88\u6240\u6709RFQ\u62A5\u4EF7\u8BF7\u6C42\n## \u573A\u666F\uFF1A\u7528\u4E8E\u4E00\u952E\u6E05\u7A7A\u6240\u6709\u672A\u5B8C\u6210\u7684\u8BE2\u4EF7\n## \u5173\u952E\u8BCD\uFF1A\u5168\u90E8\u53D6\u6D88, cancel all rfqs, \u6E05\u7A7A\u8BE2\u4EF7\n## \u53C2\u6570\uFF1A\u65E0\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u53D6\u6D88\u6240\u6709\u8BE2\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u53D6\u6D88\u5168\u90E8\u8BE2\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1A\u672C\u5DE5\u5177\u4E00\u952E\u53D6\u6D88\u6240\u6709 \u2192 okx_create_rfq \u91CD\u65B0\u8BE2\u4EF7",
26220
+ {},
26221
+ async () => {
26222
+ if (!auth) return toError(AUTH_REQUIRED);
26223
+ try {
26224
+ const data = await privateApi.cancelAllRfqs(auth);
26225
+ return toResult(data);
26226
+ } catch (e) {
26227
+ return toError(e);
26228
+ }
26229
+ }
26230
+ );
26231
+ server.tool(
26232
+ "okx_create_quote",
26233
+ "## \u529F\u80FD\uFF1A\u521B\u5EFA\u62A5\u4EF7\uFF08\u56DE\u590DRFQ\u8BE2\u4EF7\uFF09\n## \u573A\u666F\uFF1A\u7528\u4E8E\u505A\u5E02\u5546\u56DE\u590D\u8BE2\u4EF7\u3001\u63D0\u4F9B\u62A5\u4EF7\n## \u53C2\u6570\uFF1A\n## - rfqId: RFQ ID\u3002\u5FC5\u586B\n## - quotePx: \u62A5\u4EF7\u4EF7\u683C\u3002\u5FC5\u586B\n## - sz: \u62A5\u4EF7\u6570\u91CF\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u53D1\u9001\u62A5\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u53D1\u9001\u62A5\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~500B\n## \u5173\u8054\uFF1Aokx_get_rfqs \u67E5\u770B\u8BE2\u4EF7 \u2192 \u672C\u5DE5\u5177\u62A5\u4EF7 \u2192 okx_get_quotes \u67E5\u770B\u62A5\u4EF7",
26234
+ {
26235
+ rfqId: external_exports.string().describe("RFQ ID\u3002\u5FC5\u586B"),
26236
+ quotePx: external_exports.string().describe("\u62A5\u4EF7\u4EF7\u683C\u3002\u5FC5\u586B"),
26237
+ sz: external_exports.string().describe("\u62A5\u4EF7\u6570\u91CF\u3002\u5FC5\u586B")
26238
+ },
26239
+ async ({ rfqId, quotePx, sz }) => {
26240
+ if (!auth) return toError(AUTH_REQUIRED);
26241
+ try {
26242
+ const data = await privateApi.createRfqQuote(auth, { rfqId, quotePx, sz });
26243
+ return toResult(data);
26244
+ } catch (e) {
26245
+ return toError(e);
26246
+ }
26247
+ }
26248
+ );
26249
+ server.tool(
26250
+ "okx_cancel_quote",
26251
+ "## \u529F\u80FD\uFF1A\u53D6\u6D88\u5DF2\u53D1\u9001\u7684\u62A5\u4EF7\n## \u573A\u666F\uFF1A\u7528\u4E8E\u53D6\u6D88\u5C1A\u672A\u88AB\u63A5\u53D7\u7684\u62A5\u4EF7\n## \u53C2\u6570\uFF1A\n## - rfqId: RFQ ID\u3002\u5FC5\u586B\n## - quoteId: \u62A5\u4EF7ID\u3002\u5FC5\u586B\n## \u9274\u6743\uFF1A\u{1F534} \u9700\u8981 API Key\uFF08\u4EA4\u6613\uFF09- \u5C06\u53D6\u6D88\u62A5\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u98CE\u9669\uFF1AWRITE \u2014 \u53D6\u6D88\u62A5\u4EF7\uFF0C\u8C03\u7528\u524D\u5FC5\u987B\u786E\u8BA4\n## \u8FD4\u56DE\u91CF\uFF1A\u5FAE\u5C0F ~300B\n## \u5173\u8054\uFF1Aokx_get_quotes \u67E5\u770B\u62A5\u4EF7 \u2192 \u672C\u5DE5\u5177\u53D6\u6D88 \u2192 \u91CD\u65B0\u62A5\u4EF7",
26252
+ {
26253
+ rfqId: external_exports.string().describe("RFQ ID\u3002\u5FC5\u586B"),
26254
+ quoteId: external_exports.string().describe("\u62A5\u4EF7ID\u3002\u5FC5\u586B")
26255
+ },
26256
+ async ({ rfqId, quoteId }) => {
26257
+ if (!auth) return toError(AUTH_REQUIRED);
26258
+ try {
26259
+ const data = await privateApi.cancelRfqQuote(auth, { rfqId, quoteId });
26260
+ return toResult(data);
26261
+ } catch (e) {
26262
+ return toError(e);
26263
+ }
26264
+ }
26265
+ );
26266
+ server.tool(
26267
+ "okx_get_rfq_trades",
26268
+ "## \u529F\u80FD\uFF1A\u67E5\u8BE2RFQ\u6210\u4EA4\u8BB0\u5F55\n## \u573A\u666F\uFF1A\u7528\u4E8E\u67E5\u770B\u5927\u5B97\u4EA4\u6613\u7684\u6210\u4EA4\u5386\u53F2\n## \u5173\u952E\u8BCD\uFF1ARFQ\u6210\u4EA4, rfq trades, \u5927\u5B97\u6210\u4EA4, \u8BE2\u4EF7\u6210\u4EA4\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\uFF1Aokx_get_rfqs \u67E5\u8BE2\u4EF7 \u2192 \u672C\u5DE5\u5177\u67E5\u6210\u4EA4 \u2192 \u6838\u5BF9\u5927\u5B97\u4EA4\u6613",
26269
+ {},
26270
+ async () => {
26271
+ if (!auth) return toError(AUTH_REQUIRED);
26272
+ try {
26273
+ const data = await privateApi.getRfqTrades(auth);
26274
+ return toResult(data);
26275
+ } catch (e) {
26276
+ return toError(e);
26277
+ }
26278
+ }
26279
+ );
26007
26280
  }
26008
26281
 
26009
26282
  // src/tools/affiliate.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hvip-mcp-server",
3
- "version": "0.2.28",
3
+ "version": "0.2.29",
4
4
  "description": "OKX ecosystem MCP server - full API coverage for AI agents",
5
5
  "homepage": "https://hvip.one",
6
6
  "license": "MIT",