@varun-ai07/covenant-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 (90) hide show
  1. package/README.md +1078 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +195 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/colors.d.ts +14 -0
  7. package/dist/colors.d.ts.map +1 -0
  8. package/dist/colors.js +14 -0
  9. package/dist/colors.js.map +1 -0
  10. package/dist/config.d.ts +396 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +191 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/handlers/transactions.d.ts +5 -0
  15. package/dist/handlers/transactions.d.ts.map +1 -0
  16. package/dist/handlers/transactions.js +82 -0
  17. package/dist/handlers/transactions.js.map +1 -0
  18. package/dist/handlers/wallet.d.ts +24 -0
  19. package/dist/handlers/wallet.d.ts.map +1 -0
  20. package/dist/handlers/wallet.js +264 -0
  21. package/dist/handlers/wallet.js.map +1 -0
  22. package/dist/index.d.ts +3 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +49 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/logger.d.ts +11 -0
  27. package/dist/logger.d.ts.map +1 -0
  28. package/dist/logger.js +31 -0
  29. package/dist/logger.js.map +1 -0
  30. package/dist/postinstall.d.ts +3 -0
  31. package/dist/postinstall.d.ts.map +1 -0
  32. package/dist/postinstall.js +38 -0
  33. package/dist/postinstall.js.map +1 -0
  34. package/dist/schemas.d.ts +48 -0
  35. package/dist/schemas.d.ts.map +1 -0
  36. package/dist/schemas.js +114 -0
  37. package/dist/schemas.js.map +1 -0
  38. package/dist/server.d.ts +23 -0
  39. package/dist/server.d.ts.map +1 -0
  40. package/dist/server.js +51 -0
  41. package/dist/server.js.map +1 -0
  42. package/dist/tools/batches.d.ts +3 -0
  43. package/dist/tools/batches.d.ts.map +1 -0
  44. package/dist/tools/batches.js +167 -0
  45. package/dist/tools/batches.js.map +1 -0
  46. package/dist/tools/collectives.d.ts +3 -0
  47. package/dist/tools/collectives.d.ts.map +1 -0
  48. package/dist/tools/collectives.js +168 -0
  49. package/dist/tools/collectives.js.map +1 -0
  50. package/dist/tools/disputes.d.ts +3 -0
  51. package/dist/tools/disputes.d.ts.map +1 -0
  52. package/dist/tools/disputes.js +129 -0
  53. package/dist/tools/disputes.js.map +1 -0
  54. package/dist/tools/escrow.d.ts +3 -0
  55. package/dist/tools/escrow.d.ts.map +1 -0
  56. package/dist/tools/escrow.js +238 -0
  57. package/dist/tools/escrow.js.map +1 -0
  58. package/dist/tools/insurance.d.ts +3 -0
  59. package/dist/tools/insurance.d.ts.map +1 -0
  60. package/dist/tools/insurance.js +101 -0
  61. package/dist/tools/insurance.js.map +1 -0
  62. package/dist/tools/market.d.ts +3 -0
  63. package/dist/tools/market.d.ts.map +1 -0
  64. package/dist/tools/market.js +303 -0
  65. package/dist/tools/market.js.map +1 -0
  66. package/dist/tools/protocol.d.ts +3 -0
  67. package/dist/tools/protocol.d.ts.map +1 -0
  68. package/dist/tools/protocol.js +121 -0
  69. package/dist/tools/protocol.js.map +1 -0
  70. package/dist/tools/receipts.d.ts +3 -0
  71. package/dist/tools/receipts.d.ts.map +1 -0
  72. package/dist/tools/receipts.js +88 -0
  73. package/dist/tools/receipts.js.map +1 -0
  74. package/dist/tools/registry.d.ts +3 -0
  75. package/dist/tools/registry.d.ts.map +1 -0
  76. package/dist/tools/registry.js +136 -0
  77. package/dist/tools/registry.js.map +1 -0
  78. package/dist/transports/http.d.ts +3 -0
  79. package/dist/transports/http.d.ts.map +1 -0
  80. package/dist/transports/http.js +121 -0
  81. package/dist/transports/http.js.map +1 -0
  82. package/dist/transports/stdio.d.ts +7 -0
  83. package/dist/transports/stdio.d.ts.map +1 -0
  84. package/dist/transports/stdio.js +9 -0
  85. package/dist/transports/stdio.js.map +1 -0
  86. package/dist/types.d.ts +89 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +24 -0
  89. package/dist/types.js.map +1 -0
  90. package/package.json +70 -0
@@ -0,0 +1,168 @@
1
+ /**
2
+ * AgentCollective MCP Tools
3
+ *
4
+ * create_collective — Create a new agent collective
5
+ * join_collective — Join an existing collective
6
+ * launch_collective_task — Launch a task from a collective
7
+ * get_collective — Get collective details
8
+ */
9
+ import { z } from "zod";
10
+ import { parseEther, formatEther, isAddress } from "viem";
11
+ import { loadAbi, CONTRACTS, getAccount } from "../config.js";
12
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
13
+ import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
14
+ const ABI = loadAbi("AgentCollective");
15
+ // Input validation schemas
16
+ const createCollectiveSchema = z.object({
17
+ minContribution: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount"),
18
+ maxMembers: z.number().int().min(2).max(100),
19
+ });
20
+ const joinCollectiveSchema = z.object({
21
+ collectiveId: z.number().int().positive(),
22
+ contribution: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount"),
23
+ });
24
+ const launchTaskSchema = z.object({
25
+ collectiveId: z.number().int().positive(),
26
+ workerAddress: z.string().refine(isAddress, { message: "Invalid worker address" }),
27
+ payment: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount"),
28
+ deadline: z.number().int().positive(),
29
+ descriptionHash: z.string().min(1).max(100),
30
+ });
31
+ export function registerCollectiveTools(server) {
32
+ // ──────────────────────────────────────────────────────────────
33
+ // create_collective
34
+ // ──────────────────────────────────────────────────────────────
35
+ server.registerTool("create_collective", {
36
+ title: "Create Agent Collective",
37
+ description: "Create a new collective of agents that pool resources. " +
38
+ "Collectives can launch tasks and share proceeds.",
39
+ inputSchema: {
40
+ minContribution: z.string().describe("Minimum contribution in ETH to join"),
41
+ maxMembers: z.number().describe("Maximum number of members (2-100)"),
42
+ },
43
+ }, async ({ minContribution, maxMembers }) => {
44
+ try {
45
+ const validation = createCollectiveSchema.safeParse({ minContribution, maxMembers });
46
+ if (!validation.success) {
47
+ return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
48
+ }
49
+ const account = getAccount();
50
+ if (!account) {
51
+ return formatError(new Error("No private key configured"));
52
+ }
53
+ const minContributionWei = parseEther(minContribution);
54
+ const result = await executeOrPrepare(CONTRACTS.AgentCollective, ABI, "createCollective", [minContributionWei, BigInt(maxMembers)]);
55
+ return formatTxResult(result);
56
+ }
57
+ catch (e) {
58
+ return formatError(e);
59
+ }
60
+ });
61
+ // ──────────────────────────────────────────────────────────────
62
+ // join_collective
63
+ // ──────────────────────────────────────────────────────────────
64
+ server.registerTool("join_collective", {
65
+ title: "Join Collective",
66
+ description: "Join an existing collective by contributing ETH. " +
67
+ "Contribution must meet the collective's minimum.",
68
+ inputSchema: {
69
+ collectiveId: z.number().describe("Collective ID to join"),
70
+ contribution: z.string().describe("Contribution amount in ETH"),
71
+ },
72
+ }, async ({ collectiveId, contribution }) => {
73
+ try {
74
+ const validation = joinCollectiveSchema.safeParse({ collectiveId, contribution });
75
+ if (!validation.success) {
76
+ return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
77
+ }
78
+ const account = getAccount();
79
+ if (!account) {
80
+ return formatError(new Error("No private key configured"));
81
+ }
82
+ const contributionWei = parseEther(contribution);
83
+ const result = await executeOrPrepare(CONTRACTS.AgentCollective, ABI, "joinCollective", [BigInt(collectiveId)], contributionWei);
84
+ return formatTxResult(result);
85
+ }
86
+ catch (e) {
87
+ return formatError(e);
88
+ }
89
+ });
90
+ // ──────────────────────────────────────────────────────────────
91
+ // launch_collective_task
92
+ // ──────────────────────────────────────────────────────────────
93
+ server.registerTool("launch_collective_task", {
94
+ title: "Launch Collective Task",
95
+ description: "Launch a task from a collective's pooled funds. " +
96
+ "Only collective members can call this.",
97
+ inputSchema: {
98
+ collectiveId: z.number().describe("Collective ID"),
99
+ workerAddress: z.string().describe("Worker address to assign"),
100
+ payment: z.string().describe("Payment amount in ETH"),
101
+ deadline: z.number().describe("Deadline timestamp (seconds)"),
102
+ descriptionHash: z.string().describe("IPFS CID for task description"),
103
+ },
104
+ }, async ({ collectiveId, workerAddress, payment, deadline, descriptionHash }) => {
105
+ try {
106
+ const validation = launchTaskSchema.safeParse({ collectiveId, workerAddress, payment, deadline, descriptionHash });
107
+ if (!validation.success) {
108
+ return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
109
+ }
110
+ const account = getAccount();
111
+ if (!account) {
112
+ return formatError(new Error("No private key configured"));
113
+ }
114
+ const paymentWei = parseEther(payment);
115
+ const result = await executeOrPrepare(CONTRACTS.AgentCollective, ABI, "launchTask", [
116
+ BigInt(collectiveId),
117
+ workerAddress,
118
+ paymentWei,
119
+ BigInt(deadline),
120
+ descriptionHash,
121
+ ]);
122
+ return formatTxResult(result);
123
+ }
124
+ catch (e) {
125
+ return formatError(e);
126
+ }
127
+ });
128
+ // ──────────────────────────────────────────────────────────────
129
+ // get_collective
130
+ // ──────────────────────────────────────────────────────────────
131
+ server.registerTool("get_collective", {
132
+ title: "Get Collective Details",
133
+ description: "Retrieve details about a collective including members and treasury.",
134
+ inputSchema: {
135
+ collectiveId: z.number().describe("Collective ID"),
136
+ },
137
+ }, async ({ collectiveId }) => {
138
+ try {
139
+ const data = await readContract(CONTRACTS.AgentCollective, ABI, "getCollective", [BigInt(collectiveId)]);
140
+ const enriched = {
141
+ ...data,
142
+ minContributionEth: formatEther(data.minContribution),
143
+ treasuryEth: formatEther(data.treasury),
144
+ };
145
+ return formatReadResult(enriched, `Collective #${collectiveId}`);
146
+ }
147
+ catch (e) {
148
+ return formatError(e);
149
+ }
150
+ });
151
+ // ──────────────────────────────────────────────────────────────
152
+ // get_collective_counter
153
+ // ──────────────────────────────────────────────────────────────
154
+ server.registerTool("get_collective_counter", {
155
+ title: "Get Collective Counter",
156
+ description: "Get the total number of collectives created.",
157
+ inputSchema: {},
158
+ }, async () => {
159
+ try {
160
+ const count = await readContract(CONTRACTS.AgentCollective, ABI, "collectiveCounter", []);
161
+ return formatReadResult({ count: Number(count) }, "Collective Counter");
162
+ }
163
+ catch (e) {
164
+ return formatError(e);
165
+ }
166
+ });
167
+ }
168
+ //# sourceMappingURL=collectives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectives.js","sourceRoot":"","sources":["../../src/tools/collectives.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAgB,SAAS,EAAE,MAAM,MAAM,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG5F,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,2BAA2B;AAC3B,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC;IACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACzC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAClF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC9D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACrC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,iEAAiE;IACjE,oBAAoB;IACpB,iEAAiE;IACjE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EACT,yDAAyD;YACzD,kDAAkD;QACpD,WAAW,EAAE;YACX,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;YAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SACrE;KACF,EACD,KAAK,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,sBAAsB,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5G,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,SAAS,CAAC,eAAe,EACzB,GAAG,EACH,kBAAkB,EAClB,CAAC,kBAAkB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CACzC,CAAC;YACF,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,kBAAkB;IAClB,iEAAiE;IACjE,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,mDAAmD;YACnD,kDAAkD;QACpD,WAAW,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC1D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;SAChE;KACF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5G,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,SAAS,CAAC,eAAe,EACzB,GAAG,EACH,gBAAgB,EAChB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EACtB,eAAe,CAChB,CAAC;YACF,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,yBAAyB;IACzB,iEAAiE;IACjE,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,kDAAkD;YAClD,wCAAwC;QAC1C,WAAW,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAClD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC9D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YAC7D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;SACtE;KACF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE;QAC5E,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;YACnH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,kBAAkB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5G,CAAC;YAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC,SAAS,CAAC,eAAe,EACzB,GAAG,EACH,YAAY,EACZ;gBACE,MAAM,CAAC,YAAY,CAAC;gBACpB,aAAwB;gBACxB,UAAU;gBACV,MAAM,CAAC,QAAQ,CAAC;gBAChB,eAAgC;aACjC,CACF,CAAC;YACF,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,iBAAiB;IACjB,iEAAiE;IACjE,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,qEAAqE;QAClF,WAAW,EAAE;YACX,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;SACnD;KACF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAC7B,SAAS,CAAC,eAAe,EACzB,GAAG,EACH,eAAe,EACf,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CACvB,CAAC;YAEF,MAAM,QAAQ,GAAG;gBACf,GAAI,IAAY;gBAChB,kBAAkB,EAAE,WAAW,CAAE,IAAY,CAAC,eAAe,CAAC;gBAC9D,WAAW,EAAE,WAAW,CAAE,IAAY,CAAC,QAAQ,CAAC;aACjD,CAAC;YACF,OAAO,gBAAgB,CAAC,QAAQ,EAAE,eAAe,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,iEAAiE;IACjE,yBAAyB;IACzB,iEAAiE;IACjE,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,8CAA8C;QAC3D,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAC9B,SAAS,CAAC,eAAe,EACzB,GAAG,EACH,mBAAmB,EACnB,EAAE,CACH,CAAC;YACF,OAAO,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerDisputeTools(server: McpServer): void;
3
+ //# sourceMappingURL=disputes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disputes.d.ts","sourceRoot":"","sources":["../../src/tools/disputes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoJ5D"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * DisputeArbitration MCP Tools
3
+ *
4
+ * file_dispute — File a dispute on a task
5
+ * cast_vote — Cast a vote on a dispute
6
+ * get_dispute — Get dispute details
7
+ * get_dispute_counter — Get total disputes
8
+ */
9
+ import { z } from "zod";
10
+ import { parseEther, formatEther } from "viem";
11
+ import { loadAbi, CONTRACTS, getAccount } from "../config.js";
12
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
13
+ import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
14
+ const ABI = loadAbi("DisputeArbitration");
15
+ // Input validation schemas
16
+ const fileDisputeSchema = z.object({
17
+ taskId: z.number().int().positive(),
18
+ bond: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount")
19
+ .refine(val => parseFloat(val) >= 0.001, { message: "Bond must be at least 0.001 ETH" }),
20
+ });
21
+ const castVoteSchema = z.object({
22
+ disputeId: z.number().int().positive(),
23
+ inFavorOfWorker: z.boolean(),
24
+ });
25
+ export function registerDisputeTools(server) {
26
+ // ──────────────────────────────────────────────────────────────
27
+ // file_dispute
28
+ // ──────────────────────────────────────────────────────────────
29
+ server.registerTool("file_dispute", {
30
+ title: "File Dispute",
31
+ description: "File a formal dispute on a task. Requires a bond in ETH. " +
32
+ "The dispute will be resolved by juror voting.",
33
+ inputSchema: {
34
+ taskId: z.number().describe("Task ID to dispute"),
35
+ bond: z.string().describe("Dispute bond amount in ETH"),
36
+ },
37
+ }, async ({ taskId, bond }) => {
38
+ try {
39
+ const validation = fileDisputeSchema.safeParse({ taskId, bond });
40
+ if (!validation.success) {
41
+ return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
42
+ }
43
+ const account = getAccount();
44
+ if (!account) {
45
+ return formatError(new Error("No private key configured"));
46
+ }
47
+ const bondWei = parseEther(bond);
48
+ const result = await executeOrPrepare(CONTRACTS.DisputeArbitration, ABI, "disputeTask", [BigInt(taskId)], bondWei);
49
+ return formatTxResult(result);
50
+ }
51
+ catch (e) {
52
+ return formatError(e);
53
+ }
54
+ });
55
+ // ──────────────────────────────────────────────────────────────
56
+ // cast_vote
57
+ // ──────────────────────────────────────────────────────────────
58
+ server.registerTool("cast_vote", {
59
+ title: "Cast Vote",
60
+ description: "Cast your vote on a dispute. True = favor worker, False = favor client. " +
61
+ "Only selected jurors can vote.",
62
+ inputSchema: {
63
+ disputeId: z.number().describe("Dispute ID"),
64
+ inFavorOfWorker: z.boolean().describe("True to vote for worker, false for client"),
65
+ },
66
+ }, async ({ disputeId, inFavorOfWorker }) => {
67
+ try {
68
+ const validation = castVoteSchema.safeParse({ disputeId, inFavorOfWorker });
69
+ if (!validation.success) {
70
+ return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
71
+ }
72
+ const account = getAccount();
73
+ if (!account) {
74
+ return formatError(new Error("No private key configured"));
75
+ }
76
+ const result = await executeOrPrepare(CONTRACTS.DisputeArbitration, ABI, "castVote", [BigInt(disputeId), inFavorOfWorker], undefined, "DisputeArbitration");
77
+ return formatTxResult(result);
78
+ }
79
+ catch (e) {
80
+ return formatError(e);
81
+ }
82
+ });
83
+ // ──────────────────────────────────────────────────────────────
84
+ // get_dispute
85
+ // ──────────────────────────────────────────────────────────────
86
+ server.registerTool("get_dispute", {
87
+ title: "Get Dispute Details",
88
+ description: "Retrieve full details of a dispute including votes and resolution status.",
89
+ inputSchema: {
90
+ disputeId: z.number().describe("Dispute ID"),
91
+ },
92
+ }, async ({ disputeId }) => {
93
+ try {
94
+ const data = await readContract(CONTRACTS.DisputeArbitration, ABI, "getDispute", [BigInt(disputeId)]);
95
+ const enriched = {
96
+ taskId: data.taskId,
97
+ client: data.client,
98
+ worker: data.worker,
99
+ disputeBondEth: formatEther(data.disputeBond),
100
+ jurors: data.jurors,
101
+ resolved: data.resolved,
102
+ workerWins: data.workerWins,
103
+ createdAt: data.createdAt,
104
+ votingEndsAt: data.votingEndsAt,
105
+ };
106
+ return formatReadResult(enriched, `Dispute #${disputeId}`);
107
+ }
108
+ catch (e) {
109
+ return formatError(e);
110
+ }
111
+ });
112
+ // ──────────────────────────────────────────────────────────────
113
+ // get_dispute_counter
114
+ // ──────────────────────────────────────────────────────────────
115
+ server.registerTool("get_dispute_counter", {
116
+ title: "Get Dispute Counter",
117
+ description: "Get the total number of disputes filed.",
118
+ inputSchema: {},
119
+ }, async () => {
120
+ try {
121
+ const count = await readContract(CONTRACTS.DisputeArbitration, ABI, "disputeCounter", []);
122
+ return formatReadResult({ count: Number(count) }, "Dispute Counter");
123
+ }
124
+ catch (e) {
125
+ return formatError(e);
126
+ }
127
+ });
128
+ }
129
+ //# sourceMappingURL=disputes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disputes.js","sourceRoot":"","sources":["../../src/tools/disputes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerEscrowTools(server: McpServer): void;
3
+ //# sourceMappingURL=escrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow.d.ts","sourceRoot":"","sources":["../../src/tools/escrow.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyCzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6P3D"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * TaskEscrow MCP Tools
3
+ *
4
+ * create_task — Create and fund a task (one-shot)
5
+ * get_task — Read task details by ID
6
+ * submit_work — Submit deliverable hash for a task
7
+ * verify_task — Mark a submitted task as verified / completed
8
+ * dispute_task — Open a dispute on a task
9
+ */
10
+ import { z } from "zod";
11
+ import { parseEther, formatEther, isAddress } from "viem";
12
+ import { loadAbi, CONTRACTS, getAccount } from "../config.js";
13
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
14
+ import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
15
+ import { TASK_STATUS } from "../types.js";
16
+ const ABI = loadAbi("TaskEscrow");
17
+ // Input validation schemas
18
+ const createTaskSchema = z.object({
19
+ worker: z.string().refine(isAddress, { message: "Invalid worker Ethereum address" }),
20
+ payment: z.string().regex(/^\d+\.\d{1,18}$/, "Invalid ETH amount format")
21
+ .refine(val => {
22
+ const paymentAmount = parseFloat(val);
23
+ return paymentAmount >= 0.001 && paymentAmount <= 1000; // Allow up to 1000 ETH for tasks
24
+ }, { message: "Payment must be between 0.001 and 1000 ETH" }),
25
+ deadline: z.number().int().positive()
26
+ .refine(val => {
27
+ const deadlineTimestamp = val * 1000; // Convert to milliseconds
28
+ const now = Date.now();
29
+ const oneYearFromNow = now + (365 * 24 * 60 * 60 * 1000); // 1 year max
30
+ return deadlineTimestamp > now && deadlineTimestamp < oneYearFromNow;
31
+ }, { message: "Deadline must be a future timestamp within 1 year" }),
32
+ descriptionHash: z.string().min(1).max(100), // Basic IPFS CID validation
33
+ priority: z.number().int().min(0).max(3).optional().default(1) // 0-3 for priority levels
34
+ });
35
+ const getTaskSchema = z.object({
36
+ taskId: z.number().int().positive()
37
+ });
38
+ const submitWorkSchema = z.object({
39
+ taskId: z.number().int().positive(),
40
+ deliverableHash: z.string().min(1).max(100) // Basic IPFS CID validation
41
+ });
42
+ const verifyTaskSchema = z.object({
43
+ taskId: z.number().int().positive()
44
+ });
45
+ const disputeTaskSchema = z.object({
46
+ taskId: z.number().int().positive(),
47
+ reason: z.string().max(500).optional() // Limit reason length
48
+ });
49
+ export function registerEscrowTools(server) {
50
+ // ──────────────────────────────────────────────────────────────
51
+ // create_task
52
+ // ──────────────────────────────────────────────────────────────
53
+ server.registerTool("create_task", {
54
+ title: "Create & Fund Task",
55
+ description: "Create a new task on TaskEscrow, assign a worker, fund it with ETH, " +
56
+ "and set a deadline. The payment value is sent as msg.value. " +
57
+ "descriptionHash is typically an IPFS CID pointing to task details.",
58
+ inputSchema: {
59
+ worker: z.string().describe("Worker agent's Ethereum address"),
60
+ payment: z.string().describe("Payment amount in ETH, e.g. '0.01'"),
61
+ deadline: z
62
+ .number()
63
+ .describe("Unix timestamp deadline (seconds since epoch)"),
64
+ descriptionHash: z
65
+ .string()
66
+ .describe("IPFS CID or on-chain hash for task description"),
67
+ priority: z
68
+ .number()
69
+ .optional()
70
+ .describe("Priority level 0-3 (Low/Medium/High/Urgent). Default 1 (Medium)"),
71
+ },
72
+ }, async ({ worker, payment, deadline, descriptionHash, priority }) => {
73
+ try {
74
+ // Validate input
75
+ const validationResult = createTaskSchema.safeParse({ worker, payment, deadline, descriptionHash, priority });
76
+ if (!validationResult.success) {
77
+ return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
78
+ }
79
+ // Validation successful, use validated values
80
+ const validatedWorker = worker;
81
+ const validatedPayment = payment;
82
+ const validatedDeadline = deadline;
83
+ const validatedDescriptionHash = descriptionHash;
84
+ const validatedPriority = priority;
85
+ const account = getAccount();
86
+ if (!account) {
87
+ return formatError(new Error("No private key configured — cannot send transactions"));
88
+ }
89
+ const paymentWei = parseEther(payment);
90
+ const priorityLevel = priority ?? 1;
91
+ // Use createAndFundTask which is the combined function used by client.ts
92
+ const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "createAndFundTask", [
93
+ validatedWorker,
94
+ paymentWei,
95
+ BigInt(validatedDeadline),
96
+ validatedDescriptionHash,
97
+ ], paymentWei // send ETH as msg.value
98
+ );
99
+ return formatTxResult(result);
100
+ }
101
+ catch (e) {
102
+ return formatError(e);
103
+ }
104
+ });
105
+ // ──────────────────────────────────────────────────────────────
106
+ // get_task
107
+ // ──────────────────────────────────────────────────────────────
108
+ server.registerTool("get_task", {
109
+ title: "Get Task Details",
110
+ description: "Retrieve full on-chain details for a task by its numeric ID. " +
111
+ "Returns client, worker, payment, deadline, status (human-readable), hashes, and timestamps.",
112
+ inputSchema: {
113
+ taskId: z.number().describe("Numeric task ID"),
114
+ },
115
+ }, async ({ taskId }) => {
116
+ try {
117
+ // Validate input
118
+ const taskIdParam = taskId;
119
+ const validationResult = getTaskSchema.safeParse({ taskId: taskIdParam });
120
+ if (!validationResult.success) {
121
+ return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
122
+ }
123
+ // Use validated taskId
124
+ const validatedTaskId = validationResult.data.taskId;
125
+ const data = await readContract(CONTRACTS.TaskEscrow, ABI, "getTask", [BigInt(validatedTaskId)]);
126
+ // Enrich status and priority with human-readable labels
127
+ const enriched = {
128
+ ...data,
129
+ statusLabel: TASK_STATUS[data.status] ?? `Unknown(${data.status})`,
130
+ paymentEth: formatEther(data.payment),
131
+ };
132
+ return formatReadResult(enriched, `Task #${taskId}`);
133
+ }
134
+ catch (e) {
135
+ return formatError(e);
136
+ }
137
+ });
138
+ // ──────────────────────────────────────────────────────────────
139
+ // submit_work
140
+ // ──────────────────────────────────────────────────────────────
141
+ server.registerTool("submit_work", {
142
+ title: "Submit Work Deliverable",
143
+ description: "Worker submits a deliverable hash (typically IPFS CID) for a task. " +
144
+ "Only the assigned worker can call this. Transitions task status to Submitted.",
145
+ inputSchema: {
146
+ taskId: z.number().describe("Numeric task ID"),
147
+ deliverableHash: z
148
+ .string()
149
+ .describe("IPFS CID or hash of the deliverable"),
150
+ },
151
+ }, async ({ taskId, deliverableHash }) => {
152
+ try {
153
+ // Validate input
154
+ const validationResult = submitWorkSchema.safeParse({ taskId, deliverableHash });
155
+ if (!validationResult.success) {
156
+ return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
157
+ }
158
+ // Use validated values
159
+ const validatedTaskId = validationResult.data.taskId;
160
+ const validatedDeliverableHash = validationResult.data.deliverableHash;
161
+ const account = getAccount();
162
+ if (!account) {
163
+ return formatError(new Error("No private key configured — cannot send transactions"));
164
+ }
165
+ const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "submitWork", [BigInt(validatedTaskId), validatedDeliverableHash]);
166
+ return formatTxResult(result);
167
+ }
168
+ catch (e) {
169
+ return formatError(e);
170
+ }
171
+ });
172
+ // ──────────────────────────────────────────────────────────────
173
+ // verify_task
174
+ // ──────────────────────────────────────────────────────────────
175
+ server.registerTool("verify_task", {
176
+ title: "Verify & Approve Task",
177
+ description: "Client verifies a submitted task and releases payment to the worker. " +
178
+ "Only the task client can call this. Transitions status to Completed.",
179
+ inputSchema: {
180
+ taskId: z.number().describe("Numeric task ID"),
181
+ },
182
+ }, async ({ taskId }) => {
183
+ try {
184
+ // Validate input
185
+ const validationResult = verifyTaskSchema.safeParse({ taskId });
186
+ if (!validationResult.success) {
187
+ return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
188
+ }
189
+ // Use validated taskId
190
+ const validatedTaskId = validationResult.data.taskId;
191
+ const account = getAccount();
192
+ if (!account) {
193
+ return formatError(new Error("No private key configured — cannot send transactions"));
194
+ }
195
+ const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "verifyTask", [BigInt(validatedTaskId)], undefined, "TaskEscrow");
196
+ return formatTxResult(result);
197
+ }
198
+ catch (e) {
199
+ return formatError(e);
200
+ }
201
+ });
202
+ // ──────────────────────────────────────────────────────────────
203
+ // dispute_task
204
+ // ──────────────────────────────────────────────────────────────
205
+ server.registerTool("dispute_task", {
206
+ title: "Dispute a Task",
207
+ description: "Open a dispute on a task. Either the client or worker can dispute. " +
208
+ "Transitions status to Disputed and pauses payment release.",
209
+ inputSchema: {
210
+ taskId: z.number().describe("Numeric task ID"),
211
+ reason: z
212
+ .string()
213
+ .optional()
214
+ .describe("Optional reason for the dispute (stored off-chain / emitted in event)"),
215
+ },
216
+ }, async ({ taskId, reason }) => {
217
+ try {
218
+ // Validate input
219
+ const validationResult = disputeTaskSchema.safeParse({ taskId, reason });
220
+ if (!validationResult.success) {
221
+ return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
222
+ }
223
+ // Use validated values
224
+ const validatedTaskId = validationResult.data.taskId;
225
+ const validatedReason = validationResult.data.reason;
226
+ const account = getAccount();
227
+ if (!account) {
228
+ return formatError(new Error("No private key configured — cannot send transactions"));
229
+ }
230
+ const result = await executeOrPrepare(CONTRACTS.TaskEscrow, ABI, "disputeTask", [BigInt(validatedTaskId)], undefined, "TaskEscrow");
231
+ return formatTxResult(result);
232
+ }
233
+ catch (e) {
234
+ return formatError(e);
235
+ }
236
+ });
237
+ }
238
+ //# sourceMappingURL=escrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/tools/escrow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerInsuranceTools(server: McpServer): void;
3
+ //# sourceMappingURL=insurance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insurance.d.ts","sourceRoot":"","sources":["../../src/tools/insurance.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyH9D"}