Rachel Lee's Agentic Web Publishing Framework
Turn any existing website into a multi-client experience that serves humans in browsers, humans using agents, and agents browsing autonomously — without rebuilding from scratch.
// TL;DR
Rachel Lee's Agentic Web Publishing Framework is an architecture for making any existing website serve three client types simultaneously: humans in browsers, humans using AI agents (like Claude Desktop), and autonomous agents browsing the web. It uses MCP tools, MCP Apps (interactive HTML bundles rendered inside agent harnesses), and Web MCP (browser-side tool registration for in-browser agents). Use it when you want your web content and functionality discoverable and usable inside AI agent surfaces without rebuilding your site from scratch.
// When should I use Rachel Lee's Agentic Web Publishing Framework?
Use this skill when you have an existing web property (site, app, archive, documentation, dashboard) and want to make its content and functionality accessible inside AI agent harnesses like Claude or Copilot, as well as to in-browser agents. Also use it when designing a new web project that must serve all three client types from day one.
// What inputs do I need to implement the Agentic Web Publishing Framework?
- Existing web property or project scoperequired
The website, archive, API, or web app you want to make agent-accessible. Describe its content types, navigation structure, and any existing APIs. - Target client typesrequired
Which of the three clients you are targeting: humans in browsers, humans using agents (e.g. Claude Desktop), agents browsing autonomously (e.g. in-browser agent). Can be one, two, or all three. - Existing design system or component library
Any shared CSS, fonts, or component bundles you already maintain. Used to build MCP Apps efficiently. - Content structure
How your content is organised — e.g. list/detail hierarchy, search indexes, transcript or text corpora, character or category taxonomies.
// What are the core principles behind the Agentic Web Publishing Framework?
Meet Them Where They Are
Your audience is already working inside agents. Do not wait for them to come back to your website — publish your content and tools into the surfaces they already inhabit. The web's job has always been to reach people wherever they are, and agents are the new 'wherever'.
One Server, Three Clients
A single backend should serve humans in browsers, humans operating agents, and agents operating browsers autonomously. Design your server to handle all three simultaneously rather than building separate experiences for each.
The Browser Is an Infinite Canvas
The browser is not a document reader. CSS, JavaScript, Web Speech, Canvas, WASM, Animation, Audio APIs — these are the language of interactive experiences on agents, not just on the web. Leverage these primitives inside MCP Apps to go beyond chat walls of text.
Chat Is the CLI of Agentic UX
A chatbox landing page — what Rachel calls the 'starfish design' — puts all the discovery burden on the user. Like the command line before the GUI, it is a transitional phase. Use MCP Apps and rich media to provide visual cues, structure, and guided navigation instead.
Tools Return More Than Data
MCP tools do not have to return JSON blobs. They can return interactive MCP Apps — single-file bundles of HTML, CSS, and JavaScript rendered inline inside the agent harness. Match the return type to what the user actually needs to do with the content.
// How do you apply the Agentic Web Publishing Framework step by step?
- 1
Audit your content and map it to tool shapes
List every navigation action a human would take on your site: list, search, filter, view detail, paginate. Each of these becomes a candidate MCP tool. Prefer tools that return structured JSON (lists, metadata) for data tools and Markdown for text-rich content like transcripts. Name tools to match what users would naturally ask for (e.g. list_comics, search_by_character, get_transcript, get_page).
- 2
Choose your transport layer
If your users are non-technical and you want zero config-file friction: use HTTP transport. The user pastes one URL into their agent harness settings and is done. If your use case is internal tooling or developer-only: stdio (Studio) transport is acceptable, but requires users to edit a JSON config with command-line arguments — a high friction UX. Default to HTTP for any public-facing MCP server. Host it at a clean endpoint like /mcp.
- 3
Define and implement your MCP tools
For each tool: write a clear description (the agent reads this to decide when to call it), define an input schema with only the fields truly required, and specify the return type. Keep tool count focused — expose the same conceptual surface area as your site's navigation, not every internal function. Avoid using MCP tools to inject large documentation corpora into context; that is what MCP Resources are for (even if client support is currently poor).
- 4
Build an MCP App for any tool that returns interactive or visual content
An MCP App is a single self-contained HTML file (HTML + CSS + JS bundled, e.g. with Vite single-file plugin). Add the meta attribute `ui` pointing to a URL on your server to make a tool return an app instead of raw data. The app is sandboxed in an iframe with no local storage and no direct network access. Share your existing design system (fonts, CSS) by configuring a CSP (Content Security Policy) that allows your own server's resources. Embed everything else as base64.
- 5
Handle MCP App constraints explicitly
Four constraints require deliberate handling: (1) External links — use the host-permission pattern (`appref current open_link`) not window.open or href. (2) External resources (fonts, images from other domains) — add them to the CSP config or they will silently fail. (3) Tool calls from inside the app — use `call_server_tool` for any action requiring server data; do not assume network access. (4) Tool visibility — for navigation tools called by the app itself that should not surface as text to the model, set `visibility: app` to prevent the model from attempting to narrate the JSON response.
- 6
Add Web MCP registration to your HTML pages for in-browser agents
Web MCP makes each HTML page a mini MCP tools server for agents operating inside browsers. For sites with forms: add `tool-name` and `tool-description` attributes to your form elements (declarative model). For sites driven by JavaScript / API calls: use `navigator.modelContext.registerTool(name, description, inputSchema, callbackFn)` (imperative model). The callback is the same function you already use for that action. Check `if (navigator.modelContext)` before registering — degrade gracefully for non-agent browsers. Note: Web MCP is inspired by but not spec-compliant with MCP. Treat them as parallel, not identical.
- 7
Leverage existing browser APIs inside MCP Apps to avoid unnecessary inference
Before reaching for an LLM or a third-party service for a capability, check whether a browser primitive already does it: Web Speech API for text-to-speech (zero dependency, zero inference cost), Web Animations API for motion, Canvas and WASM for compute, Audio API for sound. These are already available inside the sandboxed iframe of an MCP App. Use them to build rich, low-latency experiences.
- 8
Test across all three client types
Verify: (1) Human in browser — does the site still work normally? (2) Human in agent — install your HTTP MCP server in Claude Desktop or equivalent, confirm all tools appear and return correct data and apps. (3) Agent in browser — use the MCP B browser extension as a debugging harness to confirm Web MCP tools are registered, visible, and callable by the model on each page.
// What are real-world examples of the Agentic Web Publishing Framework in action?
A documentation site for an open-source library wants to make its API reference and guides usable inside coding agents without forcing developers to call MCP tools to retrieve docs one chunk at a time.
Expose list_guides, list_api_methods, and search_docs as JSON-returning HTTP MCP tools. Serve the full documentation corpus via MCP Resources (not tools) so agent harnesses can pre-prime context when a user switches to this library's mode. Add Web MCP imperative tools to the HTML pages so in-browser agents can call navigate_to_section and get_example directly from the page without DOM traversal or screenshot guessing.
A media archive site (videos, articles, episodes) with an existing design system wants to let users browse and read content from inside Claude.
Map existing navigation to MCP tools: list_episodes, search_by_topic, get_transcript (returns Markdown), get_page (returns MCP App). Build get_page as a single-file bundle using the existing design system's CSS and fonts served from the same origin with CSP configured. The MCP App includes forward/backward navigation via call_server_tool, and a text-mode toggle that surfaces the transcript inline — replicating the full website experience inside the agent harness.
A SaaS dashboard (project management, analytics) wants to let in-browser AI agents take actions on behalf of users without relying on screenshot-based navigation.
Use the Web MCP imperative model to register tools on each dashboard page: create_item, filter_by_status, get_summary. Each tool's callback calls the same internal API functions the UI already uses. The agent can call these directly, bypassing DOM traversal and visual model inference — reducing token cost and improving reliability.
// What mistakes should I avoid when implementing the Agentic Web Publishing Framework?
- Using MCP tools to inject large documentation or text corpora into agent context one call at a time — this is an inefficient use of context. Use MCP Resources for bulk content priming instead.
- Defaulting to stdio (Studio) transport for public-facing MCP servers — it forces non-technical users to edit JSON config files with command-line arguments, creating unnecessary friction. Use HTTP transport.
- Forgetting that MCP Apps have no local storage and no direct network access — any stateful action or external data fetch must go through call_server_tool (the 'mother may I' pattern).
- Omitting CSP configuration when referencing external fonts, images, or stylesheets inside an MCP App — resources are blocked by default and fail silently, producing a blank or broken app.
- Using standard href or window.open for links inside an MCP App — links require explicit host permission via the agent harness's link-opening API.
- Setting tool visibility incorrectly for app-internal navigation tools — without `visibility: app`, the model may attempt to narrate the tool's JSON response as text rather than letting the app consume it silently.
- Treating Web MCP as fully spec-compliant with MCP — it is inspired by MCP but diverges. The specs may continue to diverge; build for the abstraction, not the assumption of convergence.
- Designing a 'starfish design' chatbox as the entire agentic interface — putting all discovery burden on the user is the agentic equivalent of a command-line interface. Supplement with MCP Apps and structured tool outputs.
- Ignoring existing browser primitives (Web Speech, Canvas, Audio, WASM) and reaching for external inference services instead — these APIs are available inside MCP Apps at zero inference cost.
// What do the key terms in the Agentic Web Publishing Framework mean?
- MCP App
- An interactive rich-media experience returned by an MCP tool, created by bundling HTML, CSS, and JavaScript into a single self-contained file and rendered inline inside an agent harness. Distinct from a website: it is sandboxed, has no local storage, and requires server-mediated network access.
- Studio transport (stdio)
- The Standard Input/Output MCP transport where the server runs as a local process spawned by the client. Requires the user to configure a JSON file with command-line arguments. High friction for non-technical users; appropriate for developer/internal tooling.
- HTTP transport
- The web-based MCP transport where the server runs as a web service listening at an HTTP endpoint. Users connect by entering a URL in their agent harness settings. Low friction; recommended for any public-facing MCP server.
- Web MCP
- A browser-side mechanism that makes each HTML page a mini MCP tools server for in-browser agents. Comes in two flavours: declarative (tool-name and tool-description attributes on forms) and imperative (navigator.modelContext.registerTool with a callback). Inspired by but not spec-compliant with MCP.
- Starfish design
- Rachel's term for the chatbox landing page pattern where the interface is a blank prompt field that forces the user to do all discovery work. Analogous to the CLI before the GUI — a transitional phase, not the end state of agentic UX.
- One Server, Three Clients
- The architectural goal of serving humans in browsers, humans operating agents, and agents browsing autonomously from a single backend deployment.
- Infinite Canvas
- Rachel's framing of the browser (and by extension the agent harness) as a rendering surface for anything — not just documents, but video, audio, interactive components, and more — powered by existing web APIs.
- Mother May I
- Rachel's term for the permission-mediated pattern inside MCP Apps where the app cannot take network or navigation actions directly and must request them from the agent harness via call_server_tool or the host-permission link API.
- MCP Resources
- An MCP spec construct intended for serving bulk content (documents, corpora, assets) to agent context, distinct from Tools. Currently poorly supported in agent harness UIs despite being the correct vehicle for large content priming.
- CSP (Content Security Policy)
- The browser security mechanism that governs which external origins an MCP App's iframe may load fonts, images, and other resources from. Must be explicitly configured on the server; external resources are blocked by default.
- call_server_tool
- The mechanism by which an MCP App requests server-side actions or data fetches, since the app has no direct network access from within its sandboxed iframe.
- visibility: app
- A tool metadata setting that prevents the model from attempting to narrate or consume a tool's response as text, signalling that the response is intended to be consumed by the MCP App itself rather than surfaced to the user as a message.
// FREQUENTLY ASKED QUESTIONS
What is Rachel Lee's Agentic Web Publishing Framework?
It is an architecture that turns any existing website into a multi-client experience serving three audiences from one backend: humans in browsers, humans using AI agents like Claude Desktop, and agents browsing autonomously. It maps your site's navigation to MCP tools, builds interactive MCP Apps for rich content, and registers Web MCP tools on HTML pages for in-browser agents — all without requiring a full rebuild.
What is an MCP App and how is it different from a regular web page?
An MCP App is a single self-contained HTML file bundling HTML, CSS, and JavaScript that gets rendered inline inside an AI agent harness like Claude. Unlike a regular web page, it is sandboxed in an iframe with no local storage and no direct network access. Any data fetching or navigation must go through call_server_tool. It can leverage browser APIs like Canvas, Web Speech, and Animations for rich interactivity at zero inference cost.
How do I add MCP tools to my existing website?
Audit your site's navigation — list, search, filter, view detail, paginate — and map each action to an MCP tool. Expose them via an HTTP transport endpoint (e.g., /mcp) so users paste one URL into their agent harness. Return structured JSON for data tools and Markdown for text-rich content. For visual or interactive content, return an MCP App instead of raw data. Keep tool count focused to match your site's conceptual surface area.
How do I set up Web MCP for in-browser agents?
For form-based pages, add tool-name and tool-description attributes to your form elements (declarative model). For JavaScript-driven pages, use navigator.modelContext.registerTool(name, description, inputSchema, callbackFn) with the same callback functions your UI already uses (imperative model). Always check if (navigator.modelContext) before registering to degrade gracefully in non-agent browsers. Test with the MCP B browser extension.
How does Rachel Lee's framework compare to just building a REST API for AI agents?
A REST API exposes data but not interactive experiences. Rachel Lee's framework goes further by returning MCP Apps — rich HTML/CSS/JS bundles rendered inside the agent harness — so users get visual navigation, animations, and browser-native capabilities rather than walls of text. It also adds Web MCP for in-browser agents and serves all three client types from one server, whereas a REST API only addresses one consumption pattern.
When should I use HTTP transport vs stdio transport for my MCP server?
Use HTTP transport for any public-facing MCP server. Users connect by pasting a single URL into their agent harness settings — zero config-file friction. Use stdio (Studio) transport only for internal tooling or developer-only use cases where users are comfortable editing JSON config files with command-line arguments. Defaulting to stdio for non-technical audiences creates unnecessary adoption friction.
What results can I expect after implementing the Agentic Web Publishing Framework?
Your content becomes discoverable and usable inside AI agent surfaces like Claude Desktop, Copilot, and in-browser agents without users ever visiting your website directly. You serve three client types from one backend with no separate builds. Users get rich interactive experiences inside agents (not just text), and in-browser agents can take actions on your pages without screenshot-based DOM traversal, reducing token costs and improving reliability.
What is the starfish design in agentic UX and why should I avoid it?
Starfish design is Rachel Lee's term for a chatbox landing page that presents only a blank prompt field, forcing users to guess what they can ask. It is the agentic equivalent of a command-line interface — all discovery burden falls on the user. Instead, use MCP Apps with visual cues, structured tool outputs, and guided navigation to help users explore your content without needing to know the right question to type.
What are MCP Resources and when should I use them instead of MCP tools?
MCP Resources are an MCP spec construct for serving bulk content like documentation corpora, text archives, or large asset collections to agent context. Use them instead of tools when you need to prime an agent with a large body of content. Serving large corpora through tools one call at a time is inefficient and wastes context window. Despite poor current harness UI support, Resources are the correct vehicle for bulk content.
Can I use browser APIs like Web Speech and Canvas inside MCP Apps?
Yes. MCP Apps run inside a sandboxed iframe that still has access to browser primitives including Web Speech API for text-to-speech, Canvas and WASM for computation, Web Animations API for motion, and Audio API for sound. These are available at zero inference cost and zero external dependency. Always check for browser API availability before reaching for an LLM or third-party service.