# OpenTree > Publish HTML your agent wrote, to a private link. Publish agent-written HTML to an unguessable URL, then replace it > in place — the URL never changes. OpenTree is a self-hosted deployment of an MCP-native publish primitive. An agent calls `publish_html` and gets back a private link; it calls `update_site` to swap the content without moving the URL. ## Defaults for published links - Unlisted: the token in the URL is the credential (22 chars, crypto-random, never listed, never indexed). - Expiry: 168 hours by default; pass `"never"` to keep a link forever. Anonymous publishes live 24 hours. - PII scan in block mode: publishing is refused when ID numbers, credit cards, phone numbers or dense email lists are detected. `pii_check: "warn"` publishes anyway, `"off"` skips the scan. - Strict Content-Security-Policy with a per-site inline-script hash allowlist (no `unsafe-inline`, no `eval`), plus `X-Robots-Tag: noai, noimageai, noindex` and `Referrer-Policy: no-referrer`. ## Machine-readable surfaces - MCP (Streamable HTTP): https://read.botook.ai/mcp - MCP server card: https://read.botook.ai/.well-known/mcp/server-card.json - Agent catalog: https://read.botook.ai/.well-known/ai-catalog.json - OpenAPI 3.1: https://read.botook.ai/openapi.json - How to authenticate: https://read.botook.ai/auth.md - Security contact: https://read.botook.ai/.well-known/security.txt - Every page of this site, concatenated: https://read.botook.ai/llms-full.txt - Pricing as markdown / plain text: https://read.botook.ai/pricing.md, https://read.botook.ai/pricing.txt - Sitemap: https://read.botook.ai/sitemap.xml ## Publishing without an account ``` curl -X POST https://read.botook.ai/sites -F file=@index.html ``` Returns the live URL plus a single-use `claim_url`: sign in later and POST it to keep the site. ## Not here This deployment has no metered publishing and no pay-to-provision rail: no `/provision`, no `/unlock`, no `/pay/sessions`, no plan limits. Limits are deployment configuration. ## Start here - [OpenTree](https://read.botook.ai/): Add the MCP server once. - [Developers](https://read.botook.ai/developers): Everything the MCP tools do is a plain HTTP request underneath, so there are two ways in and they hit the same endpoint: paste or drop a file right here for a … - [Docs](https://read.botook.ai/docs): Everything the server exposes: three ways to authenticate, twelve MCP tools, the whole REST surface, the upload formats it accepts, and the defaults it applies … - [Glossary](https://read.botook.ai/glossary): Definitions for the words used across the documentation, the comparisons and the posts. ## Agent integrations - [Agent integrations](https://read.botook.ai/agents): One MCP server, one API key, twelve tools. - [Claude.ai connector](https://read.botook.ai/claude-ai-connector): Paste one URL into your connector settings. - [Claude Code](https://read.botook.ai/claude-code): Claude Code writes the HTML, then publishes it itself — to an unguessable private URL, without a deploy step, a repository or a hosting account for whoever … - [OpenAI Codex](https://read.botook.ai/codex): Codex writes a page; the same session publishes it to a private URL. - [Cursor](https://read.botook.ai/cursor): Cursor writes the page, calls the tool, and hands you a private link in the same thread. - [MCP server](https://read.botook.ai/mcp-publish-html): Twelve tools over the model context protocol: publish, replace in place, gate, expire, delete, and read what viewers left behind. - [Publish HTML from n8n](https://read.botook.ai/n8n): n8n workflows produce HTML all the time — a rendered report, a summary email's body, a generated dashboard. - [Agent skills](https://read.botook.ai/skills): A tool call is a verb. - [Slack](https://read.botook.ai/slack): Slack shows an HTML attachment as a wall of source nobody reads. - [WebMCP](https://read.botook.ai/webmcp): This site declares its own actions as tools on document.modelContext. ## Capabilities - [Agent-loop hosting](https://read.botook.ai/agent-loop-hosting): An agent loop does not produce a page. - [Client feedback loop](https://read.botook.ai/client-feedback-loop): Turn on the on-page toolbar and a reviewer can leave a comment anchored to the element they are objecting to — with no account. - [Custom domains](https://read.botook.ai/custom-domains): Point share.yourcompany.com at a page and clients see your domain, not someone else's. - [Internal tool hosting](https://read.botook.ai/internal-tool-hosting): A regex tester. - [One-time view links](https://read.botook.ai/one-time-view-links): Burn-after-read closes the page permanently after the first successful open. - [Page engagement](https://read.botook.ai/page-engagement): Opens, unique viewers, dwell time, how far down people got, whether anyone reached the end, and which tenth of the page held attention. - [Password-protect a page](https://read.botook.ai/password-protect-html-page): One call, no rebuild, no account for the reader. - [Private HTML hosting](https://read.botook.ai/private-html-hosting): A whole category of hosts assumes the thing you are publishing should be public. - [Security](https://read.botook.ai/security): A published page is code somebody's agent wrote and nobody read line by line. ## Use cases - [Publish HTML from Claude Code](https://read.botook.ai/deploy-html-from-claude-code): Claude Code will happily write the page. - [Leave a website builder](https://read.botook.ai/export-webflow-site): Webflow, Framer, Squarespace, Carrd — the rendered pages are ordinary HTML, and ordinary HTML is exactly what this hosts. - [Host an agent-built dashboard](https://read.botook.ai/host-ai-dashboard): An agent can now build a bespoke dashboard faster than you can find the right saved view in an existing one. - [Host agent-written reports](https://read.botook.ai/host-ai-reports): Reports are the most common thing agents produce and the least well served by the tools around them. - [Host Storybook privately](https://read.botook.ai/host-storybook-privately): A built Storybook is a folder of static files, which means hosting it is a solved problem right up until you need it to be private. - [Make a Claude artifact private](https://read.botook.ai/make-claude-artifact-private): A published artifact is a public web page: anyone with the link can open it, and search engines can find it. - [Sharing one HTML file without a tunnel](https://read.botook.ai/ngrok-alternative-for-html): Reaching for a tunnel to show a colleague a page is a habit from when the page was served by something running locally. - [Send a client report as a link](https://read.botook.ai/send-client-report-as-link): The report is done. - [Share architecture diagrams](https://read.botook.ai/share-architecture-diagrams): Export the diagram to standalone HTML or SVG and publish it. - [Share Claude artifacts](https://read.botook.ai/share-claude-artifacts): Claude's own sharing is binary: the artifact stays inside the conversation, or it goes public. - [Share Claude-made designs privately](https://read.botook.ai/share-claude-designs): Claude produced a layout, a component, a landing-page draft. - [Send an HTML file to a client](https://read.botook.ai/share-html-file-with-client): An HTML attachment is the worst way to send a page: mail clients mangle it, corporate filters strip it, phones cannot open it, and you can never take it back. - [Share a Jupyter notebook](https://read.botook.ai/share-jupyter-notebook-html): Export the notebook to HTML and publish it privately. - [Share work with clients](https://read.botook.ai/share-with-clients): A private link they open in a browser: no account, no portal invitation, no password reset three weeks later. - [Use cases](https://read.botook.ai/use-cases): The same primitive — a document at a private link — turns out to be the answer to a surprising number of separate problems. - [An application platform is not the right unit](https://read.botook.ai/vercel-alternative-for-agents): This page is not an argument that application platforms are bad — they are very good, and this deployment does not do the things they are good at. - [Hosting what you vibe-coded](https://read.botook.ai/vibe-coding-hosting): The output of an afternoon of building-by-conversation is usually a single self-contained page, occasionally a real application. - [Leaving a website builder](https://read.botook.ai/website-builder-migration): Every website builder has some kind of export, and almost none of them hand you a site that works when you open it. ## Compared with other tools - [All comparisons](https://read.botook.ai/alternatives): Two kinds of page live here. - [Best private HTML hosting for agent output](https://read.botook.ai/best-private-html-hosting): A roundup written by one of the entrants, which is a reason to read it sceptically. - [Claude Teams artifact sharing alternative](https://read.botook.ai/claude-teams-artifact-sharing-alternative): Sharing an artifact inside a Claude Teams or Enterprise organization works — for people inside that organization, in a browser, with a seat. - [Client portal alternative](https://read.botook.ai/client-portal-alternative): A client portal is the right tool when a relationship is ongoing: many documents, many logins, a place that persists. - [Head-to-head comparisons](https://read.botook.ai/compare): Direct comparisons between hosting tools. - [GitHub Pages vs Vercel](https://read.botook.ai/compare/github-pages-vs-vercel): Neither of these is this deployment, and that is deliberate — a comparison section that only ever compares other tools against its own is a sales sheet. - [OpenTree vs ShareDuo](https://read.botook.ai/compare/opentree-vs-shareduo): ShareDuo is a sharing product for people with a file. - [Storybook vs Jupyter](https://read.botook.ai/compare/storybook-vs-jupyter): These do not compete: one documents a component library, the other narrates an analysis. - [Tiiny Host vs Netlify](https://read.botook.ai/compare/tiiny-host-vs-netlify): This is the smaller version of GitHub Pages versus Vercel, and it separates more cleanly. - [Drop vs Drop](https://read.botook.ai/compare/vercel-drop-vs-netlify-drop): The big platforms noticed that their own setup cost was losing them the small jobs, and each answered with a drop zone: drag a folder, get a live URL, skip the … - [Display.dev alternative](https://read.botook.ai/display-dev-alternative): Display.dev is workspace-first: you create an account, set up a workspace, and share HTML inside it. - [Private GitHub Pages alternative](https://read.botook.ai/github-pages-private-alternative): GitHub Pages publishes straight from a repository, and on most plans the result is public to the whole internet — private Pages needs Enterprise Cloud. - [here.now alternative](https://read.botook.ai/here-now-alternative): here.now is agent-first static hosting with a Sites surface and a Drives storage layer, authenticated with bearer API keys and no MCP server. - [OpenAI Codex Sites alternative](https://read.botook.ai/openai-codex-sites-alternative): Codex can launch what it builds to a public URL from inside ChatGPT. - [Repaint alternative](https://read.botook.ai/repaint-alternative): Repaint takes a Claude artifact and reshapes it into a public multi-page marketing website you keep editing by chatting. - [ShareDuo alternative](https://read.botook.ai/shareduo-alternative): Both tools let an agent hand you an artifact over MCP, and neither wants that artifact indexed. - [ShipPage alternative](https://read.botook.ai/shippage-ai-alternative): ShipPage turns agent HTML into a public URL in one call, on a free tier measured in days and publishes per month. - [Static.app alternative](https://read.botook.ai/static-app-alternative): Static.app grew up as a hosting product for people — an in-browser editor first, with an MCP server and API bolted on more recently. - [Tiiny Host alternative](https://read.botook.ai/tiiny-host-alternative): Tiiny Host is a drag-and-drop static host built for a person with a file. ## Writing - [Blog](https://read.botook.ai/blog): Everything here was written while the thing it describes was being built, which is why the posts contain corrections. - [The self-provisioning agent, and its cheaper alternative](https://read.botook.ai/blog/agent-paid-to-provision-itself): The self-provisioning agent — one that shows up, pays for its own credential, and gets to work with no human involved — is the scenario that sells machine … - [Publishing from the front page](https://read.botook.ai/blog/agent-publishes-from-the-browser): The shortest possible demonstration of a publish primitive is a text area and a button on the front page. - [What it looks like when an agent pays over a settlement network](https://read.botook.ai/blog/ai-agents-pay-over-mpp-tempo): The custodial variant hides settlement behind a balance. - [Artifacts in Claude Code, explained](https://read.botook.ai/blog/artifacts-in-claude-code-explained): When a model writes an HTML page, a chat client can render it in a side panel so you see the result, not the markup. - [Can you make an agent-published site public?](https://read.botook.ai/blog/can-you-make-a-codex-site-public): The literal question has a one-word answer: yes. - [Why an artifact can't give you a stable URL](https://read.botook.ai/blog/claude-artifact-cannot-republish): The complaint is rarely "I couldn't share it at all." It is "I shared it, then it changed, and now the link I sent is stale." That is the republish problem … - [Sharing an artifact publicly: what "public" should mean](https://read.botook.ai/blog/claude-artifacts-public-sharing): Sharing agent output with someone outside the conversation sounds like flipping a "public" switch. - [Metering gateways, and the one this deployment runs on but doesn't use](https://read.botook.ai/blog/cloudflare-monetization-gateway): The same edge platform that serves these pages has grown machinery for charging at the door: per-request metering, gateways that can demand payment before a … - [Putting an agent-published site on your own domain](https://read.botook.ai/blog/codex-sites-custom-domain): Sharing a random token is fine for a throwaway page and wrong for anything that represents you. - [The dashboard speaks WebMCP](https://read.botook.ai/blog/dashboard-speaks-webmcp): Every product's first instinct is to add a chat box. - [Do AI agents leak secrets when they publish?](https://read.botook.ai/blog/do-ai-agents-leak-secrets): The disclosure risk with agent output is not that the model is malicious. - [Engagement without recording who the reader is](https://read.botook.ai/blog/engagement-without-recording): An author genuinely wants to know if the thing they sent landed — was it opened, read to the end, ignored? - [How to add x402 to this deployment](https://read.botook.ai/blog/how-to-add-x402): This deployment charges nothing, but the account already carries a wallet identity, which is most of the awkward part. - [When a loop hits a paywall](https://read.botook.ai/blog/loop-engineering-paywall): The appeal of a long-horizon loop is that it ships while you sleep. - [Reading an MCP spec revision](https://read.botook.ai/blog/mcp-2026-spec-changes): Specification revisions arrive on their own schedule, and any "what changed in version X" list written here would be wrong within a quarter. - [When agents render HTML](https://read.botook.ai/blog/mcp-apps-html-ui): The extension that lets an MCP server return a rendered interface rather than text is a real change in what a tool call can be. - [Tools vs resources vs prompts](https://read.botook.ai/blog/mcp-resources-vs-tools-vs-prompts): Most confusion about the three MCP primitives comes from comparing them by shape — they all end with your server returning something. - [What an MCP server actually is](https://read.botook.ai/blog/mcp-servers-explained-for-developers): The Model Context Protocol is the thing that lets an assistant call your code. - [MPP vs x402: naming the same handshake twice](https://read.botook.ai/blog/mpp-vs-x402): People ask which to pick as if they were rivals. - [Embedding HTML in a doc, and why a link is stronger](https://read.botook.ai/blog/notion-html-block-explained): Document tools that render an embedded HTML block make it tempting to drop agent output straight into a page. - [Per-seat pricing breaks when the seat is a program](https://read.botook.ai/blog/per-seat-pricing-ai-agents): Software-as-a-service learned to bill per seat because a seat was a person, and people are a convenient unit: roughly one identity, roughly steady usage … - [Private-by-default hosting](https://read.botook.ai/blog/private-by-default-html-hosting): Static hosting has been public by default for its entire history, and privacy has been the paid tier. - [Sites in Codex, explained](https://read.botook.ai/blog/sites-in-codex-explained): When a coding agent can publish its own output as a site, the awkward hand-off — copy the markup, find a host, paste it somewhere — disappears. - [Skills vs MCP vs API](https://read.botook.ai/blog/skills-vs-mcp-vs-api): "Should we build a skill or an MCP server?" is the wrong question in the same way "should we build a database or a query language" is. - [Why pasting HTML into chat isn't sharing it](https://read.botook.ai/blog/slack-renders-html-attachments): The most common way agent output gets "shared" is the worst one: pasted into a chat as a block of markup, or dropped in as a file the client half-renders. - [The throwaway dashboard](https://read.botook.ai/blog/throwaway-dashboard): Ask an agent for "a page that shows error rate by endpoint for the last six hours" and you get one, correctly, in under a minute. - [What agents actually publish](https://read.botook.ai/blog/what-ai-agents-publish): A host for agent output should be designed around what agents actually emit, not around what a website is. - [What live artifacts are, from the reader's side](https://read.botook.ai/blog/what-are-claude-live-artifacts): "Live" means the render tracks the model's edits in real time. - ["Sites" from a chat assistant, and the primitive underneath](https://read.botook.ai/blog/what-is-chatgpt-sites): Every few months a chat product grows the ability to turn what it generated into a site you can open. - [A drop deploy on the platform this runs on](https://read.botook.ai/blog/what-is-cloudflare-drop): It is possible to run both a drag-and-drop deploy and a publish primitive on the same edge platform, because they are the same job with different front ends. - [Elicitation and sampling](https://read.botook.ai/blog/what-is-mcp-elicitation): Almost everything in MCP flows one way: the client asks, the server answers. - [Drag-and-drop deploys, and where the shape breaks for agents](https://read.botook.ai/blog/what-is-vercel-drop): Drop a folder, get a link. - [What a "quick" publish button really proves](https://read.botook.ai/blog/what-shopify-quick-proves): A commerce or content platform that grows a "publish this in one click" button is making an argument, whether or not it means to: that going from a finished … - [Why agents need a publish primitive](https://read.botook.ai/blog/why-agents-need-a-publish-primitive): An agent writes HTML the way a developer writes a commit: often, quickly, and mostly for one reader. - [x402 in production: the parts nobody demos](https://read.botook.ai/blog/x402-in-production): A payment handshake is easy to draw and easy to demo. - [x402 and MPP, explained without the hype](https://read.botook.ai/blog/x402-mpp-explained): An autonomous client cannot open a browser and type a card number, so a family of designs grew up to let it pay for a request directly. ## About this deployment - [About](https://read.botook.ai/about): A small, single-purpose product: publish a document to a private link. - [Changelog](https://read.botook.ai/changelog): This deployment was built in phases, each one gated by a test script that had to pass before the phase counted as done. - [Demo](https://read.botook.ai/demo): No video to watch — every step below is a command you can run right now, in order, and each one shows what it should print. - [FAQ](https://read.botook.ai/faq): Short answers, with links to the long ones. - [Machine payment protocol](https://read.botook.ai/mpp): A machine payment protocol lets a client pay for a request without a human in the loop: challenge, signed authorization, settlement, retry. - [Pricing](https://read.botook.ai/pricing): This is a self-hosted deployment. - [Privacy](https://read.botook.ai/privacy): What this service stores, why, and for how long. - [Self-host](https://read.botook.ai/self-host): Self-hosting is not a tier here, it is the only way it runs. - [Sub-processors](https://read.botook.ai/sub-processors): The third parties this deployment relies on to run. - [Terms](https://read.botook.ai/terms): Plain terms for a small service. - [Agent payments](https://read.botook.ai/x402): An autonomous client cannot fill in a checkout form, so hosted services grew a payment rail for agents: a challenge, a signed authorization, an on-chain …