mcpField
A
argentina-price-index

argentina-price-index

Remote
github.com/oscarlopez-gifDeveloper Tools0Updated 11w ago
Repository

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

  1. 01Serves a free latest-index headline
  2. 02Returns a daily series through a paid endpoint
  3. 03Simulates payment challenge and retry with 402
  4. 04Exposes two tools over MCP HTTP
  5. 05Demonstrates index calculations on synthetic data

Use cases

  1. 01Test an agent’s paid data-request flow
  2. 02Demonstrate a 402 challenge, payment, and retry
  3. 03Exercise MCP tool calls locally
  4. 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.

Endpointhttps://api.oscar-lopez.com/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

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
ParameterTypeRequiredDescription
methodenumNojevons | carli | trimmed
categorystringNo

Details

From the project README

Paid 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.sql is 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

EndpointTierReturns
GET /v1/headline?country=AR&category=food_beveragesfreelatest index value + monthly rate (the teaser)
GET /v1/index?country=AR&category=food_beveragespaid ($0.02)full daily series
GET /v1/latest?country=AR&category=food_beveragespaid ($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 rate
  • get_ar_food_price_index (paid, $0.02 mock-x402) — full daily series; call once with no _payment to receive a challenge, then retry with arguments._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: /mcp here 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's agents McpAgent, 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)

  1. Real data: replace seed/generate.mjs with a scheduled Worker that scrapes 1–2 Argentine online grocers daily into price_observations.
  2. 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.
  3. Move the secret: npx wrangler secret put MOCK_PAYMENT_SECRET instead of the plain var.
  4. Expose as MCP so any AI agent (including this assistant) can call get_index directly.
  5. Materialize index_series as 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

Markdown supported

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.