MCP (Model Context Protocol) went from Anthropic's internal spec to the integration standard for AI agents in about six months. Microsoft uses it in Copilot Cowork. Every major agent framework supports it. If you've built an MCP server, your agent can already talk to databases, APIs, file systems, and other agents.
But it probably can't pay for anything. Here's how to fix that in about 20 minutes.
The Problem
Your MCP agent calls a premium API. The API returns a 402 or requires a payment token. Your agent doesn't have a wallet. It doesn't know how to sign a transaction. It can't negotiate payment terms. So it fails, logs an error, and you - the human - have to handle payment manually.
That defeats the point of building an autonomous agent.
The Fix: agentwallet-sdk + MCP
agentwallet-sdk (v5.0.2) gives your agent a non-custodial USDC wallet. It integrates with MCP through a tool server that any MCP-compatible agent can discover and use.
Step 1: Install
npm install agentwallet-sdk
Step 2: Create an Agent Wallet
import { AgentWallet } from 'agentwallet-sdk';
const wallet = await AgentWallet.create({
chain: 'base',
spendingPolicy: {
maxPerTransaction: '10.00',
dailyLimit: '100.00'
}
});
console.log(`Agent wallet: ${wallet.address}`);
// Fund this address with USDC on Base
Step 3: Expose as MCP Tool
Your MCP server declares a pay tool that other agents or orchestrators can call:
// In your MCP server tool definitions
{
name: 'wallet_pay',
description: 'Pay a recipient USDC from the agent wallet',
parameters: {
type: 'object',
properties: {
recipient: { type: 'string', description: 'Recipient address' },
amount: { type: 'string', description: 'USDC amount' },
memo: { type: 'string', description: 'Payment memo' }
},
required: ['recipient', 'amount']
},
handler: async (params) => {
const tx = await wallet.pay({
to: params.recipient,
amount: params.amount,
memo: params.memo
});
return { txHash: tx.hash, status: 'confirmed' };
}
}
Step 4: Use x402 Auto-Pay
For HTTP APIs that support x402 (like Stripe's new agent payment endpoints), the wallet handles everything automatically:
// wallet.fetch intercepts 402 responses and pays automatically
const data = await wallet.fetch('https://api.premium-service.com/data');
No manual payment logic. The SDK reads the 402 response headers, checks the spending policy, signs a USDC transfer, and retries with proof.
Spending Controls for Production
Don't skip this part. Deploying an agent with wallet access requires guardrails:
const wallet = await AgentWallet.create({
chain: 'base',
spendingPolicy: {
maxPerTransaction: '5.00', // Cap per payment
dailyLimit: '50.00', // Daily budget
allowedRecipients: [ // Whitelist
'0x...known-api-provider',
'0x...data-marketplace'
],
requireApproval: {
above: '25.00', // Human approval for large payments
approver: 'admin-agent'
}
}
});
The spending policy is enforced at the wallet level. Even if your agent's logic has a bug that tries to overspend, the wallet rejects the transaction.
What You Get
After 20 minutes of setup, your MCP agent can:
- Pay for premium API calls automatically via x402
- Send USDC to other agents or services
- Bridge USDC across 17 chains via CCTP
- Build on-chain reputation via ERC-8004 identity registries
- Lock escrow for trustless agent-to-agent transactions
All within spending limits you define. All non-custodial - your agent holds the keys.
Get Started
npm install agentwallet-sdk
The package is at v5.0.2 on npm. Full docs and source on GitHub. MIT licensed.
MCP gave your agent a way to talk to the world. agentwallet-sdk gives it a way to pay for things in that world.
This article was written with AI assistance. All technical claims, code, and architectural decisions were validated by the author.
Top comments (0)