关于 argentina-price-index
这是一个 Cloudflare Worker 沙盒演示,用于展示通过付费请求提供阿根廷食品和饮料价格指数的流程。当前指数基于合成占位数据,支付也由共享密钥 HMAC 模拟,因此不代表真实价格或链上结算。
主要功能
- 01提供免费最新指数摘要
- 02付费接口返回每日指数序列
- 03通过 402 挑战模拟付款后重试
- 04以 MCP over HTTP 暴露两个工具
- 05使用合成数据演示指数计算
适用场景
- 01测试 Agent 发起付费数据请求的流程
- 02演示 402 挑战、付款和重试交互
- 03在本地验证 MCP 工具调用
- 04探索边缘 Worker 上的按请求收费模式
MCP 相关
Worker 在 `/mcp` 提供简化的 MCP over HTTP 接口,包含免费摘要工具和付费指数序列工具。付款由模拟的 HMAC 挑战流程处理。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://api.oscar-lopez.com/mcpclaude mcp add --transport http oscarlopez-gif-argentina-price-index https://api.oscar-lopez.com/mcp{"mcpServers":{"oscarlopez-gif-argentina-price-index":{"type":"http","url":"https://api.oscar-lopez.com/mcp"}}}在 Cursor 中打开{"servers":{"oscarlopez-gif-argentina-price-index":{"type":"http","url":"https://api.oscar-lopez.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"oscarlopez-gif-argentina-price-index":{"type":"http","url":"https://api.oscar-lopez.com/mcp"}}}{"mcpServers":{"oscarlopez-gif-argentina-price-index":{"serverUrl":"https://api.oscar-lopez.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
3| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| method | enum | 否 | jevons | carli | trimmed |
| category | string | 否 |
详细介绍
Paid Door — 阿根廷食品与饮料价格指数(Cloudflare 沙盒)
对视频核心机制的精简可运行测试:一次 Agent 请求在边缘变成一笔付费交易。 Cloudflare Worker 从 D1 实时计算价格指数,并通过 x402 风格的 402 → pay → retry → data 循环进行访问控制。支付经过模拟(使用共享密钥 HMAC),因此整个流程无需设置钱包即可运行;改用真正的 x402 只需局部调整。
数据为合成数据。
seed/observations.sql是生成的占位数据,让演示能在真实抓取程序上线前运行。请勿将这些数字视为阿根廷的真实价格。
内容一览
paid-door-index/
├─ wrangler.jsonc # Worker + D1 binding + sandbox vars
├─ schema.sql # price_observations + methodology (+ future index_series cache)
├─ seed/
│ ├─ generate.mjs # deterministic synthetic data generator (60 SKUs x 30 days)
│ └─ observations.sql # generated seed (1,800 rows)
├─ src/index.ts # Worker: routes + live index math + mock x402 gate
├─ agent/test-agent.mjs # the paying "buyer": request → 402 → pay → retry → data
└─ README.md
端点
| 端点 | 层级 | 返回内容 |
|---|---|---|
GET /v1/headline?country=AR&category=food_beverages | 免费 | 最新指数值 + 月度变化率(预览) |
GET /v1/index?country=AR&category=food_beverages | 付费($0.02) | 完整的每日序列 |
GET /v1/latest?country=AR&category=food_beverages | 付费($0.02) | 最新读数 + 方法说明 |
POST /mcp | — | MCP JSON-RPC:initialize、tools/list、tools/call |
MCP 接口(Agent 实际调用的内容)
Worker 还通过 /mcp 使用 HTTP 上的 MCP,并公开两个工具:
get_ar_food_headline(免费)——最新值 + 30 天变化率get_ar_food_price_index(付费,$0.02 mock-x402)——完整的每日序列;先在不带_payment的情况下调用一次以接收挑战,然后使用arguments._payment = {nonce, resource, amount, signature}重试
在本地运行完整的 Agent 流程(运行 npm run dev):
npm run agent:mcp # initialize → tools/list → free call → paid call (challenge → pay → data)
**生产环境说明:**这里的
/mcp是 Streamable HTTP 传输的精简 JSON 请求/响应子集(不含 SSE、会话或身份验证)。如需实际部署,请使用官方 MCP SDK 或 Cloudflare 的agentsMcpAgent,并将模拟 HMAC 替换为真正的 x402 facilitator。
指数计算方式(methodology_version = v0-simple-avg):对于有库存的 SKU,index = 100 × mean(price_t / price_base),基期 = 窗口中的第一天。架构中已预留升级路径:类别内使用几何平均数,类别间使用 Laspeyres 指数。
在本地运行
前置条件:Node 18+ 和 Cloudflare 账户(npx wrangler login)。
cd paid-door-index
npm install
# 1. Create the D1 database, then paste the printed database_id into wrangler.jsonc
npm run db:create
# 2. Load schema + seed into LOCAL D1
npm run schema:local
npm run seed:gen # (optional) regenerate observations.sql
npm run seed:local
# 3. Start the Worker
npm run dev # serves http://127.0.0.1:8787
# 4. In a second terminal, run the paying agent
npm run agent
预期的 Agent 输出:先得到免费的预览,然后收到带价格挑战的 402,最后收到包含完整序列的 200 和 PAYMENT-RESPONSE 结算标头——一次请求变成一笔交易。
部署到你的账户
npm run schema:remote
npm run seed:remote
npm run deploy
# then point the agent at the deployed URL:
BASE=https://paid-door-index.<your-subdomain>.workers.dev npm run agent
使用 npx wrangler tail 查看实时日志。
从沙盒走向真实环境(后续工作)
- **真实数据:**将
seed/generate.mjs替换为定时运行的 Worker,每天抓取 1–2 家阿根廷在线杂货店的数据,并写入price_observations。 - **真实支付:**将
src/index.ts中的 HMAC 模拟(verifyPayment/challenge)替换为真正的 x402 facilitator(POST /verify、POST /settle),并遵循 Cloudflare 的 Agents x402 文档。 - **迁移密钥:**使用
npx wrangler secret put MOCK_PAYMENT_SECRET,而不是明文变量。 - 公开为 MCP,让任何 AI Agent(包括此助手)都能直接调用
get_index。 - 物化
index_series,在查询量增长后将其作为每晚更新的缓存。
说明 / 注意事项
- 模拟支付只能证明调用方知道共享密钥——它不是链上的密码学结算。它仅用于演示请求/响应格式。
- 沙盒中没有防重放保护(任何有效签名都可以重复使用)。真正的 x402 结算会处理这一问题。
- 合成月度变化率有意加入了较大噪声;单个网点的通胀读数会有波动,这本身就是一个很好的课堂讨论点。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。