@obolos_tech/mcp-server 0.2.6 → 0.3.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/dist/acp.d.ts ADDED
@@ -0,0 +1,61 @@
1
+ /**
2
+ * ACP (ERC-8183 Agentic Commerce Protocol) on-chain client for MCP Server
3
+ *
4
+ * Provides contract interaction for creating, funding, submitting,
5
+ * completing, and rejecting jobs on the ACP smart contract on Base mainnet.
6
+ */
7
+ export declare class ACPClient {
8
+ private account;
9
+ private client;
10
+ constructor(privateKey: string);
11
+ get address(): string;
12
+ /**
13
+ * Create a job on-chain.
14
+ * Returns the jobId from the JobCreated event and the transaction hash.
15
+ */
16
+ createJob(params: {
17
+ provider: string;
18
+ evaluator: string;
19
+ expiredAt: number;
20
+ description: string;
21
+ hook: string;
22
+ }): Promise<{
23
+ jobId: bigint;
24
+ txHash: string;
25
+ }>;
26
+ /**
27
+ * Approve USDC spend and fund the job escrow.
28
+ */
29
+ fundJob(chainJobId: bigint, budgetUsdc: string): Promise<string>;
30
+ /**
31
+ * Submit work for a funded job. Hashes the deliverable string to bytes32.
32
+ */
33
+ submitJob(chainJobId: bigint, deliverable: string): Promise<string>;
34
+ /**
35
+ * Complete (approve) a submitted job. Releases payment to provider.
36
+ */
37
+ completeJob(chainJobId: bigint, reason?: string): Promise<string>;
38
+ /**
39
+ * Reject a submitted job. Refunds escrow to client.
40
+ */
41
+ rejectJob(chainJobId: bigint, reason?: string): Promise<string>;
42
+ /**
43
+ * Claim refund for an expired job.
44
+ */
45
+ claimRefund(chainJobId: bigint): Promise<string>;
46
+ /**
47
+ * Read job data from the chain.
48
+ */
49
+ getJob(chainJobId: bigint): Promise<{
50
+ client: string;
51
+ provider: string;
52
+ evaluator: string;
53
+ description: string;
54
+ budget: bigint;
55
+ expiredAt: bigint;
56
+ status: string;
57
+ statusCode: number;
58
+ hook: string;
59
+ deliverable: string;
60
+ }>;
61
+ }
package/dist/acp.js ADDED
@@ -0,0 +1,402 @@
1
+ /**
2
+ * ACP (ERC-8183 Agentic Commerce Protocol) on-chain client for MCP Server
3
+ *
4
+ * Provides contract interaction for creating, funding, submitting,
5
+ * completing, and rejecting jobs on the ACP smart contract on Base mainnet.
6
+ */
7
+ import { createWalletClient, http, parseUnits, keccak256, toHex, publicActions, decodeEventLog, } from 'viem';
8
+ import { privateKeyToAccount } from 'viem/accounts';
9
+ import { base } from 'viem/chains';
10
+ const ACP_ADDRESS = '0xaF3148696242F7Fb74893DC47690e37950807362';
11
+ const USDC_ADDRESS = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
12
+ const USDC_DECIMALS = 6;
13
+ const ZERO_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000';
14
+ const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
15
+ // ─── ABI (duplicated from src/abi/acp.ts — static data, separate package) ──
16
+ const ACP_ABI = [
17
+ {
18
+ type: 'function',
19
+ name: 'createJob',
20
+ inputs: [
21
+ { name: 'provider', type: 'address' },
22
+ { name: 'evaluator', type: 'address' },
23
+ { name: 'expiredAt', type: 'uint256' },
24
+ { name: 'description', type: 'string' },
25
+ { name: 'hook', type: 'address' },
26
+ ],
27
+ outputs: [{ name: 'jobId', type: 'uint256' }],
28
+ stateMutability: 'nonpayable',
29
+ },
30
+ {
31
+ type: 'function',
32
+ name: 'setProvider',
33
+ inputs: [
34
+ { name: 'jobId', type: 'uint256' },
35
+ { name: 'provider', type: 'address' },
36
+ { name: 'optParams', type: 'bytes' },
37
+ ],
38
+ outputs: [],
39
+ stateMutability: 'nonpayable',
40
+ },
41
+ {
42
+ type: 'function',
43
+ name: 'setBudget',
44
+ inputs: [
45
+ { name: 'jobId', type: 'uint256' },
46
+ { name: 'amount', type: 'uint256' },
47
+ { name: 'optParams', type: 'bytes' },
48
+ ],
49
+ outputs: [],
50
+ stateMutability: 'nonpayable',
51
+ },
52
+ {
53
+ type: 'function',
54
+ name: 'fund',
55
+ inputs: [
56
+ { name: 'jobId', type: 'uint256' },
57
+ { name: 'expectedBudget', type: 'uint256' },
58
+ { name: 'optParams', type: 'bytes' },
59
+ ],
60
+ outputs: [],
61
+ stateMutability: 'nonpayable',
62
+ },
63
+ {
64
+ type: 'function',
65
+ name: 'submit',
66
+ inputs: [
67
+ { name: 'jobId', type: 'uint256' },
68
+ { name: 'deliverable', type: 'bytes32' },
69
+ { name: 'optParams', type: 'bytes' },
70
+ ],
71
+ outputs: [],
72
+ stateMutability: 'nonpayable',
73
+ },
74
+ {
75
+ type: 'function',
76
+ name: 'complete',
77
+ inputs: [
78
+ { name: 'jobId', type: 'uint256' },
79
+ { name: 'reason', type: 'bytes32' },
80
+ { name: 'optParams', type: 'bytes' },
81
+ ],
82
+ outputs: [],
83
+ stateMutability: 'nonpayable',
84
+ },
85
+ {
86
+ type: 'function',
87
+ name: 'reject',
88
+ inputs: [
89
+ { name: 'jobId', type: 'uint256' },
90
+ { name: 'reason', type: 'bytes32' },
91
+ { name: 'optParams', type: 'bytes' },
92
+ ],
93
+ outputs: [],
94
+ stateMutability: 'nonpayable',
95
+ },
96
+ {
97
+ type: 'function',
98
+ name: 'claimRefund',
99
+ inputs: [{ name: 'jobId', type: 'uint256' }],
100
+ outputs: [],
101
+ stateMutability: 'nonpayable',
102
+ },
103
+ {
104
+ type: 'function',
105
+ name: 'getJob',
106
+ inputs: [{ name: 'jobId', type: 'uint256' }],
107
+ outputs: [
108
+ {
109
+ name: '',
110
+ type: 'tuple',
111
+ components: [
112
+ { name: 'client', type: 'address' },
113
+ { name: 'provider', type: 'address' },
114
+ { name: 'evaluator', type: 'address' },
115
+ { name: 'description', type: 'string' },
116
+ { name: 'budget', type: 'uint256' },
117
+ { name: 'expiredAt', type: 'uint256' },
118
+ { name: 'status', type: 'uint8' },
119
+ { name: 'hook', type: 'address' },
120
+ { name: 'deliverable', type: 'bytes32' },
121
+ ],
122
+ },
123
+ ],
124
+ stateMutability: 'view',
125
+ },
126
+ {
127
+ type: 'function',
128
+ name: 'getJobCount',
129
+ inputs: [],
130
+ outputs: [{ name: '', type: 'uint256' }],
131
+ stateMutability: 'view',
132
+ },
133
+ {
134
+ type: 'event',
135
+ name: 'JobCreated',
136
+ inputs: [
137
+ { name: 'jobId', type: 'uint256', indexed: true },
138
+ { name: 'client', type: 'address', indexed: true },
139
+ { name: 'provider', type: 'address', indexed: false },
140
+ { name: 'evaluator', type: 'address', indexed: false },
141
+ { name: 'expiredAt', type: 'uint256', indexed: false },
142
+ ],
143
+ },
144
+ {
145
+ type: 'event',
146
+ name: 'JobFunded',
147
+ inputs: [
148
+ { name: 'jobId', type: 'uint256', indexed: true },
149
+ { name: 'client', type: 'address', indexed: true },
150
+ { name: 'amount', type: 'uint256', indexed: false },
151
+ ],
152
+ },
153
+ {
154
+ type: 'event',
155
+ name: 'JobSubmitted',
156
+ inputs: [
157
+ { name: 'jobId', type: 'uint256', indexed: true },
158
+ { name: 'provider', type: 'address', indexed: true },
159
+ { name: 'deliverable', type: 'bytes32', indexed: false },
160
+ ],
161
+ },
162
+ {
163
+ type: 'event',
164
+ name: 'JobCompleted',
165
+ inputs: [
166
+ { name: 'jobId', type: 'uint256', indexed: true },
167
+ { name: 'evaluator', type: 'address', indexed: true },
168
+ { name: 'reason', type: 'bytes32', indexed: false },
169
+ ],
170
+ },
171
+ {
172
+ type: 'event',
173
+ name: 'JobRejected',
174
+ inputs: [
175
+ { name: 'jobId', type: 'uint256', indexed: true },
176
+ { name: 'rejector', type: 'address', indexed: true },
177
+ { name: 'reason', type: 'bytes32', indexed: false },
178
+ ],
179
+ },
180
+ ];
181
+ const ERC20_APPROVE_ABI = [
182
+ {
183
+ type: 'function',
184
+ name: 'approve',
185
+ inputs: [
186
+ { name: 'spender', type: 'address' },
187
+ { name: 'amount', type: 'uint256' },
188
+ ],
189
+ outputs: [{ name: '', type: 'bool' }],
190
+ stateMutability: 'nonpayable',
191
+ },
192
+ {
193
+ type: 'function',
194
+ name: 'allowance',
195
+ inputs: [
196
+ { name: 'owner', type: 'address' },
197
+ { name: 'spender', type: 'address' },
198
+ ],
199
+ outputs: [{ name: '', type: 'uint256' }],
200
+ stateMutability: 'view',
201
+ },
202
+ ];
203
+ // ─── Status enum mapping ───────────────────────────────────────────────────
204
+ const STATUS_MAP = {
205
+ 0: 'open',
206
+ 1: 'funded',
207
+ 2: 'submitted',
208
+ 3: 'completed',
209
+ 4: 'rejected',
210
+ };
211
+ // ─── Helpers ───────────────────────────────────────────────────────────────
212
+ function hashToBytes32(input) {
213
+ if (!input)
214
+ return ZERO_BYTES32;
215
+ return keccak256(toHex(input));
216
+ }
217
+ // ─── ACPClient ─────────────────────────────────────────────────────────────
218
+ export class ACPClient {
219
+ account;
220
+ client;
221
+ constructor(privateKey) {
222
+ if (!privateKey.startsWith('0x')) {
223
+ privateKey = `0x${privateKey}`;
224
+ }
225
+ this.account = privateKeyToAccount(privateKey);
226
+ // Single client with both wallet and public actions (same pattern as payment.ts)
227
+ this.client = createWalletClient({
228
+ account: this.account,
229
+ chain: base,
230
+ transport: http(),
231
+ }).extend(publicActions);
232
+ }
233
+ get address() {
234
+ return this.account.address;
235
+ }
236
+ /**
237
+ * Create a job on-chain.
238
+ * Returns the jobId from the JobCreated event and the transaction hash.
239
+ */
240
+ async createJob(params) {
241
+ const txHash = await this.client.writeContract({
242
+ address: ACP_ADDRESS,
243
+ abi: ACP_ABI,
244
+ functionName: 'createJob',
245
+ args: [
246
+ (params.provider || ZERO_ADDRESS),
247
+ params.evaluator,
248
+ BigInt(params.expiredAt),
249
+ params.description,
250
+ (params.hook || ZERO_ADDRESS),
251
+ ],
252
+ account: this.account,
253
+ chain: base,
254
+ });
255
+ const receipt = await this.client.waitForTransactionReceipt({ hash: txHash });
256
+ // Extract jobId from JobCreated event
257
+ let jobId;
258
+ for (const log of receipt.logs) {
259
+ try {
260
+ const decoded = decodeEventLog({
261
+ abi: ACP_ABI,
262
+ data: log.data,
263
+ topics: log.topics,
264
+ });
265
+ if (decoded.eventName === 'JobCreated') {
266
+ jobId = decoded.args.jobId;
267
+ break;
268
+ }
269
+ }
270
+ catch {
271
+ // Not our event, skip
272
+ }
273
+ }
274
+ if (jobId === undefined) {
275
+ throw new Error('JobCreated event not found in transaction receipt');
276
+ }
277
+ return { jobId, txHash };
278
+ }
279
+ /**
280
+ * Approve USDC spend and fund the job escrow.
281
+ */
282
+ async fundJob(chainJobId, budgetUsdc) {
283
+ const amount = parseUnits(budgetUsdc, USDC_DECIMALS);
284
+ // 1. Check current allowance
285
+ const allowance = await this.client.readContract({
286
+ address: USDC_ADDRESS,
287
+ abi: ERC20_APPROVE_ABI,
288
+ functionName: 'allowance',
289
+ args: [this.account.address, ACP_ADDRESS],
290
+ });
291
+ // 2. Approve if insufficient
292
+ if (allowance < amount) {
293
+ const approveTx = await this.client.writeContract({
294
+ address: USDC_ADDRESS,
295
+ abi: ERC20_APPROVE_ABI,
296
+ functionName: 'approve',
297
+ args: [ACP_ADDRESS, amount],
298
+ account: this.account,
299
+ chain: base,
300
+ });
301
+ await this.client.waitForTransactionReceipt({ hash: approveTx });
302
+ }
303
+ // 3. Fund the escrow
304
+ const txHash = await this.client.writeContract({
305
+ address: ACP_ADDRESS,
306
+ abi: ACP_ABI,
307
+ functionName: 'fund',
308
+ args: [chainJobId, amount, '0x'],
309
+ account: this.account,
310
+ chain: base,
311
+ });
312
+ await this.client.waitForTransactionReceipt({ hash: txHash });
313
+ return txHash;
314
+ }
315
+ /**
316
+ * Submit work for a funded job. Hashes the deliverable string to bytes32.
317
+ */
318
+ async submitJob(chainJobId, deliverable) {
319
+ const deliverableHash = hashToBytes32(deliverable);
320
+ const txHash = await this.client.writeContract({
321
+ address: ACP_ADDRESS,
322
+ abi: ACP_ABI,
323
+ functionName: 'submit',
324
+ args: [chainJobId, deliverableHash, '0x'],
325
+ account: this.account,
326
+ chain: base,
327
+ });
328
+ await this.client.waitForTransactionReceipt({ hash: txHash });
329
+ return txHash;
330
+ }
331
+ /**
332
+ * Complete (approve) a submitted job. Releases payment to provider.
333
+ */
334
+ async completeJob(chainJobId, reason) {
335
+ const reasonHash = hashToBytes32(reason);
336
+ const txHash = await this.client.writeContract({
337
+ address: ACP_ADDRESS,
338
+ abi: ACP_ABI,
339
+ functionName: 'complete',
340
+ args: [chainJobId, reasonHash, '0x'],
341
+ account: this.account,
342
+ chain: base,
343
+ });
344
+ await this.client.waitForTransactionReceipt({ hash: txHash });
345
+ return txHash;
346
+ }
347
+ /**
348
+ * Reject a submitted job. Refunds escrow to client.
349
+ */
350
+ async rejectJob(chainJobId, reason) {
351
+ const reasonHash = hashToBytes32(reason);
352
+ const txHash = await this.client.writeContract({
353
+ address: ACP_ADDRESS,
354
+ abi: ACP_ABI,
355
+ functionName: 'reject',
356
+ args: [chainJobId, reasonHash, '0x'],
357
+ account: this.account,
358
+ chain: base,
359
+ });
360
+ await this.client.waitForTransactionReceipt({ hash: txHash });
361
+ return txHash;
362
+ }
363
+ /**
364
+ * Claim refund for an expired job.
365
+ */
366
+ async claimRefund(chainJobId) {
367
+ const txHash = await this.client.writeContract({
368
+ address: ACP_ADDRESS,
369
+ abi: ACP_ABI,
370
+ functionName: 'claimRefund',
371
+ args: [chainJobId],
372
+ account: this.account,
373
+ chain: base,
374
+ });
375
+ await this.client.waitForTransactionReceipt({ hash: txHash });
376
+ return txHash;
377
+ }
378
+ /**
379
+ * Read job data from the chain.
380
+ */
381
+ async getJob(chainJobId) {
382
+ const result = await this.client.readContract({
383
+ address: ACP_ADDRESS,
384
+ abi: ACP_ABI,
385
+ functionName: 'getJob',
386
+ args: [chainJobId],
387
+ });
388
+ return {
389
+ client: result.client,
390
+ provider: result.provider,
391
+ evaluator: result.evaluator,
392
+ description: result.description,
393
+ budget: result.budget,
394
+ expiredAt: result.expiredAt,
395
+ status: STATUS_MAP[Number(result.status)] || `unknown(${result.status})`,
396
+ statusCode: Number(result.status),
397
+ hook: result.hook,
398
+ deliverable: result.deliverable,
399
+ };
400
+ }
401
+ }
402
+ //# sourceMappingURL=acp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"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"}