MCPay
MCPay 位于 AI 代理与 MCP 服务器之间。代理会收到一个绑定到单一服务器的短期支出令牌,其中包含固定的操作列表、精确价格、预算、过期时间和 nonce 范围。网关验证该策略,原子性地声明 nonce,调用上游工具,然后将成功交付的 2xx 用量记录到持久化 outbox 中。
无需为每个工具订阅。代理内不存放创作者 API 密钥。不使用浮点数处理金钱。
测试版状态: 本仓库运行一个封闭的、不涉及真实资金的测试版。钱包充值仅为测试账本信用;Stripe 存款、创作者提现、KYC/AML、争议处理和税务工作流暂未包含。
代理创建一个由预留钱包余额支撑的支出会话。
MCPay 对确切的服务器、操作价格、预算、过期时间和 nonce 范围进行签名。
网关在分发前验证令牌并在 PostgreSQL 中声明 nonce。
已交付的
2xx响应进入本地 bbolt outbox 并异步结算。
本仓库包含 Go API、网关、结算工作器、PostgreSQL 迁移、创作者仪表盘、JavaScript 和 Python SDK、浏览器测试,以及 Docker Compose 测试版堆栈。真实存款和提现功能被有意禁用。
产品导览
控制平面展示预留的代理预算、创作者收入、付费调用量、本地授权延迟以及最近的结算活动。
截图使用固定的文档数据集。这些数字并非生产环境指标。
Related MCP server: MCP Gateway
MCPay 存在的原因
一个调用十个付费工具的代理,不应该需要十个订阅、十个计费 SDK 和十个长期密钥。一个创作者在收取 web_search 五美分之前,也不应该先编写预留逻辑、重放保护、价格检查、收据存储和结算工作器。
MCPay 在执行前将支出契约明确化:
策略 | 绑定到每个支出会话 |
资金去向 | 一个 |
代理可以调用什么 | 操作名称允许列表 |
每次调用花费多少 | 不可变的 |
最大风险敞口 | 预留预算和每次调用的最高价格 |
重放边界 | nonce 起始/结束范围,带分布式原子声明 |
有效期 | 签名的过期时间戳和在线撤销检查 |
如果声明与活动会话不匹配,网关会在上游看到请求之前停止。
对比
MCPay | API 密钥加自定义计费 | 集中计费代理 | 按工具订阅 | |
代理获得有边界的支出授权 | 是 | 需要自行构建 | 有时 | 否 |
精确价格签名到会话中 | 是 | 需要自行构建 | 因提供商而异 | 否 |
跨网关重放保护 | PostgreSQL 原子声明 | 通常缺失 | 取决于提供商 | 不适用 |
工具处理器拥有支付代码 | 否 | 是 | 部分 | 是 |
已交付的 | bbolt outbox | 需要自行构建 | 提供商拥有 | 提供商拥有 |
自托管控制平面 | 是 | 是 | 通常否 | 否 |
跨创作者共享一个钱包 | 为此设计 | 无共同契约 | 平台特定 | 否 |
源码可审计 | 是 | 仅你的代码 | 通常否 | 通常否 |
结账是最简单的部分。MCPay 处理有边界的授权、跨主机重复抑制、不可变价格、撤销排序、已接受用量的持久化交付,以及可重试的结算。
请求路径
sequenceDiagram
participant A as Agent
participant C as MCPay API
participant G as MCPay Gateway
participant P as PostgreSQL
participant T as MCP Tool
participant W as Settlement Worker
A->>C: Create spend session
C->>P: Reserve budget and store price snapshot
C-->>A: Ed25519-signed spend token
A->>G: tools/call + token + nonce
G->>G: Verify issuer, server, action, price, expiry
G->>P: Atomic nonce claim
P-->>G: Active and unique
G->>P: Mark nonce dispatched
G->>T: Execute tool
T-->>G: Result
G-->>A: Result
G->>G: Persist delivered 2xx usage in bbolt outbox
G->>C: Upload usage batch
C->>P: Insert idempotent usage record
W->>P: Settle creator credit控制平面调用发生在分发之前,因为仅离线的重放保护无法协调两台网关机器,也无法阻止已撤销的会话。签名检查仍在本地进行,因此格式错误或超出范围的令牌永远不会到达数据库声明阶段。
安全模型
MCPay 不会把签名的 JWT 称为"加密"。它不是。支出令牌携带可读的声明,并使用 Ed25519 签名,使网关无需持有签名密钥即可检测任何修改。
边界 | MCPay 的做法 |
支出令牌 | Ed25519 签名;API 持有私钥,网关仅接收公钥 |
浏览器认证 |
|
密码存储 | bcrypt 哈希,绝不存储明文密码 |
邀请码和会话令牌 | 以 SHA-256 哈希存储在 PostgreSQL 中 |
网关凭据 | HMAC-SHA-256 签名、带版本号、限定单一服务器 |
公共传输 | 显式本地开发模式之外要求 HTTPS |
内部 Docker 流量 | Caddy 与 API 之间使用私有 CA 和 TLS |
资金状态 | 整数最小货币单位、仅追加账本事件、可串行化事务、确定性幂等键 |
重放控制 | 两阶段 PostgreSQL nonce 声明,带短时分发前租约,然后进入不可重用的已分发状态 |
用量交付 | 已交付的 |
HTTP 转发 | 阻止重定向、移除逐跳头、剥离转发头、应用请求大小和时间限制 |
代理令牌注入 | HTTPS 加显式网关来源允许列表;支出头不会添加到任意 URL |
这里的静态加密意味着什么
MCPay 不会对账本行添加应用层字段加密。PostgreSQL 凭据、签名密钥、网关密钥和备份应存放在你的密钥管理器和加密存储中;托管 PostgreSQL 或加密主机卷应保护数据库文件的静态数据。这一区别很重要,因为声称"一切皆加密"会掩盖实际的信任边界。
对于测试版部署,请将 PostgreSQL 和工作器放在私有网络上,在 Caddy 处终止公共 TLS,在运行时挂载密钥,在迁移前备份,并且绝不提交 deploy/.env.beta。
本地运行
要求:带 Compose v2 的 Docker Engine、用于密钥生成的 Go 1.25+,以及 4 GB 可用内存。Node.js 24 在仪表盘构建容器内运行。
cp deploy/.env.beta.example deploy/.env.beta
go run ./cmd/mcpay-keygen将生成的 Ed25519 值粘贴到 deploy/.env.beta 中,替换所有 replace-* 值,然后启动堆栈:
docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml config
docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml build
docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml up -d
docker compose --env-file deploy/.env.beta -f deploy/compose.beta.yml ps打开 http://localhost:8080。compose 堆栈会启动 PostgreSQL、迁移、API、工作器、仪表盘、Caddy 和内部 TLS。测试充值仍为虚拟信用。
检查运行中的堆栈:
MCPAY_BETA_URL=http://localhost:8080 ./scripts/verify-central-beta.shPowerShell:
./scripts/verify-central-beta.ps1 -BaseUrl http://localhost:8080部署说明、备份、DNS 以及 Vercel/Supabase 选项见 docs/central-beta-runbook.md 和 docs/beta-deployment.md。
连接 MCP 服务器
在创作者工作室中创建服务器和操作,签发其服务器范围的网关凭据,然后在 MCP 进程旁边从仓库运行网关:
go run ./cmd/mcpay-gateway \
--target https://your-mcp-server.example \
--mcp-path /mcp \
--server-id srv_example \
--environment beta \
--token-issuer mcpay.beta \
--public-key "$MCPAY_PUBLIC_KEY" \
--control-plane-api https://api.example/v1/gateway/servers/srv_example \
--nonce-claim-api https://api.example/v1/gateway/nonces/claim \
--usage-api https://api.example/v1/usage-records \
--usage-api-token "$MCPAY_GATEWAY_API_TOKEN" \
--state-file ./mcpay-gateway.db付费请求携带两个头:
Authorization: Bearer <spend-token>
X-MCPay-Nonce: <nonce-within-the-signed-range>网关在将请求转发到上游之前会移除这两个头。
连接代理
MCPayAgentClient 创建短期会话,并且只向允许列表中的 HTTPS 网关来源注入支付头:
import {
FileAgentSessionCreationStore,
MCPayAgentClient,
} from "@mcpay/sdk-js";
const paid = new MCPayAgentClient({
apiBaseUrl: "https://pay.example.com/api/mcpay",
accessToken: process.env.MCPAY_ACCESS_TOKEN!,
walletId: process.env.MCPAY_WALLET_ID!,
serverId: process.env.MCPAY_SERVER_ID!,
reservedBudget: 50,
gatewayOrigins: ["https://tools.example.com"],
sessionCreationStore: new FileAgentSessionCreationStore(
"./mcpay-agent-sessions.json",
),
});
const response = await paid.fetch("https://tools.example.com/mcp", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "tools/call",
params: {
name: "web_search",
arguments: { query: "payment rails for MCP" },
},
}),
});初始化和工具发现无需支出头即可通过。会话创建使用幂等键,因此丢失响应不会重复预留预算。
直接 SDK 包装器
JavaScript 和 Python 包装器可用于开发和私有集成。生产模式拒绝易失性使用;持久化网关仍是推荐的部署路径,因为它能在进程重启后保留 nonce 和使用状态。
import { MCPayClient } from "@mcpay/sdk-js";
const mcpay = new MCPayClient({
publicKey: process.env.MCPAY_PUBLIC_KEY!,
issuer: process.env.MCPAY_TOKEN_ISSUER!,
serverId: process.env.MCPAY_SERVER_ID!,
environment: "development",
allowVolatileUsage: true,
});
export const paidSearch = mcpay.tool({
name: "web_search",
priceMinor: 5,
handler: async (query: string) => search(query),
});import os
from mcpay import MCPayClient
mcpay = MCPayClient(
public_key=os.environ["MCPAY_PUBLIC_KEY"],
issuer=os.environ["MCPAY_TOKEN_ISSUER"],
server_id=os.environ["MCPAY_SERVER_ID"],
environment="development",
allow_volatile_usage=True,
)
@mcpay.tool(name="web_search", price_minor=5)
async def search(query: str):
return await run_search(query)验证
主分支检查 Go、PostgreSQL 集成、迁移、两个 SDK、浏览器测试、包构建、依赖审计以及 Docker Compose 配置。
go test ./...
go test -race ./...
go vet ./...
go build ./cmd/...
npm ci
npm audit --audit-level=high
npm run build
npm run test
python -m pip install build
python -m build packages/sdk-python
python -m unittest discover -s packages/sdk-python/tests对于 PostgreSQL 测试,请将 MCPAY_TEST_DATABASE_URL 指向一个已迁移的一次性数据库。测试会清空应用表;切勿使用生产数据库。
运行回环授权基准测试:
go run ./cmd/mcpay-benchmark --samples 1000 --warmup 100它会在你的机器上报告原始、本地 SDK 和网关的 p50/p95/p99。该基准测试不包含会话设置、中央账本写入和异步使用量上传,因此它不代表生产 SLA。
当前交付内容
测试版已提供 | 真实资金上线前仍需完成 |
邀请制账户和虚拟 USD 钱包 | Stripe 或银行充值集成 |
带不可变价格快照的服务器/操作目录 | 创作者付款和付款对账 |
签名消费会话和在线撤销 | KYC/AML、制裁、争议和税务处理 |
跨网关主机的分布式 nonce 声明 | 带 |
针对成功送达的 | 生产监控、告警、备份演练和事件响应手册 |
创作者收据、分析和测试充值 | 每个上线司法辖区的法律审查 |
MCPay 已准备好以测试积分进行受控测试版运行。它尚未准备好持有客户资金。
仓库结构
路径 | 用途 |
| HTTP 控制面处理器和身份验证 |
| 创作者和代理预算仪表板 |
| 持久化 Go API 进程 |
| 付费 MCP 和 HTTP 反向代理 |
| 结算、重试、对账和过期循环 |
| PostgreSQL 资金和使用事务 |
| 授权代理和 bbolt 状态 |
| 消费声明和 Ed25519 令牌代码 |
| 代理客户端和 JavaScript 付费工具包装器 |
| Python 异步付费工具包装器 |
| 有序的 PostgreSQL 模式变更 |
许可证
MCPay 使用 Business Source License 1.1。BSL 不是 OSI 批准的开源许可证,但它让每个人都能访问源代码,并允许复制、修改、再分发和非生产使用。
MCPay 附加使用授权允许用户或组织在前 12 个月内总毛收入不超过 100,000 美元时进行内部生产使用。它不允许为第三方提供托管、管理、嵌入或白标 MCPay 服务。超出该授权的生产使用需要商业许可证;请在官方仓库中提交 issue 以申请商业条款。
在 2030 年 8 月 13 日,此版本将变更为 Apache License 2.0。如果某个版本首次公开 BSL 分发的四周年日期更早,BSL 也会在该日期适用其开源变更许可证。
请阅读 LICENSE 了解具有约束力的条款。仪表板在 apps/dashboard/LICENSE 下以 MIT 许可证单独分发,包括对其上游作者和 MCPay 修改的署名。在真实资金上线或融资尽职调查之前,请让法律顾问审查 BSL 参数。
欢迎进行安全研究。源代码访问使审查成为可能;但这并不证明不存在漏洞,且 BSL 在无安全保证的情况下提供该软件。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP Gateway: wrap any MCP server with cold-start retries, uptime SLA, and per-execution MPP billing.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
- nexusOAuth
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Related MCP Servers
- FlicenseCqualityDmaintenanceA powerful gateway for the Model Context Protocol (MCP) that unifies AI toolchains by federating multiple MCP servers, wrapping REST APIs as MCP tools, and supporting multiple transport methods with an admin dashboard.1
- AlicenseNot gradedqualityDmaintenanceA production-ready unified entry point for AI agents that implements the Model Context Protocol (MCP). It provides a secure gateway with rate limiting, authentication, and observability for managing and proxying requests to multiple downstream APIs.MIT
- AlicenseAqualityBmaintenanceSecurity, cost, and health governance proxy for MCP infrastructure. Enforces YAML-configurable security policies (blocklists, rate limits, token budgets), tracks real token costs via tiktoken, monitors server health with live JSON-RPC probes. Features OAuth 2.1/OIDC with RBAC, web dashboard, payload normalization, semantic shell AST analysis, mTLS, and a formal STRIDE threat model.41933MIT
- FlicenseNot gradedqualityBmaintenanceBridges stdio Model Context Protocol (MCP) servers to MCP Streamable HTTP behind a single gateway, enabling multi-tenant, multi-user deployment with per-tenant environment variables via HTTP headers.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yiaany/MCPay'
If you have feedback or need assistance with the MCP directory API, please join our Discord server