# WebMCP Agents > Let AI agents use your web page, and let the person on it see every step: a ghost cursor, fields typed in place, a parked confirm state. ## Get started - [WebMCP Agents](https://webmcp-agents.dev/docs): Let AI agents use your web page, and let the person on it see every step. ### Installation - [Installation](https://webmcp-agents.dev/docs/installation): Choose your framework. Every page is the same six steps, from an empty folder to a tool the agent cursor runs. - [Install in a Vite app](https://webmcp-agents.dev/docs/installation/vite): Six steps, from an empty folder to a tool the agent cursor runs, in a Vite single-page app with React. - [Install in a Next.js app](https://webmcp-agents.dev/docs/installation/nextjs): Six steps, from an empty folder to a tool the agent cursor runs, on the Next.js App Router. - [Install in a TanStack Start app](https://webmcp-agents.dev/docs/installation/tanstack-start): Six steps, from an empty folder to a tool the agent cursor runs, in a TanStack Start app. - [Install in an Astro site](https://webmcp-agents.dev/docs/installation/astro): Six steps, from an empty folder to a tool the agent cursor runs, in an Astro site with a React island. - [Install without a framework](https://webmcp-agents.dev/docs/installation/no-framework): Six steps, from an empty folder to a tool the agent cursor runs, with plain HTML and TypeScript and createWebAgents. ## Build - [Define a tool](https://webmcp-agents.dev/docs/build/define-a-tool): A tool is the function that does the work, plus an optional hint about which control it belongs to. Nothing is added to your JSX. - [Tools with input](https://webmcp-agents.dev/docs/build/tools-with-input): A form is a tool with an inputSchema. The cursor types the agent's values into your form's fields, your form library hears it, and fill shows what it cannot type. - [Confirm before it runs](https://webmcp-agents.dev/docs/build/confirm-before-it-runs): requireConfirmation makes a tool wait for the person's own click on its control: the cursor parks on the button, and only a real click runs the tool. - [Tools across your app](https://webmcp-agents.dev/docs/build/tools-across-your-app): Put app-wide tools in one catalog the provider registers, then choose the pages each one is on with match, and which ones an agent may use with availableTools. No router setup. - [Common tools](https://webmcp-agents.dev/docs/build/common-tools): Seven ready-made tools from @webmcp-agents/tools: the time, the user's location, the current page, go to, go back, scroll to and set the theme. They go in your catalog beside your own. - [Call a tool](https://webmcp-agents.dev/docs/build/call-a-tool): tool.invoke calls a tool the way an agent would, with the cursor and confirmation. Use it for a "Try it" button, a keyboard shortcut, an onboarding tour or a test. - [Define an agent](https://webmcp-agents.dev/docs/build/define-an-agent): One definition for what the assistant knows, which tools it may use and which helpers it hands work to. The page and your server read the same file. - [Add the chat](https://webmcp-agents.dev/docs/build/add-the-chat): Put an assistant on the page that does things, not just answers. The model runs on your server with the key; every tool call runs in the browser, under the agent cursor. - [Call an agent](https://webmcp-agents.dev/docs/build/call-an-agent): agent.invoke runs an agent from your own code, with no chat on the page; useWebAgent adds live status in a component. - [Devtools](https://webmcp-agents.dev/docs/build/devtools): See which tools are on for the current page and what the cursor will do for each, run them from a form made from their schema, and watch a timeline of every call, yours or a real agent's. ## Concepts - [How it works](https://webmcp-agents.dev/docs/concepts/how-it-works): The three layers of an agent-ready page, why the cursor is driven only by WebMCP events, and how it keeps the page in step with each call. - [The agent cursor](https://webmcp-agents.dev/docs/concepts/agent-cursor): How the ghost cursor moves, waits for a confirmation and gets out of the person's way, plus its options, the spotlight and how to restyle it. - [Tool lifecycle](https://webmcp-agents.dev/docs/concepts/tool-lifecycle): Why a tool is never unregistered in the middle of a call, how StrictMode, route changes and calls in flight are handled, how tools wait for the polyfill, and when a tool that matches a path turns on. - [Errors](https://webmcp-agents.dev/docs/concepts/errors): Every failed tool call carries one of seven error codes, readable by the model and by code, so the agent knows whether to retry, fix its input or ask the person. - [Writing tool descriptions](https://webmcp-agents.dev/docs/concepts/tool-descriptions): A model picks a tool, and the order of calls, from its description alone. The four things to say, how to describe parameters, and how answers and errors guide the next step. ## Security - [Secure the chat](https://webmcp-agents.dev/docs/security): Your /api/chat route spends model tokens on your key. Lock it to your page with chat sessions, a tool allowlist, a bot check and limits, so it can't be used as a free model from anywhere else. - [Chat sessions](https://webmcp-agents.dev/docs/security/sessions): The page's first request to /api/chat gets a random, signed, httpOnly cookie; every POST must carry it. A bare script gets 401, and every request belongs to a session you can count and limit. - [Tool allowlist](https://webmcp-agents.dev/docs/security/tool-allowlist): The page sends its live tools with every message, so a caller could describe any "tool" it likes. List on the server which tools may reach the model, pin your own tools' descriptions, and require a registered agent. - [Turnstile](https://webmcp-agents.dev/docs/security/turnstile): Make starting a chat session cost a real browser. Cloudflare Turnstile runs an invisible check on the first message of a session; the server verifies the token before it sets the session cookie. - [Limits and budgets](https://webmcp-agents.dev/docs/security/limits): Bound what the chat can cost even when someone gets past every other check. Limits per IP and per session, a daily budget, caps per request, and a spend limit at your model provider. ## More - [Run the agent on the device](https://webmcp-agents.dev/docs/more/on-device-agent): The same chat with a model that runs in the visitor's browser, through Chrome's built-in model or transformers.js. No server, no API key, nothing leaves the device. - [Use your shadcn components](https://webmcp-agents.dev/docs/more/shadcn-chat-blocks): Render the agent chat with shadcn/ui's AI patterns (the successor of Vercel's AI Elements), from the @webmcp-agents registry. The code lands in your project; the session logic stays in the package. - [Declarative forms](https://webmcp-agents.dev/docs/more/declarative-forms): The browser's own way to write a tool: a form with toolname and tooldescription, answered through respondWith. The Build path is the recommended way; this is the alternative, and when it is still the right pick. - [Browsers without WebMCP](https://webmcp-agents.dev/docs/more/polyfill): The provider loads a polyfill of document.modelContext where the browser has none, so tools, the cursor and the chat work in any browser, in development and in production. - [Deploy](https://webmcp-agents.dev/docs/more/deploy): Put the chat route and its environment variables on a host, guard it against abuse, and smoke test it. Vercel for the Vite and Next.js apps is what the examples run; TanStack Start and Astro describe the shape. ## Examples - [Playground](https://webmcp-agents.dev/docs/examples/playground): A small storefront in examples/playground where every action is a WebMCP tool: buttons, forms on React Hook Form, an app-wide catalog, a path-scoped tool and one declarative form. - [Field Store](https://webmcp-agents.dev/docs/examples/field-store): A realistic storefront in examples/ecommerce on React Router 7, where tools are on everywhere, while a component is mounted or while the cart drawer is open, and checkout waits for the person. - [Skyline](https://webmcp-agents.dev/docs/examples/skyline): A flight-booking site in examples/flights where the search lives in the URL, results tools are on only on the results route, a TanStack Form fills the travelers, and booking waits for the person's click. - [Field Store on Next.js](https://webmcp-agents.dev/docs/examples/nextjs): The store on the Next.js App Router with shadcn/ui, where Server Components render the pages, client components hold the tools, the chat is a shadcn block, and the API key provably stays on the server. ## Reference - [API reference](https://webmcp-agents.dev/docs/reference): Reference for every public API of the @webmcp-agents/* packages, one page per API. ### @webmcp-agents/core - [@webmcp-agents/core](https://webmcp-agents.dev/docs/reference/core): @webmcp-agents/core shows the person on the page what a WebMCP agent is doing: a ghost cursor that types, clicks and parks for a confirmation. - [@webmcp-agents/core/cursor.css](https://webmcp-agents.dev/docs/reference/core/cursor-css): The stylesheet for the visual layer: the ghost cursor, click ripple, name tag, focus ring, spotlight, the screen-reader live region, and the agent states on declarative forms. cursor-native.css adds Chrome's native states. - [ConfirmationUnavailableError](https://webmcp-agents.dev/docs/reference/core/confirmation-unavailable-error): The error a confirm-gated tool fails with when the person cannot confirm because there is nothing to click. - [createCallTracker](https://webmcp-agents.dev/docs/reference/core/create-call-tracker): Creates a counter for a tool's calls, so its unregistration can wait for them. - [createToolRegistry](https://webmcp-agents.dev/docs/reference/core/create-tool-registry): Decides which catalog tools are registered with WebMCP right now. - [createWebAgents](https://webmcp-agents.dev/docs/reference/core/create-web-agents): The framework-free way to put an app's tools on a page. - [currentAgentVisuals](https://webmcp-agents.dev/docs/reference/core/current-agent-visuals): Returns the cursor controls of the most recently started createWebAgents (so of WebAgentsProvider), or null. - [deferRelease](https://webmcp-agents.dev/docs/reference/core/defer-release): Runs release on a later macrotask unless cancelled first, and keeps waiting while isBusy() is true. - [defineWebTool](https://webmcp-agents.dev/docs/reference/core/define-web-tool): Defines a tool once for every place a tool runs: the browser (document.modelContext), the devtools, the chat and a server agent. - [errorResult](https://webmcp-agents.dev/docs/reference/core/error-result): Small helpers for tool results and failures. - [executeTool](https://webmcp-agents.dev/docs/reference/core/execute-tool): Calls a page's WebMCP tool by name the way an agent would, from library UI such as devtools or a chat widget. - [inspectTools](https://webmcp-agents.dev/docs/reference/core/inspect-tools): Lists every WebTool on the page with the control each would act on and the field each parameter would be typed into, found the way the cursor finds them. - [installAgentVisuals](https://webmcp-agents.dev/docs/reference/core/install-agent-visuals): Installs the visual layer: a ghost cursor, a focus ring, an optional spotlight and a yield-to-user watcher, all driven by WebMCP lifecycle events. - [isWebMCPAvailable](https://webmcp-agents.dev/docs/reference/core/is-webmcp-available): Returns true when the page has document.modelContext, from native WebMCP or the polyfill. - [loadWebMCPPolyfill](https://webmcp-agents.dev/docs/reference/core/load-webmcp-polyfill): Gives the page document.modelContext: nothing to do where the browser has WebMCP, elsewhere it loads the polyfill and installs it. - [locate](https://webmcp-agents.dev/docs/reference/core/locate): Finds a control on the page the way a person, or a Testing Library query, does: by its role and the name on it. - [matchPath](https://webmcp-agents.dev/docs/reference/core/match-path): Tests a pathname against a route pattern. - [onAgentEvent](https://webmcp-agents.dev/docs/reference/core/on-agent-event): Subscribes to everything the visual layer observes, in order: tool starts, field fills, parks, results, errors, cancels, and the cursor yielding to or resuming after the person. - [registerWebTool](https://webmcp-agents.dev/docs/reference/core/register-web-tool): Registers a WebTool with document.modelContext and returns an unregister function. - [toModelContextTool](https://webmcp-agents.dev/docs/reference/core/to-model-context-tool): Adapts a WebTool to the ModelContextTool shape that document.modelContext.registerTool takes: it validates input, runs the confirmation gate and turns failures into readable isError results. - [toolError](https://webmcp-agents.dev/docs/reference/core/tool-error): Builds a failed tool result that says why with one code, in the text a model reads and in structuredContent.error. - [UI_HOST_ATTR](https://webmcp-agents.dev/docs/reference/core/ui-host-attr): The attribute name that marks the host element of a library UI, such as the devtools panel or the chat. - [waitingForUser](https://webmcp-agents.dev/docs/reference/core/waiting-for-user): Says that a tool is waiting for the person (a choice, a confirmation) and what they should do. - [watchPathname](https://webmcp-agents.dev/docs/reference/core/watch-pathname): Calls a listener whenever the page's URL changes without a page load. - [WebMCP types](https://webmcp-agents.dev/docs/reference/core/webmcp-types): TypeScript types for the preview WebMCP surface (document.modelContext): what Chrome ships plus what the polyfill adds. - [WebToolError](https://webmcp-agents.dev/docs/reference/core/web-tool-error): An error to throw from a tool's execute to pick the code the agent gets. - [webToolSignature](https://webmcp-agents.dev/docs/reference/core/web-tool-signature): Returns a string of what WebMCP sees of a tool. - [whenModelContext](https://webmcp-agents.dev/docs/reference/core/when-model-context): Calls a function once the page has document.modelContext: right away when it has, else when the polyfill installs it. ### @webmcp-agents/react - [@webmcp-agents/react](https://webmcp-agents.dev/docs/reference/react): React bindings for WebMCP tools. - [JSX attributes](https://webmcp-agents.dev/docs/reference/react/jsx-attributes): Types the declarative WebMCP attributes, so JSX accepts toolname, tooldescription, toolautosubmit and toolparamdescription on any element. - [useAgentEvents](https://webmcp-agents.dev/docs/reference/react/use-agent-events): Calls a listener for every agent event while the component is mounted: the React form of onAgentEvent. - [useEnabledTools](https://webmcp-agents.dev/docs/reference/react/use-enabled-tools): Returns the catalog tool ids registered with WebMCP right now, sorted: the tools that are available and whose match fits this page, plus any a component enabled. - [useEnableTools](https://webmcp-agents.dev/docs/reference/react/use-enable-tools): Turns catalog tools on while the calling component is mounted: a promo row enables remove_promo, an open cart drawer enables its item tools. - [usePathname](https://webmcp-agents.dev/docs/reference/react/use-pathname): Returns the browser's current location.pathname, kept fresh without a router: use it to show something that depends on the page (a current-page marker in a navigation). - [useToolAnswer](https://webmcp-agents.dev/docs/reference/react/use-tool-answer): For declarative forms, the earlier form, whose own action hides them: it answers the agent's submit and keeps the form in place until the agent has its answer. - [useWebAgents](https://webmcp-agents.dev/docs/reference/react/use-web-agents): Reads the nearest : its tool registry, runtime cursor controls and pathname. - [useWebTool](https://webmcp-agents.dev/docs/reference/react/use-web-tool): Registers a tool that lives in a component and closes over its state, while the component is mounted. - [WebAgentsProvider](https://webmcp-agents.dev/docs/reference/react/web-agents-provider): Puts your app's tools on the page and installs the agent cursor (and, in development, the devtools): tools is everything the app has, availableTools what an agent may use right now, and each tool's own match says on which pages it is on. ### @webmcp-agents/tools - [@webmcp-agents/tools](https://webmcp-agents.dev/docs/reference/tools): Common WebMCP tools, ready-made. - [calendarAt, weekOf](https://webmcp-agents.dev/docs/reference/tools/calendar): The pure calendar behind getTime: what "today", "tomorrow", "this weekend" and "next week" mean for a user, as YYYY-MM-DD dates, for a locale's week. - [getLocation](https://webmcp-agents.dev/docs/reference/tools/get-location): The get_location tool: where the user is, from the browser's position when the user allows it. - [getPage](https://webmcp-agents.dev/docs/reference/tools/get-page): The getpage tool: where the user is on the site, read from the page itself: its title, path, query parameters, hash and language, the text the user selected, and its headings (the outline an agent can scrollto). - [getTime](https://webmcp-agents.dev/docs/reference/tools/get-time): The get_time tool: the user's date, time, time zone and locale, and what relative dates like "next Friday" mean for them. - [goBack](https://webmcp-agents.dev/docs/reference/tools/go-back): The go_back tool: one step back in the browser's history, like the Back button. - [goTo](https://webmcp-agents.dev/docs/reference/tools/go-to): The go_to tool: open one of the pages your site lists, by name. - [scrollTo](https://webmcp-agents.dev/docs/reference/tools/scroll-to): The scroll_to tool: bring a heading, or a piece of text, into view and highlight it for a moment, so the agent can show the user where something is ("where's the refund policy?"). - [setTheme](https://webmcp-agents.dev/docs/reference/tools/set-theme): The set_theme tool: light, dark or the system's. ### Polyfill - [@webmcp-agents/core/polyfill/auto](https://webmcp-agents.dev/docs/reference/polyfill/auto): A side-effect entry: importing it calls installWebMCPPolyfill(), which installs the polyfill if the browser has no WebMCP. - [installWebMCPPolyfill](https://webmcp-agents.dev/docs/reference/polyfill/install-webmcp-polyfill): Installs a document.modelContext polyfill unless the browser already has one, and returns whichever ModelContext is active. - [PolyfillModelContext](https://webmcp-agents.dev/docs/reference/polyfill/polyfill-model-context): The document.modelContext the polyfill installs: enough of the WebMCP surface to register, list, run and cancel tools, plus declarative
tools, in a browser without native support. - [The polyfill](https://webmcp-agents.dev/docs/reference/polyfill): The document.modelContext (WebMCP) polyfill in @webmcp-agents/core, including declarative tools; @webmcp-agents/polyfill is deprecated and re-exports it. ### @webmcp-agents/devtools - [@webmcp-agents/devtools](https://webmcp-agents.dev/docs/reference/devtools): Devtools for WebMCP pages: the tools that are live, a runner made from their schemas, and a timeline of every call. - [createDevtoolsStore](https://webmcp-agents.dev/docs/reference/devtools/create-devtools-store): Creates the devtools' state, independent of any UI: the page's tools, every call (run from the panel or by a real agent) and the panel's settings. - [installAgentConsole](https://webmcp-agents.dev/docs/reference/devtools/install-agent-console): Deprecated: the old agent console, an alias that installs the devtools panel, open on load. - [installWebAgentsDevtools](https://webmcp-agents.dev/docs/reference/devtools/install-web-agents-devtools): Mounts the floating devtools panel (launcher bottom-right, Alt+Shift+A) on a page. - [parseSchema](https://webmcp-agents.dev/docs/reference/devtools/parse-schema): Turns a tool's inputSchema into a SchemaNode object. - [SchemaForm](https://webmcp-agents.dev/docs/reference/devtools/schema-form): A controlled React form for a tool's JSON Schema, the one the devtools runner uses. - [toAgentInvokeCode](https://webmcp-agents.dev/docs/reference/devtools/copy-as-code): Writes the snippet that repeats a tool call from the browser console or a test; the runner's copy buttons use it. - [WebAgentsDevtools](https://webmcp-agents.dev/docs/reference/devtools/web-agents-devtools): The floating devtools panel as a React component (launcher bottom-right, Alt+Shift+A). - [webAgentsDevtoolsPlugin](https://webmcp-agents.dev/docs/reference/devtools/web-agents-devtools-plugin): Puts the devtools panel in a "Web Agents" tab of TanStack Devtools. - [webAgentsEventClient](https://webmcp-agents.dev/docs/reference/devtools/event-client): An optional bridge to TanStack Devtools' event bus, so other TanStack panels (or your own) can follow tool calls. ### @webmcp-agents/chat - [@webmcp-agents/chat](https://webmcp-agents.dev/docs/reference/chat): A chat widget whose agent works the live page through its WebMCP tools (document.modelContext). - [Adapter types](https://webmcp-agents.dev/docs/reference/chat/adapter-types): The contract between the chat widget and the agent that drives it. - [AgentChat](https://webmcp-agents.dev/docs/reference/chat/agent-chat): A chat launcher and a non-modal chat panel whose agent works the live page through its tools while the person watches. - [buildSystemPrompt](https://webmcp-agents.dev/docs/reference/chat/system-prompt): Builds the system prompt the chat handler sends the model. - [callModelContextTool](https://webmcp-agents.dev/docs/reference/chat/call-model-context-tool): Runs one page tool for an agent through core's executeTool, so the agent cursor plays and Chrome and polyfill differences are absorbed. - [chatRequestSchema](https://webmcp-agents.dev/docs/reference/chat/chat-request-schema): The zod schema for the POST body of /api/chat, and the LIMITS it enforces. - [createChatHandler](https://webmcp-agents.dev/docs/reference/chat/create-chat-handler): Creates the /api/chat endpoint as a web-standard function, (req: Request) => Promise, so it runs on Vercel, in any Node or edge server with web Request and Response, and in vite dev. - [createCloudAdapter](https://webmcp-agents.dev/docs/reference/chat/create-cloud-adapter): Creates an AgentAdapter backed by your /api/chat endpoint: the model runs on your server and every tool call runs on the page, one at a time, so the agent cursor plays. - [defineWebAgent](https://webmcp-agents.dev/docs/reference/chat/define-web-agent): Defines an agent once for the browser and the server: what the assistant knows about the site, which of the page's tools it may use, its sub-agents and its model. - [listToolDescriptors](https://webmcp-agents.dev/docs/reference/chat/list-tool-descriptors): Lists the WebMCP tools registered on this page right now, as a model reads them. - [resolveModel](https://webmcp-agents.dev/docs/reference/chat/resolve-model): Turns one string, "/", into an AI SDK LanguageModel for any frontier model. - [sessionReducer](https://webmcp-agents.dev/docs/reference/chat/session-reducer): The chat session as a pure state machine: the messages, whether a run is streaming, and the last error. - [toToolLoopAgent](https://webmcp-agents.dev/docs/reference/chat/to-tool-loop-agent): Turns a WebAgent into an AI SDK ToolLoopAgent for one request: the model (whose key lives on the server), the page's live tools and the agent's instructions exist together only there. - [useAgentChat](https://webmcp-agents.dev/docs/reference/chat/use-agent-chat): The chat as a useChat-shaped React hook: the conversation as AI SDK UIMessages, the adapter choice and its memory, the adapter's status and models, and the suggestions. - [useAgentSession](https://webmcp-agents.dev/docs/reference/chat/use-agent-session): A React hook for a conversation with one adapter about the current page, in the chat's own message shape. - [useWebAgent](https://webmcp-agents.dev/docs/reference/chat/use-web-agent): Runs an agent from a component, with live status and no chat on the page. - [webAgentsChatDev](https://webmcp-agents.dev/docs/reference/chat/web-agents-chat-dev): A Vite plugin that serves /api/chat from vite dev, so the chat widget works locally without a separate server. ### @webmcp-agents/local-agent - [@webmcp-agents/local-agent](https://webmcp-agents.dev/docs/reference/local-agent): An on-device agent for @webmcp-agents/chat: the model runs in the visitor's browser. - [@webmcp-agents/local-agent/worker](https://webmcp-agents.dev/docs/reference/local-agent/worker): The transformers.js model worker. - [createLocalAdapter](https://webmcp-agents.dev/docs/reference/local-agent/create-local-adapter): An AgentAdapter for @webmcp-agents/chat that runs a model in the visitor's browser: Chrome's built-in model (Prompt API) or a small model run by transformers.js in a Web Worker. - [createPromptApiProvider](https://webmcp-agents.dev/docs/reference/local-agent/create-prompt-api-provider): A LocalProvider backed by Chrome's built-in model (the Prompt API, LanguageModel). - [createTransformersProvider](https://webmcp-agents.dev/docs/reference/local-agent/create-transformers-provider): A LocalProvider that runs a small model with transformers.js in a module Web Worker, on WebGPU when there is an adapter and on WASM otherwise. - [detectLocalProviders](https://webmcp-agents.dev/docs/reference/local-agent/detect-local-providers): Reports each on-device provider's availability right now. - [parseToolCalls](https://webmcp-agents.dev/docs/reference/local-agent/tool-call-parser): Reads tool calls out of a small model's free text. - [Provider types](https://webmcp-agents.dev/docs/reference/local-agent/provider-types): The contract between the on-device agent loop and the engines that run a model. - [rankTools, compactSchema, validateArgs](https://webmcp-agents.dev/docs/reference/local-agent/tools): Small models pick tools better from a short list with short schemas. - [runLocalAgent](https://webmcp-agents.dev/docs/reference/local-agent/run-local-agent): The on-device agent loop, the same for every provider: rank the page's tools, generate, parse and validate tool calls, run them on the page one at a time, feed the results back, repeat. ### @webmcp-agents/vercel-api - [@webmcp-agents/vercel-api](https://webmcp-agents.dev/docs/reference/vercel-api): The examples' /api/chat as Vercel web handlers. - [createLimiter](https://webmcp-agents.dev/docs/reference/vercel-api/limiter): A sliding-window request counter for the public demos. - [createVercelChatRoute](https://webmcp-agents.dev/docs/reference/vercel-api/create-vercel-chat-route): Builds the /api/chat handlers for a Vercel Function: @webmcp-agents/chat's handler behind origin and per-IP guards, with a global daily budget on model calls. - [Guards](https://webmcp-agents.dev/docs/reference/vercel-api/guards): Guards for a public /api/chat: functions that run before the model and refuse a request with the statuses the chat widget already explains (403, 429 rate_limited, 503). ## Agent skills - [webmcp-agents](https://webmcp-agents.dev/.well-known/agent-skills/webmcp-agents/SKILL.md): Read the WebMCP Agents docs instead of answering from memory. Let AI agents use your web page, and let the person on it see every step: a ghost cursor, fields typed in place, a parked confirm state. Use when a task involves WebMCP Agents: how it works, how to set it up or configure it, or its API. ## Agent resources - [llms-full.txt](https://webmcp-agents.dev/llms-full.txt): The full Markdown of every page in one file. - [Page Markdown](https://webmcp-agents.dev/index.md): Append `.md` to any page URL to fetch that page as raw Markdown. - [JSON API](https://webmcp-agents.dev/api/docs/pages.json): Page index of the JSON docs API; each entry links the page's JSON and Markdown forms. Described by the OpenAPI document at https://webmcp-agents.dev/openapi.json. - [Agent skills](https://webmcp-agents.dev/.well-known/agent-skills/index.json): Agent Skills discovery index of the skills this site publishes. - [API catalog](https://webmcp-agents.dev/.well-known/api-catalog): RFC 9727 linkset of the APIs documented here. - [AI catalog](https://webmcp-agents.dev/.well-known/ai-catalog.json): ARD manifest of the agent-facing resources on this site (MCP server, skills, APIs). - [agent-readability.json](https://webmcp-agents.dev/agent-readability.json): Manifest of every agent-facing artifact on this site. - [Sitemap](https://webmcp-agents.dev/sitemap.xml): Every indexable page URL with its last-modified date.