x402-mcp
A hybrid MCP server that integrates x402 payment protocol, providing tools to manage cryptocurrency payments and dynamically create HTTP endpoints protected by payments.
README
x402-mcp
A TypeScript MCP (Model Context Protocol) Server with Express.js integration for the x402 Payment Protocol.
Overview
This is a hybrid MCP server that combines:
- MCP Server: Provides tools to interact with the x402 payment protocol through the Model Context Protocol
- Express HTTP Server: Creates payment-protected HTTP endpoints using x402 payment middleware
This allows AI assistants and MCP clients to both manage x402 payments AND dynamically create HTTP endpoints protected by cryptocurrency payments. Built with TypeScript, the official MCP SDK, and x402-express middleware.
Features
🔧 MCP Tools for Payment Management
- x402_create_payment_request: Create a new payment request with specified price and details
- x402_check_payment_status: Check the status of an existing payment request
- x402_get_config: Get the current x402 configuration (payment address, network, facilitator URL)
- x402_list_networks: List available networks for x402 payments
🌐 MCP Tools for Express Endpoint Management
- x402_create_protected_endpoint: Dynamically create HTTP endpoints protected by x402 payment middleware
- x402_list_protected_endpoints: List all protected endpoints on the Express server
- x402_get_express_server_status: Get Express server status (running state, port, endpoint count)
- x402_update_endpoint_price: Update the price for an existing protected endpoint
⚙️ Configuration
- Payment Address:
0x243E0B615BfEa0f315109b8b415e3D6b9c3131F7 - Network: Base Sepolia (testnet) - change to "base" for mainnet
- Payment Token: USDC (stablecoin)
- Facilitator URL:
https://x402.org/facilitator(testnet) - Express Port:
4021
Installation
npm install
Development
Run the server in development mode with hot reload:
npm run dev
Build
Compile TypeScript to JavaScript:
npm run build
Production
Run the compiled server:
npm start
Architecture
This is a hybrid server that runs two servers simultaneously:
┌─────────────────────────────────────────────────────────────┐
│ x402-mcp Process │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────┐ ┌──────────────────────────┐│
│ │ MCP Server (stdio) │ │ Express HTTP Server ││
│ │ │ │ (Port 4021) ││
│ │ • Tool Management │ │ ││
│ │ • Payment Requests │ │ • Payment Middleware ││
│ │ • Endpoint Management │ │ • Protected Routes ││
│ │ • Configuration │ │ • Health Check ││
│ └──────────────────────────┘ └──────────────────────────┘│
│ │
│ Both use X402_CONFIG shared state │
└─────────────────────────────────────────────────────────────┘
│
▼
x402 Facilitator
(Payment Verification)
Key Components
- MCP Server: Communicates via stdio, provides tools to AI assistants
- Express Server: HTTP server with x402 payment middleware
- ExpressServerManager: Manages Express lifecycle and protected endpoints
- X402Handler: Handles manual payment request creation and tracking
- x402-express Middleware: Intercepts HTTP requests, enforces payments
Project Structure
x402-mcp/
├── src/
│ └── index.ts # Main implementation (MCP + Express hybrid)
├── dist/ # Compiled JavaScript output
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
├── .gitignore # Git ignore rules
└── README.md # This file
Usage with MCP Clients
Configuration
Add this server to your MCP client configuration (e.g., Claude Desktop):
{
"mcpServers": {
"x402-mcp": {
"command": "node",
"args": ["/path/to/x402-mcp/dist/index.js"]
}
}
}
For development:
{
"mcpServers": {
"x402-mcp": {
"command": "npm",
"args": ["run", "dev"],
"cwd": "/path/to/x402-mcp"
}
}
}
Example Tool Calls
Create a Protected HTTP Endpoint
{
"name": "x402_create_protected_endpoint",
"arguments": {
"path": "/weather",
"method": "GET",
"price": "$0.001",
"description": "Get current weather data for any location",
"responseData": {
"weather": "sunny",
"temperature": 72,
"humidity": 45
},
"inputSchema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name"
}
}
},
"outputSchema": {
"type": "object",
"properties": {
"weather": { "type": "string" },
"temperature": { "type": "number" },
"humidity": { "type": "number" }
}
}
}
}
Response:
{
"success": true,
"message": "Protected endpoint created successfully",
"data": {
"endpoint": "GET /weather",
"url": "http://localhost:4021/weather",
"price": "$0.001",
"description": "Get current weather data for any location",
"network": "base-sepolia",
"payTo": "0x243E0B615BfEa0f315109b8b415e3D6b9c3131F7"
}
}
Now when someone accesses http://localhost:4021/weather without payment, they'll receive a 402 Payment Required response with payment instructions!
Create Payment Request
{
"name": "x402_create_payment_request",
"arguments": {
"price": "$0.50",
"description": "Access to premium API endpoint",
"resource": "/api/premium/data",
"maxTimeoutSeconds": 120
}
}
Response:
{
"success": true,
"message": "Payment request created successfully",
"data": {
"paymentId": "x402_1234567890_abc123",
"paymentUrl": "https://x402.org/facilitator/pay?id=...",
"price": "$0.50",
"network": "base-sepolia",
"payTo": "0x243E0B615BfEa0f315109b8b415e3D6b9c3131F7",
"description": "Access to premium API endpoint",
"expiresAt": "2024-01-01T12:02:00.000Z"
}
}
List All Protected Endpoints
{
"name": "x402_list_protected_endpoints",
"arguments": {}
}
Response:
{
"success": true,
"message": "Found 1 protected endpoint(s)",
"data": [
{
"method": "GET",
"path": "/weather",
"price": "$0.001",
"description": "Get current weather data for any location",
"url": "http://localhost:4021/weather"
}
]
}
Get Express Server Status
{
"name": "x402_get_express_server_status",
"arguments": {}
}
Response:
{
"success": true,
"message": "Express server is running",
"data": {
"isRunning": true,
"port": 4021,
"network": "base-sepolia",
"payTo": "0x243E0B615BfEa0f315109b8b415e3D6b9c3131F7",
"facilitatorUrl": "https://x402.org/facilitator",
"endpointCount": 1,
"endpoints": [...]
}
}
Check Payment Status
{
"name": "x402_check_payment_status",
"arguments": {
"paymentId": "x402_1234567890_abc123"
}
}
Response:
{
"success": true,
"data": {
"paymentId": "x402_1234567890_abc123",
"status": "pending",
"paid": false,
"price": "$0.50",
"network": "base-sepolia",
"createdAt": "2024-01-01T12:00:00.000Z",
"expiresAt": "2024-01-01T12:02:00.000Z"
}
}
Get Configuration
{
"name": "x402_get_config",
"arguments": {}
}
Response:
{
"success": true,
"message": "Current x402 configuration",
"data": {
"payTo": "0x243E0B615BfEa0f315109b8b415e3D6b9c3131F7",
"network": "base-sepolia",
"facilitatorUrl": "https://x402.org/facilitator"
}
}
List Networks
{
"name": "x402_list_networks",
"arguments": {}
}
Response:
{
"success": true,
"message": "Available networks for x402 payments",
"data": [
{
"name": "base",
"displayName": "Base Mainnet",
"chainId": 8453,
"currency": "ETH",
"stablecoin": "USDC",
"isMainnet": true
},
{
"name": "base-sepolia",
"displayName": "Base Sepolia Testnet",
"chainId": 84532,
"currency": "ETH",
"stablecoin": "USDC",
"isMainnet": false
},
{
"name": "avalanche",
"displayName": "Avalanche C-Chain",
"chainId": 43114,
"currency": "AVAX",
"stablecoin": "USDC",
"isMainnet": true
},
{
"name": "solana",
"displayName": "Solana Mainnet",
"chainId": null,
"currency": "SOL",
"stablecoin": "USDC",
"isMainnet": true
}
]
}
Error Handling
The server includes comprehensive error handling:
- Payment not found: Returns error when checking status of non-existent payment
- Invalid payment status: Prevents operations on payments in wrong state
- Expired payments: Automatically marks pending payments as expired
- Invalid arguments: Validates using Zod schemas with detailed error messages
Technology Stack
- TypeScript: Type-safe development
- Node.js: Runtime environment
- MCP SDK: Official Model Context Protocol SDK
- x402-express: x402 Payment Protocol integration
- Zod: Runtime type validation
How x402 Protocol Works
The x402 protocol is a standard for HTTP-based cryptocurrency payments. This hybrid MCP server provides two complementary approaches:
Approach 1: Express Middleware (Recommended)
This is the standard x402 flow using Express middleware:
- Create Protected Endpoint: Use
x402_create_protected_endpointto dynamically create an HTTP endpoint - Client Makes Request: When a client accesses the endpoint without payment, they receive HTTP 402 Payment Required
- Payment Instructions: The 402 response includes payment details (amount, address, network) in the response body
- Client Pays: Client submits payment transaction on the blockchain
- Retry with Proof: Client retries the request with
X-PAYMENTheader containing cryptographic proof of payment - Middleware Verifies: x402 middleware verifies the payment via the facilitator
- Access Granted: If valid, the endpoint returns the protected content
Approach 2: Manual Payment Requests
For custom payment flows:
- Call
x402_create_payment_requestwith price and details - Server returns a payment URL and unique payment ID
- User completes payment through the payment URL
- Call
x402_check_payment_statusto verify payment completion - Grant access to resource once payment is confirmed
Network Support
- Base (mainnet) and Base Sepolia (testnet)
- Avalanche C-Chain (mainnet) and Avalanche Fuji (testnet)
- Solana (mainnet) and Solana Devnet (testnet)
- All payments processed in USDC stablecoin
Use Cases
- AI API Monetization: Charge for expensive AI model inference calls
- Content Paywalls: Gate premium content behind cryptocurrency payments
- Micro-transactions: Enable small payments for individual API calls (as low as $0.001)
- Resource Access Control: Manage access to computational resources
- Dynamic API Marketplaces: AI agents can discover and pay for APIs automatically
- Pay-per-use Services: Weather data, stock prices, translation APIs, etc.
Running on Mainnet
To accept real payments on mainnet, you need to make a few changes:
1. Set up CDP API Keys
- Sign up at cdp.coinbase.com
- Create a new project and generate API credentials
- Set environment variables:
export CDP_API_KEY_ID=your-api-key-id export CDP_API_KEY_SECRET=your-api-key-secret
2. Update Configuration in src/index.ts
// Uncomment the facilitator import
import { facilitator } from "@coinbase/x402";
const X402_CONFIG = {
payTo: "0xYourMainnetAddress", // Your real mainnet wallet address
network: "base" as const, // Change from "base-sepolia" to "base"
facilitatorUrl: "https://x402.org/facilitator", // Not used for mainnet
expressPort: 4021,
};
3. Update Express Middleware to Use CDP Facilitator
In the applyPaymentMiddleware() method:
private applyPaymentMiddleware() {
if (Object.keys(this.routeConfigs).length > 0) {
this.app.use(paymentMiddleware(
X402_CONFIG.payTo,
this.routeConfigs,
facilitator // Use CDP facilitator instead of testnet URL
));
}
}
Customization
Testnet Configuration (Current)
const X402_CONFIG = {
payTo: "0xYourAddress", // Your receiving wallet address
network: "base-sepolia" as const, // or "avalanche-fuji", "solana-devnet"
facilitatorUrl: "https://x402.org/facilitator",
expressPort: 4021,
};
Mainnet Configuration
const X402_CONFIG = {
payTo: "0xYourAddress", // Your receiving wallet address
network: "base" as const, // or "avalanche", "solana"
facilitatorUrl: "https://x402.org/facilitator",
expressPort: 4021,
};
Note: When you specify prices like "$0.50", the x402 protocol automatically processes payments in USDC on the selected network.
Resources
License
MIT
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。