MCP server for USDC payments on Base β Enable any Claude Code agent to send and receive payments.
Pay-MCP is a Model Context Protocol (MCP) server that wraps USDC payment capabilities on the Base blockchain. It allows AI agents (like Claude Code) to:
- π° Check USDC balances β Query any wallet's USDC balance
- π€ Send USDC payments β Transfer USDC to any address
- π₯ Generate payment requests β Create payment links with deep linking support
- π View transaction history β List recent sent/received transfers
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Your Computer β
β βββββββββββββββββββ stdio ββββββββββββββββββββββββ β
β β Claude Code βββββββββββββββββΊβ Pay-MCP β β
β β (MCP Client) β JSON-RPC β (MCP Server) β β
β βββββββββββββββββββ β β β
β β ββββββββββββββββββ β β
β β β PayWallet β β β
β β β ββ viem β β β
β β β ββ ERC-20 ABI β β β
β β ββββββββββββββββββ β β
β ββββββββββββ¬ββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββ
β HTTPS/RPC
βΌ
ββββββββββββββββββββββββ
β Base Blockchain β
β ββββββββββββββββββ β
β β USDC Contract β β
β β (Circle) β β
β ββββββββββββββββββ β
ββββββββββββββββββββββββ
# Clone the repository
git clone https://github.com/koriyoshi2041/pay-mcp.git
cd pay-mcp
# Install dependencies
npm install
# Build
npm run build- Copy the example environment file:
cp .env.example .env- Edit
.envwith your private key:
# Required: Your wallet's private key
PRIVATE_KEY=your_private_key_here
# Optional: Network (mainnet or testnet)
NETWORK=mainnet
β οΈ Security Warning: Never commit your.envfile or share your private key!
Add this to your Claude Code MCP settings:
Location: ~/.claude/claude_desktop_config.json (macOS/Linux) or via Claude Code settings
{
"mcpServers": {
"pay-mcp": {
"command": "node",
"args": ["/path/to/pay-mcp/dist/index.js"],
"env": {
"PRIVATE_KEY": "your_private_key_here",
"NETWORK": "mainnet"
}
}
}
}Alternative: Run directly with source:
{
"mcpServers": {
"pay-mcp": {
"command": "npx",
"args": ["tsx", "/path/to/pay-mcp/src/index.ts"],
"env": {
"PRIVATE_KEY": "your_private_key_here",
"NETWORK": "mainnet"
}
}
}
}Check USDC balance for your wallet or any address.
| Parameter | Required | Description |
|---|---|---|
address |
No | Address to check. Defaults to your wallet. |
Example prompt:
Check my USDC balance
Send USDC to an address.
| Parameter | Required | Description |
|---|---|---|
to |
Yes | Recipient address (0x...) |
amount |
Yes | Amount in USDC (e.g., "10.50") |
memo |
No | Note for this payment |
Example prompt:
Send 25 USDC to 0x742d35Cc6634C0532925a3b844Bc9e7595f8d123 for "Coffee subscription"
Generate a payment request link.
| Parameter | Required | Description |
|---|---|---|
amount |
Yes | Amount to request in USDC |
memo |
No | Description for the request |
Example prompt:
Create a payment request for 50 USDC for "Consulting services"
View recent USDC transactions.
| Parameter | Required | Description |
|---|---|---|
limit |
No | Number of transactions (default: 20, max: 100) |
Example prompt:
Show my last 10 USDC transactions
pay-mcp/
βββ src/
β βββ index.ts # MCP server entry point
β βββ config.ts # Configuration and constants
β βββ wallet.ts # Blockchain interaction layer (viem)
β βββ tools.ts # MCP tool definitions
βββ test/
β βββ test.ts # Test script
βββ dist/ # Compiled output
βββ .env.example # Environment template
βββ package.json
βββ tsconfig.json
βββ README.md
# Build TypeScript
npm run build
# Run in development mode
npm run dev
# Run tests (uses testnet)
npm test
# Clean build output
npm run clean# Run with auto-generated test wallet
npm test
# Run with your own testnet wallet
PRIVATE_KEY=your_testnet_key npm test| Setting | Value |
|---|---|
| Chain | Base (Chain ID: 8453) |
| USDC Contract | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| Explorer | https://basescan.org |
Set NETWORK=testnet in your .env:
| Setting | Value |
|---|---|
| Chain | Base Sepolia (Chain ID: 84532) |
| USDC Contract | 0x036CbD53842c5426634e7929541eC2318f3dCF7e |
| Explorer | https://sepolia.basescan.org |
π‘ To get testnet USDC, use the Base Sepolia Faucet.
| Variable | Required | Default | Description |
|---|---|---|---|
PRIVATE_KEY |
β Yes | - | Wallet private key (without 0x prefix) |
NETWORK |
No | mainnet |
mainnet or testnet |
BASE_RPC_URL |
No | Public RPC | Custom RPC endpoint |
GAS_MULTIPLIER |
No | 1.1 |
Gas estimate multiplier |
MAX_GAS_LIMIT |
No | 100000 |
Maximum gas limit |
-
Private Key Storage:
- Never commit your private key to version control
- Consider using environment variables or a secrets manager
- For production, use hardware wallets or key management services
-
Transaction Safety:
- Always test on testnet first
- Double-check recipient addresses
- Consider implementing daily/per-transaction limits
-
Network Selection:
- Verify network configuration before mainnet transactions
- Use testnet for development and testing
| Component | Technology |
|---|---|
| Runtime | Node.js 18+ |
| Language | TypeScript 5.7 |
| MCP SDK | @modelcontextprotocol/sdk |
| Blockchain | viem |
| Validation | zod |
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
npm test) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE for details.
- Model Context Protocol by Anthropic
- Base by Coinbase
- Circle USDC
- Viem - TypeScript Ethereum library