兩層協議,缺一不可:MCP 讓 AI Agent 能發現並按介面呼叫你的工具(發現層);x402 讓 Agent 在拿到資料前先付錢(結算層,Base 主網 USDC)。買家錢包裡只需有 USDC,不需要 ETH——gas 由 facilitator 代付(EIP-3009 免 gas 授權)。你不需要註冊賬號、不需要 API Key、不需要 Coinbase 賬戶就能收。
python3 -m venv venv && source venv/bin/activate pip install "mcp<2" "x402==2.25.0" web3 httpx
mcp 必須鎖 <2:2.x 把 FastMCP 改名 MCPServer,x402 2.25 仍按 1.x 寫法,裝 2.x 會直接 import 失敗。import os
from mcp.server.fastmcp import FastMCP
from x402 import x402ResourceServer
from x402.http import FacilitatorConfig, HTTPFacilitatorClient
from x402.mechanisms.evm.exact import ExactEvmServerScheme
from x402.mcp import create_payment_wrapper
from x402.schemas.config import ResourceConfig
# 1. 鏈與 facilitator:Base 主網 + PayAI(免註冊,支援 x402 v2 主網)
NETWORK = os.environ.get("X402_NETWORK", "eip155:8453")
FACILITATOR_URL = os.environ.get("X402_FACILITATOR",
"https://facilitator.payai.network")
# 2. 收款地址:換成你自己的 Base 主網地址!別抄示例。
PAY_TO = os.environ.get("PAY_TO") or "0x你的收款地址"
# 3. 定價(按次,USD)
PRICE = {"my_data_tool": "$0.05"}
facilitator = HTTPFacilitatorClient(FacilitatorConfig(url=FACILITATOR_URL))
resource_server = x402ResourceServer(facilitator)
resource_server.register(NETWORK, ExactEvmServerScheme())
resource_server.initialize()
mcp = FastMCP("my-data-service")
def paid(tool_name: str):
return create_payment_wrapper(
resource_server,
accepts=resource_server.build_payment_requirements(
ResourceConfig(scheme="exact", pay_to=PAY_TO,
price=PRICE[tool_name], network=NETWORK)),
resource=None,
)
@mcp.tool(name="list_items") # 免費工具:讓 Agent 先看見你有貨
def list_items() -> str:
return '[{"name": "item-a"}]'
@mcp.tool(name="my_data_tool") # 付費工具
@paid("my_data_tool")
def my_data_tool(item: str) -> str:
return '{"item": "%s", "price": 1.24}' % item
if __name__ == "__main__":
mcp.run(transport="streamable-http", host="127.0.0.1", port=8797)# /etc/systemd/system/x402.service [Unit] Description=My x402 paid MCP server After=network.target [Service] Type=simple WorkingDirectory=/opt/my-x402 Environment=X402_NETWORK=eip155:8453 Environment=X402_FACILITATOR=https://facilitator.payai.network Environment=PORT=8797 ExecStart=/opt/my-x402/venv/bin/python server.py Restart=always RestartSec=5 [Install] WantedBy=multi-user.target # systemctl daemon-reload && systemctl enable --now x402
location ^~ /mcp {
proxy_pass http://127.0.0.1:8797;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off; # streamable-http 走 SSE,必須關緩衝
proxy_cache off;
proxy_read_timeout 300s;
}proxy_buffering off 不能省:streamable-http 是 SSE 流式,開著緩衝會卡住。# 零成本驗證(不花真錢):不付款直接調付費工具,應返回 402 支付挑戰
curl -s https://你的域名/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}'
# 然後在帶 session id 的情況下調 tools/call(不帶 X-PAYMENT),
# 響應的 accepts 裡應看到:network=eip155:8453、asset=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913、
# payTo=你的地址、amount=50000(=$0.05)# 真錢驗證:給測試買家錢包充 USDC,跑客戶端,然後查鏈上 USDC Transfer 事件
# (不要看餘額差值,RPC 同步延遲會讀出假差額;只信 Transfer 事件)
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("https://base-rpc.publicnode.com")) # mainnet.base.org 會 429
USDC = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
topic = w3.keccak(text="Transfer(address,address,uint256)").hex()
logs = w3.eth.get_logs({
"fromBlock": w3.eth.block_number - 3000,
"toBlock": "latest",
"address": USDC,
"topics": [topic,
"0x" + "0"*24 + buyer[2:].lower(),
"0x" + "0"*24 + seller[2:].lower()],
})
for lg in logs:
print(int(lg["data"].hex(), 16) / 1e6, "USDC 已到賬")| 坑 | 現象 | 解法 |
|---|---|---|
| x402.org facilitator 只支援測試網 | 切主網後付款永遠失敗 | 換 PayAI / openx402 / CDP |
| Mogami 只有 x402 v1 | 與 x402 2.25 SDK 不相容 | 換支援 v2 + eip155:8453 的 facilitator |
| mcp 裝成 2.x | import 直接失敗 | 鎖 mcp<2 |
| 鏈上核驗用了測試網 USDC 合約 | 一條 Transfer 都查不到,誤判成沒付款 | 主網合約 0x833589fC…2913 |
| mainnet.base.org 公共 RPC 限流 | eth_getLogs 返回 429 | 換 base-rpc.publicnode.com |
| 用餘額差值驗證 | RPC 同步延遲讀出假差額 | 只信鏈上 Transfer 事件 |
| shell 裡寫含 $ 的價格 | $0 被展開成 bash,JSON 被汙染 | 用單引號 heredoc,改完 grep 校驗 |
0x230cd9cd33589bcf33cd32e5aa4f9e0c3994a63b0x6274A5e39E84168c5DE57110A6e0ab1FBBE0a89E0x67a0d45f7183032600feb4fa7c53c5348eb84b05fa586927bf3d7d6718faed12(0.01 USDC)、tx 0x5e492eee6572e42d934f7b4082b525036346c5a2761ff534ce16a8bd9c781bc9(0.01 USDC)link.rentgpu/gpu-market必須填你自己的 Base 主網收款地址(PAY_TO)。本頁出現的地址是本站的案例地址,僅供核對鏈上記錄參考;照抄會導致別人付的錢進本站錢包。本頁不含任何私鑰。
收款不需要——PayAI、openx402 等 facilitator 免註冊。只有將來把收到的 USDC 換成人民幣提現時,才需要走交易所的實名流程。
不需要。x402 使用 EIP-3009 免 gas 授權(transferWithAuthorization),買家錢包裡只要有 Base 主網 USDC 即可,gas 由 facilitator 代付。
不付款直接呼叫付費工具,應返回 402 支付挑戰。檢查挑戰裡的 network=eip155:8453、asset=Circle 官方 USDC 合約、payTo=你的地址、amount 正確即可。真錢驗證再單獨做。
都不能直接用於本教程的主網場景:x402.org 官方僅支援測試網,Mogami 只支援 x402 v1。主網請用 PayAI、openx402(免註冊)或 Coinbase CDP(需 API Key)。
x402 全流程部署教程|資料來源:GPU 算力雷達 rentgpu.link(2026-10-27 更新,每小時自動抓取各平臺公開定價)|https://rentgpu.link/x402|CC BY 4.0