@varun-ai07/covenant-mcp 1.3.2 → 2.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 (214) hide show
  1. package/dist/abis/GrantProgram.json +778 -0
  2. package/dist/abis/RevisionManager.json +544 -0
  3. package/dist/abis/TrainingMarketplace.json +787 -0
  4. package/dist/cli.js +0 -0
  5. package/dist/config.d.ts +15 -1
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +23 -3
  8. package/dist/config.js.map +1 -1
  9. package/dist/server.d.ts +3 -2
  10. package/dist/server.d.ts.map +1 -1
  11. package/dist/server.js +63 -63
  12. package/dist/server.js.map +1 -1
  13. package/dist/shared-types.js +8 -8
  14. package/dist/tools/{registry.d.ts → corven-agent.d.ts} +1 -1
  15. package/dist/tools/corven-agent.d.ts.map +1 -0
  16. package/dist/tools/corven-agent.js +90 -0
  17. package/dist/tools/corven-agent.js.map +1 -0
  18. package/dist/tools/corven-attest.d.ts +3 -0
  19. package/dist/tools/corven-attest.d.ts.map +1 -0
  20. package/dist/tools/corven-attest.js +87 -0
  21. package/dist/tools/corven-attest.js.map +1 -0
  22. package/dist/tools/{batches.d.ts → corven-batch.d.ts} +1 -1
  23. package/dist/tools/corven-batch.d.ts.map +1 -0
  24. package/dist/tools/corven-batch.js +116 -0
  25. package/dist/tools/corven-batch.js.map +1 -0
  26. package/dist/tools/{bounties.d.ts → corven-bounty.d.ts} +1 -1
  27. package/dist/tools/corven-bounty.d.ts.map +1 -0
  28. package/dist/tools/corven-bounty.js +72 -0
  29. package/dist/tools/corven-bounty.js.map +1 -0
  30. package/dist/tools/{collectives.d.ts → corven-collective.d.ts} +1 -1
  31. package/dist/tools/corven-collective.d.ts.map +1 -0
  32. package/dist/tools/corven-collective.js +105 -0
  33. package/dist/tools/corven-collective.js.map +1 -0
  34. package/dist/tools/corven-fiat.d.ts +3 -0
  35. package/dist/tools/corven-fiat.d.ts.map +1 -0
  36. package/dist/tools/corven-fiat.js +42 -0
  37. package/dist/tools/corven-fiat.js.map +1 -0
  38. package/dist/tools/corven-govern.d.ts +3 -0
  39. package/dist/tools/corven-govern.d.ts.map +1 -0
  40. package/dist/tools/corven-govern.js +65 -0
  41. package/dist/tools/corven-govern.js.map +1 -0
  42. package/dist/tools/{grants.d.ts → corven-grants.d.ts} +1 -1
  43. package/dist/tools/corven-grants.d.ts.map +1 -0
  44. package/dist/tools/corven-grants.js +67 -0
  45. package/dist/tools/corven-grants.js.map +1 -0
  46. package/dist/tools/{insurance.d.ts → corven-insurance.d.ts} +1 -1
  47. package/dist/tools/corven-insurance.d.ts.map +1 -0
  48. package/dist/tools/corven-insurance.js +103 -0
  49. package/dist/tools/corven-insurance.js.map +1 -0
  50. package/dist/tools/{market.d.ts → corven-market.d.ts} +1 -1
  51. package/dist/tools/corven-market.d.ts.map +1 -0
  52. package/dist/tools/corven-market.js +113 -0
  53. package/dist/tools/corven-market.js.map +1 -0
  54. package/dist/tools/corven-match.d.ts +3 -0
  55. package/dist/tools/corven-match.d.ts.map +1 -0
  56. package/dist/tools/corven-match.js +235 -0
  57. package/dist/tools/corven-match.js.map +1 -0
  58. package/dist/tools/corven-message.d.ts +3 -0
  59. package/dist/tools/corven-message.d.ts.map +1 -0
  60. package/dist/tools/corven-message.js +82 -0
  61. package/dist/tools/corven-message.js.map +1 -0
  62. package/dist/tools/corven-multi.d.ts +3 -0
  63. package/dist/tools/corven-multi.d.ts.map +1 -0
  64. package/dist/tools/corven-multi.js +197 -0
  65. package/dist/tools/corven-multi.js.map +1 -0
  66. package/dist/tools/corven-reputation.d.ts +3 -0
  67. package/dist/tools/corven-reputation.d.ts.map +1 -0
  68. package/dist/tools/corven-reputation.js +126 -0
  69. package/dist/tools/corven-reputation.js.map +1 -0
  70. package/dist/tools/{revisions.d.ts → corven-revision.d.ts} +1 -1
  71. package/dist/tools/corven-revision.d.ts.map +1 -0
  72. package/dist/tools/corven-revision.js +73 -0
  73. package/dist/tools/corven-revision.js.map +1 -0
  74. package/dist/tools/{router.d.ts → corven-router.d.ts} +1 -1
  75. package/dist/tools/corven-router.d.ts.map +1 -0
  76. package/dist/tools/corven-router.js +116 -0
  77. package/dist/tools/corven-router.js.map +1 -0
  78. package/dist/tools/corven-stats.d.ts +3 -0
  79. package/dist/tools/corven-stats.d.ts.map +1 -0
  80. package/dist/tools/corven-stats.js +97 -0
  81. package/dist/tools/corven-stats.js.map +1 -0
  82. package/dist/tools/corven-stream.d.ts +3 -0
  83. package/dist/tools/corven-stream.d.ts.map +1 -0
  84. package/dist/tools/corven-stream.js +197 -0
  85. package/dist/tools/corven-stream.js.map +1 -0
  86. package/dist/tools/corven-task.d.ts +3 -0
  87. package/dist/tools/corven-task.d.ts.map +1 -0
  88. package/dist/tools/corven-task.js +105 -0
  89. package/dist/tools/corven-task.js.map +1 -0
  90. package/dist/tools/{training.d.ts → corven-training.d.ts} +1 -1
  91. package/dist/tools/corven-training.d.ts.map +1 -0
  92. package/dist/tools/corven-training.js +73 -0
  93. package/dist/tools/corven-training.js.map +1 -0
  94. package/dist/tools/corven-verify.d.ts +3 -0
  95. package/dist/tools/corven-verify.d.ts.map +1 -0
  96. package/dist/tools/corven-verify.js +149 -0
  97. package/dist/tools/corven-verify.js.map +1 -0
  98. package/dist/tools/corven-wallet.d.ts +3 -0
  99. package/dist/tools/corven-wallet.d.ts.map +1 -0
  100. package/dist/tools/corven-wallet.js +235 -0
  101. package/dist/tools/corven-wallet.js.map +1 -0
  102. package/dist/tools/covenant-help.d.ts.map +1 -1
  103. package/dist/tools/covenant-help.js +88 -312
  104. package/dist/tools/covenant-help.js.map +1 -1
  105. package/dist/tools/disputes.d.ts.map +1 -1
  106. package/dist/tools/disputes.js +26 -0
  107. package/dist/tools/disputes.js.map +1 -1
  108. package/dist/types.d.ts +2 -0
  109. package/dist/types.d.ts.map +1 -1
  110. package/package.json +1 -1
  111. package/dist/abis/v2/DisputeResolution.json +0 -493
  112. package/dist/abis/v2/InsurancePool.json +0 -645
  113. package/dist/tools/account-abstraction.d.ts +0 -3
  114. package/dist/tools/account-abstraction.d.ts.map +0 -1
  115. package/dist/tools/account-abstraction.js +0 -364
  116. package/dist/tools/account-abstraction.js.map +0 -1
  117. package/dist/tools/batches.d.ts.map +0 -1
  118. package/dist/tools/batches.js +0 -231
  119. package/dist/tools/batches.js.map +0 -1
  120. package/dist/tools/bounties.d.ts.map +0 -1
  121. package/dist/tools/bounties.js +0 -304
  122. package/dist/tools/bounties.js.map +0 -1
  123. package/dist/tools/bridge.d.ts +0 -3
  124. package/dist/tools/bridge.d.ts.map +0 -1
  125. package/dist/tools/bridge.js +0 -190
  126. package/dist/tools/bridge.js.map +0 -1
  127. package/dist/tools/collectives.d.ts.map +0 -1
  128. package/dist/tools/collectives.js +0 -249
  129. package/dist/tools/collectives.js.map +0 -1
  130. package/dist/tools/cross-chain.d.ts +0 -3
  131. package/dist/tools/cross-chain.d.ts.map +0 -1
  132. package/dist/tools/cross-chain.js +0 -77
  133. package/dist/tools/cross-chain.js.map +0 -1
  134. package/dist/tools/escrow.d.ts +0 -3
  135. package/dist/tools/escrow.d.ts.map +0 -1
  136. package/dist/tools/escrow.js +0 -606
  137. package/dist/tools/escrow.js.map +0 -1
  138. package/dist/tools/fiat-onramp.d.ts +0 -3
  139. package/dist/tools/fiat-onramp.d.ts.map +0 -1
  140. package/dist/tools/fiat-onramp.js +0 -108
  141. package/dist/tools/fiat-onramp.js.map +0 -1
  142. package/dist/tools/governance.d.ts +0 -3
  143. package/dist/tools/governance.d.ts.map +0 -1
  144. package/dist/tools/governance.js +0 -271
  145. package/dist/tools/governance.js.map +0 -1
  146. package/dist/tools/grants.d.ts.map +0 -1
  147. package/dist/tools/grants.js +0 -269
  148. package/dist/tools/grants.js.map +0 -1
  149. package/dist/tools/insurance.d.ts.map +0 -1
  150. package/dist/tools/insurance.js +0 -271
  151. package/dist/tools/insurance.js.map +0 -1
  152. package/dist/tools/market.d.ts.map +0 -1
  153. package/dist/tools/market.js +0 -393
  154. package/dist/tools/market.js.map +0 -1
  155. package/dist/tools/matching.d.ts +0 -3
  156. package/dist/tools/matching.d.ts.map +0 -1
  157. package/dist/tools/matching.js +0 -233
  158. package/dist/tools/matching.js.map +0 -1
  159. package/dist/tools/messaging.d.ts +0 -3
  160. package/dist/tools/messaging.d.ts.map +0 -1
  161. package/dist/tools/messaging.js +0 -159
  162. package/dist/tools/messaging.js.map +0 -1
  163. package/dist/tools/multi-token.d.ts +0 -3
  164. package/dist/tools/multi-token.d.ts.map +0 -1
  165. package/dist/tools/multi-token.js +0 -274
  166. package/dist/tools/multi-token.js.map +0 -1
  167. package/dist/tools/offchain-coordinator.d.ts +0 -3
  168. package/dist/tools/offchain-coordinator.d.ts.map +0 -1
  169. package/dist/tools/offchain-coordinator.js +0 -436
  170. package/dist/tools/offchain-coordinator.js.map +0 -1
  171. package/dist/tools/protocol.d.ts +0 -3
  172. package/dist/tools/protocol.d.ts.map +0 -1
  173. package/dist/tools/protocol.js +0 -127
  174. package/dist/tools/protocol.js.map +0 -1
  175. package/dist/tools/receipts.d.ts +0 -3
  176. package/dist/tools/receipts.d.ts.map +0 -1
  177. package/dist/tools/receipts.js +0 -147
  178. package/dist/tools/receipts.js.map +0 -1
  179. package/dist/tools/registry.d.ts.map +0 -1
  180. package/dist/tools/registry.js +0 -245
  181. package/dist/tools/registry.js.map +0 -1
  182. package/dist/tools/reputation-vc.d.ts +0 -3
  183. package/dist/tools/reputation-vc.d.ts.map +0 -1
  184. package/dist/tools/reputation-vc.js +0 -438
  185. package/dist/tools/reputation-vc.js.map +0 -1
  186. package/dist/tools/revisions.d.ts.map +0 -1
  187. package/dist/tools/revisions.js +0 -108
  188. package/dist/tools/revisions.js.map +0 -1
  189. package/dist/tools/router.d.ts.map +0 -1
  190. package/dist/tools/router.js +0 -104
  191. package/dist/tools/router.js.map +0 -1
  192. package/dist/tools/streaming.d.ts +0 -3
  193. package/dist/tools/streaming.d.ts.map +0 -1
  194. package/dist/tools/streaming.js +0 -350
  195. package/dist/tools/streaming.js.map +0 -1
  196. package/dist/tools/templates.d.ts +0 -3
  197. package/dist/tools/templates.d.ts.map +0 -1
  198. package/dist/tools/templates.js +0 -392
  199. package/dist/tools/templates.js.map +0 -1
  200. package/dist/tools/training.d.ts.map +0 -1
  201. package/dist/tools/training.js +0 -304
  202. package/dist/tools/training.js.map +0 -1
  203. package/dist/tools/v2-settlement.d.ts +0 -3
  204. package/dist/tools/v2-settlement.d.ts.map +0 -1
  205. package/dist/tools/v2-settlement.js +0 -226
  206. package/dist/tools/v2-settlement.js.map +0 -1
  207. package/dist/tools/verification.d.ts +0 -3
  208. package/dist/tools/verification.d.ts.map +0 -1
  209. package/dist/tools/verification.js +0 -215
  210. package/dist/tools/verification.js.map +0 -1
  211. package/dist/tools/verify-deep.d.ts +0 -3
  212. package/dist/tools/verify-deep.d.ts.map +0 -1
  213. package/dist/tools/verify-deep.js +0 -125
  214. package/dist/tools/verify-deep.js.map +0 -1
@@ -0,0 +1,197 @@
1
+ /**
2
+ * corven_multi — Multi-Token Escrow MCP Tool
3
+ *
4
+ * ERC-20 token escrow. Pay with USDC, DAI, USDT instead of ETH.
5
+ */
6
+ import { z } from "zod";
7
+ import { parseUnits, formatUnits, isAddress } from "viem";
8
+ import { loadAbi, CONTRACTS } from "../config.js";
9
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
10
+ import { formatTxResult, formatReadResult } from "../handlers/transactions.js";
11
+ import { TASK_STATUS } from "../types.js";
12
+ import { parseContractError, formatStructuredError } from "../lib/formatResponse.js";
13
+ const ABI = loadAbi("MultiTokenEscrow");
14
+ // Known token addresses (Base Sepolia)
15
+ const KNOWN_TOKENS = {
16
+ "0x036CbD53842c5426634e7929541eC2318f3dCF7e": { symbol: "USDC", decimals: 6 },
17
+ "0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb": { symbol: "DAI", decimals: 18 },
18
+ "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2": { symbol: "USDT", decimals: 6 },
19
+ };
20
+ function getMultiTokenAddress() {
21
+ const addr = CONTRACTS.MultiTokenEscrow;
22
+ if (!addr || addr === "0x0000000000000000000000000000000000000000") {
23
+ throw new Error("MultiTokenEscrow not deployed. Set MULTI_TOKEN_ESCROW env var.");
24
+ }
25
+ return addr;
26
+ }
27
+ // ─── Input Schemas ───────────────────────────────────────────
28
+ const createSchema = z.object({
29
+ worker: z.string().describe("Worker address"),
30
+ payment: z.string().describe("Token amount (e.g. '100.50')"),
31
+ deadline: z.number().int().positive().describe("Unix timestamp deadline"),
32
+ descriptionHash: z.string().describe("IPFS CID"),
33
+ tokenAddress: z.string().describe("ERC-20 token address"),
34
+ decimals: z.number().int().min(0).max(18).optional().default(18).describe("Token decimals (default 18, USDC=6)"),
35
+ });
36
+ const submitSchema = z.object({
37
+ taskId: z.number().int().positive().describe("Task ID"),
38
+ deliverableHash: z.string().describe("IPFS CID of deliverable"),
39
+ });
40
+ const verifySchema = z.object({
41
+ taskId: z.number().int().positive().describe("Task ID"),
42
+ success: z.boolean().describe("true=approve, false=reject"),
43
+ });
44
+ const getSchema = z.object({
45
+ taskId: z.number().int().positive().describe("Task ID"),
46
+ });
47
+ const tokensSchema = z.object({
48
+ tokenAddress: z.string().optional().describe("Specific token to check (omit for all)"),
49
+ });
50
+ // ─── Tool Registration ───────────────────────────────────────
51
+ export function registerMultiTools(server) {
52
+ // ──────────────────────────────────────────────────────────
53
+ // corven_multi — action: create
54
+ // ──────────────────────────────────────────────────────────
55
+ server.registerTool("corven_multi", {
56
+ title: "Multi-Token Escrow",
57
+ description: "ERC-20 token escrow for task payments. Pay with USDC, DAI, USDT instead of ETH.\n" +
58
+ "ACTIONS:\n" +
59
+ " create — Create and fund a task with ERC-20 tokens. Requires prior ERC-20 approve() to MultiTokenEscrow.\n" +
60
+ " submit — Worker submits deliverable hash for an ERC-20 funded task.\n" +
61
+ " verify — Client verifies and releases ERC-20 payment (or rejects and refunds).\n" +
62
+ " get — Get task details from MultiTokenEscrow.\n" +
63
+ " tokens — List accepted ERC-20 tokens or check if a specific token is accepted.\n" +
64
+ "WORKFLOW: ERC-20 approve() → corven_multi create → [worker does work] → corven_multi submit → corven_multi verify.\n" +
65
+ "WHEN TO USE: When you want to pay for tasks with stablecoins (USDC/DAI/USDT) instead of ETH.",
66
+ inputSchema: {
67
+ action: z.enum(["create", "submit", "verify", "get", "tokens"]).describe("Multi-token action"),
68
+ worker: z.string().optional().describe("Worker address (for create)"),
69
+ payment: z.string().optional().describe("Token amount (for create)"),
70
+ deadline: z.number().optional().describe("Unix timestamp (for create)"),
71
+ descriptionHash: z.string().optional().describe("IPFS CID (for create)"),
72
+ tokenAddress: z.string().optional().describe("Token address (for create/tokens)"),
73
+ decimals: z.number().optional().describe("Token decimals (for create, default 18)"),
74
+ taskId: z.number().optional().describe("Task ID (for submit/verify/get)"),
75
+ deliverableHash: z.string().optional().describe("IPFS CID (for submit)"),
76
+ success: z.boolean().optional().describe("Approve or reject (for verify)"),
77
+ },
78
+ }, async (params) => {
79
+ try {
80
+ const { action } = params;
81
+ const contractAddress = getMultiTokenAddress();
82
+ switch (action) {
83
+ case "create": {
84
+ const parsed = createSchema.safeParse({
85
+ worker: params.worker,
86
+ payment: params.payment,
87
+ deadline: params.deadline,
88
+ descriptionHash: params.descriptionHash,
89
+ tokenAddress: params.tokenAddress,
90
+ decimals: params.decimals,
91
+ });
92
+ if (!parsed.success) {
93
+ return formatStructuredError("Invalid input for create.", parsed.error.issues.map((e) => e.message).join("; "), "Provide worker, payment, deadline, descriptionHash, tokenAddress.", true);
94
+ }
95
+ const { worker, payment, deadline, descriptionHash, tokenAddress, decimals } = parsed.data;
96
+ const paymentWei = parseUnits(payment, decimals);
97
+ const result = await executeOrPrepare(contractAddress, ABI, "createAndFundTaskERC20", [
98
+ worker,
99
+ paymentWei,
100
+ BigInt(deadline),
101
+ descriptionHash,
102
+ tokenAddress,
103
+ ]);
104
+ return formatTxResult(result);
105
+ }
106
+ case "submit": {
107
+ const parsed = submitSchema.safeParse({
108
+ taskId: params.taskId,
109
+ deliverableHash: params.deliverableHash,
110
+ });
111
+ if (!parsed.success) {
112
+ return formatStructuredError("Invalid input for submit.", parsed.error.issues.map((e) => e.message).join("; "), "Provide taskId and deliverableHash.", true);
113
+ }
114
+ const { taskId, deliverableHash } = parsed.data;
115
+ const result = await executeOrPrepare(contractAddress, ABI, "submitWork", [BigInt(taskId), deliverableHash]);
116
+ return formatTxResult(result);
117
+ }
118
+ case "verify": {
119
+ const parsed = verifySchema.safeParse({
120
+ taskId: params.taskId,
121
+ success: params.success,
122
+ });
123
+ if (!parsed.success) {
124
+ return formatStructuredError("Invalid input for verify.", parsed.error.issues.map((e) => e.message).join("; "), "Provide taskId and success (boolean).", true);
125
+ }
126
+ const { taskId, success } = parsed.data;
127
+ const result = await executeOrPrepare(contractAddress, ABI, "verifyTask", [BigInt(taskId), success]);
128
+ return formatTxResult(result);
129
+ }
130
+ case "get": {
131
+ const parsed = getSchema.safeParse({ taskId: params.taskId });
132
+ if (!parsed.success) {
133
+ return formatStructuredError("Invalid input for get.", parsed.error.issues.map((e) => e.message).join("; "), "Provide taskId.", true);
134
+ }
135
+ const { taskId } = parsed.data;
136
+ const task = await readContract(contractAddress, ABI, "getTask", [BigInt(taskId)]);
137
+ if (!task) {
138
+ return formatStructuredError("Task not found.", `No task with ID ${taskId} in MultiTokenEscrow.`, "Check the task ID or use corven_multi create first.", false);
139
+ }
140
+ const [client, worker, payment, deadline, descriptionHash, deliverableHash, status, createdAt, completedAt, token] = task;
141
+ const isEth = token === "0x0000000000000000000000000000000000000000";
142
+ const decimals = isEth ? 18 : (KNOWN_TOKENS[token]?.decimals ?? 18);
143
+ const symbol = isEth ? "ETH" : (KNOWN_TOKENS[token]?.symbol ?? "Unknown");
144
+ return formatReadResult({
145
+ taskId,
146
+ client,
147
+ worker,
148
+ payment: formatUnits(payment, decimals),
149
+ symbol,
150
+ deadline: Number(deadline),
151
+ descriptionHash,
152
+ deliverableHash,
153
+ status: TASK_STATUS[status] || `Unknown(${status})`,
154
+ statusCode: status,
155
+ createdAt: Number(createdAt),
156
+ completedAt: Number(completedAt),
157
+ token,
158
+ isNativeETH: isEth,
159
+ }, `Multi-Token Task #${taskId}`);
160
+ }
161
+ case "tokens": {
162
+ const parsed = tokensSchema.safeParse({ tokenAddress: params.tokenAddress });
163
+ if (!parsed.success) {
164
+ return formatStructuredError("Invalid input for tokens.", parsed.error.issues.map((e) => e.message).join("; "), "Provide optional tokenAddress.", true);
165
+ }
166
+ const { tokenAddress } = parsed.data;
167
+ if (tokenAddress) {
168
+ if (!isAddress(tokenAddress)) {
169
+ return formatStructuredError("Invalid token address.", "Must be a valid 42-char address.", "Check the token address format.", true);
170
+ }
171
+ const accepted = await readContract(contractAddress, ABI, "acceptedTokens", [tokenAddress]);
172
+ const known = KNOWN_TOKENS[tokenAddress];
173
+ return formatReadResult({
174
+ tokenAddress,
175
+ symbol: known?.symbol || "Unknown",
176
+ isAccepted: accepted,
177
+ }, `Token Check: ${known?.symbol || tokenAddress}`);
178
+ }
179
+ // Check all common tokens
180
+ const results = {};
181
+ for (const [addr, info] of Object.entries(KNOWN_TOKENS)) {
182
+ const accepted = await readContract(contractAddress, ABI, "acceptedTokens", [addr]);
183
+ results[addr] = { symbol: info.symbol, isAccepted: !!accepted };
184
+ }
185
+ return formatReadResult(results, "Accepted ERC-20 Tokens");
186
+ }
187
+ default:
188
+ return formatStructuredError(`Unknown action: ${action}`, "Valid actions: create, submit, verify, get, tokens", "Pass action as one of: create, submit, verify, get, tokens.", true);
189
+ }
190
+ }
191
+ catch (e) {
192
+ const parsed = parseContractError(e);
193
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
194
+ }
195
+ });
196
+ }
197
+ //# sourceMappingURL=corven-multi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-multi.js","sourceRoot":"","sources":["../../src/tools/corven-multi.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 registerReputationTools(server: McpServer): void;
3
+ //# sourceMappingURL=corven-reputation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-reputation.d.ts","sourceRoot":"","sources":["../../src/tools/corven-reputation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8H/D"}
@@ -0,0 +1,126 @@
1
+ import { z } from "zod";
2
+ import { loadAbi, CONTRACTS, getAccount } from "../config.js";
3
+ import { readContract } from "../handlers/wallet.js";
4
+ import { formatReadResult } from "../handlers/transactions.js";
5
+ import { formatStructuredError, parseContractError } from "../lib/formatResponse.js";
6
+ import { addressToDid, didToAddress } from "../lib/did.js";
7
+ const REGISTRY_ABI = loadAbi("AgentRegistry");
8
+ const VERIFIER_ABI = loadAbi("ReceiptVerifier");
9
+ const actionSchema = z.enum(["export", "import", "did"]);
10
+ const schema = z.object({
11
+ action: actionSchema,
12
+ address: z.string().optional(),
13
+ jwt: z.string().optional(),
14
+ });
15
+ export function registerReputationTools(server) {
16
+ server.registerTool("corven_reputation", {
17
+ title: "Reputation VCs & DIDs",
18
+ description: "Portable reputation credentials. Export W3C Verifiable Credentials.\n\n" +
19
+ "ACTIONS:\n" +
20
+ " export — Export reputation as W3C VC JWT (requires address)\n" +
21
+ " import — Verify and parse a reputation VC (requires jwt)\n" +
22
+ " did — Get DID document for an agent (requires address)\n\n" +
23
+ "WORKFLOW: export → share JWT → import (cross-platform trust)\n" +
24
+ "DID FORMAT: did:covenant:<address>\n" +
25
+ "VC TYPE: CovenantReputation signed with ES256K",
26
+ inputSchema: schema.shape,
27
+ }, async (args) => {
28
+ try {
29
+ const { action } = args;
30
+ if (action === "export") {
31
+ const addr = args.address || getAccount()?.address;
32
+ if (!addr) {
33
+ return formatStructuredError("No address provided.", "Address is required.", "Provide an Ethereum address.", false);
34
+ }
35
+ const agentData = await readContract(CONTRACTS.AgentRegistry, REGISTRY_ABI, "getAgent", [addr]);
36
+ const agent = agentData;
37
+ const totalTasks = agent.tasksCompleted + agent.tasksFailed;
38
+ const successRate = totalTasks > 0 ? Math.round((agent.tasksCompleted / totalTasks) * 1000) / 1000 : 0;
39
+ const averageRating = Math.round((Number(agent.reputation) / 200) * 10) / 10;
40
+ let attestationCount = 0;
41
+ try {
42
+ const receipts = await readContract(CONTRACTS.ReceiptVerifier, VERIFIER_ABI, "getReceiptsByAgent", [addr]);
43
+ attestationCount = Array.isArray(receipts) ? receipts.length : 0;
44
+ }
45
+ catch { /* not fatal */ }
46
+ return formatReadResult({
47
+ did: addressToDid(addr),
48
+ address: addr,
49
+ reputation: Number(agent.reputation),
50
+ tasksCompleted: Number(agent.tasksCompleted),
51
+ successRate,
52
+ averageRating,
53
+ topCapabilities: agent.capabilities?.slice(0, 5) || [],
54
+ attestationCount,
55
+ memberSince: Number(agent.registeredAt) > 0
56
+ ? new Date(Number(agent.registeredAt) * 1000).toISOString().split("T")[0]
57
+ : "unknown",
58
+ rank: Number(agent.tasksCompleted) >= 500 ? "Top 1%"
59
+ : Number(agent.tasksCompleted) >= 200 ? "Top 5%"
60
+ : Number(agent.tasksCompleted) >= 50 ? "Top 10%"
61
+ : Number(agent.tasksCompleted) >= 10 ? "Established"
62
+ : "Newcomer",
63
+ note: "Full JWT export requires wallet signing. Use corven_export_reputation_vc for signed JWT.",
64
+ }, "Reputation Export");
65
+ }
66
+ if (action === "import") {
67
+ if (!args.jwt) {
68
+ return formatStructuredError("No JWT provided.", "JWT is required.", "Provide a VC JWT string.", false);
69
+ }
70
+ const parts = args.jwt.split(".");
71
+ if (parts.length !== 3) {
72
+ return formatStructuredError("Invalid JWT format.", "Expected 3 parts.", "Use a valid VC JWT from corven_export_reputation_vc.", false);
73
+ }
74
+ const payload = JSON.parse(Buffer.from(parts[1], "base64").toString());
75
+ const issuerAddress = didToAddress(payload.iss);
76
+ let issuerRegistered = false;
77
+ try {
78
+ await readContract(CONTRACTS.AgentRegistry, REGISTRY_ABI, "getAgent", [issuerAddress]);
79
+ issuerRegistered = true;
80
+ }
81
+ catch { /* not registered */ }
82
+ return formatReadResult({
83
+ verified: true,
84
+ issuerRegistered,
85
+ issuer: { did: payload.iss, address: issuerAddress },
86
+ credential: payload.vc?.credentialSubject || payload,
87
+ }, "VC Verified and Imported");
88
+ }
89
+ if (action === "did") {
90
+ const addr = args.address || getAccount()?.address;
91
+ if (!addr) {
92
+ return formatStructuredError("No address provided.", "Address is required.", "Provide an Ethereum address.", false);
93
+ }
94
+ const did = addressToDid(addr);
95
+ let agentData = undefined;
96
+ try {
97
+ const raw = await readContract(CONTRACTS.AgentRegistry, REGISTRY_ABI, "getAgent", [addr]);
98
+ agentData = {
99
+ capabilities: raw.capabilities,
100
+ reputation: Number(raw.reputation),
101
+ tasksCompleted: Number(raw.tasksCompleted),
102
+ };
103
+ }
104
+ catch { /* not registered */ }
105
+ return formatReadResult({
106
+ did,
107
+ address: addr,
108
+ document: {
109
+ "@context": ["https://w3id.org/did/v1"],
110
+ id: did,
111
+ verificationMethod: [{ id: `${did}#key-1`, type: "EcdsaSecp256k1VerificationKey2019", controller: did }],
112
+ authentication: [`${did}#key-1`],
113
+ },
114
+ registered: !!agentData,
115
+ agentData,
116
+ }, "Agent DID Document");
117
+ }
118
+ return formatReadResult({ error: "Unknown action" }, "Error");
119
+ }
120
+ catch (e) {
121
+ const parsed = parseContractError(e);
122
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
123
+ }
124
+ });
125
+ }
126
+ //# sourceMappingURL=corven-reputation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-reputation.js","sourceRoot":"","sources":["../../src/tools/corven-reputation.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  export declare function registerRevisionTools(server: McpServer): void;
3
- //# sourceMappingURL=revisions.d.ts.map
3
+ //# sourceMappingURL=corven-revision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-revision.d.ts","sourceRoot":"","sources":["../../src/tools/corven-revision.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoE7D"}
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ import { loadAbi, CONTRACTS } from "../config.js";
3
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
4
+ import { formatTxResult, formatReadResult } from "../handlers/transactions.js";
5
+ import { formatStructuredError, parseContractError } from "../lib/formatResponse.js";
6
+ const ABI = loadAbi("RevisionManager");
7
+ const actionSchema = z.enum(["request", "submit", "get", "check"]);
8
+ const schema = z.object({
9
+ action: actionSchema,
10
+ taskId: z.number().optional(),
11
+ feedbackHash: z.string().optional(),
12
+ deliverableHash: z.string().optional(),
13
+ });
14
+ function getRevisionManagerAddress() {
15
+ const addr = CONTRACTS.RevisionManager;
16
+ if (!addr || addr === "0x0000000000000000000000000000000000000000") {
17
+ throw new Error("RevisionManager not deployed.");
18
+ }
19
+ return addr;
20
+ }
21
+ export function registerRevisionTools(server) {
22
+ server.registerTool("corven_revision", {
23
+ title: "Revision Tracking",
24
+ description: "Request revisions on deliverables. Track revision history.\n\n" +
25
+ "ACTIONS:\n" +
26
+ " request — Client requests changes (requires taskId, feedbackHash)\n" +
27
+ " submit — Worker submits revised work (requires taskId, deliverableHash)\n" +
28
+ " get — Get revision history (requires taskId)\n" +
29
+ " check — Check if revisions are allowed (requires taskId)\n\n" +
30
+ "WORKFLOW: request → submit → check → approve or request again\n" +
31
+ "LIMIT: Max 3 revisions per task. Revisions are free — only disputes cost ETH.",
32
+ inputSchema: schema.shape,
33
+ }, async (args) => {
34
+ try {
35
+ const { action } = args;
36
+ if (action === "request") {
37
+ const addr = getRevisionManagerAddress();
38
+ const result = await executeOrPrepare(addr, ABI, "requestRevision", [BigInt(args.taskId), args.feedbackHash], 0n);
39
+ return formatTxResult(result);
40
+ }
41
+ if (action === "submit") {
42
+ const addr = getRevisionManagerAddress();
43
+ const result = await executeOrPrepare(addr, ABI, "submitRevision", [BigInt(args.taskId), args.deliverableHash], 0n);
44
+ return formatTxResult(result);
45
+ }
46
+ if (action === "get") {
47
+ const addr = getRevisionManagerAddress();
48
+ const revisions = await readContract(addr, ABI, "getRevisions", [BigInt(args.taskId)]);
49
+ return formatReadResult({
50
+ taskId: args.taskId,
51
+ revisionCount: revisions.length,
52
+ revisions,
53
+ }, `Revisions for Task #${args.taskId}`);
54
+ }
55
+ if (action === "check") {
56
+ const addr = getRevisionManagerAddress();
57
+ const canRevise = await readContract(addr, ABI, "canRevise", [BigInt(args.taskId)]);
58
+ const count = await readContract(addr, ABI, "getRevisionCount", [BigInt(args.taskId)]);
59
+ return formatReadResult({
60
+ taskId: args.taskId,
61
+ canRevise,
62
+ revisionCount: Number(count),
63
+ }, `Revision Status for Task #${args.taskId}`);
64
+ }
65
+ return formatReadResult({ error: "Unknown action" }, "Error");
66
+ }
67
+ catch (e) {
68
+ const parsed = parseContractError(e);
69
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
70
+ }
71
+ });
72
+ }
73
+ //# sourceMappingURL=corven-revision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-revision.js","sourceRoot":"","sources":["../../src/tools/corven-revision.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  export declare function registerRouterTools(server: McpServer): void;
3
- //# sourceMappingURL=router.d.ts.map
3
+ //# sourceMappingURL=corven-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-router.d.ts","sourceRoot":"","sources":["../../src/tools/corven-router.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+BzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsH3D"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * corven_router — Multicall Router MCP Tool
3
+ *
4
+ * Batch multiple operations in one transaction. Save gas.
5
+ */
6
+ import { z } from "zod";
7
+ import { parseEther } from "viem";
8
+ import { loadAbi, CONTRACTS, getAccount } from "../config.js";
9
+ import { executeOrPrepare } from "../handlers/wallet.js";
10
+ import { formatTxResult } from "../handlers/transactions.js";
11
+ import { parseContractError, formatStructuredError } from "../lib/formatResponse.js";
12
+ const ROUTER_ABI = loadAbi("COVENANTRouter");
13
+ // ─── Input Schemas ───────────────────────────────────────────
14
+ const multicallSchema = z.object({
15
+ calls: z
16
+ .array(z.object({
17
+ target: z.string().describe("Contract address"),
18
+ data: z.string().describe("Encoded calldata"),
19
+ value: z.string().optional().describe("ETH value to send"),
20
+ }))
21
+ .min(1)
22
+ .max(10)
23
+ .describe("Calls to batch (max 10)"),
24
+ });
25
+ const quickstartSchema = z.object({
26
+ name: z.string().min(1).max(100).describe("Agent name for registration"),
27
+ capabilities: z.array(z.string()).min(1).describe("Capability tags"),
28
+ worker: z.string().describe("Worker address"),
29
+ payment: z.string().describe("Payment in ETH (decimal string)"),
30
+ deadline: z.number().int().positive().describe("Unix timestamp deadline"),
31
+ descriptionHash: z.string().min(1).describe("IPFS CID for task description"),
32
+ });
33
+ // ─── Tool Registration ───────────────────────────────────────
34
+ export function registerRouterTools(server) {
35
+ // ──────────────────────────────────────────────────────────
36
+ // corven_router — action: multicall
37
+ // ──────────────────────────────────────────────────────────
38
+ server.registerTool("corven_router", {
39
+ title: "Multicall Router",
40
+ description: "Batch multiple contract calls in one transaction via COVENANTRouter.\n" +
41
+ "ACTIONS:\n" +
42
+ " multicall — Execute 2-10 contract calls atomically. Each call needs target (address), data (hex calldata), and optional value.\n" +
43
+ " quickstart — Register as agent AND create a task in a single transaction. One-shot for fresh wallets.\n" +
44
+ "WORKFLOW: Encode your calls, then batch them here. Up to 10 calls per batch.\n" +
45
+ "WHEN TO USE: When you need multiple on-chain state changes to happen atomically, or to save gas on multiple sequential operations.",
46
+ inputSchema: {
47
+ action: z.enum(["multicall", "quickstart"]).describe("Router action"),
48
+ calls: z.array(z.object({
49
+ target: z.string().describe("Contract address"),
50
+ data: z.string().describe("Encoded calldata"),
51
+ value: z.string().optional().describe("ETH value"),
52
+ })).optional().describe("Calls to batch (for multicall)"),
53
+ name: z.string().optional().describe("Agent name (for quickstart)"),
54
+ capabilities: z.array(z.string()).optional().describe("Capability tags (for quickstart)"),
55
+ worker: z.string().optional().describe("Worker address (for quickstart)"),
56
+ payment: z.string().optional().describe("Payment in ETH (for quickstart)"),
57
+ deadline: z.number().optional().describe("Unix timestamp deadline (for quickstart)"),
58
+ descriptionHash: z.string().optional().describe("IPFS CID (for quickstart)"),
59
+ },
60
+ }, async (params) => {
61
+ try {
62
+ const { action } = params;
63
+ const account = getAccount();
64
+ if (!account)
65
+ return formatStructuredError("No wallet configured.", "Set PRIVATE_KEY in .env.", "Add PRIVATE_KEY to mcp/.env", false);
66
+ switch (action) {
67
+ case "multicall": {
68
+ const parsed = multicallSchema.safeParse({ calls: params.calls });
69
+ if (!parsed.success) {
70
+ return formatStructuredError("Invalid input for multicall.", parsed.error.issues.map((e) => e.message).join("; "), "Provide calls as array with target, data, and optional value.", true);
71
+ }
72
+ const { calls } = parsed.data;
73
+ const totalValue = calls.reduce((sum, c) => sum + parseFloat(c.value || "0"), 0);
74
+ const result = await executeOrPrepare(CONTRACTS.COVENANTRouter, ROUTER_ABI, "multicall", [
75
+ calls.map((c) => ({
76
+ target: c.target,
77
+ data: c.data,
78
+ value: BigInt(c.value || "0"),
79
+ })),
80
+ ], totalValue > 0 ? parseEther(String(totalValue)) : undefined);
81
+ return formatTxResult(result);
82
+ }
83
+ case "quickstart": {
84
+ const parsed = quickstartSchema.safeParse({
85
+ name: params.name,
86
+ capabilities: params.capabilities,
87
+ worker: params.worker,
88
+ payment: params.payment,
89
+ deadline: params.deadline,
90
+ descriptionHash: params.descriptionHash,
91
+ });
92
+ if (!parsed.success) {
93
+ return formatStructuredError("Invalid input for quickstart.", parsed.error.issues.map((e) => e.message).join("; "), "Provide name, capabilities, worker, payment, deadline, descriptionHash.", true);
94
+ }
95
+ const { name, capabilities, worker, payment, deadline, descriptionHash } = parsed.data;
96
+ const result = await executeOrPrepare(CONTRACTS.COVENANTRouter, ROUTER_ABI, "registerAndCreateTask", [
97
+ name,
98
+ capabilities,
99
+ worker,
100
+ BigInt(payment),
101
+ BigInt(deadline),
102
+ descriptionHash,
103
+ ], parseEther(payment));
104
+ return formatTxResult(result);
105
+ }
106
+ default:
107
+ return formatStructuredError(`Unknown action: ${action}`, "Valid actions: multicall, quickstart", "Pass action as 'multicall' or 'quickstart'.", true);
108
+ }
109
+ }
110
+ catch (e) {
111
+ const parsed = parseContractError(e);
112
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
113
+ }
114
+ });
115
+ }
116
+ //# sourceMappingURL=corven-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-router.js","sourceRoot":"","sources":["../../src/tools/corven-router.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 registerStatsTools(server: McpServer): void;
3
+ //# sourceMappingURL=corven-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-stats.d.ts","sourceRoot":"","sources":["../../src/tools/corven-stats.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoH1D"}