cf-webmcp
Docs

Documentation.

Reference material lives in the public repo under docs/. Everything is also available offline in your local clone.

Topics

Local testing

Run the full cf-webmcp stack on your laptop in two terminals: a static origin server plus the Worker via wrangler dev. Hit every surface end to end.

Deployment

Full proxy vs route-only modes, Bot Management bypass headers, preflight collision detection, the deploy flow from wrangler login to verifying config hash.

Costs

Cloudflare Workers free vs paid tier math for small, medium, and high-traffic sites. R2 storage cost for the fallback widget. What to monitor and what to ignore.

Privacy

What the Worker logs (almost nothing by default), what travels to origin on executor fetches (no visitor cookies), and the GDPR posture for EU deployments.

Upgrade

Schema version handling, tool-name immutability rule, the config hash rotation pattern, and how to update the vendored widget pin without breaking deploys.

Limitations

SPA route changes, multi-language sitemaps, service worker collisions, non-UTF-8 origins, and other v1 edges with documented workarounds where applicable.

Customisation

Replace the /mcp landing page with your own HTML template. Lists the seven {{placeholder}} variables, the override flow, and a fully-worked example.

Browser support

WebMCP is behind chrome://flags/#enable-webmcp-testing as of mid-2026. Which flags to enable, how to verify the runtime, and the status of Firefox and Safari.

Form injection

Stamp declarative WebMCP attributes (toolname, tooldescription, toolparamdescription, toolautosubmit) onto existing forms at the edge from one [[forms]] TOML block.

AGENTS.md

Auto-publish /.well-known/agents.md describing your WebMCP surface to acting agents. Configurable canonical path, with 301 aliases for the two common variants.

Reference

This site eats its own dogfood

This site runs through cf-webmcp. Open /.well-known/webmcp.json to see the live tool catalogue. Open /mcp to pair a desktop MCP client. View source on any page and look for <link rel="webmcp"> in the <head>.

The HTTP Link header is the pre-parse equivalent of the link tag. Every response carries it, so an agent that only does a HEAD request can still find the manifest:

curl -I https://webmcp.basgr.com/
# ...
# Link: <https://webmcp.basgr.com/.well-known/webmcp.json>; rel="webmcp"