About argentina-price-index
A Cloudflare Worker sandbox demonstrating a paid-request flow for an Argentina food and beverage price index. The index uses synthetic placeholder data, and payment is simulated with shared-secret HMAC, so neither the prices nor the payment represent real-world data or settlement.
Key features
- 01Serves a free latest-index headline
- 02Returns a daily series through a paid endpoint
- 03Simulates payment challenge and retry with 402
- 04Exposes two tools over MCP HTTP
- 05Demonstrates index calculations on synthetic data
Use cases
- 01Test an agent’s paid data-request flow
- 02Demonstrate a 402 challenge, payment, and retry
- 03Exercise MCP tool calls locally
- 04Explore per-request charges on an edge Worker
MCP support
The Worker exposes a minimal MCP over HTTP interface at `/mcp` with a free headline tool and a paid index-series tool. Payment uses a simulated HMAC challenge flow.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
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"}}}Open in Cursor{"servers":{"oscarlopez-gif-argentina-price-index":{"type":"http","url":"https://api.oscar-lopez.com/mcp"}}}Open in 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"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
3| Parameter | Type | Required | Description |
|---|---|---|---|
| method | enum | No | jevons | carli | trimmed |
| category | string | No |
Details
From the project READMEPaid Door — Argentina food & beverage price index (Cloudflare sandbox)
A minimal, working test of the video's core mechanic: one agent request becomes a paid transaction at the edge. A Cloudflare Worker serves a live-computed price index from D1, gated by an x402-style 402 → pay → retry → data loop. Payment is mocked (shared-secret HMAC) so the whole loop runs with zero wallet setup; swapping in real x402 is a localized change.
Data is synthetic.
seed/observations.sqlis generated placeholder data so the demo runs before a real scraper exists. Do not treat the numbers as real Argentine prices.
What's here
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
Endpoints
| Endpoint | Tier | Returns |
|---|---|---|
GET /v1/headline?country=AR&category=food_beverages | free | latest index value + monthly rate (the teaser) |
GET /v1/index?country=AR&category=food_beverages | paid ($0.02) | full daily series |
GET /v1/latest?country=AR&category=food_beverages | paid ($0.02) | latest reading + methodology |
POST /mcp | — | MCP JSON-RPC: initialize, tools/list, tools/call |
MCP interface (what agents actually call)
The Worker also speaks MCP over HTTP at /mcp, exposing two tools:
get_ar_food_headline(free) — latest value + 30-day rateget_ar_food_price_index(paid, $0.02 mock-x402) — full daily series; call once with no_paymentto receive a challenge, then retry witharguments._payment = {nonce, resource, amount, signature}
Test the full agent flow (with npm run dev running):
npm run agent:mcp # initialize → tools/list → free call → paid call (challenge → pay → data)
Production note:
/mcphere is a minimal JSON request/response subset of the Streamable HTTP transport (no SSE/sessions/auth). For a real deployment use the official MCP SDK or Cloudflare'sagentsMcpAgent, and replace the mock HMAC with a real x402 facilitator.
Index math (methodology_version = v0-simple-avg): index = 100 × mean(price_t / price_base) over in-stock SKUs, base = first day in the window. Upgrade path baked into the schema: geometric mean within category + Laspeyres across categories.
Run it locally
Prereqs: Node 18+ and a Cloudflare account (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
Expected agent output: the free headline, then a 402 with a price challenge, then a 200 with the full series and a PAYMENT-RESPONSE settlement header — one request turned into a transaction.
Deploy to your account
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
Watch live logs with npx wrangler tail.
Sandbox → real (later)
- Real data: replace
seed/generate.mjswith a scheduled Worker that scrapes 1–2 Argentine online grocers daily intoprice_observations. - Real payment: replace the HMAC mock in
src/index.ts(verifyPayment/challenge) with a real x402 facilitator (POST /verify,POST /settle) per Cloudflare's Agents x402 docs. - Move the secret:
npx wrangler secret put MOCK_PAYMENT_SECRETinstead of the plain var. - Expose as MCP so any AI agent (including this assistant) can call
get_indexdirectly. - Materialize
index_seriesas a nightly cache once query volume grows.
Notes / caveats
- Mock payment proves knowledge of a shared secret — it is not cryptographic on-chain settlement. It exists only to exercise the request/response shape.
- No replay protection in the sandbox (any valid signature can be reused). Real x402 settlement handles this.
- The synthetic monthly rate is intentionally noisy; single-endpoint inflation reads jump around, which is itself a good classroom point.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.