OpenTree DashboardSign in

$ curl -F file=@page.html …

Publish from the browser, or from one HTTP call

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 link in seconds, or wire the curl below into whatever you are building.

Publish something now

No install and no account. The link is unlisted and self-destructs in 24 hours — sign in afterwards to claim it and keep it. Paste the HTML, or drop an .html, .md, .svg or .zip:

POST https://read.botook.ai/v1/publish

The same thing, as one curl

Copy this and it is a complete integration — the response carries the shareable URL:

curl publish command
curl -X POST https://read.botook.ai/sites \
  -H "Authorization: Bearer otr_live_YOUR_KEY" \
  -F file=@index.html

From an agent, over MCP

Register the server once and publishing becomes a tool call the agent makes mid-task:

npx -y opentree-mcp

After that, "publish this and give me the link" resolves to publish_html, and "update it" resolves to update_site against the same URL.

Add a key to keep and update it

The anonymous route above is for throwaway output. With a key you get a stable id you can rewrite in place:

# first publish returns an id
curl -X POST https://read.botook.ai/sites \
  -H "Authorization: Bearer otr_live_YOUR_KEY" -F file=@page.html
# later, same link, new bytes
curl -X PUT https://read.botook.ai/sites/SITE_ID \
  -H "Authorization: Bearer otr_live_YOUR_KEY" -F file=@page.html

The steps, if you would rather read them

  1. Paste or drop above, or run the curl — either returns a URL with a 22-character token.
  2. Add a password here, or a gate later with set_password / set_email_gate.
  3. Send the link. The reader opens it with no account and nothing to install.
  4. Ask for changes; update_site keeps the same URL.
  5. Read what the reader did when you want to know it landed.

Questions

Do the buttons here really publish?

Yes — they POST to /v1/publish, the same anonymous endpoint the curl uses. What comes back is a real link you can open.

What formats can I drop?

A single .html / .htm, a .md file (rendered to a document), an .svg (hosted as-is), or a .zip for a multi-file site.

How do I get an API key?

From the dashboard at /app. The anonymous route needs none; the key is for keeping and updating sites.

Keep reading