# Stacktree — full reference > Source of truth for AI assistants summarising Stacktree. Last updated 2026-10-15. ## What Stacktree is Stacktree is an MCP-native publish primitive for HTML emitted by AI agents. When an AI agent (Claude Code, OpenAI Codex, Cursor, Claude.ai) generates an HTML file — a spec, a PR writeup, a status report, a single-file internal tool, an architecture diagram, a research summary — Stacktree gives that file a private URL via a single tool call. The agent calls `publish_html` and receives an unguessable URL back. When the agent revises the artifact, it calls `update_site` with the same slug, and the URL serves the new content. The URL never changes. Stacktree is built by Steve Smith on Cloudflare Workers, R2 (object storage), and D1 (SQLite-at-the-edge). The MCP server is published to npm as `stacktree-mcp`. ## Why it exists AI agents emit a surprising amount of HTML. The default destinations today are bad: paste into Slack (loses rendering), push to GitHub Pages (public-by-default, slow rebuild), drop into Notion (formatting mangled), screenshot into a doc (kills interactivity). Stacktree exists because that gap deserved a primitive, not a workflow. One verb to publish. One verb to replace. Done. ## The tool calls The Stacktree MCP server exposes 41 verbs. The hosted server at api.stacktr.ee/mcp takes either an `stk_live_` API key or an OAuth 2.1 access token, so an unattended agent needs no browser to reach them. This list is generated from the server itself, so it is exactly what `tools/list` answers: 1. `publish_html` — Turn HTML into a link a person can open in a browser. It only ever creates a new page: it never changes or deletes one that already exists (update_site replaces a page in place). 2. `update_site` — Replace the HTML of an existing site in place. The URL stays the same, so everyone you already sent it to sees the new version without being sent anything. 3. `delete_site` — Take a page down. The link goes dead immediately for everyone holding it, and the content is kept for 30 days: restore_site puts it back at the same URL, with the same id, token, slug and read history, any time in that window. 4. `restore_site` — Restore a page that was deleted or expired in the last 30 days. 5. `claim_site` — Adopt a page that was published without an account into the account this connection is authenticated as. 6. `set_password` — Set or clear (null) the passcode viewers type to open a page. 7. `set_expiry` — Set hours-from-now expiry, or null for never. A number longer than the plan allows is shortened to the ceiling and the response says so (expiry_clamped: true). 8. `create_share_link` — Create a separate link to one of the user's pages for a single recipient, labelled with who it is for. 9. `list_share_links` — List the share links on one of the user's pages: each link's id, label, expiry, use limit and whether it was revoked, with how many times it has been opened and when it was last opened. 10. `revoke_share_link` — Kill one share link. The page and every other link keep working — this is how you cut off one recipient without re-issuing anything to the others. 11. `set_client_feedback` — Switch how the people you send a page to can answer on it, with no account. comments: they select words, or click an image, video or section, and leave a comment only the owner sees (read them with list_feedback, fix the page with update_site, then… 12. `set_email_gate` — Restrict viewer access to an email domain, to named people, or both. 13. `list_sites` — List sites owned by the authenticated user, newest-updated first. 14. `get_me` — Who this connection is publishing as, and what its plan actually allows. 15. `list_client_spaces` — List the client spaces on this account: slug, name, page_count, last activity, hostname (the space’s own address, e.g. acme.theiragency.com, when one is connected) and portal_enabled (whether the space serves a generated client portal at that address). 16. `set_client` — File an existing site under a client space (by name or slug, auto-created), or pass client: null to detach it to a floating page. 17. `create_client_space` — Create a client space before anything is published into it. Rarely needed: publish_html with a client argument auto-creates the space under the same casing and slug rules, so use this only when the user is setting a client up ahead of the work. 18. `update_client_space` — Rename a client space, archive or unarchive it, or set the viewer gate that covers every page in the space. 19. `delete_client_space` — Delete a client space. The pages filed under it are NOT deleted: they detach to floating pages and keep working on their existing URLs, so delivered work stays reachable. 20. `get_design_guide` — Fetch the Stacktree house design guide for improving a published page. 21. `get_site` — Read the current HTML source of a site you own, so you can edit it and call update_site to change it in place. 22. `get_content` — Read a page’s content back. format "html" (the default) returns the exact stored index.html, byte for byte, which is the only form you can edit and hand to update_site; format "text" returns the same page stripped to plain text — no markup, CSS, scripts or… 23. `get_passcode` — Show the passcode set on a page this account owns, so it can be sent to the client again. 24. `list_versions` — List earlier versions of a page this account owns, newest first. 25. `restore_version` — Put an earlier version of a page back at the same URL, after a bad update. 26. `list_feedback` — Read viewer comments left on a site, unresolved first. 27. `resolve_feedback` — Mark a feedback item as addressed after fixing the page. Pass the feedback item id from list_feedback, and a short note describing what you changed: the reviewer who left the comment sees it on the page. 28. `link_wallet` — Link your wallet to a Stacktree account so the pages you publish are owned there — and adopt the ones you already published. 29. `whos_it_for` — Record who a published page is for, by name, and get back that person’s own link to hand over. 30. `unopened_pages` — The pages, and the named people, that have not opened what was sent to them an hour after it went up, newest first. 31. `get_revision_brief` — Everything that came back on one page, as the brief for its next version: the reviewer's change requests, their questions grouped by theme, their approvals, the notes the owner left on their own page as a fix list, each with the exact passage or image it is… 32. `publish_revision` — Publishes the new version of a page that has feedback and resolves the comments it answers, in one step. 33. `resolve_comments` — Resolves several comments on one page in one call, each with a short note, plus one optional message back to the reviewer. 34. `request_approval` — Get a named person's yes on a page. Publishes the HTML (or uses a page already published) with a sign-off panel, and makes one private link per approver that carries their name. 35. `get_approval_status` — Where an approval request stands. state is "approved" only when every approver has approved the version that is live now (the whole page, or every section); "changes_requested" when anyone has asked for a change; otherwise "pending". 36. `list_responses` — What readers sent through the forms on a page. A form in published HTML marked