hchain-mcp 1.0.0

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 (56) hide show
  1. package/.env.example +5 -0
  2. package/AGENT-MCP-RULES.md +248 -0
  3. package/OnchainOS-API/345/257/271/346/216/245/350/247/204/350/214/203.md +329 -0
  4. package/README.md +106 -0
  5. package/dist/adapters/onchainos-ws.d.ts +31 -0
  6. package/dist/adapters/onchainos-ws.js +103 -0
  7. package/dist/adapters/onchainos.d.ts +343 -0
  8. package/dist/adapters/onchainos.js +275 -0
  9. package/dist/adapters/shared.d.ts +23 -0
  10. package/dist/adapters/shared.js +107 -0
  11. package/dist/http.d.ts +9 -0
  12. package/dist/http.js +124 -0
  13. package/dist/index.d.ts +6 -0
  14. package/dist/index.js +54 -0
  15. package/dist/tools/balance.d.ts +4 -0
  16. package/dist/tools/balance.js +69 -0
  17. package/dist/tools/defi.d.ts +4 -0
  18. package/dist/tools/defi.js +268 -0
  19. package/dist/tools/gateway.d.ts +4 -0
  20. package/dist/tools/gateway.js +107 -0
  21. package/dist/tools/intent.d.ts +4 -0
  22. package/dist/tools/intent.js +111 -0
  23. package/dist/tools/market.d.ts +4 -0
  24. package/dist/tools/market.js +612 -0
  25. package/dist/tools/payments.d.ts +4 -0
  26. package/dist/tools/payments.js +100 -0
  27. package/dist/tools/skills.d.ts +4 -0
  28. package/dist/tools/skills.js +464 -0
  29. package/dist/tools/trade.d.ts +4 -0
  30. package/dist/tools/trade.js +195 -0
  31. package/dist/tools/txhistory.d.ts +4 -0
  32. package/dist/tools/txhistory.js +49 -0
  33. package/dist/tools/ws.d.ts +4 -0
  34. package/dist/tools/ws.js +64 -0
  35. package/docs/DEFI.md +65 -0
  36. package/docs/GATEWAY.md +45 -0
  37. package/docs/MARKET.md +109 -0
  38. package/docs/PAYMENTS.md +83 -0
  39. package/docs/TRADE.md +103 -0
  40. package/package.json +25 -0
  41. package/src/adapters/onchainos-ws.ts +126 -0
  42. package/src/adapters/onchainos.ts +488 -0
  43. package/src/adapters/shared.ts +100 -0
  44. package/src/http.ts +132 -0
  45. package/src/index.ts +57 -0
  46. package/src/tools/balance.ts +67 -0
  47. package/src/tools/defi.ts +224 -0
  48. package/src/tools/gateway.ts +115 -0
  49. package/src/tools/intent.ts +106 -0
  50. package/src/tools/market.ts +543 -0
  51. package/src/tools/payments.ts +105 -0
  52. package/src/tools/skills.ts +489 -0
  53. package/src/tools/trade.ts +197 -0
  54. package/src/tools/txhistory.ts +51 -0
  55. package/src/tools/ws.ts +72 -0
  56. package/tsconfig.json +18 -0
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Intent 模块 — CAT:[链上-Swap]
3
+ * 意图兑换: quote(mode=intent) -> createOrder -> orderList/orderStatus -> cancelSignData/cancelOrder
4
+ */
5
+ import { z } from "zod";
6
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import { intentApi } from "../adapters/onchainos.js";
8
+ import { toResult, toError, AUTH_REQUIRED } from "../adapters/shared.js";
9
+ import type { Auth } from "../adapters/shared.js";
10
+
11
+ export function registerIntentTools(server: McpServer, auth: Auth | null): void {
12
+
13
+ server.tool("onchainos_intent_create_order",
14
+ "CAT:[链上-Swap] | ## 功能: 创建意图订单, 提交 EIP-712 签名的订单到撮合系统, 返回 orderUid\n## 场景: quote 拿到 signData -> 用户 EIP-712 签名 -> 本工具创建订单 -> 等待 Solver 竞价成交\n## 关键词: intent, 意图, 订单, create, EIP-712, solver\n## 参数:\n## - chainIndex/fromTokenAddress/toTokenAddress/fromTokenAmount/toTokenAmount/userWalletAddress/validTo/quoteId/appData/signature(必填)\n## - commissionInfos: 分佣列表 JSON(可选)\n## - swapReceiverAddress: 接收代币地址(可选)\n## 鉴权: 需要 API Key(交易)\n## 风险: WRITE - 创建链上意图订单\n## 返回量: 微小 ~1KB\n## 关联: quote(mode=intent) -> 本工具 -> onchainos_intent_order_status / onchainos_intent_order_list",
15
+ {
16
+ chainIndex: z.string().describe("链索引。仅支持 ETH(1)/BSC(56)/Arbitrum(42161)/Base(8453)"),
17
+ fromTokenAddress: z.string().describe("卖出代币地址。须与 quote 的 signData.message.fromTokenAddress 一致"),
18
+ toTokenAddress: z.string().describe("买入代币地址。须与 quote 的 signData.message.toTokenAddress 一致"),
19
+ fromTokenAmount: z.string().describe("卖出数量(最小单位)。须与 quote 的 signData.message.fromTokenAmount 一致"),
20
+ toTokenAmount: z.string().describe("最小买入数量(最小单位)。由 quote 的 signData.message.toTokenAmount 结合滑点计算"),
21
+ userWalletAddress: z.string().describe("下单钱包地址。须与 quote 的 signData.message.owner 一致"),
22
+ validTo: z.number().int().describe("订单过期Unix时间戳(秒)。须与 quote 的 signData.message.validTo 一致"),
23
+ quoteId: z.string().describe("报价ID。从 quote(mode=intent) 返回值获取"),
24
+ appData: z.string().describe("应用数据(bytes32)。须与 quote 的 signData.message.appData 一致"),
25
+ signature: z.string().describe("用户私钥对 quote 返回的 signData 进行 EIP-712 签名的结果"),
26
+ swapReceiverAddress: z.string().optional().describe("接收代币的地址, 默认=userWalletAddress"),
27
+ commissionInfos: z.string().optional().describe("分佣列表 JSON 数组。须与 quote 的 signData.message.commissionInfos 一致"),
28
+ },
29
+ { destructiveHint: true },
30
+ async ({ chainIndex, fromTokenAddress, toTokenAddress, fromTokenAmount, toTokenAmount, userWalletAddress, validTo, quoteId, appData, signature, swapReceiverAddress, commissionInfos }) => {
31
+ if(!auth) return AUTH_REQUIRED("TRADE");
32
+ try {
33
+ const body: Record<string, unknown> = { chainIndex, fromTokenAddress, toTokenAddress, fromTokenAmount, toTokenAmount, userWalletAddress, validTo, quoteId, appData, signature };
34
+ if (swapReceiverAddress) body.swapReceiverAddress = swapReceiverAddress;
35
+ if (commissionInfos) { try { body.commissionInfos = JSON.parse(commissionInfos); } catch { return toError(new Error("commissionInfos 格式错误")); } }
36
+ return toResult(await intentApi.createOrder(auth, body), {
37
+ nextSteps: [
38
+ { action: "查订单状态", tool: "onchainos_intent_order_status", params: { orderUid: "{{返回的 orderUid}}" } },
39
+ ],
40
+ });
41
+ } catch(e) { return toError(e); }
42
+ },
43
+ );
44
+
45
+ server.tool("onchainos_intent_order_list",
46
+ "CAT:[链上-Swap] | ## 功能: 查询意图订单历史, 返回 dataList/游标分页\n## 场景: 查看地址的意图订单成交记录\n## 关键词: intent, 订单列表, order list, 分页\n## 参数:\n## - userWalletAddress/orderUid: 二选一必填\n## - cursor/limit: 分页(可选)\n## 鉴权: 需要 API Key(只读)\n## 风险: READ - 只读查询\n## 返回量: 中等 ~20KB\n## 关联: onchainos_intent_create_order -> 本工具",
47
+ {
48
+ userWalletAddress: z.string().optional().describe("下单钱包地址。与 orderUid 二选一必填"),
49
+ orderUid: z.string().optional().describe("订单ID。与 userWalletAddress 二选一必填"),
50
+ cursor: z.string().optional().describe("分页游标, 首次不传"),
51
+ limit: z.number().int().max(500).optional().describe("每页条数, 默认100, 最大500"),
52
+ },
53
+ { readOnlyHint: true },
54
+ async (params) => {
55
+ if(!auth) return AUTH_REQUIRED("READ");
56
+ if (!params.userWalletAddress && !params.orderUid) return toError(new Error("userWalletAddress 和 orderUid 二选一必填"));
57
+ try { return toResult(await intentApi.orderList(auth, params)); } catch(e) { return toError(e); }
58
+ },
59
+ );
60
+
61
+ server.tool("onchainos_intent_order_status",
62
+ "CAT:[链上-Swap] | ## 功能: 查询意图订单当前状态\n## 场景: 创建订单后跟踪成交进度\n## 关键词: intent, order status, 订单状态\n## 参数:\n## - orderUid: 订单ID(必填)\n## 鉴权: 需要 API Key(只读)\n## 风险: READ - 只读查询\n## 返回量: 微小 ~1KB\n## 关联: onchainos_intent_create_order -> 本工具\n## 状态码: -7=已过期 -6=余额不足 -2=已取消 -1=失败 0=结算中 1=已成交 3=活跃 5=拍卖中",
63
+ { orderUid: z.string().describe("订单ID。从 onchainos_intent_create_order 返回值获取") },
64
+ { readOnlyHint: true },
65
+ async ({ orderUid }) => { if(!auth) return AUTH_REQUIRED("READ"); try { return toResult(await intentApi.orderStatus(auth, orderUid)); } catch(e) { return toError(e); } },
66
+ );
67
+
68
+ server.tool("onchainos_intent_cancel_sign_data",
69
+ "CAT:[链上-Swap] | ## 功能: 获取取消意图订单所需的 EIP-712 签名数据\n## 场景: 取消订单前拿签名数据\n## 关键词: intent, cancel, sign data, EIP-712\n## 参数:\n## - userWalletAddress: 下单钱包(必填)\n## - orderUid: 订单ID(必填)\n## 鉴权: 需要 API Key(只读)\n## 风险: READ - 只读查询\n## 返回量: 微小 ~2KB\n## 关联: 本工具 -> 用户 EIP-712 签名 -> onchainos_intent_cancel_order",
70
+ {
71
+ userWalletAddress: z.string().describe("下单者钱包地址"),
72
+ orderUid: z.string().describe("要取消的订单ID"),
73
+ },
74
+ { readOnlyHint: true },
75
+ async ({ userWalletAddress, orderUid }) => { if(!auth) return AUTH_REQUIRED("READ"); try { return toResult(await intentApi.cancelSignData(auth, userWalletAddress, orderUid)); } catch(e) { return toError(e); } },
76
+ );
77
+
78
+ server.tool("onchainos_intent_cancel_order",
79
+ "CAT:[链上-Swap] | ## 功能: 取消意图订单\n## 场景: 在订单成交前撤销\n## 关键词: intent, cancel, 取消订单\n## 参数:\n## - userWalletAddress/orderUid/signature(必填)\n## 鉴权: 需要 API Key(交易)\n## 风险: WRITE - 取消订单\n## 返回量: 微小 ~1KB\n## 关联: onchainos_intent_cancel_sign_data -> 签名 -> 本工具",
80
+ {
81
+ userWalletAddress: z.string().describe("下单者钱包地址"),
82
+ orderUid: z.string().describe("要取消的订单ID"),
83
+ signature: z.string().describe("用户对 cancel_sign_data 返回的 signData 进行 EIP-712 签名的结果"),
84
+ },
85
+ { destructiveHint: true },
86
+ async ({ userWalletAddress, orderUid, signature }) => {
87
+ if(!auth) return AUTH_REQUIRED("TRADE");
88
+ try { return toResult(await intentApi.cancelOrder(auth, userWalletAddress, orderUid, signature)); } catch(e) { return toError(e); }
89
+ },
90
+ );
91
+
92
+ server.tool("onchainos_intent_auction_info",
93
+ "CAT:[链上-Swap] | ## 功能: 查询意图拍卖详情, 含各 Solver 竞价方案/排名/成交信息\n## 场景: 分析某次拍卖的 Solver 竞争情况\n## 关键词: intent, auction, 拍卖, solver, 竞价\n## 参数:\n## - auctionId/txHash: 二选一必填\n## 鉴权: 需要 API Key(只读)\n## 风险: READ - 只读查询\n## 返回量: 中等 ~10KB\n## 关联: onchainos_intent_create_order -> 本工具",
94
+ {
95
+ auctionId: z.string().optional().describe("拍卖ID。与 txHash 二选一必填"),
96
+ txHash: z.string().optional().describe("上链交易哈希。与 auctionId 二选一必填"),
97
+ },
98
+ { readOnlyHint: true },
99
+ async ({ auctionId, txHash }) => {
100
+ if(!auth) return AUTH_REQUIRED("READ");
101
+ if (!auctionId && !txHash) return toError(new Error("auctionId 和 txHash 二选一必填"));
102
+ try { return toResult(await intentApi.auctionInfo(auth, { auctionId, txHash })); } catch(e) { return toError(e); }
103
+ },
104
+ );
105
+
106
+ }