关于 mcp-pay-gate
mcp-pay-gate 是供 MCP 服务运营者使用的 Express 中间件,可通过 L402 或 x402 bip122/exact 接受 Lightning 付款。两种支付路径共用一个 LNBits 后端。
主要功能
- 01接受 L402 和 x402 bip122/exact
- 02在付款挑战中公布两种支付方式
- 03验证 BOLT11 发票和精确金额
- 04通过内存缓存防止重放
- 05通过 LNBits 确认付款
适用场景
- 01接受 L402 客户端的付款
- 02支持 x402 Lightning 付款客户端
- 03将两种支付方式接入同一个 LNBits 钱包
MCP 相关
提供 Express 中间件,通过 L402 或 x402 付款验证保护 MCP 服务路由。请求验证成功后会继续进入工具处理程序,并附带付款信息。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
@powforge/mcp-pay-gate
适用于 MCP 服务的 Express 即插即用中间件。支持 L402 Lightning(旧版客户端)和 x402 bip122/exact(向前兼容的客户端),并在两种支付轨道背后提供真实的 10 步验证器。两者共用一个 LNBits 后端。v0.2.0 提供完整的 x402 验证(BOLT11 解码、防重放、LNBits 付款检查),不含占位实现。
为什么采用双轨
按次付费的 MCP 领域正在趋于统一。Coinbase 的 x402 规范有一个开放 PR(coinbase/x402 #2258),计划加入 bip122/exact,将 Bitcoin Lightning 结算纳入 x402。这意味着,在未来 30 到 60 天内,付费 MCP 端点的支付轨道选择将取决于钱包支持能力。
如果你现在上线却只选择一种支付轨道,未来一半的客户端都会无法使用。如果你部署两种服务,则要为相同的收入承担双倍的运维负担。
这个中间件提供了第三种选择。它会在 402 挑战中公布两种支付轨道,接受调用方发送的任意一种,并将两者都结算到同一个 LNBits Lightning 钱包。现有的 L402 客户端可以继续使用。新的 x402 客户端也能使用。只需部署一次。
状态
截至 v0.2.0,两种支付轨道均已启用。
- L402 轨道:默认将验证请求转发到
${POW_GATE_URL}/v1/verify。为确保完整兼容性,建议通过@powforge/mcp-l402-gate在进程内执行生产级验证(本软件包不会重复实现 macaroon 铸造或 HMAC 代码)。 - x402 轨道:根据 x402-foundation/x402 PR #1311 规范实现完整的 10 步
bip122/exact验证器,并通过 PR #1873 中的 Python 参考实现交叉校验。通过配置的 LNBits 后端铸造真实的 BOLT11 发票,使用light-bolt11-decoder对其解码,验证 scheme / network / asset / payTo / paymentMethod / 发票一致性 / 过期时间 / 精确的 msat 金额,通过内存结算缓存拦截重放,并通过 LNBits 付款检查确认付款。成功后,在PAYMENT-RESPONSE标头中返回 base64SettlementResponse。29 项测试通过(12 项中间件测试 + 17 项验证器单元测试)。
延后至 v0.3.0:进行中的 HTLC 检测、BOLT12 offers、多实例结算缓存(Redis 后端)。
如果你现在需要仅支持 L402 的支付门控,专注于此功能的产品是 @powforge/mcp-l402-gate——提供完整的 L402 验证、防重放和 DoI 评分门控。本软件包则是双轨选项,适用于通过一个 LNBits 钱包同时服务旧版 L402 和向前兼容的 x402 客户端的运营方。
要求
- Node >= 18
- 一个 LNBits 钱包(URL + 发票/读取 API 密钥),用于实际结算
- 如果使用默认的 L402 验证转发器,则需要一个可访问的
POW_GATE_URL
五行集成(Express)
const express = require('express');
const { mcpPayGateMiddleware } = require('@powforge/mcp-pay-gate');
const app = express();
app.use('/tools/expensive', mcpPayGateMiddleware({
satsAmount: 10,
}));
app.post('/tools/expensive', (req, res) => {
// Reached only when the caller settled via L402 or x402.
res.json({ ok: true, rail: req.payAuth.rail });
});
行为
| 调用方发送 | 中间件行为 |
|---|---|
无 Authorization 标头 | 返回 402,包含两个 WWW-Authenticate 标头(一个 L402,一个 x402),并在 JSON 正文中列出两种支付轨道 |
Authorization: L402 <token> | 调用 verifyL402Fn(token)。成功时:req.payAuth = { rail: 'l402', payload },然后调用 next()。失败时:返回 401 |
Authorization: x402 <payload> 或 X-PAYMENT: <payload> | 解码 base64 PaymentPayload,运行 10 步 bip122/exact 验证器(scheme / network / asset / payTo / paymentMethod / 发票一致性 / BOLT11 解码 / 过期时间 / 精确的 msat 金额 / 重放缓存 + LNBits 付款检查)。成功时:req.payAuth = { rail: 'x402-bip122-exact', paymentHash, amountMsat, payload },设置 PAYMENT-RESPONSE 标头,然后调用 next()。失败时:返回 402 和两种挑战,供调用方重试或回退 |
| 未知 scheme | 返回 402 和两种挑战 |
配置参考
| 字段 | 默认值 | 说明 |
|---|---|---|
gateUrl | process.env.POW_GATE_URL 或 https://gate.powforge.dev | 默认用于 L402 验证转发器 |
priceMsat | 3000(3 sats) | 在 x402 PaymentRequirements 中公布的精确毫聪金额 |
network | bip122:000000000019d6689c085ae165831e93(mainnet CAIP-2) | x402 挑战网络 |
scheme | exact | x402 挑战方案(依据 PR #1311) |
payTo | anonymous | x402 PaymentRequirements 的 payTo(发起挑战时,Lightning 没有链上目标地址) |
lnbits.url、lnbits.apiKey | 无 | 默认 x402 发票生成和付款检查所必需;可通过传入自定义 invoiceFn 和 checkPaidFn 接口替换 |
verifyL402Fn | 转发至网关 /v1/verify | 可覆盖此项,以接入 @powforge/mcp-l402-gate 的进程内验证 |
verifyX402Fn | 完整的 10 步 bip122/exact 验证器(BOLT11 解码 + 重放缓存 + LNBits 付款检查) | 仅在需要替换非 LNBits 后端时覆盖 |
settlementCache | 带 24 小时 TTL 和机会式清理的内存 Map | 多实例部署时可替换为 Redis 后端缓存(推迟至 v0.3.0) |
本项目不是什么
- 这不是 macaroon 生成器。如果你希望 PowForge 在进程内生成并验证 L402,请搭配使用
@powforge/mcp-l402-gate。 - 这不是 LNBits 客户端。它不会自行创建发票或检查付款状态;这些工作由验证函数负责。
- 这不是 DoI 评分门控。如果你希望在付款之外添加基于身份评分的访问控制,请将其与
@powforge/mcp-l402-gate或@powforge/mcp-identity组合使用。
此软件包的作用是提供双轨挑战响应和请求路由结构。接入你自己的实际验证功能即可。
路线图
- v0.1(已发布):脚手架。双轨挑战、L402 验证转发器、x402 存根。
- v0.2(当前):依据 PR #1311 规范,完整支持 x402
bip122/exact验证。实际 LNBits 发票生成、BOLT11 解码、内存重放缓存、10 步验证器、29 项测试。 - v0.3(计划中):正在处理的 HTLC 检测(Retry-After)、BOLT12 offers、多实例部署用的 Redis 后端结算缓存。
许可证
MIT。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。