두 계층 프로토콜 모두 필수: 빠짐없이 적용되어야 함MCP AI 에이전트가 귀하의 도구를 인식하고 인터페이스를 통해 호출할 수 있도록 함(발견 계층);x402 에이전트가 데이터를 수신하기 전에 결제하도록 함(정산 계층, Base 메인넷 USDC). 구매자의 지갑에는 USDC만 있으면 됨.ETH가 필요하지 않습니다— gas는 facilitator가 대신 지불합니다(EIP-3009 무가스 승인). 계정 등록, API 키, Coinbase 계정 없이도 수취 가능합니다.
python3 -m venv venv && source venv/bin/activate pip install "mcp<2" "x402==2.25.0" web3 httpx
mcp 반드시 잠금 처리해야 합니다 <2— FastMCP는 2.x 버전에서 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 및 EIP-155: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 이벤트만 신뢰함 |
| 셸 내에서 $ 기호를 포함한 가격 표현 | $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 기반 무가스 승인(transferWithAuthorization)을 사용하므로, 구매자 지갑에 Base 메인넷 USDC만 보유되어 있으면 되며, 가스비는 facilitator가 대신 부담함.
결제 전 유료 도구를 직접 호출할 경우, 반드시 402 결제 요청 응답을 반환해야 함. 요청 내 network=eip155:8453, asset=Circle 공식 USDC 컨트랙트, payTo=귀하의 주소, amount 값이 정확한지 확인하시기 바랍니다. 실제 자금 검증은 별도로 수행함.
이 둘 모두 본 튜토리얼의 메인넷 환경에 직접 사용할 수 없습니다. x402.org 공식 사이트는 테스트넷만 지원하며, Mogami는 x402 v1만 지원합니다. 메인넷에서는 PayAI, openx402(무등록 가능) 또는 Coinbase CDP(API 키 필요)를 사용하세요.
x402 全流程部署教程|데이터 출처:GPU 컴퓨팅 파워 레이더 rentgpu.link(2026-10-27 更新,시간당自动抓取各플랫폼公开定价)|https://rentgpu.link/x402|CC BY 4.0