OpenTree DashboardSign in

~ read.botook.ai

A private link for the HTML your agents write

Add the MCP server once. After that your agent publishes straight to an unguessable URL — no build step, no DNS, no hosting account for whoever opens it.

install the server
$npx -y opentree-mcp
# works withClaudeClaude CodeChatGPTOpenAI CodexCursorSlackMCPcurl

Or publish directly — no install, no account

Everything the MCP tools do is an ordinary HTTP call underneath. One curl is a complete integration:

curl -X POST https://read.botook.ai/v1/publish -F file=@index.html

That is it. You now have a link to share. Send it to a client or to your team — they open it in a browser with no account, no login and nothing to download. Add a password or point one of your own custom domains at it whenever you want.

Three steps, then it stops being your problem

1 · Your agent publishesIt calls publish_html over MCP, or posts the file to /sites. The page title is read out of the document — you do not have to name anything.
2 · You get a private linkA random, unlisted token. Never indexed, never listed, expires on a schedule you set, and hard-deleted from storage when it does.
3 · The link never changesRe-run update_site on the next loop and the content is replaced in place. Whoever you already sent it to keeps seeing the current version.

What every published page gets by default

DefaultWhat it means
VisibilityUnlisted. The URL carries a 22-character random token; nothing is listed publicly.
Expiry7 days for a keyed publish, 24 hours for an anonymous one. Pass never to keep it.
After expiryThe row and the stored object are both deleted by a scheduled purge, not just hidden.
RobotsX-Robots-Tag: noai, noimageai, noindex on every viewer response.
ReferrersReferrer-Policy: no-referrer, so the token never leaks into someone else's logs.
ScriptsA strict Content-Security-Policy: no third-party scripts, no eval.
Sensitive dataContent is scanned before it is stored; a hit blocks the publish unless you override.
TransportHSTS with a long max-age; the viewer is HTTPS-only.

None of that is a paid tier here — this deployment runs on your own infrastructure, so the limits are whatever you put in wrangler.toml. See pricing for the full story, and security for how the viewer is locked down.

Connect an agent

The server speaks MCP over Streamable HTTP, with either a bearer API key or a full OAuth 2.1 authorization-code flow with PKCE and dynamic client registration. For a terminal client:

claude mcp add --transport http opentree https://read.botook.ai/mcp \
  --header "Authorization: Bearer otr_live_YOUR_KEY"

For anything that reads a JSON config file — Cursor, Codex, a desktop client:

{
  "mcpServers": {
    "opentree": {
      "type": "http",
      "url": "https://read.botook.ai/mcp",
      "headers": { "Authorization": "Bearer otr_live_YOUR_KEY" }
    }
  }
}

Twelve tools show up: publish_html, update_site, get_site, list_sites, delete_site, set_password and six more. Per-client walkthroughs live on the integrations page; the full reference is in the docs.

Go on, paste something

No agent and nothing installed? Drop an artifact's HTML in here and get a private link right now. Everything below happens against the same anonymous endpoint your agent would use.

No install, no account. The link is unlisted and self-destructs in 24 hours — sign in afterwards to claim it and keep it.

POST https://read.botook.ai/v1/publish
Anonymous publishes are rate-limited per IP and expire in 24 hours. Sign in to the dashboard and claim one to make it permanent, add a password, or move it onto a custom domain.