@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,103 @@
1
+ /**
2
+ * corven_insurance — Insurance pool
3
+ *
4
+ * Consolidates: corven_join_insurance_pool, corven_pay_premium,
5
+ * corven_claim_insurance, corven_vote_on_claim,
6
+ * corven_get_claim, corven_get_coverage_percent,
7
+ * corven_get_pool_balance, corven_get_member_info
8
+ */
9
+ import { z } from "zod";
10
+ import { parseEther, formatEther } from "viem";
11
+ import { loadAbi, CONTRACTS } from "../config.js";
12
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
13
+ import { formatTxResult, formatReadResult } from "../handlers/transactions.js";
14
+ import { formatStructuredError, parseContractError } from "../lib/formatResponse.js";
15
+ const ABI = loadAbi("AgentInsurance");
16
+ const actionSchema = z.enum([
17
+ "join", "premium", "claim", "vote", "get",
18
+ ]);
19
+ const schema = z.object({
20
+ action: actionSchema,
21
+ taskId: z.number().optional(),
22
+ premium: z.string().optional(),
23
+ claimId: z.number().optional(),
24
+ inFavor: z.boolean().optional(),
25
+ agent: z.string().optional(),
26
+ contribution: z.string().optional(),
27
+ });
28
+ export function registerInsuranceTools(server) {
29
+ server.registerTool("corven_insurance", {
30
+ title: "Insurance Manager",
31
+ description: "Protect against task failures with the COVENANT insurance pool.\n\n" +
32
+ "ACTIONS:\n" +
33
+ " join — Join the insurance pool (requires contribution, min 0.01 ETH)\n" +
34
+ " premium — Pay premium for a specific task (requires taskId, premium)\n" +
35
+ " claim — File an insurance claim for a failed task (requires taskId)\n" +
36
+ " vote — Governance vote on an insurance claim (requires claimId, inFavor)\n" +
37
+ " get — Get claim details, pool balance, or coverage info\n\n" +
38
+ "WORKFLOW: join pool → pay premium per task → if task fails → claim → vote → payout\n" +
39
+ "COVERAGE: Protocol-wide coverage percentage (e.g. 80%). Premium is ~5% of task payment.",
40
+ inputSchema: schema.shape,
41
+ }, async (args) => {
42
+ try {
43
+ const { action } = args;
44
+ if (action === "join") {
45
+ if (!args.contribution) {
46
+ return formatStructuredError("Missing required field.", "join requires contribution.", "Provide contribution in ETH (min 0.01).", false);
47
+ }
48
+ const contribWei = parseEther(args.contribution);
49
+ const result = await executeOrPrepare(CONTRACTS.AgentInsurance, ABI, "joinPool", [], contribWei);
50
+ return formatTxResult(result);
51
+ }
52
+ if (action === "premium") {
53
+ if (args.taskId === undefined || !args.premium) {
54
+ return formatStructuredError("Missing required fields.", "premium requires taskId and premium.", "Provide both parameters.", false);
55
+ }
56
+ const premiumWei = parseEther(args.premium);
57
+ const result = await executeOrPrepare(CONTRACTS.AgentInsurance, ABI, "payPremium", [BigInt(args.taskId)], premiumWei);
58
+ return formatTxResult(result);
59
+ }
60
+ if (action === "claim") {
61
+ if (args.taskId === undefined) {
62
+ return formatStructuredError("Missing required field.", "claim requires taskId.", "Provide taskId.", false);
63
+ }
64
+ const result = await executeOrPrepare(CONTRACTS.AgentInsurance, ABI, "claimInsurance", [BigInt(args.taskId)], 0n);
65
+ return formatTxResult(result);
66
+ }
67
+ if (action === "vote") {
68
+ if (args.claimId === undefined || args.inFavor === undefined) {
69
+ return formatStructuredError("Missing required fields.", "vote requires claimId and inFavor.", "Provide both parameters.", false);
70
+ }
71
+ const result = await executeOrPrepare(CONTRACTS.AgentInsurance, ABI, "voteOnClaim", [BigInt(args.claimId), args.inFavor], 0n);
72
+ return formatTxResult(result);
73
+ }
74
+ if (action === "get") {
75
+ if (args.claimId !== undefined) {
76
+ const data = await readContract(CONTRACTS.AgentInsurance, ABI, "getClaim", [BigInt(args.claimId)]);
77
+ const enriched = { ...data, amountEth: data.amount ? formatEther(data.amount) : "0" };
78
+ return formatReadResult(enriched, `Insurance Claim #${args.claimId}`);
79
+ }
80
+ if (args.agent) {
81
+ const data = await readContract(CONTRACTS.AgentInsurance, ABI, "getMemberInfo", [args.agent]);
82
+ return formatReadResult(data, `Insurance Info for ${args.agent}`);
83
+ }
84
+ // Default: show pool balance and coverage
85
+ const [balance, coverage] = await Promise.all([
86
+ readContract(CONTRACTS.AgentInsurance, ABI, "getPoolBalance", []),
87
+ readContract(CONTRACTS.AgentInsurance, ABI, "CLAIM_COVERAGE_PERCENT", []),
88
+ ]);
89
+ return formatReadResult({
90
+ poolBalanceEth: formatEther(balance),
91
+ coveragePercent: Number(coverage),
92
+ claimCount: Number(await readContract(CONTRACTS.AgentInsurance, ABI, "claimCounter", [])),
93
+ }, "Insurance Pool");
94
+ }
95
+ return formatReadResult({ error: "Unknown action" }, "Error");
96
+ }
97
+ catch (e) {
98
+ const parsed = parseContractError(e);
99
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
100
+ }
101
+ });
102
+ }
103
+ //# sourceMappingURL=corven-insurance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-insurance.js","sourceRoot":"","sources":["../../src/tools/corven-insurance.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 registerMarketTools(server: McpServer): void;
3
- //# sourceMappingURL=market.d.ts.map
3
+ //# sourceMappingURL=corven-market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-market.d.ts","sourceRoot":"","sources":["../../src/tools/corven-market.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2BzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuG3D"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * corven_market — Open marketplace for competitive task bidding
3
+ *
4
+ * Consolidates: corven_post_open_task, corven_submit_bid, corven_select_worker,
5
+ * corven_cancel_open_task, corven_get_open_task, corven_get_bid,
6
+ * corven_withdraw_bid, corven_complete_open_task,
7
+ * corven_counter_offer
8
+ */
9
+ import { z } from "zod";
10
+ import { parseEther, formatEther } from "viem";
11
+ import { loadAbi, CONTRACTS } from "../config.js";
12
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
13
+ import { formatTxResult, formatReadResult } from "../handlers/transactions.js";
14
+ import { formatStructuredError, parseContractError } from "../lib/formatResponse.js";
15
+ const ABI = loadAbi("OpenTaskMarket");
16
+ const TASK_STATUS = {
17
+ 0: "Open",
18
+ 1: "InProgress",
19
+ 2: "Completed",
20
+ 3: "Cancelled",
21
+ };
22
+ const actionSchema = z.enum([
23
+ "post", "bid", "select", "cancel", "get", "list",
24
+ ]);
25
+ const schema = z.object({
26
+ action: actionSchema,
27
+ taskId: z.number().optional(),
28
+ worker: z.string().optional(),
29
+ maxPayment: z.string().optional(),
30
+ price: z.string().optional(),
31
+ timeEstimate: z.number().optional(),
32
+ descriptionHash: z.string().optional(),
33
+ proposalHash: z.string().optional(),
34
+ deadline: z.number().optional(),
35
+ });
36
+ export function registerMarketTools(server) {
37
+ server.registerTool("corven_market", {
38
+ title: "Market Manager",
39
+ description: "Open marketplace for competitive task bidding on COVENANT.\n\n" +
40
+ "ACTIONS:\n" +
41
+ " post — Post an open task for competitive bidding (requires maxPayment, deadline, descriptionHash)\n" +
42
+ " bid — Submit a bid on an open task (requires taskId, price, timeEstimate, proposalHash)\n" +
43
+ " select — Client selects a winning bidder (requires taskId, worker)\n" +
44
+ " cancel — Cancel an open task and refund escrow (requires taskId)\n" +
45
+ " get — Get open task details by ID (requires taskId)\n" +
46
+ " list — List tasks (pass taskId=0 for count)\n\n" +
47
+ "WORKFLOW: post → bid(s) arrive → select worker → worker completes → verify via corven_task\n" +
48
+ "FEE: 1% protocol fee deducted from payment. Workers pay nothing to bid.",
49
+ inputSchema: schema.shape,
50
+ }, async (args) => {
51
+ try {
52
+ const { action } = args;
53
+ if (action === "post") {
54
+ if (!args.maxPayment || !args.deadline || !args.descriptionHash) {
55
+ return formatStructuredError("Missing required fields.", "post requires maxPayment, deadline, and descriptionHash.", "Provide all three parameters.", false);
56
+ }
57
+ const paymentWei = parseEther(args.maxPayment);
58
+ const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "postTask", [paymentWei, BigInt(args.deadline), args.descriptionHash], paymentWei);
59
+ return formatTxResult(result);
60
+ }
61
+ if (action === "bid") {
62
+ if (!args.taskId || !args.price || !args.timeEstimate || !args.proposalHash) {
63
+ return formatStructuredError("Missing required fields.", "bid requires taskId, price, timeEstimate, and proposalHash.", "Provide all four parameters.", false);
64
+ }
65
+ const priceWei = parseEther(args.price);
66
+ const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "submitBid", [BigInt(args.taskId), priceWei, BigInt(args.timeEstimate), args.proposalHash], 0n);
67
+ return formatTxResult(result);
68
+ }
69
+ if (action === "select") {
70
+ if (!args.taskId || !args.worker) {
71
+ return formatStructuredError("Missing required fields.", "select requires taskId and worker address.", "Provide both parameters.", false);
72
+ }
73
+ const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "selectWorker", [BigInt(args.taskId), args.worker], 0n, "OpenTaskMarket");
74
+ return formatTxResult(result);
75
+ }
76
+ if (action === "cancel") {
77
+ if (!args.taskId) {
78
+ return formatStructuredError("Missing required field.", "cancel requires taskId.", "Provide taskId.", false);
79
+ }
80
+ const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "cancelTask", [BigInt(args.taskId)], 0n, "OpenTaskMarket");
81
+ return formatTxResult(result);
82
+ }
83
+ if (action === "get") {
84
+ if (!args.taskId) {
85
+ return formatStructuredError("Missing required field.", "get requires taskId.", "Provide taskId.", false);
86
+ }
87
+ const data = await readContract(CONTRACTS.OpenTaskMarket, ABI, "getTask", [BigInt(args.taskId)]);
88
+ const d = data;
89
+ const isTuple = Array.isArray(d);
90
+ const enriched = {
91
+ client: isTuple ? d[0] : d.client,
92
+ maxPaymentEth: formatEther((isTuple ? d[1] : d.maxPayment) ?? 0n),
93
+ deadline: isTuple ? d[2] : d.deadline,
94
+ descriptionHash: isTuple ? d[3] : d.descriptionHash,
95
+ statusLabel: TASK_STATUS[Number(isTuple ? d[4] : d.status)] ?? "Unknown",
96
+ selectedWorker: isTuple ? d[6] : d.selectedWorker,
97
+ selectedPriceEth: isTuple && d[7] ? formatEther(d[7]) : "0",
98
+ };
99
+ return formatReadResult(enriched, `Open Task #${args.taskId}`);
100
+ }
101
+ if (action === "list") {
102
+ const count = await readContract(CONTRACTS.OpenTaskMarket, ABI, "taskCounter", []);
103
+ return formatReadResult({ totalTasks: Number(count) }, "Market Task Count");
104
+ }
105
+ return formatReadResult({ error: "Unknown action" }, "Error");
106
+ }
107
+ catch (e) {
108
+ const parsed = parseContractError(e);
109
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
110
+ }
111
+ });
112
+ }
113
+ //# sourceMappingURL=corven-market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-market.js","sourceRoot":"","sources":["../../src/tools/corven-market.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 registerMatchTools(server: McpServer): void;
3
+ //# sourceMappingURL=corven-match.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-match.d.ts","sourceRoot":"","sources":["../../src/tools/corven-match.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmEzE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8O1D"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * corven_match — Smart Worker Matching MCP Tool
3
+ *
4
+ * Multi-factor scoring algorithm to find the best workers for tasks.
5
+ */
6
+ import { z } from "zod";
7
+ import { formatEther } from "viem";
8
+ import { loadAbi, CONTRACTS } from "../config.js";
9
+ import { readContract } from "../handlers/wallet.js";
10
+ import { formatReadResult } from "../handlers/transactions.js";
11
+ import { parseContractError, formatStructuredError } from "../lib/formatResponse.js";
12
+ const ABI = loadAbi("AgentRegistry");
13
+ // Scoring weights
14
+ const W_CAPABILITY = 0.30;
15
+ const W_SUCCESS_RATE = 0.20;
16
+ const W_PRICE = 0.15;
17
+ const W_REPUTATION = 0.55;
18
+ const MAX_REPUTATION = 1000;
19
+ // ─── Helpers ─────────────────────────────────────────────────
20
+ function capabilityMatchScore(agentCaps, requiredCaps) {
21
+ if (requiredCaps.length === 0)
22
+ return 1;
23
+ const agentSet = new Set(agentCaps.map((c) => c.toLowerCase()));
24
+ const matched = requiredCaps.filter((c) => agentSet.has(c.toLowerCase()));
25
+ return matched.length / requiredCaps.length;
26
+ }
27
+ function successRateScore(completed, failed) {
28
+ const total = completed + failed;
29
+ if (total === 0)
30
+ return 0.5;
31
+ return completed / total;
32
+ }
33
+ function priceCompetitivenessScore(stakeWei, maxStakeWei) {
34
+ if (maxStakeWei === 0n)
35
+ return 0.5;
36
+ return Number((stakeWei * 10000n) / maxStakeWei) / 10000;
37
+ }
38
+ function reputationScore(reputation) {
39
+ return Math.min(reputation / MAX_REPUTATION, 1);
40
+ }
41
+ // ─── Input Schemas ───────────────────────────────────────────
42
+ const findSchema = z.object({
43
+ capabilities: z.array(z.string().min(1).max(50)).min(1).max(10).describe("Required capability tags"),
44
+ minReputation: z.number().int().min(0).max(1000).optional().describe("Minimum reputation filter"),
45
+ limit: z.number().int().min(1).max(50).optional().default(5).describe("Max results (1-50)"),
46
+ });
47
+ const matchSchema = z.object({
48
+ workerAddress: z.string().describe("Worker address to match against"),
49
+ capabilities: z.array(z.string()).min(1).describe("Required capabilities for the task"),
50
+ });
51
+ // ─── Tool Registration ───────────────────────────────────────
52
+ export function registerMatchTools(server) {
53
+ // ──────────────────────────────────────────────────────────
54
+ // corven_match — action: find
55
+ // ──────────────────────────────────────────────────────────
56
+ server.registerTool("corven_match", {
57
+ title: "Smart Worker Matching",
58
+ description: "Find the best workers for your task using multi-factor scoring.\n" +
59
+ "ACTIONS:\n" +
60
+ " find — Discover and rank agents by capability match, success rate, price competitiveness, and reputation.\n" +
61
+ " match — Get a detailed match score for a specific worker against your requirements.\n" +
62
+ "SCORING: capability_match(30%) + success_rate(20%) + price_competitiveness(15%) + reputation(55%).\n" +
63
+ "WORKFLOW: corven_match find → corven_get_agent (inspect top candidates) → corven_create_task.\n" +
64
+ "WHEN TO USE: Before creating a task to find the optimal worker. Free read-only call, no gas cost.",
65
+ inputSchema: {
66
+ action: z.enum(["find", "match"]).describe("Matching action"),
67
+ capabilities: z.array(z.string()).describe("Required capability tags (e.g. ['python', 'data-analysis'])"),
68
+ minReputation: z.number().optional().describe("Minimum reputation filter (0-1000)"),
69
+ limit: z.number().optional().describe("Max results for find (1-50, default 5)"),
70
+ workerAddress: z.string().optional().describe("Worker address to evaluate (for match)"),
71
+ },
72
+ }, async (params) => {
73
+ try {
74
+ const { action } = params;
75
+ switch (action) {
76
+ case "find": {
77
+ const parsed = findSchema.safeParse({
78
+ capabilities: params.capabilities,
79
+ minReputation: params.minReputation,
80
+ limit: params.limit,
81
+ });
82
+ if (!parsed.success) {
83
+ return formatStructuredError("Invalid input for find.", parsed.error.issues.map((e) => e.message).join("; "), "Provide capabilities as non-empty array, minReputation as 0-1000, limit as 1-50.", true);
84
+ }
85
+ const { capabilities: reqCaps, minReputation: minRep, limit: maxResults } = parsed.data;
86
+ const addresses = (await readContract(CONTRACTS.AgentRegistry, ABI, "getAgentsPaginated", [0, 100]));
87
+ if (!addresses || addresses.length === 0) {
88
+ return formatReadResult({ count: 0, matches: [], query: { capabilities: reqCaps, minReputation: minRep, limit: maxResults } }, "No agents registered on the protocol.");
89
+ }
90
+ const profiles = await Promise.all(addresses.map(async (addr) => {
91
+ try {
92
+ const agent = (await readContract(CONTRACTS.AgentRegistry, ABI, "getAgent", [addr]));
93
+ return { address: addr, ...agent };
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ }));
99
+ const candidates = profiles.filter((a) => {
100
+ if (!a)
101
+ return false;
102
+ const active = a.isActive === 1 || a.isActive === true;
103
+ if (!active)
104
+ return false;
105
+ if (minRep !== undefined && Number(a.reputation) < minRep)
106
+ return false;
107
+ return true;
108
+ });
109
+ if (candidates.length === 0) {
110
+ return formatReadResult({ count: 0, matches: [], query: { capabilities: reqCaps, minReputation: minRep, limit: maxResults } }, "No agents match the specified filters.");
111
+ }
112
+ let maxStake = 0n;
113
+ for (const a of candidates) {
114
+ const s = BigInt(a.stakedAmount ?? 0);
115
+ if (s > maxStake)
116
+ maxStake = s;
117
+ }
118
+ const scored = candidates.map((a) => {
119
+ const caps = a.capabilities ?? [];
120
+ const completed = Number(a.tasksCompleted ?? 0);
121
+ const failed = Number(a.tasksFailed ?? 0);
122
+ const stake = BigInt(a.stakedAmount ?? 0);
123
+ const rep = Number(a.reputation ?? 0);
124
+ const capScore = capabilityMatchScore(caps, reqCaps);
125
+ const srScore = successRateScore(completed, failed);
126
+ const priceScore = priceCompetitivenessScore(stake, maxStake);
127
+ const repScore = reputationScore(rep);
128
+ const total = capScore * W_CAPABILITY +
129
+ srScore * W_SUCCESS_RATE +
130
+ priceScore * W_PRICE +
131
+ repScore * W_REPUTATION;
132
+ return {
133
+ address: a.address ?? a.wallet,
134
+ name: a.name ?? "Unknown",
135
+ reputation: rep,
136
+ capabilities: caps,
137
+ tasksCompleted: completed,
138
+ tasksFailed: failed,
139
+ stakedAmountEth: (() => {
140
+ try {
141
+ return formatEther(stake);
142
+ }
143
+ catch {
144
+ return "0";
145
+ }
146
+ })(),
147
+ score: Math.round(total * 10000) / 10000,
148
+ scoreBreakdown: {
149
+ capabilityMatch: Math.round(capScore * 10000) / 10000,
150
+ successRate: Math.round(srScore * 10000) / 10000,
151
+ priceCompetitiveness: Math.round(priceScore * 10000) / 10000,
152
+ reputation: Math.round(repScore * 10000) / 10000,
153
+ },
154
+ };
155
+ });
156
+ scored.sort((a, b) => {
157
+ if (b.score !== a.score)
158
+ return b.score - a.score;
159
+ return b.reputation - a.reputation;
160
+ });
161
+ const top = scored.slice(0, maxResults);
162
+ return formatReadResult({
163
+ count: top.length,
164
+ totalCandidates: candidates.length,
165
+ query: { capabilities: reqCaps, minReputation: minRep ?? null, limit: maxResults },
166
+ weights: {
167
+ capabilityMatch: W_CAPABILITY,
168
+ successRate: W_SUCCESS_RATE,
169
+ priceCompetitiveness: W_PRICE,
170
+ reputation: W_REPUTATION,
171
+ },
172
+ matches: top,
173
+ }, `Top ${top.length} agent matches for [${reqCaps.join(", ")}]`);
174
+ }
175
+ case "match": {
176
+ const parsed = matchSchema.safeParse({
177
+ workerAddress: params.workerAddress,
178
+ capabilities: params.capabilities,
179
+ });
180
+ if (!parsed.success) {
181
+ return formatStructuredError("Invalid input for match.", parsed.error.issues.map((e) => e.message).join("; "), "Provide workerAddress and capabilities.", true);
182
+ }
183
+ const { workerAddress, capabilities: reqCaps } = parsed.data;
184
+ const agent = (await readContract(CONTRACTS.AgentRegistry, ABI, "getAgent", [workerAddress]));
185
+ if (!agent) {
186
+ return formatStructuredError("Agent not found.", `No agent registered at ${workerAddress}`, "Verify the address or use corven_match find to discover agents.", false);
187
+ }
188
+ const caps = agent.capabilities ?? [];
189
+ const completed = Number(agent.tasksCompleted ?? 0);
190
+ const failed = Number(agent.tasksFailed ?? 0);
191
+ const stake = BigInt(agent.stakedAmount ?? 0);
192
+ const rep = Number(agent.reputation ?? 0);
193
+ const capScore = capabilityMatchScore(caps, reqCaps);
194
+ const srScore = successRateScore(completed, failed);
195
+ const priceScore = 0.5;
196
+ const repScore = reputationScore(rep);
197
+ const total = capScore * W_CAPABILITY +
198
+ srScore * W_SUCCESS_RATE +
199
+ priceScore * W_PRICE +
200
+ repScore * W_REPUTATION;
201
+ return formatReadResult({
202
+ address: workerAddress,
203
+ name: agent.name ?? "Unknown",
204
+ reputation: rep,
205
+ capabilities: caps,
206
+ tasksCompleted: completed,
207
+ tasksFailed: failed,
208
+ stakedAmountEth: (() => {
209
+ try {
210
+ return formatEther(stake);
211
+ }
212
+ catch {
213
+ return "0";
214
+ }
215
+ })(),
216
+ score: Math.round(total * 10000) / 10000,
217
+ scoreBreakdown: {
218
+ capabilityMatch: Math.round(capScore * 10000) / 10000,
219
+ successRate: Math.round(srScore * 10000) / 10000,
220
+ priceCompetitiveness: Math.round(priceScore * 10000) / 10000,
221
+ reputation: Math.round(repScore * 10000) / 10000,
222
+ },
223
+ }, `Match score for ${agent.name ?? workerAddress}: ${Math.round(total * 10000) / 10000}`);
224
+ }
225
+ default:
226
+ return formatStructuredError(`Unknown action: ${action}`, "Valid actions: find, match", "Pass action as 'find' or 'match'.", true);
227
+ }
228
+ }
229
+ catch (e) {
230
+ const parsed = parseContractError(e);
231
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
232
+ }
233
+ });
234
+ }
235
+ //# sourceMappingURL=corven-match.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-match.js","sourceRoot":"","sources":["../../src/tools/corven-match.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 registerMessageTools(server: McpServer): void;
3
+ //# sourceMappingURL=corven-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corven-message.d.ts","sourceRoot":"","sources":["../../src/tools/corven-message.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0BzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2E5D"}
@@ -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"}