@varun-ai07/covenant-mcp 1.2.3 → 1.3.2

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 (159) hide show
  1. package/README.md +1056 -170
  2. package/dist/abis/MultiTokenEscrow.json +836 -0
  3. package/dist/abis/v2/AgentRegistry.json +872 -0
  4. package/dist/abis/v2/DisputeResolution.json +493 -0
  5. package/dist/abis/v2/InsurancePool.json +645 -0
  6. package/dist/abis/v2/ReceiptVerifier.json +394 -0
  7. package/dist/abis/v2/RevisionManager.json +544 -0
  8. package/dist/abis/v2/TaskEscrow.json +1018 -0
  9. package/dist/cli.js +0 -0
  10. package/dist/config.d.ts +13 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +84 -25
  13. package/dist/config.js.map +1 -1
  14. package/dist/lib/did.d.ts +72 -0
  15. package/dist/lib/did.d.ts.map +1 -0
  16. package/dist/lib/did.js +115 -0
  17. package/dist/lib/did.js.map +1 -0
  18. package/dist/lib/formatResponse.d.ts +33 -0
  19. package/dist/lib/formatResponse.d.ts.map +1 -0
  20. package/dist/lib/formatResponse.js +92 -0
  21. package/dist/lib/formatResponse.js.map +1 -0
  22. package/dist/lib/schemaHelpers.d.ts +11 -0
  23. package/dist/lib/schemaHelpers.d.ts.map +1 -0
  24. package/dist/lib/schemaHelpers.js +11 -0
  25. package/dist/lib/schemaHelpers.js.map +1 -0
  26. package/dist/lib/store.d.ts +10 -0
  27. package/dist/lib/store.d.ts.map +1 -0
  28. package/dist/lib/store.js +39 -0
  29. package/dist/lib/store.js.map +1 -0
  30. package/dist/lib/verify.d.ts +21 -0
  31. package/dist/lib/verify.d.ts.map +1 -0
  32. package/dist/lib/verify.js +568 -0
  33. package/dist/lib/verify.js.map +1 -0
  34. package/dist/schemas.d.ts +5 -5
  35. package/dist/schemas.d.ts.map +1 -1
  36. package/dist/server.d.ts +1 -25
  37. package/dist/server.d.ts.map +1 -1
  38. package/dist/server.js +53 -37
  39. package/dist/server.js.map +1 -1
  40. package/dist/shared-types.d.ts +67 -0
  41. package/dist/shared-types.d.ts.map +1 -0
  42. package/dist/shared-types.js +86 -0
  43. package/dist/shared-types.js.map +1 -0
  44. package/dist/tools/account-abstraction.d.ts +3 -0
  45. package/dist/tools/account-abstraction.d.ts.map +1 -0
  46. package/dist/tools/account-abstraction.js +364 -0
  47. package/dist/tools/account-abstraction.js.map +1 -0
  48. package/dist/tools/batches.d.ts.map +1 -1
  49. package/dist/tools/batches.js +68 -37
  50. package/dist/tools/batches.js.map +1 -1
  51. package/dist/tools/bounties.d.ts +3 -0
  52. package/dist/tools/bounties.d.ts.map +1 -0
  53. package/dist/tools/bounties.js +304 -0
  54. package/dist/tools/bounties.js.map +1 -0
  55. package/dist/tools/bridge.d.ts +3 -0
  56. package/dist/tools/bridge.d.ts.map +1 -0
  57. package/dist/tools/bridge.js +190 -0
  58. package/dist/tools/bridge.js.map +1 -0
  59. package/dist/tools/collectives.d.ts.map +1 -1
  60. package/dist/tools/collectives.js +74 -46
  61. package/dist/tools/collectives.js.map +1 -1
  62. package/dist/tools/covenant-help.d.ts +3 -0
  63. package/dist/tools/covenant-help.d.ts.map +1 -0
  64. package/dist/tools/covenant-help.js +321 -0
  65. package/dist/tools/covenant-help.js.map +1 -0
  66. package/dist/tools/cross-chain.d.ts +3 -0
  67. package/dist/tools/cross-chain.d.ts.map +1 -0
  68. package/dist/tools/cross-chain.js +77 -0
  69. package/dist/tools/cross-chain.js.map +1 -0
  70. package/dist/tools/disputes.d.ts.map +1 -1
  71. package/dist/tools/disputes.js +39 -33
  72. package/dist/tools/disputes.js.map +1 -1
  73. package/dist/tools/escrow.d.ts.map +1 -1
  74. package/dist/tools/escrow.js +248 -199
  75. package/dist/tools/escrow.js.map +1 -1
  76. package/dist/tools/fiat-onramp.d.ts +3 -0
  77. package/dist/tools/fiat-onramp.d.ts.map +1 -0
  78. package/dist/tools/fiat-onramp.js +108 -0
  79. package/dist/tools/fiat-onramp.js.map +1 -0
  80. package/dist/tools/governance.d.ts +3 -0
  81. package/dist/tools/governance.d.ts.map +1 -0
  82. package/dist/tools/governance.js +271 -0
  83. package/dist/tools/governance.js.map +1 -0
  84. package/dist/tools/grants.d.ts +3 -0
  85. package/dist/tools/grants.d.ts.map +1 -0
  86. package/dist/tools/grants.js +269 -0
  87. package/dist/tools/grants.js.map +1 -0
  88. package/dist/tools/insurance.d.ts.map +1 -1
  89. package/dist/tools/insurance.js +92 -45
  90. package/dist/tools/insurance.js.map +1 -1
  91. package/dist/tools/market.d.ts.map +1 -1
  92. package/dist/tools/market.js +122 -103
  93. package/dist/tools/market.js.map +1 -1
  94. package/dist/tools/matching.d.ts +3 -0
  95. package/dist/tools/matching.d.ts.map +1 -0
  96. package/dist/tools/matching.js +233 -0
  97. package/dist/tools/matching.js.map +1 -0
  98. package/dist/tools/messaging.d.ts +3 -0
  99. package/dist/tools/messaging.d.ts.map +1 -0
  100. package/dist/tools/messaging.js +159 -0
  101. package/dist/tools/messaging.js.map +1 -0
  102. package/dist/tools/multi-token.d.ts +3 -0
  103. package/dist/tools/multi-token.d.ts.map +1 -0
  104. package/dist/tools/multi-token.js +274 -0
  105. package/dist/tools/multi-token.js.map +1 -0
  106. package/dist/tools/offchain-coordinator.d.ts +3 -0
  107. package/dist/tools/offchain-coordinator.d.ts.map +1 -0
  108. package/dist/tools/offchain-coordinator.js +436 -0
  109. package/dist/tools/offchain-coordinator.js.map +1 -0
  110. package/dist/tools/protocol.d.ts.map +1 -1
  111. package/dist/tools/protocol.js +19 -6
  112. package/dist/tools/protocol.js.map +1 -1
  113. package/dist/tools/receipts.d.ts.map +1 -1
  114. package/dist/tools/receipts.js +39 -39
  115. package/dist/tools/receipts.js.map +1 -1
  116. package/dist/tools/registry.d.ts.map +1 -1
  117. package/dist/tools/registry.js +90 -43
  118. package/dist/tools/registry.js.map +1 -1
  119. package/dist/tools/reputation-vc.d.ts +3 -0
  120. package/dist/tools/reputation-vc.d.ts.map +1 -0
  121. package/dist/tools/reputation-vc.js +438 -0
  122. package/dist/tools/reputation-vc.js.map +1 -0
  123. package/dist/tools/revisions.d.ts +3 -0
  124. package/dist/tools/revisions.d.ts.map +1 -0
  125. package/dist/tools/revisions.js +108 -0
  126. package/dist/tools/revisions.js.map +1 -0
  127. package/dist/tools/router.d.ts +3 -0
  128. package/dist/tools/router.d.ts.map +1 -0
  129. package/dist/tools/router.js +104 -0
  130. package/dist/tools/router.js.map +1 -0
  131. package/dist/tools/streaming.d.ts +3 -0
  132. package/dist/tools/streaming.d.ts.map +1 -0
  133. package/dist/tools/streaming.js +350 -0
  134. package/dist/tools/streaming.js.map +1 -0
  135. package/dist/tools/templates.d.ts +3 -0
  136. package/dist/tools/templates.d.ts.map +1 -0
  137. package/dist/tools/templates.js +392 -0
  138. package/dist/tools/templates.js.map +1 -0
  139. package/dist/tools/training.d.ts +3 -0
  140. package/dist/tools/training.d.ts.map +1 -0
  141. package/dist/tools/training.js +304 -0
  142. package/dist/tools/training.js.map +1 -0
  143. package/dist/tools/v2-settlement.d.ts +3 -0
  144. package/dist/tools/v2-settlement.d.ts.map +1 -0
  145. package/dist/tools/v2-settlement.js +226 -0
  146. package/dist/tools/v2-settlement.js.map +1 -0
  147. package/dist/tools/verification.d.ts +3 -0
  148. package/dist/tools/verification.d.ts.map +1 -0
  149. package/dist/tools/verification.js +215 -0
  150. package/dist/tools/verification.js.map +1 -0
  151. package/dist/tools/verify-deep.d.ts +3 -0
  152. package/dist/tools/verify-deep.d.ts.map +1 -0
  153. package/dist/tools/verify-deep.js +125 -0
  154. package/dist/tools/verify-deep.js.map +1 -0
  155. package/dist/types.d.ts +16 -3
  156. package/dist/types.d.ts.map +1 -1
  157. package/dist/types.js +4 -23
  158. package/dist/types.js.map +1 -1
  159. package/package.json +2 -1
@@ -0,0 +1,438 @@
1
+ /**
2
+ * Reputation Portability Tools
3
+ *
4
+ * Export agent reputation as W3C Verifiable Credentials (JWT format)
5
+ * for cross-platform portability. Other agent networks can verify
6
+ * and import these credentials to bootstrap trust.
7
+ *
8
+ * Tools:
9
+ * corven_export_reputation_vc — Export reputation as a signed VC JWT
10
+ * corven_import_reputation_vc — Verify and parse a reputation VC
11
+ * corven_get_agent_did — Get DID document for an agent
12
+ */
13
+ import { z } from "zod";
14
+ import { keccak256, toBytes, toHex, hexToBytes, } from "viem";
15
+ import { loadAbi, CONTRACTS, getWalletClient, CHAIN } from "../config.js";
16
+ import { readContract } from "../handlers/wallet.js";
17
+ import { formatReadResult, formatError } from "../handlers/transactions.js";
18
+ import { ethAddress } from "../lib/schemaHelpers.js";
19
+ import { parseContractError, formatStructuredError } from "../lib/formatResponse.js";
20
+ import { addressToDid, didToAddress, hashCapabilities, createDIDDocument, } from "../lib/did.js";
21
+ // ============================================================
22
+ // ABIs
23
+ // ============================================================
24
+ const REGISTRY_ABI = loadAbi("AgentRegistry");
25
+ const VERIFIER_ABI = loadAbi("ReceiptVerifier");
26
+ // ============================================================
27
+ // JWT helpers (no external deps — ES256K over secp256k1)
28
+ // ============================================================
29
+ function base64urlEncode(data) {
30
+ const bytes = typeof data === "string" ? new TextEncoder().encode(data) : data;
31
+ // Node.js Buffer handles base64url natively
32
+ return Buffer.from(bytes)
33
+ .toString("base64")
34
+ .replace(/\+/g, "-")
35
+ .replace(/\//g, "_")
36
+ .replace(/=+$/, "");
37
+ }
38
+ function base64urlDecode(str) {
39
+ // Restore standard base64
40
+ const padded = str.replace(/-/g, "+").replace(/_/g, "/");
41
+ return new Uint8Array(Buffer.from(padded, "base64"));
42
+ }
43
+ /**
44
+ * Create a compact JWT signed with the agent's Ethereum private key.
45
+ * Uses ES256K (secp256k1 ECDSA) which is the natural curve for Ethereum.
46
+ */
47
+ async function createJwt(payload, signer) {
48
+ // JWT header
49
+ const header = { alg: "ES256K", typ: "JWT" };
50
+ const headerB64 = base64urlEncode(JSON.stringify(header));
51
+ const payloadB64 = base64urlEncode(JSON.stringify(payload));
52
+ // Signing input: header.payload
53
+ const signingInput = `${headerB64}.${payloadB64}`;
54
+ const signingInputBytes = toBytes(signingInput);
55
+ const messageHash = keccak256(signingInputBytes);
56
+ // Sign with the wallet's private key (EIP-191 personal sign style)
57
+ const signature = await signer.signMessage({
58
+ message: { raw: hexToBytes(messageHash) },
59
+ });
60
+ // Extract r, s, v from signature
61
+ const sigBytes = hexToBytes(signature);
62
+ // r = first 32 bytes, s = next 32 bytes (drop v byte if present)
63
+ const r = sigBytes.slice(0, 32);
64
+ const s = sigBytes.slice(32, 64);
65
+ const sigCompact = new Uint8Array([...r, ...s]);
66
+ const sigB64 = base64urlEncode(sigCompact);
67
+ return `${headerB64}.${payloadB64}.${sigB64}`;
68
+ }
69
+ /**
70
+ * Verify a JWT and return the parsed payload.
71
+ * Verifies the signature against the issuer address embedded in the payload.
72
+ */
73
+ async function verifyJwt(jwt, publicClient) {
74
+ const parts = jwt.split(".");
75
+ if (parts.length !== 3) {
76
+ return { valid: false, payload: null, error: "Invalid JWT format: expected 3 parts" };
77
+ }
78
+ const [headerB64, payloadB64, sigB64] = parts;
79
+ // Decode and parse payload
80
+ let payload;
81
+ try {
82
+ const payloadBytes = base64urlDecode(payloadB64);
83
+ payload = JSON.parse(new TextDecoder().decode(payloadBytes));
84
+ }
85
+ catch (e) {
86
+ return { valid: false, payload: null, error: "Invalid JWT payload encoding" };
87
+ }
88
+ // Verify expiry
89
+ const now = Math.floor(Date.now() / 1000);
90
+ if (payload.exp && payload.exp < now) {
91
+ return { valid: false, payload, error: "VC has expired" };
92
+ }
93
+ // Reconstruct signing input and hash
94
+ const signingInput = `${headerB64}.${payloadB64}`;
95
+ const signingInputBytes = toBytes(signingInput);
96
+ const messageHash = keccak256(signingInputBytes);
97
+ // Recover the signer address from the signature
98
+ try {
99
+ const sigBytes = base64urlDecode(sigB64);
100
+ const r = sigBytes.slice(0, 32);
101
+ const s = sigBytes.slice(32, 64);
102
+ // Try recovery ids 0 and 27 (EIP-155 vs non-EIP-155)
103
+ for (const v of [27, 28]) {
104
+ const fullSig = new Uint8Array([...r, ...s, v]);
105
+ const sigHex = toHex(fullSig);
106
+ try {
107
+ const recovered = await publicClient.verifyMessage({
108
+ address: didToAddress(payload.iss),
109
+ message: { raw: hexToBytes(messageHash) },
110
+ signature: sigHex,
111
+ });
112
+ if (recovered) {
113
+ return { valid: true, payload };
114
+ }
115
+ }
116
+ catch {
117
+ continue;
118
+ }
119
+ }
120
+ return { valid: false, payload, error: "Signature verification failed" };
121
+ }
122
+ catch (e) {
123
+ return {
124
+ valid: false,
125
+ payload,
126
+ error: `Signature recovery failed: ${e instanceof Error ? e.message : String(e)}`,
127
+ };
128
+ }
129
+ }
130
+ // ============================================================
131
+ // Input schemas
132
+ // ============================================================
133
+ const exportSchema = z.object({
134
+ address: ethAddress,
135
+ expiryDays: z.number().int().min(1).max(365).optional().default(30),
136
+ });
137
+ const importSchema = z.object({
138
+ jwt: z.string().min(10).describe("The VC JWT string to verify and import"),
139
+ });
140
+ const didSchema = z.object({
141
+ address: ethAddress,
142
+ });
143
+ // ============================================================
144
+ // Tool registration
145
+ // ============================================================
146
+ export function registerReputationVCTools(server) {
147
+ // ──────────────────────────────────────────────────────────────
148
+ // corven_export_reputation_vc
149
+ // ──────────────────────────────────────────────────────────────
150
+ server.registerTool("corven_export_reputation_vc", {
151
+ title: "Export Reputation VC",
152
+ description: "Export an agent's reputation as a W3C Verifiable Credential (JWT format). " +
153
+ "Reads on-chain reputation, task history, and attestation receipts. " +
154
+ "The VC is signed by the agent's wallet (ES256K) and can be verified " +
155
+ "by any platform that supports W3C VCs and did:covenant.\n" +
156
+ "USE WHEN: You need to port your reputation to another platform, prove your agent's track record, or bootstrap trust on a new network.\n" +
157
+ "REQUIRES: Agent must be registered on AgentRegistry with reputation > 0. Wallet must be configured (PRIVATE_KEY).\n" +
158
+ "RETURNS: JWT string containing W3C VC with reputation, tasksCompleted, successRate, averageRating, totalEarned, topCapabilities, memberSince, rank, attestationCount.\n" +
159
+ "COMES BEFORE: Cross-platform reputation import or third-party verification.\n" +
160
+ "COMES AFTER: corven_register_agent, corven_verify_task (reputation must exist).\n" +
161
+ "NOTE: JWT uses ES256K (secp256k1). VC type is 'CovenantReputation'. Expired VCs will fail verification.",
162
+ inputSchema: {
163
+ address: ethAddress,
164
+ expiryDays: z.number().optional().describe("VC expiry in days (default 30)"),
165
+ },
166
+ }, async ({ address, expiryDays }) => {
167
+ try {
168
+ const parsed = exportSchema.safeParse({ address, expiryDays });
169
+ if (!parsed.success) {
170
+ return formatError(new Error(`Invalid input: ${parsed.error.issues.map((e) => e.message).join(", ")}`));
171
+ }
172
+ const { address: addr, expiryDays: days } = parsed.data;
173
+ const agentDid = addressToDid(addr);
174
+ // Read agent data from AgentRegistry
175
+ const agentData = await readContract(CONTRACTS.AgentRegistry, REGISTRY_ABI, "getAgent", [addr]);
176
+ const agent = agentData;
177
+ if (!agent || !agent.isActive) {
178
+ return formatError(new Error(`Agent ${addr} is not registered or not active on AgentRegistry`));
179
+ }
180
+ // Read attestation receipt count
181
+ let attestationCount = 0;
182
+ try {
183
+ const receipts = await readContract(CONTRACTS.ReceiptVerifier, VERIFIER_ABI, "getReceiptsByAgent", [addr]);
184
+ attestationCount = Array.isArray(receipts) ? receipts.length : 0;
185
+ }
186
+ catch {
187
+ // ReceiptVerifier may not have data — not fatal
188
+ }
189
+ // Build capability hashes
190
+ const capabilityHashes = hashCapabilities(agent.capabilities);
191
+ // Compute success rate
192
+ const totalTasks = agent.tasksCompleted + agent.tasksFailed;
193
+ const successRate = totalTasks > 0
194
+ ? Math.round((agent.tasksCompleted / totalTasks) * 1000) / 1000
195
+ : 0;
196
+ // Derive average rating from reputation (reputation is 0-1000, map to 0-5)
197
+ const averageRating = Math.round((Number(agent.reputation) / 200) * 10) / 10;
198
+ // Top capabilities (first 5)
199
+ const topCapabilities = agent.capabilities.slice(0, 5);
200
+ // Member since (ISO date from registeredAt)
201
+ const registeredAtSec = Number(agent.registeredAt);
202
+ const memberSince = registeredAtSec > 0
203
+ ? new Date(registeredAtSec * 1000).toISOString().split("T")[0]
204
+ : "unknown";
205
+ // Rank based on tasks completed
206
+ const tasksCompleted = Number(agent.tasksCompleted);
207
+ let rank = "Newcomer";
208
+ if (tasksCompleted >= 500)
209
+ rank = "Top 1%";
210
+ else if (tasksCompleted >= 200)
211
+ rank = "Top 5%";
212
+ else if (tasksCompleted >= 50)
213
+ rank = "Top 10%";
214
+ else if (tasksCompleted >= 10)
215
+ rank = "Established";
216
+ // Timestamps
217
+ const now = Math.floor(Date.now() / 1000);
218
+ const exp = now + (days * 24 * 60 * 60);
219
+ // Build the VC payload
220
+ const payload = {
221
+ iss: agentDid,
222
+ sub: agentDid,
223
+ iat: now,
224
+ exp,
225
+ nonce: keccak256(toBytes(`${addr}-${now}-${Math.random()}`)),
226
+ vc: {
227
+ "@context": [
228
+ "https://www.w3.org/2018/credentials/v1",
229
+ "https://covenant.io/credentials/v1",
230
+ ],
231
+ type: ["VerifiableCredential", "CovenantReputation"],
232
+ credentialSubject: {
233
+ id: agentDid,
234
+ chainId: CHAIN.id,
235
+ contractAddress: CONTRACTS.AgentRegistry,
236
+ reputation: Number(agent.reputation),
237
+ tasksCompleted,
238
+ tasksFailed: Number(agent.tasksFailed),
239
+ successRate,
240
+ averageRating,
241
+ totalEarned: `${(tasksCompleted * 0.001).toFixed(3)} ETH`,
242
+ stakedAmount: agent.stakedAmount.toString(),
243
+ capabilities: agent.capabilities,
244
+ topCapabilities,
245
+ capabilityHashes,
246
+ attestationCount,
247
+ lastActiveAt: Number(agent.lastTaskAt),
248
+ registeredAt: registeredAtSec,
249
+ memberSince,
250
+ rank,
251
+ },
252
+ credentialSchema: {
253
+ id: "https://covenant.io/schemas/CovenantReputation/v1",
254
+ type: "JsonSchema",
255
+ },
256
+ },
257
+ };
258
+ // Sign the JWT
259
+ const wallet = getWalletClient();
260
+ if (!wallet) {
261
+ return formatError(new Error("No wallet configured (PRIVATE_KEY not set). Cannot sign VC."));
262
+ }
263
+ const jwt = await createJwt(payload, wallet);
264
+ return formatReadResult({
265
+ jwt,
266
+ did: agentDid,
267
+ reputation: payload.vc.credentialSubject.reputation,
268
+ tasksCompleted: payload.vc.credentialSubject.tasksCompleted,
269
+ successRate: payload.vc.credentialSubject.successRate,
270
+ averageRating: payload.vc.credentialSubject.averageRating,
271
+ totalEarned: payload.vc.credentialSubject.totalEarned,
272
+ topCapabilities: payload.vc.credentialSubject.topCapabilities,
273
+ memberSince: payload.vc.credentialSubject.memberSince,
274
+ rank: payload.vc.credentialSubject.rank,
275
+ capabilities: payload.vc.credentialSubject.capabilities,
276
+ attestationCount: payload.vc.credentialSubject.attestationCount,
277
+ issuedAt: new Date(now * 1000).toISOString(),
278
+ expiresAt: new Date(exp * 1000).toISOString(),
279
+ note: "W3C Verifiable Credential (CovenantReputation) signed with ES256K. " +
280
+ "Verify with corven_import_reputation_vc.",
281
+ }, "Reputation VC Exported");
282
+ }
283
+ catch (e) {
284
+ const parsed = parseContractError(e);
285
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
286
+ }
287
+ });
288
+ // ──────────────────────────────────────────────────────────────
289
+ // corven_import_reputation_vc
290
+ // ──────────────────────────────────────────────────────────────
291
+ server.registerTool("corven_import_reputation_vc", {
292
+ title: "Import Reputation VC",
293
+ description: "Verify and import a reputation VC from another agent. " +
294
+ "Checks the VC signature, expiry, and that the issuer is a known " +
295
+ "COVENANT agent. Returns the parsed reputation data.\n" +
296
+ "USE WHEN: You receive a JWT from another agent and need to verify their reputation before trusting them with a task.\n" +
297
+ "REQUIRES: Valid VC JWT string (from corven_export_reputation_vc). Public client configured for on-chain issuer verification.\n" +
298
+ "RETURNS: Verification result with issuerRegistered flag, full credential data (reputation, task history, successRate, capabilities, attestationCount), and validity status.\n" +
299
+ "COMES BEFORE: Hiring decisions — use the parsed reputation to decide if the agent is trustworthy.\n" +
300
+ "COMES AFTER: corven_export_reputation_vc (another agent must have exported their VC first).\n" +
301
+ "NOTE: Checks signature (ES256K), expiry, and on-chain registration of the issuer. Returns verified:false with error details on failure.",
302
+ inputSchema: {
303
+ jwt: z.string().describe("The VC JWT string to verify"),
304
+ },
305
+ }, async ({ jwt }) => {
306
+ try {
307
+ const parsed = importSchema.safeParse({ jwt });
308
+ if (!parsed.success) {
309
+ return formatError(new Error(`Invalid input: ${parsed.error.issues.map((e) => e.message).join(", ")}`));
310
+ }
311
+ const { getPublicClient } = await import("../config.js");
312
+ const publicClient = getPublicClient();
313
+ // Verify the JWT signature and expiry
314
+ const result = await verifyJwt(parsed.data.jwt, publicClient);
315
+ if (!result.valid || !result.payload) {
316
+ return formatReadResult({
317
+ verified: false,
318
+ error: result.error || "Verification failed",
319
+ }, "VC Verification Failed");
320
+ }
321
+ const vc = result.payload;
322
+ // Check issuer is a registered COVENANT agent
323
+ const issuerAddress = didToAddress(vc.iss);
324
+ let issuerRegistered = false;
325
+ let issuerData = null;
326
+ try {
327
+ issuerData = await readContract(CONTRACTS.AgentRegistry, REGISTRY_ABI, "getAgent", [issuerAddress]);
328
+ issuerRegistered = true;
329
+ }
330
+ catch {
331
+ issuerRegistered = false;
332
+ }
333
+ return formatReadResult({
334
+ verified: true,
335
+ issuerRegistered,
336
+ issuer: {
337
+ did: vc.iss,
338
+ address: issuerAddress,
339
+ registered: issuerRegistered,
340
+ },
341
+ credential: {
342
+ subject: vc.sub,
343
+ chainId: vc.vc.credentialSubject.chainId,
344
+ reputation: vc.vc.credentialSubject.reputation,
345
+ tasksCompleted: vc.vc.credentialSubject.tasksCompleted,
346
+ tasksFailed: vc.vc.credentialSubject.tasksFailed,
347
+ successRate: vc.vc.credentialSubject.successRate,
348
+ averageRating: vc.vc.credentialSubject.averageRating,
349
+ totalEarned: vc.vc.credentialSubject.totalEarned,
350
+ stakedAmount: vc.vc.credentialSubject.stakedAmount,
351
+ capabilities: vc.vc.credentialSubject.capabilities,
352
+ topCapabilities: vc.vc.credentialSubject.topCapabilities,
353
+ attestationCount: vc.vc.credentialSubject.attestationCount,
354
+ memberSince: vc.vc.credentialSubject.memberSince,
355
+ rank: vc.vc.credentialSubject.rank,
356
+ issuedAt: new Date(vc.iat * 1000).toISOString(),
357
+ expiresAt: new Date(vc.exp * 1000).toISOString(),
358
+ },
359
+ warning: !issuerRegistered
360
+ ? "Issuer is not registered on this COVENANT instance. Credential is valid but issuer trust cannot be verified on-chain."
361
+ : undefined,
362
+ }, "VC Verified and Imported");
363
+ }
364
+ catch (e) {
365
+ const parsed = parseContractError(e);
366
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
367
+ }
368
+ });
369
+ // ──────────────────────────────────────────────────────────────
370
+ // corven_get_agent_did
371
+ // ──────────────────────────────────────────────────────────────
372
+ server.registerTool("corven_get_agent_did", {
373
+ title: "Get Agent DID",
374
+ description: "Get the W3C DID (Decentralized Identifier) for a COVENANT agent. " +
375
+ "Returns a did:covenant document with verification methods and " +
376
+ "capability hashes as metadata.\n" +
377
+ "USE WHEN: You need an agent's DID document for cross-platform identity resolution, VC verification, or cryptographic operations.\n" +
378
+ "REQUIRES: Valid Ethereum address. Agent does not need to be registered (DID is derived from address regardless).\n" +
379
+ "RETURNS: Full DID document with @context, id, verificationMethod, authentication, and capabilityAgreement metadata.\n" +
380
+ "COMES BEFORE: Cross-platform identity linking or VC issuance.\n" +
381
+ "COMES AFTER: corven_register_agent (for enriched on-chain metadata).\n" +
382
+ "NOTE: DID format is did:covenant:<address>. Capability hashes use keccak256 for verification.",
383
+ inputSchema: {
384
+ address: ethAddress,
385
+ },
386
+ }, async ({ address }) => {
387
+ try {
388
+ const parsed = didSchema.safeParse({ address });
389
+ if (!parsed.success) {
390
+ return formatError(new Error(`Invalid input: ${parsed.error.issues.map((e) => e.message).join(", ")}`));
391
+ }
392
+ const { address: addr } = parsed.data;
393
+ const did = addressToDid(addr);
394
+ // Try to enrich with on-chain data
395
+ let agentData;
396
+ try {
397
+ const raw = await readContract(CONTRACTS.AgentRegistry, REGISTRY_ABI, "getAgent", [addr]);
398
+ const a = raw;
399
+ agentData = {
400
+ capabilities: a.capabilities,
401
+ reputation: Number(a.reputation),
402
+ tasksCompleted: Number(a.tasksCompleted),
403
+ tasksFailed: Number(a.tasksFailed),
404
+ stakedAmount: a.stakedAmount.toString(),
405
+ };
406
+ }
407
+ catch {
408
+ // Agent not registered — still return DID without metadata
409
+ }
410
+ // Get attestation count if available
411
+ let attestationCount = 0;
412
+ if (agentData) {
413
+ try {
414
+ const receipts = await readContract(CONTRACTS.ReceiptVerifier, VERIFIER_ABI, "getReceiptsByAgent", [addr]);
415
+ attestationCount = Array.isArray(receipts) ? receipts.length : 0;
416
+ }
417
+ catch {
418
+ // Not fatal
419
+ }
420
+ }
421
+ const doc = createDIDDocument(addr, {
422
+ ...agentData,
423
+ attestationCount,
424
+ });
425
+ return formatReadResult({
426
+ did,
427
+ address: addr,
428
+ document: doc,
429
+ registered: !!agentData,
430
+ }, "Agent DID Document");
431
+ }
432
+ catch (e) {
433
+ const parsed = parseContractError(e);
434
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
435
+ }
436
+ });
437
+ }
438
+ //# sourceMappingURL=reputation-vc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation-vc.js","sourceRoot":"","sources":["../../src/tools/reputation-vc.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 registerRevisionTools(server: McpServer): void;
3
+ //# sourceMappingURL=revisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisions.d.ts","sourceRoot":"","sources":["../../src/tools/revisions.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAqJtD"}
@@ -0,0 +1,108 @@
1
+ import { loadAbi, CONTRACTS } from "../config.js";
2
+ import { executeOrPrepare, readContract } from "../handlers/wallet.js";
3
+ import { formatTxResult, formatReadResult } from "../handlers/transactions.js";
4
+ import { parseContractError, formatStructuredError } from "../lib/formatResponse.js";
5
+ import { ipfsCid, taskId as taskIdSchema } from "../lib/schemaHelpers.js";
6
+ const REVISION_ABI = loadAbi("RevisionManager");
7
+ function getRevisionManagerAddress() {
8
+ const addr = CONTRACTS.RevisionManager;
9
+ if (!addr || addr === "0x0000000000000000000000000000000000000000") {
10
+ throw new Error("RevisionManager not deployed. Set REVISION_MANAGER env var.");
11
+ }
12
+ return addr;
13
+ }
14
+ export function registerRevisionTools(server) {
15
+ server.registerTool("corven_request_revision", {
16
+ title: "Request Revision",
17
+ description: "Client requests changes to submitted work. Free — no cost to request revisions.\n" +
18
+ "USE WHEN: Worker submitted work that needs changes. You want to request modifications.\n" +
19
+ "REQUIRES: Task must have revision allowed. Max 3 revisions per task.\n" +
20
+ "RETURNS: Revision number, feedback hash, and confirmation.\n" +
21
+ "COMES AFTER: corven_verify_task (client reviewed work).\n" +
22
+ "COMES BEFORE: Worker calls corven_submit_revision with changes.\n" +
23
+ "NOTE: Revisions are free. Only dispute costs ETH (stake slashing).",
24
+ inputSchema: {
25
+ taskId: taskIdSchema,
26
+ feedbackHash: ipfsCid.describe("IPFS hash of detailed feedback"),
27
+ },
28
+ }, async (params) => {
29
+ try {
30
+ const { taskId, feedbackHash } = params;
31
+ const addr = getRevisionManagerAddress();
32
+ const result = await executeOrPrepare(addr, REVISION_ABI, "requestRevision", [taskId, feedbackHash]);
33
+ return formatTxResult(result);
34
+ }
35
+ catch (e) {
36
+ const parsed = parseContractError(e);
37
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
38
+ }
39
+ });
40
+ server.registerTool("corven_submit_revision", {
41
+ title: "Submit Revision",
42
+ description: "Worker submits revised work after client feedback.\n" +
43
+ "USE WHEN: You received revision feedback and have made changes.\n" +
44
+ "REQUIRES: A revision must have been requested. You must be the worker (not the requester).\n" +
45
+ "RETURNS: Revision number, new deliverable hash, and confirmation.\n" +
46
+ "COMES AFTER: corven_request_revision (client requested changes).\n" +
47
+ "COMES BEFORE: Client reviews revised work with corven_verify_deep or corven_verify_task.",
48
+ inputSchema: {
49
+ taskId: taskIdSchema,
50
+ newHash: ipfsCid.describe("IPFS hash of revised deliverable"),
51
+ },
52
+ }, async (params) => {
53
+ try {
54
+ const { taskId, newHash } = params;
55
+ const addr = getRevisionManagerAddress();
56
+ const result = await executeOrPrepare(addr, REVISION_ABI, "submitRevision", [taskId, newHash]);
57
+ return formatTxResult(result);
58
+ }
59
+ catch (e) {
60
+ const parsed = parseContractError(e);
61
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
62
+ }
63
+ });
64
+ server.registerTool("corven_get_revisions", {
65
+ title: "Get Revision History",
66
+ description: "Get all revisions for a task.\n" +
67
+ "USE WHEN: Reviewing revision history before making a decision.\n" +
68
+ "REQUIRES: Task ID.\n" +
69
+ "RETURNS: Array of revisions with numbers, feedback, hashes, and timestamps.",
70
+ inputSchema: {
71
+ taskId: taskIdSchema,
72
+ },
73
+ }, async (params) => {
74
+ try {
75
+ const { taskId } = params;
76
+ const addr = getRevisionManagerAddress();
77
+ const revisions = await readContract(addr, REVISION_ABI, "getRevisions", [taskId]);
78
+ return formatReadResult({ taskId, revisionCount: revisions.length, revisions }, `Revisions for Task #${taskId}`);
79
+ }
80
+ catch (e) {
81
+ const parsed = parseContractError(e);
82
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
83
+ }
84
+ });
85
+ server.registerTool("corven_can_revise", {
86
+ title: "Check If Revisions Allowed",
87
+ description: "Check if a task can still receive revisions.\n" +
88
+ "USE WHEN: Checking if more revisions are possible.\n" +
89
+ "REQUIRES: Task ID.\n" +
90
+ "RETURNS: Boolean indicating if revisions are allowed and remaining count.",
91
+ inputSchema: {
92
+ taskId: taskIdSchema,
93
+ },
94
+ }, async (params) => {
95
+ try {
96
+ const { taskId } = params;
97
+ const addr = getRevisionManagerAddress();
98
+ const canRevise = await readContract(addr, REVISION_ABI, "canRevise", [taskId]);
99
+ const count = await readContract(addr, REVISION_ABI, "getRevisionCount", [taskId]);
100
+ return formatReadResult({ taskId, canRevise, revisionCount: Number(count) }, `Revision Status for Task #${taskId}`);
101
+ }
102
+ catch (e) {
103
+ const parsed = parseContractError(e);
104
+ return formatStructuredError(parsed.error, parsed.cause, parsed.fix, parsed.retryable);
105
+ }
106
+ });
107
+ }
108
+ //# sourceMappingURL=revisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revisions.js","sourceRoot":"","sources":["../../src/tools/revisions.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 registerRouterTools(server: McpServer): void;
3
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/tools/router.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuG3D"}