A couple of months ago I shipped ForgePoint Signal — a regulatory monitoring MCP server with x402 micropayments on Base mainnet. The first post was about what I built and how. This one is the harder one: what I learned, what I got wrong, and the part of the build that's actually portable.
If you're sitting on a data feed and wondering whether you can monetize it directly to AI agents — this is for you.
The Build Pattern
Strip the domain off Signal and what's left is a five-step pipeline anyone with a useful data source can run:
public/private data source
↓ (GitHub Actions cron)
Claude — parse + summarize + classify
↓
Supabase — idempotent storage, keyed on source URL
↓
MCP server — hosted on Vercel, exposes tools
↓ (x402 middleware)
USDC payments on Base mainnet — no API keys, no accounts
That's it. Five layers. Each one is independently swappable. The cron can be GitHub Actions, AWS EventBridge, a hosted scheduler — whatever. The parser doesn't have to be Claude. The store doesn't have to be Supabase. The MCP layer is standardized by spec. The payment layer is x402, which is itself protocol-agnostic about the chain underneath.
What makes the pattern interesting is that it's the first time I've shipped infrastructure where the payment is the auth. No signup flow. No API key issuance. No Stripe webhook reconciliation. An agent calls a tool, the server returns 402 with the price, the agent signs a USDC transfer, retries with the payment header, gets the response. The user never logs in. The agent never asks for credentials. The whole identity question collapses into "did this wallet pay."
Three Things That Surprised Me
Middleware ordering matters more than the docs make it sound.
The x402 verifier has to run before the MCP tool dispatcher. Run it after, and you end up either letting unauthenticated calls through on retries or double-charging. I got this wrong on the first deploy — saw the symptom before I understood the cause. If you're wiring this yourself, draw out the request lifecycle on paper before you trust the framework defaults.
Per-call price elasticity is non-linear.
I priced everything at $0.10 USDC and assumed agents would just pay or not pay. What I'm actually seeing: agents balk at >$0.05 on repeat reads of the same data, but happily pay $0.50+ for a one-shot deeper analysis. Repeat-read pricing and one-shot analysis pricing are different products and probably want different price points. Most pricing writeups I've read assume flat-rate. That's not what the data on a live mainnet endpoint shows.
Discoverability is the real grind, not the build.
The pipeline took roughly two weekends. Getting agents to actually find and call the server — getting it listed in Smithery, mcp.so, Glama, mcp.directory, the x402 ecosystem registry — has been a much longer slog. Anyone telling you "ship and they will come" is either lying or has an audience already. The build is the easy part.
What I Got Wrong
The first version of this project was positioned for estate attorneys. Federal Register monitoring, parsing changes that affect estate planning practice, charging a subscription. The technical artifact shipped fine. The positioning didn't. Estate attorneys aren't the people who naturally end up on a dev.to post about MCP servers. They're not the people who comment on x402 GitHub discussions. They don't read the IndieHackers feed.
The actual people who keep showing up — in comments, in DMs, in GitHub issues I land in — are other technical solo builders sitting on their own data feeds. They built something, they shipped an MCP wrapper, they're staring at the monetization layer wondering whether to use Stripe or x402 or punt on the question entirely. They're me, six months ago, with a different dataset.
That changes the posture. Signal stays running because it's a working production proof of the pattern, not because it's a product. The thing I'd actually want to help build is the next version of your monetized data feed.
What's Reusable
The skeleton in this repo is roughly 80% portable to any public-data domain:
The cron + idempotent storage layer is general-purpose
The Claude parse step needs domain-specific prompts but the structure transfers
The MCP server scaffolding is identical across projects (the spec is what makes it identical)
The x402 middleware is identical across projects
The deploy pipeline (Vercel + Supabase + GitHub Actions) is the same
What's not reusable is the domain knowledge — what counts as a useful signal in regulatory tax data is different from what counts as useful in, say, sports stats or scientific paper deltas or municipal procurement filings. That's the actual insight you bring.
What I'd Do Differently
If I were shipping this stack again from scratch:
Wire the x402 middleware first, before the data ingest works at all. Build the payment loop end-to-end on a stub tool that returns "hello world." Get the receipt. Then layer the actual data work on top. Most of the painful debugging I did was in the payment loop, which I tried to wire last after the data was already flowing.
Cache the facilitator response shapes. The Coinbase facilitator and PayAI facilitator emit subtly different schemes; if you switch between them later you'll be glad you abstracted the parsing.
Write the discoverability tasks (registry submissions, MCP client config snippets, post drafts) into the same checklist as the deploy. Treat distribution as part of "shipped," not "what I'll do later."
If You're Building This Too
If you're reading this because you're shipping or considering shipping a similar stack — cron + parse + MCP + x402 — I'd genuinely like to compare notes. What's your data source? Where are you stuck? What facilitator are you using? Drop a comment, or hit me on dev.to.
ForgePoint Signal is still live at forgepointsignal.com. The MCP endpoint is at forgepointsignal.com/mcp. preview_regulations is free; the rest are metered at $0.10 USDC on Base mainnet. If you want to point your own MCP client at it as a reference and watch a real x402 payment loop, that works.
Tools list, if you're plugging it into Claude Desktop or any MCP client:
preview_regulations — free
get_recent_regulations
get_regulation_detail
search_regulations
Connection config:
{"mcpServers":{"forgepoint-signal":{"url":"https://forgepointsignal.com/mcp"}}}
Top comments (0)