Inspiration

Atinamos Agent Shop already existed before this challenge. It was an experiment in whether one AI agent could actually find and buy a small service from another AI-facing service. I already had a catalogue, paid x402 endpoints, REST/OpenAPI and an external MCP endpoint. When the WebMCP Challenge appeared, the obvious question for me was, could we make the website itself usable by ChatGPT, rather than expecting the agent to know about our API or MCP server beforehand? The other question was payment! I didn't want WebMCP to suddenly mean that an agent could spend from a wallet without the person using it knowing what was happening. So the aim became quite simple, let the agent find the service, understand the price and request the work, but stop when money is required. The human should still control the payment.

What was built

The Agent Shop now exposes eight WebMCP tools from the live website. ChatGPT can list the services, inspect their inputs, check prices, search our observed service market, start a paid request and check the result afterwards. For the demo I used our JSON Validate / Repair service, which costs 0.005 USDC. ChatGPT sends deliberately broken JSON to the real service endpoint. The endpoint returns HTTP 402 because payment is required, at that point WebMCP stops. The request also appears in the Agent Activity panel on the website, where the human can choose to continue and pay using their own Base wallet. Once I approved the payment, x402 verifies and settles it, the existing JSON service runs, and the result becomes available to the agent and to the human result page. The important bit for me is that the agent can initiate the transaction without being given control of the wallet.

How it works

The existing Agent Shop is built with FastAPI and already had the service catalogue, paid routes, OpenAPI, MCP and x402 support. During the challenge we added browser-native WebMCP tools using

'document.modelContext.registerTool(...)'

The tools use the same live catalogue and endpoints as the rest of the service. We did not make a separate demo backend. I added the Agent Activity panel so the person using the site can see what the agent is doing and where the payment boundary has been reached. The responsibilities are deliberately split. The agent can discover, quote and request a service. The human connects the wallet and approves the payment. WebMCP does not hold wallet keys, sign the payment itself or automatically retry a paid request.

What went wrong along the way

Quite a lot of the useful work came from things not behaving as expected. I found that read-only WebMCP tools and the purchase tool did not always behave the same way between ChatGPT model configurations. The embedded browser could also lose state during the wallet hand-off, so safe request recovery was added. The first result viewer was too complicated and actually crashed the embedded browser. Rather than keep patching it, most of it was removed and that made the result button navigate to a simple dedicated result page. That ended up being much more reliable.

What I learned

The interesting part of WebMCP for me is not just that an agent can click fewer buttons. The website can actually tell the agent what it can do, what something costs and what inputs are required instead of asking the agent to infer all of that from HTML. The payment experiment also reinforced something i had already been thinking about with AI-agent commerce, the ability to act and authority to spend should not automatically be the same thing. This project now demonstrates that separation with a real payment and a real service rather than a mocked checkout.

What's next

I have other live services in the shop, including Render Check, Buyer Check and Technical SEO Crawl, so the same WebMCP pattern can be extended across those.

The wider experiment is still the same one that started Atinamos Agent Shop. Understanding how AI agents will actually discover, select, buy and verify small machine services in the real world.

Built With

Share this project:

Updates

Submission history