@barzkit/mcp 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 BarzKit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,88 @@
1
+ # @barzkit/mcp
2
+
3
+ MCP Server for self-custody AI agent wallets. Works with Claude Desktop, Cursor, Windsurf, VS Code Copilot, and any MCP-compatible client.
4
+
5
+ [![npm](https://img.shields.io/npm/v/@barzkit/mcp)](https://www.npmjs.com/package/@barzkit/mcp)
6
+
7
+ ## Setup
8
+
9
+ ### Claude Desktop
10
+
11
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
12
+
13
+ ```json
14
+ {
15
+ "mcpServers": {
16
+ "barzkit": {
17
+ "command": "npx",
18
+ "args": ["@barzkit/mcp"]
19
+ }
20
+ }
21
+ }
22
+ ```
23
+
24
+ ### Cursor
25
+
26
+ Add to `.cursor/mcp.json` in your project root:
27
+
28
+ ```json
29
+ {
30
+ "mcpServers": {
31
+ "barzkit": {
32
+ "command": "npx",
33
+ "args": ["@barzkit/mcp"]
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ ### Windsurf / VS Code Copilot
40
+
41
+ Same format — add to your MCP configuration file.
42
+
43
+ ## Tools
44
+
45
+ | Tool | Description |
46
+ |------|-------------|
47
+ | `create_wallet` | Create a new ERC-4337 smart account on Sepolia, Base Sepolia, or Base |
48
+ | `send_transaction` | Send ETH or ERC-20 tokens to a recipient address |
49
+ | `check_balance` | Check wallet balance for ETH or specific token |
50
+ | `swap_tokens` | Swap tokens on Uniswap V3 |
51
+ | `lend_tokens` | Deposit tokens into Aave V3 lending pool |
52
+ | `batch_transactions` | Execute multiple transactions atomically in one UserOperation |
53
+ | `freeze_wallet` | Emergency freeze — kill switch |
54
+ | `unfreeze_wallet` | Resume normal wallet operations |
55
+ | `fetch_with_payment` | Fetch URL with automatic x402 payment |
56
+
57
+ ## Usage
58
+
59
+ Once configured, ask your AI assistant:
60
+
61
+ - "Create a wallet on Sepolia with my key 0x... and Pimlico key pim_..."
62
+ - "Send 0.01 ETH to 0xABC..."
63
+ - "What's my wallet balance?"
64
+ - "Swap 0.1 ETH for USDC"
65
+ - "Freeze my wallet immediately"
66
+
67
+ The `create_wallet` tool must be called first to initialize the wallet before using any other tool.
68
+
69
+ ## Programmatic Usage
70
+
71
+ ```typescript
72
+ import { createBarzMcpServer } from '@barzkit/mcp'
73
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
74
+
75
+ const server = createBarzMcpServer()
76
+ const transport = new StdioServerTransport()
77
+ await server.connect(transport)
78
+ ```
79
+
80
+ ## Prerequisites
81
+
82
+ - Node.js >= 18
83
+ - [Pimlico API key](https://dashboard.pimlico.io) (free tier: 100 UserOps/day)
84
+ - Owner private key
85
+
86
+ ## License
87
+
88
+ MIT
package/dist/index.js ADDED
@@ -0,0 +1,422 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
+ import { z } from 'zod';
5
+ import { createBarzAgent } from '@barzkit/sdk';
6
+ import { parseEther, formatEther } from 'viem';
7
+
8
+ var createWalletSchema = {
9
+ chain: z.enum(["sepolia", "base-sepolia", "base"]).describe("Blockchain network"),
10
+ ownerKey: z.string().describe("Owner private key (0x...)"),
11
+ pimlicoApiKey: z.string().describe("Pimlico bundler API key"),
12
+ gasless: z.boolean().optional().describe("Enable gasless transactions (default: true)")
13
+ };
14
+ function createWalletHandler(getAgent, setAgent) {
15
+ return async ({ chain, ownerKey, pimlicoApiKey, gasless }) => {
16
+ try {
17
+ const agent = await createBarzAgent({
18
+ chain,
19
+ owner: ownerKey,
20
+ pimlico: { apiKey: pimlicoApiKey },
21
+ gasless: gasless ?? true
22
+ });
23
+ setAgent(agent);
24
+ return {
25
+ content: [{
26
+ type: "text",
27
+ text: `Wallet created!
28
+ Address: ${agent.address}
29
+ Chain: ${chain}
30
+ Gasless: ${gasless ?? true}`
31
+ }]
32
+ };
33
+ } catch (error) {
34
+ return {
35
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
36
+ isError: true
37
+ };
38
+ }
39
+ };
40
+ }
41
+ var sendTransactionSchema = {
42
+ to: z.string().describe("Recipient address (0x...)"),
43
+ amount: z.string().describe('Amount to send in human units (e.g. "0.1")'),
44
+ token: z.string().optional().describe("Token symbol: ETH, USDC, WETH. Default: ETH")
45
+ };
46
+ function sendTransactionHandler(getAgent) {
47
+ return async ({ to, amount, token }) => {
48
+ const agent = getAgent();
49
+ if (!agent) {
50
+ return {
51
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
52
+ isError: true
53
+ };
54
+ }
55
+ try {
56
+ if (token && token.toUpperCase() !== "ETH") {
57
+ return {
58
+ content: [{ type: "text", text: "ERC-20 transfers coming soon. Currently supports ETH." }],
59
+ isError: true
60
+ };
61
+ }
62
+ const hash = await agent.sendTransaction({
63
+ to,
64
+ value: parseEther(amount)
65
+ });
66
+ return {
67
+ content: [{
68
+ type: "text",
69
+ text: `Transaction sent!
70
+ Hash: ${hash}
71
+ Explorer: ${agent.getExplorerUrl(hash)}`
72
+ }]
73
+ };
74
+ } catch (error) {
75
+ return {
76
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
77
+ isError: true
78
+ };
79
+ }
80
+ };
81
+ }
82
+ var checkBalanceSchema = {
83
+ token: z.string().optional().describe("Token contract address (0x...). Omit for ETH balance.")
84
+ };
85
+ function checkBalanceHandler(getAgent) {
86
+ return async ({ token }) => {
87
+ const agent = getAgent();
88
+ if (!agent) {
89
+ return {
90
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
91
+ isError: true
92
+ };
93
+ }
94
+ try {
95
+ const balance = await agent.getBalance(
96
+ token ? token : void 0
97
+ );
98
+ const formatted = token ? balance.toString() : formatEther(balance);
99
+ const unit = token ? "tokens" : "ETH";
100
+ return {
101
+ content: [{
102
+ type: "text",
103
+ text: `Wallet: ${agent.address}
104
+ Chain: ${agent.chain}
105
+ Balance: ${formatted} ${unit}`
106
+ }]
107
+ };
108
+ } catch (error) {
109
+ return {
110
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
111
+ isError: true
112
+ };
113
+ }
114
+ };
115
+ }
116
+ var swapSchema = {
117
+ from: z.string().describe("Token to swap from (symbol like USDC, WETH, or ETH)"),
118
+ to: z.string().describe("Token to swap to (symbol like USDC, WETH, or ETH)"),
119
+ amount: z.string().describe('Amount to swap in human units (e.g. "100")'),
120
+ slippage: z.number().optional().describe("Max slippage in percent. Default: 0.5")
121
+ };
122
+ function swapHandler(getAgent) {
123
+ return async ({ from, to, amount, slippage }) => {
124
+ const agent = getAgent();
125
+ if (!agent) {
126
+ return {
127
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
128
+ isError: true
129
+ };
130
+ }
131
+ try {
132
+ const hash = await agent.swap({
133
+ from: from.toUpperCase(),
134
+ to: to.toUpperCase(),
135
+ amount,
136
+ slippage: slippage ?? 0.5
137
+ });
138
+ return {
139
+ content: [{
140
+ type: "text",
141
+ text: `Swapped ${amount} ${from.toUpperCase()} for ${to.toUpperCase()}!
142
+ Hash: ${hash}
143
+ Explorer: ${agent.getExplorerUrl(hash)}`
144
+ }]
145
+ };
146
+ } catch (error) {
147
+ return {
148
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
149
+ isError: true
150
+ };
151
+ }
152
+ };
153
+ }
154
+ var lendSchema = {
155
+ token: z.string().describe("Token to deposit (symbol like USDC, WETH, DAI)"),
156
+ amount: z.string().describe("Amount to deposit in human units"),
157
+ protocol: z.enum(["aave"]).optional().describe("Lending protocol. Default: aave")
158
+ };
159
+ function lendHandler(getAgent) {
160
+ return async ({ token, amount, protocol }) => {
161
+ const agent = getAgent();
162
+ if (!agent) {
163
+ return {
164
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
165
+ isError: true
166
+ };
167
+ }
168
+ try {
169
+ const hash = await agent.lend({
170
+ token: token.toUpperCase(),
171
+ amount,
172
+ protocol: protocol ?? "aave"
173
+ });
174
+ return {
175
+ content: [{
176
+ type: "text",
177
+ text: `Deposited ${amount} ${token.toUpperCase()} into ${protocol ?? "aave"}!
178
+ Hash: ${hash}
179
+ Explorer: ${agent.getExplorerUrl(hash)}`
180
+ }]
181
+ };
182
+ } catch (error) {
183
+ return {
184
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
185
+ isError: true
186
+ };
187
+ }
188
+ };
189
+ }
190
+ var batchTransactionsSchema = {
191
+ transactions: z.array(z.object({
192
+ to: z.string().describe("Target address (0x...)"),
193
+ value: z.string().optional().describe("ETH value in wei"),
194
+ data: z.string().optional().describe("Calldata hex string")
195
+ })).describe("Array of transactions to execute atomically")
196
+ };
197
+ function batchTransactionsHandler(getAgent) {
198
+ return async ({ transactions }) => {
199
+ const agent = getAgent();
200
+ if (!agent) {
201
+ return {
202
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
203
+ isError: true
204
+ };
205
+ }
206
+ try {
207
+ const txs = transactions.map((tx) => ({
208
+ to: tx.to,
209
+ value: tx.value ? BigInt(tx.value) : void 0,
210
+ data: tx.data
211
+ }));
212
+ const hash = await agent.batchTransactions(txs);
213
+ return {
214
+ content: [{
215
+ type: "text",
216
+ text: `Batch of ${transactions.length} transactions sent!
217
+ Hash: ${hash}
218
+ Explorer: ${agent.getExplorerUrl(hash)}`
219
+ }]
220
+ };
221
+ } catch (error) {
222
+ return {
223
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
224
+ isError: true
225
+ };
226
+ }
227
+ };
228
+ }
229
+
230
+ // src/tools/freezeWallet.ts
231
+ var freezeWalletSchema = {};
232
+ function freezeWalletHandler(getAgent) {
233
+ return async () => {
234
+ const agent = getAgent();
235
+ if (!agent) {
236
+ return {
237
+ content: [
238
+ {
239
+ type: "text",
240
+ text: "Error: No wallet created. Use create_wallet first."
241
+ }
242
+ ],
243
+ isError: true
244
+ };
245
+ }
246
+ try {
247
+ const hash = await agent.freeze();
248
+ return {
249
+ content: [
250
+ {
251
+ type: "text",
252
+ text: `Wallet frozen!
253
+ Hash: ${hash}
254
+ Explorer: ${agent.getExplorerUrl(hash)}`
255
+ }
256
+ ]
257
+ };
258
+ } catch (error) {
259
+ return {
260
+ content: [
261
+ {
262
+ type: "text",
263
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
264
+ }
265
+ ],
266
+ isError: true
267
+ };
268
+ }
269
+ };
270
+ }
271
+ var unfreezeWalletSchema = {};
272
+ function unfreezeWalletHandler(getAgent) {
273
+ return async () => {
274
+ const agent = getAgent();
275
+ if (!agent) {
276
+ return {
277
+ content: [
278
+ {
279
+ type: "text",
280
+ text: "Error: No wallet created. Use create_wallet first."
281
+ }
282
+ ],
283
+ isError: true
284
+ };
285
+ }
286
+ try {
287
+ const hash = await agent.unfreeze();
288
+ return {
289
+ content: [
290
+ {
291
+ type: "text",
292
+ text: `Wallet unfrozen!
293
+ Hash: ${hash}
294
+ Explorer: ${agent.getExplorerUrl(hash)}`
295
+ }
296
+ ]
297
+ };
298
+ } catch (error) {
299
+ return {
300
+ content: [
301
+ {
302
+ type: "text",
303
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
304
+ }
305
+ ],
306
+ isError: true
307
+ };
308
+ }
309
+ };
310
+ }
311
+ var fetchWithPaymentSchema = {
312
+ url: z.string().url().describe("URL to fetch"),
313
+ method: z.enum(["GET", "POST", "PUT", "DELETE"]).optional().describe("HTTP method. Default: GET"),
314
+ headers: z.record(z.string()).optional().describe("HTTP headers as key-value pairs")
315
+ };
316
+ function fetchWithPaymentHandler(getAgent) {
317
+ return async ({ url, method, headers }) => {
318
+ const agent = getAgent();
319
+ if (!agent) {
320
+ return {
321
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
322
+ isError: true
323
+ };
324
+ }
325
+ try {
326
+ const options = {};
327
+ if (method) options.method = method;
328
+ if (headers) options.headers = headers;
329
+ const response = await agent.fetchWithPayment(url, options);
330
+ const body = await response.text();
331
+ const preview = body.length > 1e3 ? body.slice(0, 1e3) + "... (truncated)" : body;
332
+ return {
333
+ content: [{
334
+ type: "text",
335
+ text: `Fetched ${url}
336
+ Status: ${response.status}
337
+ Response: ${preview}`
338
+ }]
339
+ };
340
+ } catch (error) {
341
+ return {
342
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
343
+ isError: true
344
+ };
345
+ }
346
+ };
347
+ }
348
+
349
+ // src/server.ts
350
+ function createBarzMcpServer() {
351
+ const server2 = new McpServer({
352
+ name: "barzkit",
353
+ version: "0.1.0"
354
+ });
355
+ let agent = null;
356
+ const getAgent = () => agent;
357
+ const setAgent = (a) => {
358
+ agent = a;
359
+ };
360
+ server2.tool(
361
+ "create_wallet",
362
+ "Create a new self-custody AI agent wallet (ERC-4337 smart account). Must be called before any other tool.",
363
+ createWalletSchema,
364
+ createWalletHandler(getAgent, setAgent)
365
+ );
366
+ server2.tool(
367
+ "send_transaction",
368
+ "Send ETH or ERC-20 tokens from the agent wallet to a recipient address.",
369
+ sendTransactionSchema,
370
+ sendTransactionHandler(getAgent)
371
+ );
372
+ server2.tool(
373
+ "check_balance",
374
+ "Check the agent wallet balance for ETH or a specific ERC-20 token.",
375
+ checkBalanceSchema,
376
+ checkBalanceHandler(getAgent)
377
+ );
378
+ server2.tool(
379
+ "swap_tokens",
380
+ "Swap tokens on Uniswap V3 via the agent wallet. Supports ETH, USDC, WETH, DAI.",
381
+ swapSchema,
382
+ swapHandler(getAgent)
383
+ );
384
+ server2.tool(
385
+ "lend_tokens",
386
+ "Deposit tokens into Aave V3 lending pool via the agent wallet.",
387
+ lendSchema,
388
+ lendHandler(getAgent)
389
+ );
390
+ server2.tool(
391
+ "batch_transactions",
392
+ "Execute multiple transactions atomically in a single UserOperation. One signature, one gas fee.",
393
+ batchTransactionsSchema,
394
+ batchTransactionsHandler(getAgent)
395
+ );
396
+ server2.tool(
397
+ "freeze_wallet",
398
+ "Emergency freeze the agent wallet. Kill switch \u2014 immediately stops all transactions.",
399
+ freezeWalletSchema,
400
+ freezeWalletHandler(getAgent)
401
+ );
402
+ server2.tool(
403
+ "unfreeze_wallet",
404
+ "Unfreeze the agent wallet to resume normal operations.",
405
+ unfreezeWalletSchema,
406
+ unfreezeWalletHandler(getAgent)
407
+ );
408
+ server2.tool(
409
+ "fetch_with_payment",
410
+ "Fetch a URL with automatic x402 payment if the server returns HTTP 402. Handles machine-to-machine payments.",
411
+ fetchWithPaymentSchema,
412
+ fetchWithPaymentHandler(getAgent)
413
+ );
414
+ return server2;
415
+ }
416
+
417
+ // src/index.ts
418
+ var server = createBarzMcpServer();
419
+ var transport = new StdioServerTransport();
420
+ await server.connect(transport);
421
+ //# sourceMappingURL=index.js.map
422
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/createWallet.ts","../src/tools/sendTransaction.ts","../src/tools/checkBalance.ts","../src/tools/swap.ts","../src/tools/lend.ts","../src/tools/batchTransactions.ts","../src/tools/freezeWallet.ts","../src/tools/fetchWithPayment.ts","../src/server.ts","../src/index.ts"],"names":["z","server"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod'\nimport { createBarzAgent, type BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const createWalletSchema = {\n chain: z.enum(['sepolia', 'base-sepolia', 'base']).describe('Blockchain network'),\n ownerKey: z.string().describe('Owner private key (0x...)'),\n pimlicoApiKey: z.string().describe('Pimlico bundler API key'),\n gasless: z.boolean().optional().describe('Enable gasless transactions (default: true)'),\n}\n\nexport function createWalletHandler(\n getAgent: () => BarzAgent | null,\n setAgent: (agent: BarzAgent) => void,\n): ToolCallback<typeof createWalletSchema> {\n return async ({ chain, ownerKey, pimlicoApiKey, gasless }) => {\n try {\n const agent = await createBarzAgent({\n chain,\n owner: ownerKey as `0x${string}`,\n pimlico: { apiKey: pimlicoApiKey },\n gasless: gasless ?? true,\n })\n setAgent(agent)\n return {\n content: [{\n type: 'text' as const,\n text: `Wallet created!\\nAddress: ${agent.address}\\nChain: ${chain}\\nGasless: ${gasless ?? true}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { parseEther } from 'viem'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const sendTransactionSchema = {\n to: z.string().describe('Recipient address (0x...)'),\n amount: z.string().describe('Amount to send in human units (e.g. \"0.1\")'),\n token: z.string().optional().describe('Token symbol: ETH, USDC, WETH. Default: ETH'),\n}\n\nexport function sendTransactionHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof sendTransactionSchema> {\n return async ({ to, amount, token }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n if (token && token.toUpperCase() !== 'ETH') {\n return {\n content: [{ type: 'text' as const, text: 'ERC-20 transfers coming soon. Currently supports ETH.' }],\n isError: true,\n }\n }\n\n const hash = await agent.sendTransaction({\n to: to as `0x${string}`,\n value: parseEther(amount),\n })\n return {\n content: [{\n type: 'text' as const,\n text: `Transaction sent!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { formatEther } from 'viem'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const checkBalanceSchema = {\n token: z.string().optional().describe('Token contract address (0x...). Omit for ETH balance.'),\n}\n\nexport function checkBalanceHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof checkBalanceSchema> {\n return async ({ token }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const balance = await agent.getBalance(\n token ? (token as `0x${string}`) : undefined,\n )\n const formatted = token ? balance.toString() : formatEther(balance)\n const unit = token ? 'tokens' : 'ETH'\n return {\n content: [{\n type: 'text' as const,\n text: `Wallet: ${agent.address}\\nChain: ${agent.chain}\\nBalance: ${formatted} ${unit}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const swapSchema = {\n from: z.string().describe('Token to swap from (symbol like USDC, WETH, or ETH)'),\n to: z.string().describe('Token to swap to (symbol like USDC, WETH, or ETH)'),\n amount: z.string().describe('Amount to swap in human units (e.g. \"100\")'),\n slippage: z.number().optional().describe('Max slippage in percent. Default: 0.5'),\n}\n\nexport function swapHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof swapSchema> {\n return async ({ from, to, amount, slippage }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const hash = await agent.swap({\n from: from.toUpperCase(),\n to: to.toUpperCase(),\n amount,\n slippage: slippage ?? 0.5,\n })\n return {\n content: [{\n type: 'text' as const,\n text: `Swapped ${amount} ${from.toUpperCase()} for ${to.toUpperCase()}!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const lendSchema = {\n token: z.string().describe('Token to deposit (symbol like USDC, WETH, DAI)'),\n amount: z.string().describe('Amount to deposit in human units'),\n protocol: z.enum(['aave']).optional().describe('Lending protocol. Default: aave'),\n}\n\nexport function lendHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof lendSchema> {\n return async ({ token, amount, protocol }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const hash = await agent.lend({\n token: token.toUpperCase(),\n amount,\n protocol: protocol ?? 'aave',\n })\n return {\n content: [{\n type: 'text' as const,\n text: `Deposited ${amount} ${token.toUpperCase()} into ${protocol ?? 'aave'}!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const batchTransactionsSchema = {\n transactions: z.array(z.object({\n to: z.string().describe('Target address (0x...)'),\n value: z.string().optional().describe('ETH value in wei'),\n data: z.string().optional().describe('Calldata hex string'),\n })).describe('Array of transactions to execute atomically'),\n}\n\nexport function batchTransactionsHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof batchTransactionsSchema> {\n return async ({ transactions }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const txs = transactions.map((tx) => ({\n to: tx.to as `0x${string}`,\n value: tx.value ? BigInt(tx.value) : undefined,\n data: tx.data as `0x${string}` | undefined,\n }))\n const hash = await agent.batchTransactions(txs)\n return {\n content: [{\n type: 'text' as const,\n text: `Batch of ${transactions.length} transactions sent!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import type { BarzAgent } from \"@barzkit/sdk\";\nimport type { ToolCallback } from \"../types.js\";\n\nexport const freezeWalletSchema = {};\n\nexport function freezeWalletHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof freezeWalletSchema> {\n return async () => {\n const agent = getAgent();\n if (!agent) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No wallet created. Use create_wallet first.\",\n },\n ],\n isError: true,\n };\n }\n\n try {\n const hash = await agent.freeze();\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Wallet frozen!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n isError: true,\n };\n }\n };\n}\n\nexport const unfreezeWalletSchema = {};\n\nexport function unfreezeWalletHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof unfreezeWalletSchema> {\n return async () => {\n const agent = getAgent();\n if (!agent) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No wallet created. Use create_wallet first.\",\n },\n ],\n isError: true,\n };\n }\n\n try {\n const hash = await agent.unfreeze();\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Wallet unfrozen!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n isError: true,\n };\n }\n };\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const fetchWithPaymentSchema = {\n url: z.string().url().describe('URL to fetch'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE']).optional().describe('HTTP method. Default: GET'),\n headers: z.record(z.string()).optional().describe('HTTP headers as key-value pairs'),\n}\n\nexport function fetchWithPaymentHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof fetchWithPaymentSchema> {\n return async ({ url, method, headers }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const options: RequestInit = {}\n if (method) options.method = method\n if (headers) options.headers = headers\n\n const response = await agent.fetchWithPayment(url, options)\n const body = await response.text()\n const preview = body.length > 1000 ? body.slice(0, 1000) + '... (truncated)' : body\n return {\n content: [{\n type: 'text' as const,\n text: `Fetched ${url}\\nStatus: ${response.status}\\nResponse: ${preview}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { BarzAgent } from '@barzkit/sdk'\n\nimport { createWalletSchema, createWalletHandler } from './tools/createWallet.js'\nimport { sendTransactionSchema, sendTransactionHandler } from './tools/sendTransaction.js'\nimport { checkBalanceSchema, checkBalanceHandler } from './tools/checkBalance.js'\nimport { swapSchema, swapHandler } from './tools/swap.js'\nimport { lendSchema, lendHandler } from './tools/lend.js'\nimport { batchTransactionsSchema, batchTransactionsHandler } from './tools/batchTransactions.js'\nimport { freezeWalletSchema, freezeWalletHandler, unfreezeWalletSchema, unfreezeWalletHandler } from './tools/freezeWallet.js'\nimport { fetchWithPaymentSchema, fetchWithPaymentHandler } from './tools/fetchWithPayment.js'\n\n/**\n * Create a BarzKit MCP server with all wallet management tools.\n */\nexport function createBarzMcpServer(): McpServer {\n const server = new McpServer({\n name: 'barzkit',\n version: '0.1.0',\n })\n\n let agent: BarzAgent | null = null\n const getAgent = () => agent\n const setAgent = (a: BarzAgent) => { agent = a }\n\n server.tool(\n 'create_wallet',\n 'Create a new self-custody AI agent wallet (ERC-4337 smart account). Must be called before any other tool.',\n createWalletSchema,\n createWalletHandler(getAgent, setAgent),\n )\n\n server.tool(\n 'send_transaction',\n 'Send ETH or ERC-20 tokens from the agent wallet to a recipient address.',\n sendTransactionSchema,\n sendTransactionHandler(getAgent),\n )\n\n server.tool(\n 'check_balance',\n 'Check the agent wallet balance for ETH or a specific ERC-20 token.',\n checkBalanceSchema,\n checkBalanceHandler(getAgent),\n )\n\n server.tool(\n 'swap_tokens',\n 'Swap tokens on Uniswap V3 via the agent wallet. Supports ETH, USDC, WETH, DAI.',\n swapSchema,\n swapHandler(getAgent),\n )\n\n server.tool(\n 'lend_tokens',\n 'Deposit tokens into Aave V3 lending pool via the agent wallet.',\n lendSchema,\n lendHandler(getAgent),\n )\n\n server.tool(\n 'batch_transactions',\n 'Execute multiple transactions atomically in a single UserOperation. One signature, one gas fee.',\n batchTransactionsSchema,\n batchTransactionsHandler(getAgent),\n )\n\n server.tool(\n 'freeze_wallet',\n 'Emergency freeze the agent wallet. Kill switch — immediately stops all transactions.',\n freezeWalletSchema,\n freezeWalletHandler(getAgent),\n )\n\n server.tool(\n 'unfreeze_wallet',\n 'Unfreeze the agent wallet to resume normal operations.',\n unfreezeWalletSchema,\n unfreezeWalletHandler(getAgent),\n )\n\n server.tool(\n 'fetch_with_payment',\n 'Fetch a URL with automatic x402 payment if the server returns HTTP 402. Handles machine-to-machine payments.',\n fetchWithPaymentSchema,\n fetchWithPaymentHandler(getAgent),\n )\n\n return server\n}\n","import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { createBarzMcpServer } from './server.js'\n\nconst server = createBarzMcpServer()\nconst transport = new StdioServerTransport()\nawait server.connect(transport)\n"]}
@@ -0,0 +1,8 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+
3
+ /**
4
+ * Create a BarzKit MCP server with all wallet management tools.
5
+ */
6
+ declare function createBarzMcpServer(): McpServer;
7
+
8
+ export { createBarzMcpServer };
package/dist/server.js ADDED
@@ -0,0 +1,418 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import { createBarzAgent } from '@barzkit/sdk';
4
+ import { parseEther, formatEther } from 'viem';
5
+
6
+ // src/server.ts
7
+ var createWalletSchema = {
8
+ chain: z.enum(["sepolia", "base-sepolia", "base"]).describe("Blockchain network"),
9
+ ownerKey: z.string().describe("Owner private key (0x...)"),
10
+ pimlicoApiKey: z.string().describe("Pimlico bundler API key"),
11
+ gasless: z.boolean().optional().describe("Enable gasless transactions (default: true)")
12
+ };
13
+ function createWalletHandler(getAgent, setAgent) {
14
+ return async ({ chain, ownerKey, pimlicoApiKey, gasless }) => {
15
+ try {
16
+ const agent = await createBarzAgent({
17
+ chain,
18
+ owner: ownerKey,
19
+ pimlico: { apiKey: pimlicoApiKey },
20
+ gasless: gasless ?? true
21
+ });
22
+ setAgent(agent);
23
+ return {
24
+ content: [{
25
+ type: "text",
26
+ text: `Wallet created!
27
+ Address: ${agent.address}
28
+ Chain: ${chain}
29
+ Gasless: ${gasless ?? true}`
30
+ }]
31
+ };
32
+ } catch (error) {
33
+ return {
34
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
35
+ isError: true
36
+ };
37
+ }
38
+ };
39
+ }
40
+ var sendTransactionSchema = {
41
+ to: z.string().describe("Recipient address (0x...)"),
42
+ amount: z.string().describe('Amount to send in human units (e.g. "0.1")'),
43
+ token: z.string().optional().describe("Token symbol: ETH, USDC, WETH. Default: ETH")
44
+ };
45
+ function sendTransactionHandler(getAgent) {
46
+ return async ({ to, amount, token }) => {
47
+ const agent = getAgent();
48
+ if (!agent) {
49
+ return {
50
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
51
+ isError: true
52
+ };
53
+ }
54
+ try {
55
+ if (token && token.toUpperCase() !== "ETH") {
56
+ return {
57
+ content: [{ type: "text", text: "ERC-20 transfers coming soon. Currently supports ETH." }],
58
+ isError: true
59
+ };
60
+ }
61
+ const hash = await agent.sendTransaction({
62
+ to,
63
+ value: parseEther(amount)
64
+ });
65
+ return {
66
+ content: [{
67
+ type: "text",
68
+ text: `Transaction sent!
69
+ Hash: ${hash}
70
+ Explorer: ${agent.getExplorerUrl(hash)}`
71
+ }]
72
+ };
73
+ } catch (error) {
74
+ return {
75
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
76
+ isError: true
77
+ };
78
+ }
79
+ };
80
+ }
81
+ var checkBalanceSchema = {
82
+ token: z.string().optional().describe("Token contract address (0x...). Omit for ETH balance.")
83
+ };
84
+ function checkBalanceHandler(getAgent) {
85
+ return async ({ token }) => {
86
+ const agent = getAgent();
87
+ if (!agent) {
88
+ return {
89
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
90
+ isError: true
91
+ };
92
+ }
93
+ try {
94
+ const balance = await agent.getBalance(
95
+ token ? token : void 0
96
+ );
97
+ const formatted = token ? balance.toString() : formatEther(balance);
98
+ const unit = token ? "tokens" : "ETH";
99
+ return {
100
+ content: [{
101
+ type: "text",
102
+ text: `Wallet: ${agent.address}
103
+ Chain: ${agent.chain}
104
+ Balance: ${formatted} ${unit}`
105
+ }]
106
+ };
107
+ } catch (error) {
108
+ return {
109
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
110
+ isError: true
111
+ };
112
+ }
113
+ };
114
+ }
115
+ var swapSchema = {
116
+ from: z.string().describe("Token to swap from (symbol like USDC, WETH, or ETH)"),
117
+ to: z.string().describe("Token to swap to (symbol like USDC, WETH, or ETH)"),
118
+ amount: z.string().describe('Amount to swap in human units (e.g. "100")'),
119
+ slippage: z.number().optional().describe("Max slippage in percent. Default: 0.5")
120
+ };
121
+ function swapHandler(getAgent) {
122
+ return async ({ from, to, amount, slippage }) => {
123
+ const agent = getAgent();
124
+ if (!agent) {
125
+ return {
126
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
127
+ isError: true
128
+ };
129
+ }
130
+ try {
131
+ const hash = await agent.swap({
132
+ from: from.toUpperCase(),
133
+ to: to.toUpperCase(),
134
+ amount,
135
+ slippage: slippage ?? 0.5
136
+ });
137
+ return {
138
+ content: [{
139
+ type: "text",
140
+ text: `Swapped ${amount} ${from.toUpperCase()} for ${to.toUpperCase()}!
141
+ Hash: ${hash}
142
+ Explorer: ${agent.getExplorerUrl(hash)}`
143
+ }]
144
+ };
145
+ } catch (error) {
146
+ return {
147
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
148
+ isError: true
149
+ };
150
+ }
151
+ };
152
+ }
153
+ var lendSchema = {
154
+ token: z.string().describe("Token to deposit (symbol like USDC, WETH, DAI)"),
155
+ amount: z.string().describe("Amount to deposit in human units"),
156
+ protocol: z.enum(["aave"]).optional().describe("Lending protocol. Default: aave")
157
+ };
158
+ function lendHandler(getAgent) {
159
+ return async ({ token, amount, protocol }) => {
160
+ const agent = getAgent();
161
+ if (!agent) {
162
+ return {
163
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
164
+ isError: true
165
+ };
166
+ }
167
+ try {
168
+ const hash = await agent.lend({
169
+ token: token.toUpperCase(),
170
+ amount,
171
+ protocol: protocol ?? "aave"
172
+ });
173
+ return {
174
+ content: [{
175
+ type: "text",
176
+ text: `Deposited ${amount} ${token.toUpperCase()} into ${protocol ?? "aave"}!
177
+ Hash: ${hash}
178
+ Explorer: ${agent.getExplorerUrl(hash)}`
179
+ }]
180
+ };
181
+ } catch (error) {
182
+ return {
183
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
184
+ isError: true
185
+ };
186
+ }
187
+ };
188
+ }
189
+ var batchTransactionsSchema = {
190
+ transactions: z.array(z.object({
191
+ to: z.string().describe("Target address (0x...)"),
192
+ value: z.string().optional().describe("ETH value in wei"),
193
+ data: z.string().optional().describe("Calldata hex string")
194
+ })).describe("Array of transactions to execute atomically")
195
+ };
196
+ function batchTransactionsHandler(getAgent) {
197
+ return async ({ transactions }) => {
198
+ const agent = getAgent();
199
+ if (!agent) {
200
+ return {
201
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
202
+ isError: true
203
+ };
204
+ }
205
+ try {
206
+ const txs = transactions.map((tx) => ({
207
+ to: tx.to,
208
+ value: tx.value ? BigInt(tx.value) : void 0,
209
+ data: tx.data
210
+ }));
211
+ const hash = await agent.batchTransactions(txs);
212
+ return {
213
+ content: [{
214
+ type: "text",
215
+ text: `Batch of ${transactions.length} transactions sent!
216
+ Hash: ${hash}
217
+ Explorer: ${agent.getExplorerUrl(hash)}`
218
+ }]
219
+ };
220
+ } catch (error) {
221
+ return {
222
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
223
+ isError: true
224
+ };
225
+ }
226
+ };
227
+ }
228
+
229
+ // src/tools/freezeWallet.ts
230
+ var freezeWalletSchema = {};
231
+ function freezeWalletHandler(getAgent) {
232
+ return async () => {
233
+ const agent = getAgent();
234
+ if (!agent) {
235
+ return {
236
+ content: [
237
+ {
238
+ type: "text",
239
+ text: "Error: No wallet created. Use create_wallet first."
240
+ }
241
+ ],
242
+ isError: true
243
+ };
244
+ }
245
+ try {
246
+ const hash = await agent.freeze();
247
+ return {
248
+ content: [
249
+ {
250
+ type: "text",
251
+ text: `Wallet frozen!
252
+ Hash: ${hash}
253
+ Explorer: ${agent.getExplorerUrl(hash)}`
254
+ }
255
+ ]
256
+ };
257
+ } catch (error) {
258
+ return {
259
+ content: [
260
+ {
261
+ type: "text",
262
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
263
+ }
264
+ ],
265
+ isError: true
266
+ };
267
+ }
268
+ };
269
+ }
270
+ var unfreezeWalletSchema = {};
271
+ function unfreezeWalletHandler(getAgent) {
272
+ return async () => {
273
+ const agent = getAgent();
274
+ if (!agent) {
275
+ return {
276
+ content: [
277
+ {
278
+ type: "text",
279
+ text: "Error: No wallet created. Use create_wallet first."
280
+ }
281
+ ],
282
+ isError: true
283
+ };
284
+ }
285
+ try {
286
+ const hash = await agent.unfreeze();
287
+ return {
288
+ content: [
289
+ {
290
+ type: "text",
291
+ text: `Wallet unfrozen!
292
+ Hash: ${hash}
293
+ Explorer: ${agent.getExplorerUrl(hash)}`
294
+ }
295
+ ]
296
+ };
297
+ } catch (error) {
298
+ return {
299
+ content: [
300
+ {
301
+ type: "text",
302
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`
303
+ }
304
+ ],
305
+ isError: true
306
+ };
307
+ }
308
+ };
309
+ }
310
+ var fetchWithPaymentSchema = {
311
+ url: z.string().url().describe("URL to fetch"),
312
+ method: z.enum(["GET", "POST", "PUT", "DELETE"]).optional().describe("HTTP method. Default: GET"),
313
+ headers: z.record(z.string()).optional().describe("HTTP headers as key-value pairs")
314
+ };
315
+ function fetchWithPaymentHandler(getAgent) {
316
+ return async ({ url, method, headers }) => {
317
+ const agent = getAgent();
318
+ if (!agent) {
319
+ return {
320
+ content: [{ type: "text", text: "Error: No wallet created. Use create_wallet first." }],
321
+ isError: true
322
+ };
323
+ }
324
+ try {
325
+ const options = {};
326
+ if (method) options.method = method;
327
+ if (headers) options.headers = headers;
328
+ const response = await agent.fetchWithPayment(url, options);
329
+ const body = await response.text();
330
+ const preview = body.length > 1e3 ? body.slice(0, 1e3) + "... (truncated)" : body;
331
+ return {
332
+ content: [{
333
+ type: "text",
334
+ text: `Fetched ${url}
335
+ Status: ${response.status}
336
+ Response: ${preview}`
337
+ }]
338
+ };
339
+ } catch (error) {
340
+ return {
341
+ content: [{ type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` }],
342
+ isError: true
343
+ };
344
+ }
345
+ };
346
+ }
347
+
348
+ // src/server.ts
349
+ function createBarzMcpServer() {
350
+ const server = new McpServer({
351
+ name: "barzkit",
352
+ version: "0.1.0"
353
+ });
354
+ let agent = null;
355
+ const getAgent = () => agent;
356
+ const setAgent = (a) => {
357
+ agent = a;
358
+ };
359
+ server.tool(
360
+ "create_wallet",
361
+ "Create a new self-custody AI agent wallet (ERC-4337 smart account). Must be called before any other tool.",
362
+ createWalletSchema,
363
+ createWalletHandler(getAgent, setAgent)
364
+ );
365
+ server.tool(
366
+ "send_transaction",
367
+ "Send ETH or ERC-20 tokens from the agent wallet to a recipient address.",
368
+ sendTransactionSchema,
369
+ sendTransactionHandler(getAgent)
370
+ );
371
+ server.tool(
372
+ "check_balance",
373
+ "Check the agent wallet balance for ETH or a specific ERC-20 token.",
374
+ checkBalanceSchema,
375
+ checkBalanceHandler(getAgent)
376
+ );
377
+ server.tool(
378
+ "swap_tokens",
379
+ "Swap tokens on Uniswap V3 via the agent wallet. Supports ETH, USDC, WETH, DAI.",
380
+ swapSchema,
381
+ swapHandler(getAgent)
382
+ );
383
+ server.tool(
384
+ "lend_tokens",
385
+ "Deposit tokens into Aave V3 lending pool via the agent wallet.",
386
+ lendSchema,
387
+ lendHandler(getAgent)
388
+ );
389
+ server.tool(
390
+ "batch_transactions",
391
+ "Execute multiple transactions atomically in a single UserOperation. One signature, one gas fee.",
392
+ batchTransactionsSchema,
393
+ batchTransactionsHandler(getAgent)
394
+ );
395
+ server.tool(
396
+ "freeze_wallet",
397
+ "Emergency freeze the agent wallet. Kill switch \u2014 immediately stops all transactions.",
398
+ freezeWalletSchema,
399
+ freezeWalletHandler(getAgent)
400
+ );
401
+ server.tool(
402
+ "unfreeze_wallet",
403
+ "Unfreeze the agent wallet to resume normal operations.",
404
+ unfreezeWalletSchema,
405
+ unfreezeWalletHandler(getAgent)
406
+ );
407
+ server.tool(
408
+ "fetch_with_payment",
409
+ "Fetch a URL with automatic x402 payment if the server returns HTTP 402. Handles machine-to-machine payments.",
410
+ fetchWithPaymentSchema,
411
+ fetchWithPaymentHandler(getAgent)
412
+ );
413
+ return server;
414
+ }
415
+
416
+ export { createBarzMcpServer };
417
+ //# sourceMappingURL=server.js.map
418
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tools/createWallet.ts","../src/tools/sendTransaction.ts","../src/tools/checkBalance.ts","../src/tools/swap.ts","../src/tools/lend.ts","../src/tools/batchTransactions.ts","../src/tools/freezeWallet.ts","../src/tools/fetchWithPayment.ts","../src/server.ts"],"names":["z"],"mappings":"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","file":"server.js","sourcesContent":["import { z } from 'zod'\nimport { createBarzAgent, type BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const createWalletSchema = {\n chain: z.enum(['sepolia', 'base-sepolia', 'base']).describe('Blockchain network'),\n ownerKey: z.string().describe('Owner private key (0x...)'),\n pimlicoApiKey: z.string().describe('Pimlico bundler API key'),\n gasless: z.boolean().optional().describe('Enable gasless transactions (default: true)'),\n}\n\nexport function createWalletHandler(\n getAgent: () => BarzAgent | null,\n setAgent: (agent: BarzAgent) => void,\n): ToolCallback<typeof createWalletSchema> {\n return async ({ chain, ownerKey, pimlicoApiKey, gasless }) => {\n try {\n const agent = await createBarzAgent({\n chain,\n owner: ownerKey as `0x${string}`,\n pimlico: { apiKey: pimlicoApiKey },\n gasless: gasless ?? true,\n })\n setAgent(agent)\n return {\n content: [{\n type: 'text' as const,\n text: `Wallet created!\\nAddress: ${agent.address}\\nChain: ${chain}\\nGasless: ${gasless ?? true}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { parseEther } from 'viem'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const sendTransactionSchema = {\n to: z.string().describe('Recipient address (0x...)'),\n amount: z.string().describe('Amount to send in human units (e.g. \"0.1\")'),\n token: z.string().optional().describe('Token symbol: ETH, USDC, WETH. Default: ETH'),\n}\n\nexport function sendTransactionHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof sendTransactionSchema> {\n return async ({ to, amount, token }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n if (token && token.toUpperCase() !== 'ETH') {\n return {\n content: [{ type: 'text' as const, text: 'ERC-20 transfers coming soon. Currently supports ETH.' }],\n isError: true,\n }\n }\n\n const hash = await agent.sendTransaction({\n to: to as `0x${string}`,\n value: parseEther(amount),\n })\n return {\n content: [{\n type: 'text' as const,\n text: `Transaction sent!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport { formatEther } from 'viem'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const checkBalanceSchema = {\n token: z.string().optional().describe('Token contract address (0x...). Omit for ETH balance.'),\n}\n\nexport function checkBalanceHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof checkBalanceSchema> {\n return async ({ token }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const balance = await agent.getBalance(\n token ? (token as `0x${string}`) : undefined,\n )\n const formatted = token ? balance.toString() : formatEther(balance)\n const unit = token ? 'tokens' : 'ETH'\n return {\n content: [{\n type: 'text' as const,\n text: `Wallet: ${agent.address}\\nChain: ${agent.chain}\\nBalance: ${formatted} ${unit}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const swapSchema = {\n from: z.string().describe('Token to swap from (symbol like USDC, WETH, or ETH)'),\n to: z.string().describe('Token to swap to (symbol like USDC, WETH, or ETH)'),\n amount: z.string().describe('Amount to swap in human units (e.g. \"100\")'),\n slippage: z.number().optional().describe('Max slippage in percent. Default: 0.5'),\n}\n\nexport function swapHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof swapSchema> {\n return async ({ from, to, amount, slippage }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const hash = await agent.swap({\n from: from.toUpperCase(),\n to: to.toUpperCase(),\n amount,\n slippage: slippage ?? 0.5,\n })\n return {\n content: [{\n type: 'text' as const,\n text: `Swapped ${amount} ${from.toUpperCase()} for ${to.toUpperCase()}!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const lendSchema = {\n token: z.string().describe('Token to deposit (symbol like USDC, WETH, DAI)'),\n amount: z.string().describe('Amount to deposit in human units'),\n protocol: z.enum(['aave']).optional().describe('Lending protocol. Default: aave'),\n}\n\nexport function lendHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof lendSchema> {\n return async ({ token, amount, protocol }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const hash = await agent.lend({\n token: token.toUpperCase(),\n amount,\n protocol: protocol ?? 'aave',\n })\n return {\n content: [{\n type: 'text' as const,\n text: `Deposited ${amount} ${token.toUpperCase()} into ${protocol ?? 'aave'}!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const batchTransactionsSchema = {\n transactions: z.array(z.object({\n to: z.string().describe('Target address (0x...)'),\n value: z.string().optional().describe('ETH value in wei'),\n data: z.string().optional().describe('Calldata hex string'),\n })).describe('Array of transactions to execute atomically'),\n}\n\nexport function batchTransactionsHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof batchTransactionsSchema> {\n return async ({ transactions }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const txs = transactions.map((tx) => ({\n to: tx.to as `0x${string}`,\n value: tx.value ? BigInt(tx.value) : undefined,\n data: tx.data as `0x${string}` | undefined,\n }))\n const hash = await agent.batchTransactions(txs)\n return {\n content: [{\n type: 'text' as const,\n text: `Batch of ${transactions.length} transactions sent!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import type { BarzAgent } from \"@barzkit/sdk\";\nimport type { ToolCallback } from \"../types.js\";\n\nexport const freezeWalletSchema = {};\n\nexport function freezeWalletHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof freezeWalletSchema> {\n return async () => {\n const agent = getAgent();\n if (!agent) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No wallet created. Use create_wallet first.\",\n },\n ],\n isError: true,\n };\n }\n\n try {\n const hash = await agent.freeze();\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Wallet frozen!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n isError: true,\n };\n }\n };\n}\n\nexport const unfreezeWalletSchema = {};\n\nexport function unfreezeWalletHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof unfreezeWalletSchema> {\n return async () => {\n const agent = getAgent();\n if (!agent) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: \"Error: No wallet created. Use create_wallet first.\",\n },\n ],\n isError: true,\n };\n }\n\n try {\n const hash = await agent.unfreeze();\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Wallet unfrozen!\\nHash: ${hash}\\nExplorer: ${agent.getExplorerUrl(hash)}`,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n isError: true,\n };\n }\n };\n}\n","import { z } from 'zod'\nimport type { BarzAgent } from '@barzkit/sdk'\nimport type { ToolCallback } from '../types.js'\n\nexport const fetchWithPaymentSchema = {\n url: z.string().url().describe('URL to fetch'),\n method: z.enum(['GET', 'POST', 'PUT', 'DELETE']).optional().describe('HTTP method. Default: GET'),\n headers: z.record(z.string()).optional().describe('HTTP headers as key-value pairs'),\n}\n\nexport function fetchWithPaymentHandler(\n getAgent: () => BarzAgent | null,\n): ToolCallback<typeof fetchWithPaymentSchema> {\n return async ({ url, method, headers }) => {\n const agent = getAgent()\n if (!agent) {\n return {\n content: [{ type: 'text' as const, text: 'Error: No wallet created. Use create_wallet first.' }],\n isError: true,\n }\n }\n\n try {\n const options: RequestInit = {}\n if (method) options.method = method\n if (headers) options.headers = headers\n\n const response = await agent.fetchWithPayment(url, options)\n const body = await response.text()\n const preview = body.length > 1000 ? body.slice(0, 1000) + '... (truncated)' : body\n return {\n content: [{\n type: 'text' as const,\n text: `Fetched ${url}\\nStatus: ${response.status}\\nResponse: ${preview}`,\n }],\n }\n } catch (error) {\n return {\n content: [{ type: 'text' as const, text: `Error: ${error instanceof Error ? error.message : String(error)}` }],\n isError: true,\n }\n }\n }\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport type { BarzAgent } from '@barzkit/sdk'\n\nimport { createWalletSchema, createWalletHandler } from './tools/createWallet.js'\nimport { sendTransactionSchema, sendTransactionHandler } from './tools/sendTransaction.js'\nimport { checkBalanceSchema, checkBalanceHandler } from './tools/checkBalance.js'\nimport { swapSchema, swapHandler } from './tools/swap.js'\nimport { lendSchema, lendHandler } from './tools/lend.js'\nimport { batchTransactionsSchema, batchTransactionsHandler } from './tools/batchTransactions.js'\nimport { freezeWalletSchema, freezeWalletHandler, unfreezeWalletSchema, unfreezeWalletHandler } from './tools/freezeWallet.js'\nimport { fetchWithPaymentSchema, fetchWithPaymentHandler } from './tools/fetchWithPayment.js'\n\n/**\n * Create a BarzKit MCP server with all wallet management tools.\n */\nexport function createBarzMcpServer(): McpServer {\n const server = new McpServer({\n name: 'barzkit',\n version: '0.1.0',\n })\n\n let agent: BarzAgent | null = null\n const getAgent = () => agent\n const setAgent = (a: BarzAgent) => { agent = a }\n\n server.tool(\n 'create_wallet',\n 'Create a new self-custody AI agent wallet (ERC-4337 smart account). Must be called before any other tool.',\n createWalletSchema,\n createWalletHandler(getAgent, setAgent),\n )\n\n server.tool(\n 'send_transaction',\n 'Send ETH or ERC-20 tokens from the agent wallet to a recipient address.',\n sendTransactionSchema,\n sendTransactionHandler(getAgent),\n )\n\n server.tool(\n 'check_balance',\n 'Check the agent wallet balance for ETH or a specific ERC-20 token.',\n checkBalanceSchema,\n checkBalanceHandler(getAgent),\n )\n\n server.tool(\n 'swap_tokens',\n 'Swap tokens on Uniswap V3 via the agent wallet. Supports ETH, USDC, WETH, DAI.',\n swapSchema,\n swapHandler(getAgent),\n )\n\n server.tool(\n 'lend_tokens',\n 'Deposit tokens into Aave V3 lending pool via the agent wallet.',\n lendSchema,\n lendHandler(getAgent),\n )\n\n server.tool(\n 'batch_transactions',\n 'Execute multiple transactions atomically in a single UserOperation. One signature, one gas fee.',\n batchTransactionsSchema,\n batchTransactionsHandler(getAgent),\n )\n\n server.tool(\n 'freeze_wallet',\n 'Emergency freeze the agent wallet. Kill switch — immediately stops all transactions.',\n freezeWalletSchema,\n freezeWalletHandler(getAgent),\n )\n\n server.tool(\n 'unfreeze_wallet',\n 'Unfreeze the agent wallet to resume normal operations.',\n unfreezeWalletSchema,\n unfreezeWalletHandler(getAgent),\n )\n\n server.tool(\n 'fetch_with_payment',\n 'Fetch a URL with automatic x402 payment if the server returns HTTP 402. Handles machine-to-machine payments.',\n fetchWithPaymentSchema,\n fetchWithPaymentHandler(getAgent),\n )\n\n return server\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@barzkit/mcp",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "MCP Server for self-custody AI agent wallets — 9 tools for Claude Desktop, Cursor, Windsurf, and VS Code Copilot",
6
+ "main": "./dist/server.js",
7
+ "types": "./dist/server.d.ts",
8
+ "bin": {
9
+ "barzkit-mcp": "./dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/server.d.ts",
14
+ "import": "./dist/server.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsup",
23
+ "dev": "tsup --watch",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "lint": "tsc --noEmit",
27
+ "clean": "rm -rf dist"
28
+ },
29
+ "keywords": [
30
+ "mcp",
31
+ "model-context-protocol",
32
+ "ai-agents",
33
+ "barzkit",
34
+ "web3",
35
+ "self-custody",
36
+ "erc-4337",
37
+ "smart-accounts",
38
+ "claude-desktop",
39
+ "cursor"
40
+ ],
41
+ "author": "",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/barzkit/plugins",
46
+ "directory": "mcp"
47
+ },
48
+ "dependencies": {
49
+ "@barzkit/sdk": "^0.2.0",
50
+ "@modelcontextprotocol/sdk": "^1.12.0",
51
+ "zod": "^3.23.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^22.13.0",
55
+ "tsup": "^8.5.0",
56
+ "typescript": "^5.9.3",
57
+ "vitest": "^3.0.0"
58
+ },
59
+ "engines": {
60
+ "node": ">=18.0.0"
61
+ }
62
+ }