Cloudflare 正与 Coinbase 合作创立 x402 Foundation。该基金会的使命是推动 x402 协议的普及——这是一套升级框架,支持客户端与服务端通过通用语言在互联网上进行价值交换。除本次合作外,我们同步推出一系列功能,允许开发者在 Agents SDK 及我们的 MCP 集成中使用 x402 协议,并正式提出全新的延迟支付方案。
一直以来,网络支付都是为人类设计的。我们浏览商家的网站,通过将商品添加到购物车来表达购买意向,通过输入信用卡信息并点击“支付”来确认购买。但是,如果您想在数字服务之间实现直接交易呢?我们需要协议来实现机器对机器的交易。
Cloudflare 上的网站每天向试图访问其内容和电子商务商店的机器人和爬虫发送超过十亿个 HTTP 402 响应代码。此响应代码附带一条简单的消息:“需要付款”。
然而,这些 402 支付请求响应却常常石沉大海。其中一个关键原因在于缺乏统一的标准。由于没有明确规定该如何格式化处理这类响应代码以及如何做出相应回复,内容创作者、出版商和网站运营者在传达支付请求时,往往缺少得力的工具。而 x402 能为开发者提供一个清晰、开放的协议,让全球范围内的网站和自动化智能体能够顺畅协商支付事宜。
Coinbase 编写了如下所述的 x402 交易流程,以帮助机器通过 HTTP 直接支付资源费用:
一个客户端尝试访问受 x402 保护的资源。
服务器响应状态码 402 Payment Required。响应主体包含付款指示,包括付款金额和收款人。
客户端使用支付授权标头请求 x402 门控资源。
支付服务商验证客户端的支付有效负载并结算交易。
服务器会在响应中返回所请求的资源,同时通过支付响应标头来确认支付结果。
这一交互流程实现了对互联网上各类资源的编程式访问。只要客户端和服务器能够解析 x402 协议,双方即可无需帐户、订阅服务或 API 密钥,直接完成交易。
x402 协议既能实现传统用例的盈利模式,更能催生全新类型的商业化场景。例如:
一个能帮您从多家商户选购万圣节服装配饰的智能助手。
一个按浏览器渲染会话次数付费而非采用月度订阅制的 AI 智能体,。
一个通过小额支付获取高质量实时数据流,并据此驱动交易决策的自动化股票交易系统。
未来版本的 x402 协议将实现支付通道的通用兼容,不仅支持稳定币交易,还能适配信用卡和银行账户等传统支付方式。
Cloudflare 的按抓取付费:提出 x402 延期付款方案
智能体与网络爬虫通常需要两项既存于现代金融基础设施中的重要功能:用于处理争议的延迟结算机制,以及简化财务管理的统一汇总支付。例如,参与我们“按抓取付费”封闭测试的爬虫程序,既能轻松抓取海量页面并生成审计日志,又可在每日结束时通过绑定的信用卡或银行账户一次性完成费用结算。
为适应这类支付场景,我们针对 x402 协议提出全新的延迟支付方案。该方案专为无需实时结算的智能体支付场景设计,既支持传统支付方式,也兼容稳定币结算。通过这项增补方案,我们致力于确保所有符合规范的服务器都能选择性将密码学握手与支付结算分离,使智能体与服务器能够使用预先协商的许可协议、批量结算或订阅模式。
随着封闭测试版的不断扩展与迭代升级,我们将把这种全新的延迟支付方案应用于按抓取付费计费的场景。
以下是我们针对握手协议提出的初步方案,该方案有望在 x402 的下一个主要版本中发布:
如今,当未经身份验证或未授权的客户端尝试访问资源时,会收到 402 Payment Required 响应。该响应包含可供客户端用于构建重试请求的支付承诺有效负载。这种响应是机器可读的支付要约,我们的提案中还包含了一套全新的延迟支付方案。
HTTP/1.1 402 Payment Required
Content-Type: application/json
{
"accepts": [
{
"scheme": "deferred",
"network": "example-network-provider",
"resource": "https://example.com/page",
"...": "...",
"extras": {
"id": "abc123",
"termsUrl": "https://example.com/terms"
},
}
]
}
接下来,客户端将重新发送请求,其中携带包含支付承诺的签名有效负载。该延迟支付方案采用 HTTP 消息签名,其中 JWK 格式的公钥存放于一个可公开访问的目录中。通过 Signature-Input 标头明确标识请求中哪些部分被纳入 Signature,以此构成客户支付意图的密码学证明,服务提供商无需通过链上交易即可直接完成验证。
GET /path/to/resource HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 Chrome/113.0.0 MyBotCrawler/1.1
Payment:
scheme="deferred",
network="example-network-provider",
id="abc123"
Signature-Agent: signer.example.com
Signature-Input:
sig=("payment" "signature-agent");
created=1700000000;
expires=1700011111;
keyid="ba3e64==";
tag="web-bot-auth"
Signature: sig=abc==
资源服务器会验证签名,并在返回内容时附带确认标头信息。该服务器负责将支付关联到与 HTTP 消息签名相关联的账户,验证客户端身份后交付内容。在此场景中,支付流程不涉及区块链。
HTTP/1.1 200 OK
Content-Type: text/html
Payment-Response:
scheme="deferred",
network="example-network-provider",
id="abc123",
timestamp=1730872968
如今服务器能够以灵活方式处理结算流程。经过验证的握手 ID 将作为参考标识。这种方法支持灵活的使用模式,且无需为每次请求额外付出开销,服务器可以按照订阅周期、每日或者批量方式进行款项汇总。由此构建起一个灵活的框架:加密信任机制会即时建立,而资金结算既可以沿用传统支付渠道,也能采用稳定币。
Cloudflare 的 MCP 服务器、Agents SDK 和 x402 付款
代码的实际运行,才能推动开放协议从理论构想转化为真正实用的工具,并最终成为公认标准。如今,通过 Cloudflare 的 Agent SDK 构建的智能体已能使用 x402 协议支付资源费用,MCP 服务器也可开放支持 x402 支付的工具。为直观展示其运作机制,我们创建了 x402 演示平台——一个实际运用 x402 协议的实时演示环境。该平台由 Agents SDK 驱动,并能调用部署于 Cloudflare 的 MCP 服务器中的各类工具。
当您打开 x402 演示平台时,系统会自动创建新钱包并注入基于 Base 区块链测试网的 Testnet USDC 测试代币。该平台通过 Agents SDK 构建的智能体,可调用同时包含免费与付费工具的 MCP 服务器。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { McpAgent } from "agents/mcp";
import { withX402 } from "agents/x402";
export class PayMCP extends McpAgent {
server = withX402(
new McpServer({ name: "PayMCP", version: "1.0.0" }),
X402_CONFIG
);
async init() {
// Paid tool
this.server.paidTool(
"square",
"Squares a number",
0.01, // Tool price
{
a: z.number()
},
{},
async ({ number }) => {
return { content: [{ type: "text", text: String(a ** 2) }] };
}
);
// Free tool
this.server.tool(
"add-two-numbers",
"Adds two numbers",
{
a: z.number(),
b: z.number(),
},
async ({ a, b }) => {
return { content: [{ type: 'text', text: String(a + b) }] };
}
);
}
}
当智能体尝试使用付费工具时,MCP 服务器会返回 402 Payment Required 状态码。该智能体能够解析支付指令,并询问用户是否要继续交易。要构建一个兼容 x402 协议的客户端,只需对工具调用进行基本的封装:
import { Agent } from "agents";
import { withX402Client } from "agents/x402";
export class MyAgent extends Agent {
// Your Agent definitions...
async onToolCall() {
// Build the x402 client
const x402Client = withX402Client(
myMcpClient,
{ network: "base-sepolia", account: this.account }
);
// The first parameter becomes the confirmation callback.
// We can set it to `null` if we want the agent to pay automatically.
const res = await x402Client.callTool(
this.onPaymentRequired,
{
name: toolName,
arguments: toolArgs
});
}
}
该测试智能体会从钱包中划拨资金,并向 MCP 服务器发送支付有效负载以完成交易结算。这些交易可设置为需要或无需人工确认两种模式,便于您为应用程序设计最合适的界面。
您可以立即开始使用 Agents SDK,或者部署您自己的 MCP 服务器。
我们将继续与 Coinbase 紧密合作,共同推进 x402 Foundation 的成立。我们将很快公布该基金会具体架构的更多细节,敬请期待。
我们坚信开放且可互操作协议的价值——这也是为什么我们鼓励所有人都直接为 x402 协议贡献力量。若想与 Cloudflare 负责 x402 项目的团队取得联系,欢迎发送电子邮件至 x402@cloudflare.com。