@varun-ai07/covenant-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1078 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +195 -0
- package/dist/cli.js.map +1 -0
- package/dist/colors.d.ts +14 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +14 -0
- package/dist/colors.js.map +1 -0
- package/dist/config.d.ts +396 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +191 -0
- package/dist/config.js.map +1 -0
- package/dist/handlers/transactions.d.ts +5 -0
- package/dist/handlers/transactions.d.ts.map +1 -0
- package/dist/handlers/transactions.js +82 -0
- package/dist/handlers/transactions.js.map +1 -0
- package/dist/handlers/wallet.d.ts +24 -0
- package/dist/handlers/wallet.d.ts.map +1 -0
- package/dist/handlers/wallet.js +264 -0
- package/dist/handlers/wallet.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +11 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +31 -0
- package/dist/logger.js.map +1 -0
- package/dist/postinstall.d.ts +3 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +38 -0
- package/dist/postinstall.js.map +1 -0
- package/dist/schemas.d.ts +48 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +114 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +23 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +51 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/batches.d.ts +3 -0
- package/dist/tools/batches.d.ts.map +1 -0
- package/dist/tools/batches.js +167 -0
- package/dist/tools/batches.js.map +1 -0
- package/dist/tools/collectives.d.ts +3 -0
- package/dist/tools/collectives.d.ts.map +1 -0
- package/dist/tools/collectives.js +168 -0
- package/dist/tools/collectives.js.map +1 -0
- package/dist/tools/disputes.d.ts +3 -0
- package/dist/tools/disputes.d.ts.map +1 -0
- package/dist/tools/disputes.js +129 -0
- package/dist/tools/disputes.js.map +1 -0
- package/dist/tools/escrow.d.ts +3 -0
- package/dist/tools/escrow.d.ts.map +1 -0
- package/dist/tools/escrow.js +238 -0
- package/dist/tools/escrow.js.map +1 -0
- package/dist/tools/insurance.d.ts +3 -0
- package/dist/tools/insurance.d.ts.map +1 -0
- package/dist/tools/insurance.js +101 -0
- package/dist/tools/insurance.js.map +1 -0
- package/dist/tools/market.d.ts +3 -0
- package/dist/tools/market.d.ts.map +1 -0
- package/dist/tools/market.js +303 -0
- package/dist/tools/market.js.map +1 -0
- package/dist/tools/protocol.d.ts +3 -0
- package/dist/tools/protocol.d.ts.map +1 -0
- package/dist/tools/protocol.js +121 -0
- package/dist/tools/protocol.js.map +1 -0
- package/dist/tools/receipts.d.ts +3 -0
- package/dist/tools/receipts.d.ts.map +1 -0
- package/dist/tools/receipts.js +88 -0
- package/dist/tools/receipts.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +136 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/transports/http.d.ts +3 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +121 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/stdio.d.ts +7 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +9 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentInsurance MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* claim_insurance — Submit an insurance claim for a failed task
|
|
5
|
+
* get_claim — Get claim details
|
|
6
|
+
* get_claim_counter — Get total claims
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import { formatEther } from "viem";
|
|
10
|
+
import { loadAbi, CONTRACTS, getAccount } from "../config.js";
|
|
11
|
+
import { executeOrPrepare, readContract } from "../handlers/wallet.js";
|
|
12
|
+
import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
|
|
13
|
+
const ABI = loadAbi("AgentInsurance");
|
|
14
|
+
// Input validation schemas
|
|
15
|
+
const claimInsuranceSchema = z.object({
|
|
16
|
+
taskId: z.number().int().positive(),
|
|
17
|
+
});
|
|
18
|
+
export function registerInsuranceTools(server) {
|
|
19
|
+
// ──────────────────────────────────────────────────────────────
|
|
20
|
+
// claim_insurance
|
|
21
|
+
// ──────────────────────────────────────────────────────────────
|
|
22
|
+
server.registerTool("claim_insurance", {
|
|
23
|
+
title: "Claim Insurance",
|
|
24
|
+
description: "Submit an insurance claim for a failed task. " +
|
|
25
|
+
"May require governance approval depending on claim type.",
|
|
26
|
+
inputSchema: {
|
|
27
|
+
taskId: z.number().describe("Task ID to claim insurance for"),
|
|
28
|
+
},
|
|
29
|
+
}, async ({ taskId }) => {
|
|
30
|
+
try {
|
|
31
|
+
const validation = claimInsuranceSchema.safeParse({ taskId });
|
|
32
|
+
if (!validation.success) {
|
|
33
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
34
|
+
}
|
|
35
|
+
const account = getAccount();
|
|
36
|
+
if (!account) {
|
|
37
|
+
return formatError(new Error("No private key configured"));
|
|
38
|
+
}
|
|
39
|
+
const result = await executeOrPrepare(CONTRACTS.AgentInsurance, ABI, "claimInsurance", [BigInt(taskId)]);
|
|
40
|
+
return formatTxResult(result);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
return formatError(e);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// ──────────────────────────────────────────────────────────────
|
|
47
|
+
// get_claim
|
|
48
|
+
// ──────────────────────────────────────────────────────────────
|
|
49
|
+
server.registerTool("get_claim", {
|
|
50
|
+
title: "Get Insurance Claim",
|
|
51
|
+
description: "Retrieve details of an insurance claim.",
|
|
52
|
+
inputSchema: {
|
|
53
|
+
claimId: z.number().describe("Claim ID"),
|
|
54
|
+
},
|
|
55
|
+
}, async ({ claimId }) => {
|
|
56
|
+
try {
|
|
57
|
+
const data = await readContract(CONTRACTS.AgentInsurance, ABI, "getClaim", [BigInt(claimId)]);
|
|
58
|
+
const enriched = {
|
|
59
|
+
...data,
|
|
60
|
+
amountEth: data.amount ? formatEther(data.amount) : "0",
|
|
61
|
+
};
|
|
62
|
+
return formatReadResult(enriched, `Insurance Claim #${claimId}`);
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
return formatError(e);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
// ──────────────────────────────────────────────────────────────
|
|
69
|
+
// get_claim_counter
|
|
70
|
+
// ──────────────────────────────────────────────────────────────
|
|
71
|
+
server.registerTool("get_claim_counter", {
|
|
72
|
+
title: "Get Claim Counter",
|
|
73
|
+
description: "Get the total number of insurance claims filed.",
|
|
74
|
+
inputSchema: {},
|
|
75
|
+
}, async () => {
|
|
76
|
+
try {
|
|
77
|
+
const count = await readContract(CONTRACTS.AgentInsurance, ABI, "claimCounter", []);
|
|
78
|
+
return formatReadResult({ count: Number(count) }, "Insurance Claim Counter");
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
return formatError(e);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// ──────────────────────────────────────────────────────────────
|
|
85
|
+
// get_coverage_percent
|
|
86
|
+
// ──────────────────────────────────────────────────────────────
|
|
87
|
+
server.registerTool("get_coverage_percent", {
|
|
88
|
+
title: "Get Coverage Percentage",
|
|
89
|
+
description: "Get the insurance coverage percentage (e.g., 80% = 80).",
|
|
90
|
+
inputSchema: {},
|
|
91
|
+
}, async () => {
|
|
92
|
+
try {
|
|
93
|
+
const percent = await readContract(CONTRACTS.AgentInsurance, ABI, "CLAIM_COVERAGE_PERCENT", []);
|
|
94
|
+
return formatReadResult({ coveragePercent: Number(percent) }, "Coverage Percentage");
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
return formatError(e);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=insurance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insurance.js","sourceRoot":"","sources":["../../src/tools/insurance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../src/tools/market.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkDzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyV3D"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTaskMarket MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* post_task — Post an open task for bidding
|
|
5
|
+
* get_open_task — Read open task details
|
|
6
|
+
* submit_bid — Submit a bid on an open task
|
|
7
|
+
* get_bid — Get bid details
|
|
8
|
+
* select_worker — Select a winning bidder
|
|
9
|
+
* make_counter_offer — Make a counter offer on a bid
|
|
10
|
+
* accept_counter_offer — Accept a counter offer (worker)
|
|
11
|
+
* withdraw_bid — Withdraw your bid
|
|
12
|
+
* cancel_task — Cancel an open task
|
|
13
|
+
*/
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { parseEther, formatEther, isAddress } from "viem";
|
|
16
|
+
import { loadAbi, CONTRACTS, getAccount } from "../config.js";
|
|
17
|
+
import { executeOrPrepare, readContract } from "../handlers/wallet.js";
|
|
18
|
+
import { formatTxResult, formatReadResult, formatError } from "../handlers/transactions.js";
|
|
19
|
+
const ABI = loadAbi("OpenTaskMarket");
|
|
20
|
+
// Task status enum for OpenTaskMarket
|
|
21
|
+
const TASK_STATUS = {
|
|
22
|
+
0: "Open",
|
|
23
|
+
1: "InProgress",
|
|
24
|
+
2: "Completed",
|
|
25
|
+
3: "Cancelled",
|
|
26
|
+
};
|
|
27
|
+
// Input validation schemas
|
|
28
|
+
const postTaskSchema = z.object({
|
|
29
|
+
maxPayment: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount format")
|
|
30
|
+
.refine(val => {
|
|
31
|
+
const payment = parseFloat(val);
|
|
32
|
+
return payment >= 0.001 && payment <= 1000;
|
|
33
|
+
}, { message: "Payment must be between 0.001 and 1000 ETH" }),
|
|
34
|
+
deadline: z.number().int().positive()
|
|
35
|
+
.refine(val => {
|
|
36
|
+
const deadlineMs = val * 1000;
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
const oneYear = now + (365 * 24 * 60 * 60 * 1000);
|
|
39
|
+
return deadlineMs > now && deadlineMs < oneYear;
|
|
40
|
+
}, { message: "Deadline must be a future timestamp within 1 year" }),
|
|
41
|
+
descriptionHash: z.string().min(1).max(100),
|
|
42
|
+
});
|
|
43
|
+
const submitBidSchema = z.object({
|
|
44
|
+
taskId: z.number().int().positive(),
|
|
45
|
+
price: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount format")
|
|
46
|
+
.refine(val => parseFloat(val) > 0, { message: "Price must be positive" }),
|
|
47
|
+
timeEstimate: z.number().int().positive(),
|
|
48
|
+
proposalHash: z.string().min(1).max(200),
|
|
49
|
+
});
|
|
50
|
+
const selectWorkerSchema = z.object({
|
|
51
|
+
taskId: z.number().int().positive(),
|
|
52
|
+
worker: z.string().refine(isAddress, { message: "Invalid worker address" }),
|
|
53
|
+
});
|
|
54
|
+
const counterOfferSchema = z.object({
|
|
55
|
+
taskId: z.number().int().positive(),
|
|
56
|
+
bidder: z.string().refine(isAddress, { message: "Invalid bidder address" }),
|
|
57
|
+
counterPrice: z.string().regex(/^\d+\.?\d*$/, "Invalid ETH amount format"),
|
|
58
|
+
counterTimeEstimate: z.number().int().positive(),
|
|
59
|
+
counterProposalHash: z.string().min(1).max(200),
|
|
60
|
+
});
|
|
61
|
+
export function registerMarketTools(server) {
|
|
62
|
+
// ──────────────────────────────────────────────────────────────
|
|
63
|
+
// post_task
|
|
64
|
+
// ──────────────────────────────────────────────────────────────
|
|
65
|
+
server.registerTool("post_open_task", {
|
|
66
|
+
title: "Post Open Task",
|
|
67
|
+
description: "Post an open task for competitive bidding. Workers can submit bids. " +
|
|
68
|
+
"Client sends maxPayment as msg.value. Returns the new taskId.",
|
|
69
|
+
inputSchema: {
|
|
70
|
+
maxPayment: z.string().describe("Maximum payment in ETH (e.g. '0.05')"),
|
|
71
|
+
deadline: z.number().describe("Unix timestamp deadline (seconds)"),
|
|
72
|
+
descriptionHash: z.string().describe("IPFS CID or hash for task description"),
|
|
73
|
+
},
|
|
74
|
+
}, async ({ maxPayment, deadline, descriptionHash }) => {
|
|
75
|
+
try {
|
|
76
|
+
const validation = postTaskSchema.safeParse({ maxPayment, deadline, descriptionHash });
|
|
77
|
+
if (!validation.success) {
|
|
78
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
79
|
+
}
|
|
80
|
+
const account = getAccount();
|
|
81
|
+
if (!account) {
|
|
82
|
+
return formatError(new Error("No private key configured — cannot send transactions"));
|
|
83
|
+
}
|
|
84
|
+
const paymentWei = parseEther(maxPayment);
|
|
85
|
+
const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "postTask", [paymentWei, BigInt(deadline), descriptionHash], paymentWei);
|
|
86
|
+
return formatTxResult(result);
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
return formatError(e);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
// ──────────────────────────────────────────────────────────────
|
|
93
|
+
// get_open_task
|
|
94
|
+
// ──────────────────────────────────────────────────────────────
|
|
95
|
+
server.registerTool("get_open_task", {
|
|
96
|
+
title: "Get Open Task Details",
|
|
97
|
+
description: "Retrieve details of an open market task including bids and selected worker.",
|
|
98
|
+
inputSchema: {
|
|
99
|
+
taskId: z.number().describe("Numeric task ID"),
|
|
100
|
+
},
|
|
101
|
+
}, async ({ taskId }) => {
|
|
102
|
+
try {
|
|
103
|
+
const data = await readContract(CONTRACTS.OpenTaskMarket, ABI, "getTask", [BigInt(taskId)]);
|
|
104
|
+
const enriched = {
|
|
105
|
+
...data,
|
|
106
|
+
statusLabel: TASK_STATUS[data.status] ?? `Unknown(${data.status})`,
|
|
107
|
+
maxPaymentEth: formatEther(data.maxPayment),
|
|
108
|
+
selectedPriceEth: data.selectedPrice ? formatEther(data.selectedPrice) : "0",
|
|
109
|
+
};
|
|
110
|
+
return formatReadResult(enriched, `Open Task #${taskId}`);
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
return formatError(e);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// ──────────────────────────────────────────────────────────────
|
|
117
|
+
// submit_bid
|
|
118
|
+
// ──────────────────────────────────────────────────────────────
|
|
119
|
+
server.registerTool("submit_bid", {
|
|
120
|
+
title: "Submit Bid",
|
|
121
|
+
description: "Submit a bid on an open task. Include your proposed price, time estimate, and proposal hash.",
|
|
122
|
+
inputSchema: {
|
|
123
|
+
taskId: z.number().describe("Task ID to bid on"),
|
|
124
|
+
price: z.string().describe("Your bid price in ETH"),
|
|
125
|
+
timeEstimate: z.number().describe("Estimated completion time in seconds"),
|
|
126
|
+
proposalHash: z.string().describe("IPFS CID or hash of your proposal"),
|
|
127
|
+
},
|
|
128
|
+
}, async ({ taskId, price, timeEstimate, proposalHash }) => {
|
|
129
|
+
try {
|
|
130
|
+
const validation = submitBidSchema.safeParse({ taskId, price, timeEstimate, proposalHash });
|
|
131
|
+
if (!validation.success) {
|
|
132
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
133
|
+
}
|
|
134
|
+
const account = getAccount();
|
|
135
|
+
if (!account) {
|
|
136
|
+
return formatError(new Error("No private key configured"));
|
|
137
|
+
}
|
|
138
|
+
const priceWei = parseEther(price);
|
|
139
|
+
const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "submitBid", [BigInt(taskId), priceWei, BigInt(timeEstimate), proposalHash]);
|
|
140
|
+
return formatTxResult(result);
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
return formatError(e);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
// ──────────────────────────────────────────────────────────────
|
|
147
|
+
// get_bid
|
|
148
|
+
// ──────────────────────────────────────────────────────────────
|
|
149
|
+
server.registerTool("get_bid", {
|
|
150
|
+
title: "Get Bid Details",
|
|
151
|
+
description: "Retrieve a specific bid on an open task by taskId and bidder address.",
|
|
152
|
+
inputSchema: {
|
|
153
|
+
taskId: z.number().describe("Task ID"),
|
|
154
|
+
bidder: z.string().describe("Bidder's Ethereum address"),
|
|
155
|
+
},
|
|
156
|
+
}, async ({ taskId, bidder }) => {
|
|
157
|
+
try {
|
|
158
|
+
const data = await readContract(CONTRACTS.OpenTaskMarket, ABI, "getBid", [BigInt(taskId), bidder]);
|
|
159
|
+
const enriched = {
|
|
160
|
+
priceEth: formatEther(data.price),
|
|
161
|
+
timeEstimate: data.timeEstimate,
|
|
162
|
+
proposalHash: data.proposalHash,
|
|
163
|
+
bidAt: data.bidAt,
|
|
164
|
+
bidder: data.bidderAddr,
|
|
165
|
+
hasCounter: data.hasCounter,
|
|
166
|
+
counterPriceEth: data.counterPrice ? formatEther(data.counterPrice) : "0",
|
|
167
|
+
counterTimeEstimate: data.counterTimeEstimate,
|
|
168
|
+
counterProposalHash: data.counterProposalHash,
|
|
169
|
+
};
|
|
170
|
+
return formatReadResult(enriched, `Bid on Task #${taskId}`);
|
|
171
|
+
}
|
|
172
|
+
catch (e) {
|
|
173
|
+
return formatError(e);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
// ──────────────────────────────────────────────────────────────
|
|
177
|
+
// select_worker
|
|
178
|
+
// ──────────────────────────────────────────────────────────────
|
|
179
|
+
server.registerTool("select_worker", {
|
|
180
|
+
title: "Select Worker",
|
|
181
|
+
description: "Select a winning bidder for your open task. Only the task client can call this. " +
|
|
182
|
+
"Transitions task to InProgress and assigns the worker.",
|
|
183
|
+
inputSchema: {
|
|
184
|
+
taskId: z.number().describe("Task ID"),
|
|
185
|
+
worker: z.string().describe("Address of the selected worker/bidder"),
|
|
186
|
+
},
|
|
187
|
+
}, async ({ taskId, worker }) => {
|
|
188
|
+
try {
|
|
189
|
+
const validation = selectWorkerSchema.safeParse({ taskId, worker });
|
|
190
|
+
if (!validation.success) {
|
|
191
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
192
|
+
}
|
|
193
|
+
const account = getAccount();
|
|
194
|
+
if (!account) {
|
|
195
|
+
return formatError(new Error("No private key configured"));
|
|
196
|
+
}
|
|
197
|
+
const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "selectWorker", [BigInt(taskId), worker], undefined, "OpenTaskMarket");
|
|
198
|
+
return formatTxResult(result);
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
return formatError(e);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
// ──────────────────────────────────────────────────────────────
|
|
205
|
+
// make_counter_offer
|
|
206
|
+
// ──────────────────────────────────────────────────────────────
|
|
207
|
+
server.registerTool("make_counter_offer", {
|
|
208
|
+
title: "Make Counter Offer",
|
|
209
|
+
description: "Task client makes a counter offer to a worker's bid. " +
|
|
210
|
+
"The worker can then accept or reject the counter.",
|
|
211
|
+
inputSchema: {
|
|
212
|
+
taskId: z.number().describe("Task ID"),
|
|
213
|
+
bidder: z.string().describe("Bidder address to counter"),
|
|
214
|
+
counterPrice: z.string().describe("Counter price in ETH"),
|
|
215
|
+
counterTimeEstimate: z.number().describe("Counter time estimate in seconds"),
|
|
216
|
+
counterProposalHash: z.string().describe("IPFS CID for counter proposal"),
|
|
217
|
+
},
|
|
218
|
+
}, async ({ taskId, bidder, counterPrice, counterTimeEstimate, counterProposalHash }) => {
|
|
219
|
+
try {
|
|
220
|
+
const validation = counterOfferSchema.safeParse({ taskId, bidder, counterPrice, counterTimeEstimate, counterProposalHash });
|
|
221
|
+
if (!validation.success) {
|
|
222
|
+
return formatError(new Error(`Invalid input: ${validation.error.issues.map(e => e.message).join(", ")}`));
|
|
223
|
+
}
|
|
224
|
+
const account = getAccount();
|
|
225
|
+
if (!account) {
|
|
226
|
+
return formatError(new Error("No private key configured"));
|
|
227
|
+
}
|
|
228
|
+
const priceWei = parseEther(counterPrice);
|
|
229
|
+
const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "makeCounterOffer", [BigInt(taskId), bidder, priceWei, BigInt(counterTimeEstimate), counterProposalHash], undefined, "OpenTaskMarket");
|
|
230
|
+
return formatTxResult(result);
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
return formatError(e);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
// ──────────────────────────────────────────────────────────────
|
|
237
|
+
// accept_counter_offer
|
|
238
|
+
// ──────────────────────────────────────────────────────────────
|
|
239
|
+
server.registerTool("accept_counter_offer", {
|
|
240
|
+
title: "Accept Counter Offer",
|
|
241
|
+
description: "Worker accepts the client's counter offer on their bid.",
|
|
242
|
+
inputSchema: {
|
|
243
|
+
taskId: z.number().describe("Task ID"),
|
|
244
|
+
},
|
|
245
|
+
}, async ({ taskId }) => {
|
|
246
|
+
try {
|
|
247
|
+
const account = getAccount();
|
|
248
|
+
if (!account) {
|
|
249
|
+
return formatError(new Error("No private key configured"));
|
|
250
|
+
}
|
|
251
|
+
const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "acceptCounterOffer", [BigInt(taskId)]);
|
|
252
|
+
return formatTxResult(result);
|
|
253
|
+
}
|
|
254
|
+
catch (e) {
|
|
255
|
+
return formatError(e);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
// ──────────────────────────────────────────────────────────────
|
|
259
|
+
// withdraw_bid
|
|
260
|
+
// ──────────────────────────────────────────────────────────────
|
|
261
|
+
server.registerTool("withdraw_bid", {
|
|
262
|
+
title: "Withdraw Bid",
|
|
263
|
+
description: "Withdraw your bid from an open task before being selected.",
|
|
264
|
+
inputSchema: {
|
|
265
|
+
taskId: z.number().describe("Task ID"),
|
|
266
|
+
},
|
|
267
|
+
}, async ({ taskId }) => {
|
|
268
|
+
try {
|
|
269
|
+
const account = getAccount();
|
|
270
|
+
if (!account) {
|
|
271
|
+
return formatError(new Error("No private key configured"));
|
|
272
|
+
}
|
|
273
|
+
const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "withdrawBid", [BigInt(taskId)]);
|
|
274
|
+
return formatTxResult(result);
|
|
275
|
+
}
|
|
276
|
+
catch (e) {
|
|
277
|
+
return formatError(e);
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
// ──────────────────────────────────────────────────────────────
|
|
281
|
+
// cancel_open_task
|
|
282
|
+
// ──────────────────────────────────────────────────────────────
|
|
283
|
+
server.registerTool("cancel_open_task", {
|
|
284
|
+
title: "Cancel Open Task",
|
|
285
|
+
description: "Cancel an open task and refund the escrowed payment.",
|
|
286
|
+
inputSchema: {
|
|
287
|
+
taskId: z.number().describe("Task ID to cancel"),
|
|
288
|
+
},
|
|
289
|
+
}, async ({ taskId }) => {
|
|
290
|
+
try {
|
|
291
|
+
const account = getAccount();
|
|
292
|
+
if (!account) {
|
|
293
|
+
return formatError(new Error("No private key configured"));
|
|
294
|
+
}
|
|
295
|
+
const result = await executeOrPrepare(CONTRACTS.OpenTaskMarket, ABI, "cancelTask", [BigInt(taskId)], undefined, "OpenTaskMarket");
|
|
296
|
+
return formatTxResult(result);
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
return formatError(e);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=market.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/tools/market.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/tools/protocol.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4I7D"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol-wide MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* get_stats — Aggregate protocol statistics
|
|
5
|
+
* get_leaderboard — Top agents by reputation
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { formatEther } from "viem";
|
|
9
|
+
import { loadAbi, CONTRACTS } from "../config.js";
|
|
10
|
+
import { readContract } from "../handlers/wallet.js";
|
|
11
|
+
import { formatReadResult, formatError } from "../handlers/transactions.js";
|
|
12
|
+
const registryAbi = loadAbi("AgentRegistry");
|
|
13
|
+
const escrowAbi = loadAbi("TaskEscrow");
|
|
14
|
+
// Input validation schemas
|
|
15
|
+
const getStatsSchema = z.object({}); // No parameters
|
|
16
|
+
const getLeaderboardSchema = z.object({
|
|
17
|
+
limit: z.number().int().min(1).max(50).optional().default(10)
|
|
18
|
+
});
|
|
19
|
+
export function registerProtocolTools(server) {
|
|
20
|
+
// ──────────────────────────────────────────────────────────────
|
|
21
|
+
// get_stats
|
|
22
|
+
// ──────────────────────────────────────────────────────────────
|
|
23
|
+
server.registerTool("get_stats", {
|
|
24
|
+
title: "Protocol Statistics",
|
|
25
|
+
description: "Get aggregate COVENANT protocol stats: total agents, tasks created, " +
|
|
26
|
+
"tasks completed, total volume, fees collected, and active agents.",
|
|
27
|
+
inputSchema: {},
|
|
28
|
+
}, async () => {
|
|
29
|
+
try {
|
|
30
|
+
// Validate input (no parameters for get_stats)
|
|
31
|
+
const validationResult = getStatsSchema.safeParse({});
|
|
32
|
+
if (!validationResult.success) {
|
|
33
|
+
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
34
|
+
}
|
|
35
|
+
// Fetch stats from both contracts in parallel
|
|
36
|
+
const [totalAgents, totalTasks, completedTasks, totalVolume, totalFees] = await Promise.all([
|
|
37
|
+
readContract(CONTRACTS.AgentRegistry, registryAbi, "totalAgents", []),
|
|
38
|
+
readContract(CONTRACTS.TaskEscrow, escrowAbi, "totalTasks", []),
|
|
39
|
+
readContract(CONTRACTS.TaskEscrow, escrowAbi, "completedTasks", []),
|
|
40
|
+
readContract(CONTRACTS.TaskEscrow, escrowAbi, "totalVolume", []),
|
|
41
|
+
readContract(CONTRACTS.TaskEscrow, escrowAbi, "totalFees", []),
|
|
42
|
+
]);
|
|
43
|
+
const stats = {
|
|
44
|
+
totalAgents: Number(totalAgents),
|
|
45
|
+
totalTasks: Number(totalTasks),
|
|
46
|
+
completedTasks: Number(completedTasks),
|
|
47
|
+
totalVolumeEth: formatEther(totalVolume),
|
|
48
|
+
totalFeesEth: formatEther(totalFees),
|
|
49
|
+
completionRate: Number(totalTasks) > 0
|
|
50
|
+
? `${((Number(completedTasks) / Number(totalTasks)) * 100).toFixed(1)}%`
|
|
51
|
+
: "N/A",
|
|
52
|
+
};
|
|
53
|
+
return formatReadResult(stats, "COVENANT Protocol Statistics");
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
return formatError(e);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
// ──────────────────────────────────────────────────────────────
|
|
60
|
+
// get_leaderboard
|
|
61
|
+
// ──────────────────────────────────────────────────────────────
|
|
62
|
+
server.registerTool("get_leaderboard", {
|
|
63
|
+
title: "Agent Leaderboard",
|
|
64
|
+
description: "Retrieve the top N agents ranked by reputation score. " +
|
|
65
|
+
"Returns agent address, name, reputation, tasks completed/failed, and stake.",
|
|
66
|
+
inputSchema: {
|
|
67
|
+
limit: z
|
|
68
|
+
.number()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe("Number of top agents to return (default 10, max 50)"),
|
|
71
|
+
},
|
|
72
|
+
}, async ({ limit }) => {
|
|
73
|
+
try {
|
|
74
|
+
// Validate input
|
|
75
|
+
const validationResult = getLeaderboardSchema.safeParse({ limit });
|
|
76
|
+
if (!validationResult.success) {
|
|
77
|
+
return formatError(new Error(`Invalid input: ${validationResult.error.issues.map((e) => e.message).join(", ")}`));
|
|
78
|
+
}
|
|
79
|
+
const { limit: validatedLimit } = validationResult.data;
|
|
80
|
+
const topN = Math.min(validatedLimit ?? 10, 50);
|
|
81
|
+
// Get total agent count
|
|
82
|
+
const totalAgents = Number(await readContract(CONTRACTS.AgentRegistry, registryAbi, "totalAgents", []));
|
|
83
|
+
if (totalAgents === 0) {
|
|
84
|
+
return formatReadResult({ agents: [], totalAgents: 0 }, "No registered agents yet");
|
|
85
|
+
}
|
|
86
|
+
// Fetch all agents (the contract stores addresses, we iterate)
|
|
87
|
+
// getAgentByIndex is the pattern used by the leaderboard frontend
|
|
88
|
+
const agents = [];
|
|
89
|
+
const count = Math.min(totalAgents, 200); // safety cap
|
|
90
|
+
const agentPromises = [];
|
|
91
|
+
for (let i = 0; i < count; i++) {
|
|
92
|
+
agentPromises.push(readContract(CONTRACTS.AgentRegistry, registryAbi, "getAgentByIndex", [BigInt(i)]).catch(() => null) // skip if index doesn't exist
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
const results = await Promise.all(agentPromises);
|
|
96
|
+
for (const agent of results) {
|
|
97
|
+
if (agent && agent.isActive) {
|
|
98
|
+
agents.push(agent);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Sort by reputation descending
|
|
102
|
+
agents.sort((a, b) => Number(b.reputation ?? 0) - Number(a.reputation ?? 0));
|
|
103
|
+
// Take top N
|
|
104
|
+
const topAgents = agents.slice(0, topN).map((a, i) => ({
|
|
105
|
+
rank: i + 1,
|
|
106
|
+
address: a.addr ?? a.address ?? "unknown",
|
|
107
|
+
name: a.name,
|
|
108
|
+
reputation: Number(a.reputation),
|
|
109
|
+
tasksCompleted: Number(a.tasksCompleted ?? 0),
|
|
110
|
+
tasksFailed: Number(a.tasksFailed ?? 0),
|
|
111
|
+
stakedEth: formatEther(a.stakedAmount ?? 0n),
|
|
112
|
+
capabilities: a.capabilities ?? [],
|
|
113
|
+
}));
|
|
114
|
+
return formatReadResult({ totalAgents, showing: topAgents.length, agents: topAgents }, "COVENANT Agent Leaderboard");
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
return formatError(e);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/tools/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipts.d.ts","sourceRoot":"","sources":["../../src/tools/receipts.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+F5D"}
|