内容
# x402 服务
Yeetful 的 **x402 货币化服务**舰队 — 一个仓库,许多薄服务,
每个服务部署到自己的 Vercel 项目 + 子域名,所有服务共享一个
支付/发现工具包。代理商按每次调用支付 USDC 费用;无需 API 密钥。
```
packages/service-kit/ 共享 x402 v2 支付网关 + Bazaar 发现 + clean-path MCP 工厂
services/nansen/ Nansen 智能资金情报作为 MCP → nansen.yeetful.com/mcp
services/snapshot/ Snapshot DAO 治理作为 MCP → snapshot.yeetful.com/mcp
services/uniswap/ Uniswap 报价 + 兑换交易构建作为 MCP → uniswap.yeetful.com/mcp
```
> `anthropic-mcp` 目前位于自己的仓库中(已上线并赚钱)。新的
> 服务从这里开始。该工具包拥有支付线路,因此 x402 版本更新只需一个 PR,而不是 N 个仓库。
## 共享工具包 (`@yeetful/x402-service-kit`)
一个服务是一个薄适配器;该工具包提供:
- `loadX402Config()` — 环境变量驱动的支付/网络/价格/CDP 促进器。
- `createX402Proxy({ routeKey, description, discovery })` — Next-16 `proxy.ts`
支付网关函数(x402 v2,CDP 促进器在 Base,Bazaar 扩展)。
- `mcpDiscovery({ toolName, inputSchema, ... })` — 规范的 Bazaar 发现
模块(验证器的“输入模式存在”信号读取的内容)。
- `createCleanMcpHandler(register)` — MCP 处理程序在干净的 `/mcp`
(无 `/api/mcp/mcp` 重复),通过 `app/[transport]/route.ts` 提供。
## 清洁的 MCP 路径
每个 MCP 服务都暴露 `https://<service>.yeetful.com/mcp` (可流式传输的 HTTP)
和 `/sse`。处理程序位于 `app/[transport]/route.ts`,具有空的
基准路径,因此单个可见的 `/mcp` 是传输名称 — 而不是冗余的
`/api/mcp` 前缀。
## 在 Vercel 上部署(一个仓库 → 多个项目)
思维模型:一个 Vercel **项目** 指向该仓库中的一个 **文件夹**。
为每个服务创建项目:
1. 将此仓库推送到 GitHub。
2. Vercel → **添加新项目 → 项目 → 导入** 此仓库。
3. 将 **根目录** 设置为服务,例如 `services/nansen`。
Vercel 自动检测 Next.js + pnpm,安装整个工作区(因此
`@yeetful/x402-service-kit` 被解析),并仅构建该应用程序。
4. 添加服务的 **环境变量** (参见其 `.env.example`)— 只有该
服务的密钥生活在该项目中。
5. **域名** → 添加 `nansen.yeetful.com`。由于 `yeetful.com` 已经在
Vercel 上解析,因此只需点击一下(或一个 `CNAME → cname.vercel-dns.com` 如果 DNS
位于其他地方)。SSL 是自动的。
6. 为每个服务重复此过程。Turborepo 使 Vercel 跳过重建其文件
未更改的项目。
一个服务的部署失败不会影响其他服务 — 独立的项目,独立的
域名,独立的环境变量。
## 本地开发
```bash
pnpm install
pnpm --filter nansen-mcp dev # 或:cd services/nansen && pnpm dev
pnpm typecheck # 整个工作区
pnpm --filter nansen-mcp test # 支付网关 + 信息测试
```
复制 `services/<svc>/.env.example` → `.env` 并填写。`.env` 被 gitignore
— 永远不要提交真实的密钥。
## 保障措施
这里没有任何操作会移动真实的资金。服务持有其上游密钥服务器端并
按次收费;客户端永远不会看到密钥。转售第三方数据(例如
Nansen)可能受到该提供商的服务条款的限制 — 在公开列出之前请清除。