@varun-ai07/covenant-mcp 1.3.5 → 2.0.1

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 (222) 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 +9 -0
  8. package/dist/config.js.map +1 -1
  9. package/dist/lib/store.d.ts +2 -1
  10. package/dist/lib/store.d.ts.map +1 -1
  11. package/dist/lib/store.js +18 -3
  12. package/dist/lib/store.js.map +1 -1
  13. package/dist/server.d.ts +3 -2
  14. package/dist/server.d.ts.map +1 -1
  15. package/dist/server.js +65 -63
  16. package/dist/server.js.map +1 -1
  17. package/dist/shared-types.js +8 -8
  18. package/dist/tools/{registry.d.ts → corven-agent.d.ts} +1 -1
  19. package/dist/tools/corven-agent.d.ts.map +1 -0
  20. package/dist/tools/corven-agent.js +90 -0
  21. package/dist/tools/corven-agent.js.map +1 -0
  22. package/dist/tools/corven-attest.d.ts +3 -0
  23. package/dist/tools/corven-attest.d.ts.map +1 -0
  24. package/dist/tools/corven-attest.js +87 -0
  25. package/dist/tools/corven-attest.js.map +1 -0
  26. package/dist/tools/{batches.d.ts → corven-batch.d.ts} +1 -1
  27. package/dist/tools/corven-batch.d.ts.map +1 -0
  28. package/dist/tools/corven-batch.js +116 -0
  29. package/dist/tools/corven-batch.js.map +1 -0
  30. package/dist/tools/{bounties.d.ts → corven-bounty.d.ts} +1 -1
  31. package/dist/tools/corven-bounty.d.ts.map +1 -0
  32. package/dist/tools/corven-bounty.js +72 -0
  33. package/dist/tools/corven-bounty.js.map +1 -0
  34. package/dist/tools/{collectives.d.ts → corven-collective.d.ts} +1 -1
  35. package/dist/tools/corven-collective.d.ts.map +1 -0
  36. package/dist/tools/corven-collective.js +105 -0
  37. package/dist/tools/corven-collective.js.map +1 -0
  38. package/dist/tools/corven-fiat.d.ts +3 -0
  39. package/dist/tools/corven-fiat.d.ts.map +1 -0
  40. package/dist/tools/corven-fiat.js +42 -0
  41. package/dist/tools/corven-fiat.js.map +1 -0
  42. package/dist/tools/corven-govern.d.ts +3 -0
  43. package/dist/tools/corven-govern.d.ts.map +1 -0
  44. package/dist/tools/corven-govern.js +65 -0
  45. package/dist/tools/corven-govern.js.map +1 -0
  46. package/dist/tools/{grants.d.ts → corven-grants.d.ts} +1 -1
  47. package/dist/tools/corven-grants.d.ts.map +1 -0
  48. package/dist/tools/corven-grants.js +67 -0
  49. package/dist/tools/corven-grants.js.map +1 -0
  50. package/dist/tools/{insurance.d.ts → corven-insurance.d.ts} +1 -1
  51. package/dist/tools/corven-insurance.d.ts.map +1 -0
  52. package/dist/tools/corven-insurance.js +103 -0
  53. package/dist/tools/corven-insurance.js.map +1 -0
  54. package/dist/tools/corven-ipfs.d.ts +3 -0
  55. package/dist/tools/corven-ipfs.d.ts.map +1 -0
  56. package/dist/tools/corven-ipfs.js +75 -0
  57. package/dist/tools/corven-ipfs.js.map +1 -0
  58. package/dist/tools/{market.d.ts → corven-market.d.ts} +1 -1
  59. package/dist/tools/corven-market.d.ts.map +1 -0
  60. package/dist/tools/corven-market.js +113 -0
  61. package/dist/tools/corven-market.js.map +1 -0
  62. package/dist/tools/corven-match.d.ts +3 -0
  63. package/dist/tools/corven-match.d.ts.map +1 -0
  64. package/dist/tools/corven-match.js +235 -0
  65. package/dist/tools/corven-match.js.map +1 -0
  66. package/dist/tools/corven-message.d.ts +3 -0
  67. package/dist/tools/corven-message.d.ts.map +1 -0
  68. package/dist/tools/corven-message.js +82 -0
  69. package/dist/tools/corven-message.js.map +1 -0
  70. package/dist/tools/corven-multi.d.ts +3 -0
  71. package/dist/tools/corven-multi.d.ts.map +1 -0
  72. package/dist/tools/corven-multi.js +197 -0
  73. package/dist/tools/corven-multi.js.map +1 -0
  74. package/dist/tools/corven-reputation.d.ts +3 -0
  75. package/dist/tools/corven-reputation.d.ts.map +1 -0
  76. package/dist/tools/corven-reputation.js +126 -0
  77. package/dist/tools/corven-reputation.js.map +1 -0
  78. package/dist/tools/{revisions.d.ts → corven-revision.d.ts} +1 -1
  79. package/dist/tools/corven-revision.d.ts.map +1 -0
  80. package/dist/tools/corven-revision.js +73 -0
  81. package/dist/tools/corven-revision.js.map +1 -0
  82. package/dist/tools/{router.d.ts → corven-router.d.ts} +1 -1
  83. package/dist/tools/corven-router.d.ts.map +1 -0
  84. package/dist/tools/corven-router.js +116 -0
  85. package/dist/tools/corven-router.js.map +1 -0
  86. package/dist/tools/corven-stats.d.ts +3 -0
  87. package/dist/tools/corven-stats.d.ts.map +1 -0
  88. package/dist/tools/corven-stats.js +97 -0
  89. package/dist/tools/corven-stats.js.map +1 -0
  90. package/dist/tools/corven-stream.d.ts +3 -0
  91. package/dist/tools/corven-stream.d.ts.map +1 -0
  92. package/dist/tools/corven-stream.js +197 -0
  93. package/dist/tools/corven-stream.js.map +1 -0
  94. package/dist/tools/corven-task.d.ts +3 -0
  95. package/dist/tools/corven-task.d.ts.map +1 -0
  96. package/dist/tools/corven-task.js +105 -0
  97. package/dist/tools/corven-task.js.map +1 -0
  98. package/dist/tools/{training.d.ts → corven-training.d.ts} +1 -1
  99. package/dist/tools/corven-training.d.ts.map +1 -0
  100. package/dist/tools/corven-training.js +73 -0
  101. package/dist/tools/corven-training.js.map +1 -0
  102. package/dist/tools/corven-verify.d.ts +3 -0
  103. package/dist/tools/corven-verify.d.ts.map +1 -0
  104. package/dist/tools/corven-verify.js +149 -0
  105. package/dist/tools/corven-verify.js.map +1 -0
  106. package/dist/tools/corven-wallet.d.ts +3 -0
  107. package/dist/tools/corven-wallet.d.ts.map +1 -0
  108. package/dist/tools/corven-wallet.js +235 -0
  109. package/dist/tools/corven-wallet.js.map +1 -0
  110. package/dist/tools/covenant-help.d.ts.map +1 -1
  111. package/dist/tools/covenant-help.js +88 -312
  112. package/dist/tools/covenant-help.js.map +1 -1
  113. package/dist/tools/disputes.d.ts.map +1 -1
  114. package/dist/tools/disputes.js +26 -0
  115. package/dist/tools/disputes.js.map +1 -1
  116. package/dist/types.d.ts +2 -0
  117. package/dist/types.d.ts.map +1 -1
  118. package/package.json +1 -1
  119. package/dist/abis/v2/DisputeResolution.json +0 -493
  120. package/dist/abis/v2/InsurancePool.json +0 -645
  121. package/dist/tools/account-abstraction.d.ts +0 -3
  122. package/dist/tools/account-abstraction.d.ts.map +0 -1
  123. package/dist/tools/account-abstraction.js +0 -364
  124. package/dist/tools/account-abstraction.js.map +0 -1
  125. package/dist/tools/batches.d.ts.map +0 -1
  126. package/dist/tools/batches.js +0 -231
  127. package/dist/tools/batches.js.map +0 -1
  128. package/dist/tools/bounties.d.ts.map +0 -1
  129. package/dist/tools/bounties.js +0 -304
  130. package/dist/tools/bounties.js.map +0 -1
  131. package/dist/tools/bridge.d.ts +0 -3
  132. package/dist/tools/bridge.d.ts.map +0 -1
  133. package/dist/tools/bridge.js +0 -190
  134. package/dist/tools/bridge.js.map +0 -1
  135. package/dist/tools/collectives.d.ts.map +0 -1
  136. package/dist/tools/collectives.js +0 -249
  137. package/dist/tools/collectives.js.map +0 -1
  138. package/dist/tools/cross-chain.d.ts +0 -3
  139. package/dist/tools/cross-chain.d.ts.map +0 -1
  140. package/dist/tools/cross-chain.js +0 -77
  141. package/dist/tools/cross-chain.js.map +0 -1
  142. package/dist/tools/escrow.d.ts +0 -3
  143. package/dist/tools/escrow.d.ts.map +0 -1
  144. package/dist/tools/escrow.js +0 -606
  145. package/dist/tools/escrow.js.map +0 -1
  146. package/dist/tools/fiat-onramp.d.ts +0 -3
  147. package/dist/tools/fiat-onramp.d.ts.map +0 -1
  148. package/dist/tools/fiat-onramp.js +0 -108
  149. package/dist/tools/fiat-onramp.js.map +0 -1
  150. package/dist/tools/governance.d.ts +0 -3
  151. package/dist/tools/governance.d.ts.map +0 -1
  152. package/dist/tools/governance.js +0 -271
  153. package/dist/tools/governance.js.map +0 -1
  154. package/dist/tools/grants.d.ts.map +0 -1
  155. package/dist/tools/grants.js +0 -269
  156. package/dist/tools/grants.js.map +0 -1
  157. package/dist/tools/insurance.d.ts.map +0 -1
  158. package/dist/tools/insurance.js +0 -271
  159. package/dist/tools/insurance.js.map +0 -1
  160. package/dist/tools/market.d.ts.map +0 -1
  161. package/dist/tools/market.js +0 -393
  162. package/dist/tools/market.js.map +0 -1
  163. package/dist/tools/matching.d.ts +0 -3
  164. package/dist/tools/matching.d.ts.map +0 -1
  165. package/dist/tools/matching.js +0 -233
  166. package/dist/tools/matching.js.map +0 -1
  167. package/dist/tools/messaging.d.ts +0 -3
  168. package/dist/tools/messaging.d.ts.map +0 -1
  169. package/dist/tools/messaging.js +0 -159
  170. package/dist/tools/messaging.js.map +0 -1
  171. package/dist/tools/multi-token.d.ts +0 -3
  172. package/dist/tools/multi-token.d.ts.map +0 -1
  173. package/dist/tools/multi-token.js +0 -274
  174. package/dist/tools/multi-token.js.map +0 -1
  175. package/dist/tools/offchain-coordinator.d.ts +0 -3
  176. package/dist/tools/offchain-coordinator.d.ts.map +0 -1
  177. package/dist/tools/offchain-coordinator.js +0 -436
  178. package/dist/tools/offchain-coordinator.js.map +0 -1
  179. package/dist/tools/protocol.d.ts +0 -3
  180. package/dist/tools/protocol.d.ts.map +0 -1
  181. package/dist/tools/protocol.js +0 -127
  182. package/dist/tools/protocol.js.map +0 -1
  183. package/dist/tools/receipts.d.ts +0 -3
  184. package/dist/tools/receipts.d.ts.map +0 -1
  185. package/dist/tools/receipts.js +0 -147
  186. package/dist/tools/receipts.js.map +0 -1
  187. package/dist/tools/registry.d.ts.map +0 -1
  188. package/dist/tools/registry.js +0 -245
  189. package/dist/tools/registry.js.map +0 -1
  190. package/dist/tools/reputation-vc.d.ts +0 -3
  191. package/dist/tools/reputation-vc.d.ts.map +0 -1
  192. package/dist/tools/reputation-vc.js +0 -438
  193. package/dist/tools/reputation-vc.js.map +0 -1
  194. package/dist/tools/revisions.d.ts.map +0 -1
  195. package/dist/tools/revisions.js +0 -108
  196. package/dist/tools/revisions.js.map +0 -1
  197. package/dist/tools/router.d.ts.map +0 -1
  198. package/dist/tools/router.js +0 -104
  199. package/dist/tools/router.js.map +0 -1
  200. package/dist/tools/streaming.d.ts +0 -3
  201. package/dist/tools/streaming.d.ts.map +0 -1
  202. package/dist/tools/streaming.js +0 -350
  203. package/dist/tools/streaming.js.map +0 -1
  204. package/dist/tools/templates.d.ts +0 -3
  205. package/dist/tools/templates.d.ts.map +0 -1
  206. package/dist/tools/templates.js +0 -392
  207. package/dist/tools/templates.js.map +0 -1
  208. package/dist/tools/training.d.ts.map +0 -1
  209. package/dist/tools/training.js +0 -304
  210. package/dist/tools/training.js.map +0 -1
  211. package/dist/tools/v2-settlement.d.ts +0 -3
  212. package/dist/tools/v2-settlement.d.ts.map +0 -1
  213. package/dist/tools/v2-settlement.js +0 -226
  214. package/dist/tools/v2-settlement.js.map +0 -1
  215. package/dist/tools/verification.d.ts +0 -3
  216. package/dist/tools/verification.d.ts.map +0 -1
  217. package/dist/tools/verification.js +0 -215
  218. package/dist/tools/verification.js.map +0 -1
  219. package/dist/tools/verify-deep.d.ts +0 -3
  220. package/dist/tools/verify-deep.d.ts.map +0 -1
  221. package/dist/tools/verify-deep.js +0 -125
  222. package/dist/tools/verify-deep.js.map +0 -1
@@ -0,0 +1,82 @@
1
+ import { z } from "zod";
2
+ import { getAccount } from "../config.js";
3
+ import { formatReadResult } from "../handlers/transactions.js";
4
+ import { formatStructuredError, parseContractError } from "../lib/formatResponse.js";
5
+ const actionSchema = z.enum(["send", "list", "unread"]);
6
+ const schema = z.object({
7
+ action: actionSchema,
8
+ to: z.string().optional(),
9
+ content: z.string().optional(),
10
+ taskId: z.number().optional(),
11
+ limit: z.number().optional(),
12
+ });
13
+ const messages = [];
14
+ let messageCounter = 0;
15
+ export function registerMessageTools(server) {
16
+ server.registerTool("corven_message", {
17
+ title: "Agent Messaging",
18
+ description: "Agent-to-agent messaging. Send messages, check inbox.\n\n" +
19
+ "ACTIONS:\n" +
20
+ " send — Send a message (requires to, content, taskId)\n" +
21
+ " list — List messages for a task (requires taskId)\n" +
22
+ " unread — Get unread message count\n\n" +
23
+ "WORKFLOW: send → list → read → respond\n" +
24
+ "NOTE: In-memory MVP. Messages persist for the MCP session lifetime.",
25
+ inputSchema: schema.shape,
26
+ }, async (args) => {
27
+ try {
28
+ const { action } = args;
29
+ const account = getAccount();
30
+ if (!account) {
31
+ return formatStructuredError("No private key configured.", "PRIVATE_KEY not set.", "Set PRIVATE_KEY in .env.", false);
32
+ }
33
+ const sender = typeof account === "string" ? account : account.address;
34
+ if (action === "send") {
35
+ const msg = {
36
+ id: `msg_${++messageCounter}_${Date.now()}`,
37
+ from: sender.toLowerCase(),
38
+ to: args.to.toLowerCase(),
39
+ content: args.content,
40
+ taskId: args.taskId || 0,
41
+ timestamp: Math.floor(Date.now() / 1000),
42
+ read: false,
43
+ };
44
+ messages.push(msg);
45
+ return formatReadResult({
46
+ messageId: msg.id,
47
+ taskId: msg.taskId,
48
+ from: msg.from,
49
+ to: msg.to,
50
+ timestamp: msg.timestamp,
51
+ contentPreview: msg.content.length > 100 ? msg.content.slice(0, 100) + "..." : msg.content,
52
+ }, "Message Sent");
53
+ }
54
+ if (action === "list") {
55
+ const taskMessages = messages.filter(m => m.taskId === args.taskId).slice(-(args.limit || 50));
56
+ return formatReadResult({
57
+ taskId: args.taskId,
58
+ messageCount: taskMessages.length,
59
+ messages: taskMessages.map(m => ({
60
+ id: m.id,
61
+ from: m.from,
62
+ to: m.to,
63
+ content: m.content,
64
+ timestamp: m.timestamp,
65
+ read: m.read,
66
+ })),
67
+ }, `Messages for Task #${args.taskId}`);
68
+ }
69
+ if (action === "unread") {
70
+ const viewer = sender.toLowerCase();
71
+ const unreadCount = messages.filter(m => m.to === viewer && !m.read).length;
72
+ return formatReadResult({ unreadCount }, "Unread Messages");
73
+ }
74
+ return formatReadResult({ error: "Unknown action" }, "Error");
75
+ }
76
+ catch (e) {
77
+ const parsed = parseContractError(e);
78
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
79
+ }
80
+ });
81
+ }
82
+ //# sourceMappingURL=corven-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-message.js","sourceRoot":"","sources":["../../src/tools/corven-message.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 registerMultiTools(server: McpServer): void;
3
+ //# sourceMappingURL=corven-multi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-multi.d.ts","sourceRoot":"","sources":["../../src/tools/corven-multi.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkDzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiO1D"}
@@ -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"}