WebMCP is live on nader.io

26-09-03

Two panels. On the left, labelled 01 scraping, a grey wireframe of a web page with dashed lines probing in from outside, each ending in a small square and a question mark. On the right, labelled 02 calling, the same site as a list of eight green tool names, one unbroken green line running through search_site and ending in a filled square.

nader.io now speaks WebMCP.

WebMCP is a browser API that lets a page hand an agent a set of callable tools. Instead of screenshotting the DOM and guessing which link to click, an agent running in the browser asks the page what it can do, and the page answers with names, descriptions and typed arguments. It is the difference between being scraped and being called.

Eight tools are registered on every page here:

  • search_site for posts, projects, art and pages, ranked
  • list_posts and get_post for the writing, the second returning the full markdown
  • list_projects and list_art for everything in the playground
  • get_current_page for whatever is on screen right now
  • navigate for moving to another page on the site
  • get_contact_options for the booking link and the socials

Seeing it work

Open nader.io in Chrome 149 or later, or Edge 150 or later, and type this into the console:

await document.modelContext.getTools();

You get an array of eight tool definitions. Then run one:

const tools = await document.modelContext.getTools();
await document.modelContext.executeTool(
  tools.find((t) => t.name === 'search_site'),
  { query: 'bitcoin', limit: 3 }
);

Back comes JSON with titles, URLs, dates and summaries. No parsing, no selectors, nothing that breaks the next time I move a div.

An agent asked “what has Nader written about the Coldcard hack, and what was the conclusion” does the same thing in two steps. search_site with the query, then get_post on the slug it gets back, which returns the post as markdown. That is the whole interaction. It never renders the page.

The tools that return prose are marked with untrustedContentHint, so a well-behaved agent treats my writing as text to read rather than instructions to follow. navigate is the only one that changes anything, and it refuses any URL that is not on this site.

The whole thing is static. The tool catalogue and every post are plain JSON files generated at build time, sitting at /webmcp/manifest.json. Nothing runs on a server.

Where to read more

Chrome and Edge are running an origin trial, and ChatGPT’s browser supports it too. OpenAI’s guide is the clearest introduction I have found: https://learn.chatgpt.com/docs/webmcp

Thanks to Amit Shrivastava for putting WebMCP on my radar in the first place.