Stacktree

ee.stacktr由 stacktr.ee 發布官方發布者v0.8.3更新於 Oct 24, 2026

Publish HTML to private, unguessable, replace-in-place URLs from any MCP-compatible AI agent.

已驗證Streamable HTTP可網頁執行效率與工作流檔案與儲存溝通與協作

概覽

AI 產生的概覽

Stacktree 將 HTML 頁面發佈到 stacktr.ee 上無法猜測的私有網址,並管理這些頁面:更新、密碼、到期、回饋、審核與客戶空間。

可以做什麼
發佈 HTML 頁面並在維持同一網址的情況下原地替換內容,也可把頁面讀回為原始碼或純文字,並還原歷史版本或 30 天內刪除的頁面。用密碼、到期時間、電子郵件網域限制和針對個人的分享連結控制存取,並可列出、撤銷連結或查看開啟紀錄。收集並處理已發佈頁面上的客戶回饋、留言、表單回覆和審核請求。把頁面歸入客戶空間,列出網站與帳戶額度,並連結錢包讓已發佈頁面歸屬於該帳戶。
適用情境
適合讓助理把產生的 HTML、報告或原型變成可分享的私有連結,再搭配客戶留言與審核反覆修改。也適合需要依收件人產生連結、以密碼或到期控制存取,或追蹤誰開啟過頁面的流程。
執行需求
可使用託管的 streamable HTTP 端點,或在本地以 npx 執行 npm 套件 stacktree-mcp(需要 Node.js)。必須驗證:透過 STACKTREE_API_KEY 傳入 API 金鑰,或使用含動態用戶端註冊的 OAuth 2.1。金鑰在 Stacktree 網頁應用程式產生,也可透過 x402 購買或經裝置碼流程取得。需要能存取 Stacktree API 的網路。
安裝前請注意
發佈會把你提供的 HTML 和檔案以及工具呼叫傳送到 Stacktree 伺服器,並存放在 Cloudflare R2 和 D1;選用的單頁功能會把頁面文字傳送給指定的 AI 服務。除非設定密碼、電子郵件限制或到期時間,頁面會以無法猜測的網址公開存取。刪除頁面後內容仍保留 30 天。免費方案總共只能發佈 3 個頁面,每個 7 天後到期,刪除不會釋出名額;付費功能會回傳 402 錯誤。連結錢包需要簽署錢包訊息。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Stacktree,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/ee.stacktr%2Fpublish/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "stacktree": {
      "type": "http",
      "url": "https://api.stacktr.ee/mcp"
    }
  }
}

README

stacktree-mcp

MCP server for stacktr.ee. Publish HTML artifacts from any MCP client (Claude Desktop, Claude Code, Cursor, Continue, etc).

Set up with an agent

If you have a coding agent open, hand it this line and it does the rest — installs, verifies the connection, and learns the tool surface:

Fetch and follow the setup instructions at https://stacktr.ee/prompt.md

Works in any agent that can fetch a URL. The instructions are plain Markdown; read them first if you like.

Install

Add to your MCP client config:

json
{  "mcpServers": {    "stacktree": {      "command": "npx",      "args": ["-y", "stacktree-mcp"],      "env": { "STACKTREE_API_KEY": "stk_live_..." }    }  }}

Generate an API key at https://app.stacktr.ee.

You may not need this package

This is the stdio bridge, for clients that cannot speak streamable HTTP. If yours can, connect straight to the hosted server at https://api.stacktr.ee/mcp, which exposes the same 42 tools and takes the same key:

bash
curl -sS -X POST https://api.stacktr.ee/mcp \  -H "Authorization: Bearer $STACKTREE_API_KEY" \  -H 'accept: application/json, text/event-stream' \  -H 'content-type: application/json' \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

No browser and no OAuth flow is required to do that: an stk_live_ key is a valid credential on the MCP endpoint, exactly as it is on the REST API. OAuth 2.1 with Dynamic Client Registration is also accepted, for connectors acting on behalf of a signed-in human; session cookies are refused. Send one credential.

No key, and no human to ask? POST https://api.stacktr.ee/provision buys one over x402. A human nearby but no browser? POST https://api.stacktr.ee/api-keys/device-code, print the returned verification_url_complete for them, and poll /api-keys/device-code/poll until it returns the key (RFC 8628).

Tools

ToolWhat it does
publish_htmlPublish HTML; returns { url, id, expires_at, ... }. Pass client to file it under a client space.
update_siteReplace the HTML of an existing site in place; URL is preserved.
get_siteRead a site's current HTML source — edit it, then update_site.
set_passwordAdd or clear a passcode gate. Works on every plan.
set_expirySet hours-from-now expiry, or null for never. Clamped to the plan ceiling.
set_email_gateRestrict viewers to an email domain (one-time magic-link verify). Paid plans only.
set_client_feedbackLet the people you send a page to comment on it (words, images, video) and react, with no account.
set_agentationOlder developer mark-up toolbar. Prefer set_client_feedback.
list_sitesList sites owned by this API key. Paged (has_more + cursor); filter with client.
delete_siteTake a page down. The link dies at once; the content is kept 30 days, then destroyed.
restore_sitePut a deleted or expired page back at the same URL, inside those 30 days.
claim_siteAdopt a page published without an account, using its claim_token. Same URL; a claim counts as a publish.
get_contentRead a page back as html (exact stored source, editable) or text (stripped, cheap to read).
get_meThis key's account, plan, counts and enforced limits. Read limits from here, never from a description.
link_walletLink your wallet so pages you publish are owned by your account.
list_feedbackRead client comments, unresolved first, each with what it is on and whether it is still on the page.
create_share_linkMint a link addressed to one person — every open through it is attributed to that name.
list_share_linksThe links on a page, with attributed opens and when each was last opened.
revoke_share_linkKill one link; the page and every other link keep working.
resolve_feedbackMark a feedback item addressed, with an optional note.
set_clientFile a page under a client space by name or slug (auto-created), or null to detach.
list_client_spacesThe client spaces on the account: page counts, bound hostname, portal state.
create_client_spaceCreate a space up front. Rarely needed — publishing with client creates one.
update_client_spaceRename, archive, or set the space-wide viewer gate every page under it inherits.
delete_client_spaceRemove a space. Its pages detach and keep their URLs.
get_design_guideThe house design guide — read it before generating or restyling a page.
get_passcodeShow the passcode on a page you own, to send it to the client again (passcodes set since 13 September 2026).
list_versionsEarlier versions of a page, newest first: one snapshot per update.
restore_versionPut an earlier version back at the same URL after a bad update.
whos_it_forRecord who a page is for and get their own link. Sends nothing.
unopened_pagesPages, and named people, that have not opened what was sent an hour on.
get_revision_briefEverything that came back on a page, as the brief for its next version.
publish_revisionReplace a page in place and resolve the comments it answers, in one step.
resolve_commentsResolve several comments at once, each with a note the reviewer sees.
request_approvalAsk named people to approve a page; one private link each.
get_approval_statusWho has approved the version that is live now, section by section.
list_responsesWhat readers sent through the forms marked on a page.
resolve_addressed_notesClose the reviewers' notes an update answered, with one line each.
open_html_fileOpens an .html file in ChatGPT desktop's file viewer. Here it only echoes the file back.
stacktree_pagesYour 25 newest pages: ChatGPT's pages panel. Same data as list_sites.
publish_card_statusRefreshes the publish card in ChatGPT and Claude. Here it returns the page's detail.
publish_card_openThe publish card's Open button: a 15-minute owner preview link to a page.

Linking a wallet

If your agent pays for publishes from its own wallet (x402 / MPP), link that wallet to your Stacktree account so every page it publishes — past and future — is owned there:

  1. Your human generates a link code at https://app.stacktr.ee/wallets.
  2. link_wallet({ code }) → returns the exact message to sign.
  3. Sign it with your wallet (personal_sign).
  4. link_wallet({ code, wallet, signature }) → links the wallet and adopts the pages it already published.

Reading feedback

Turn comments on with set_client_feedback and whoever you sent the link to can select words, or click an image, video or section, and leave a comment only the owner sees. list_feedback returns them, unresolved first, each with a one-line target and on_page (still in the page, or gone since an edit). Fix the page in place with update_site (same URL): its response lists which open comments no longer match the new version. Then resolve_feedback each answered one with a short note, which the client sees next to their comment.

Privacy Policy

Full policy: https://stacktr.ee/privacy. In short:

  • What is collected. This server sends what you ask it to publish (the HTML and files) and your tool calls to https://api.stacktr.ee, authenticated with your Stacktree API key. It collects nothing from your machine beyond that and keeps no local data.
  • How it is used and stored. Published files are stored in Cloudflare R2 and page metadata (URL, visibility, expiry, password hash, view counts) in Cloudflare D1, to serve your pages. Optional features you switch on per page, such as the design pass, Ask this page and page video, send that page's text to the AI services named in the policy, under terms that exclude training on it.
  • Sharing. Stacktree does not sell personal data. It shares data only with the sub-processors needed to run the service, listed in the policy (for example Cloudflare, Clerk for sign-in, Stripe for billing).
  • Retention. A page lives until it expires or you delete it; after that the content is kept 30 days so it can be restored, then destroyed. Serving logs are kept 30 days with IP addresses hashed.
  • Contact. [email protected]

Privacy defaults

Every site gets an unguessable https://stacktr.ee/p/{token}/ URL. Pass public_slug to opt into https://{slug}.stacktr.ee/.

pii_check defaults to block — uploads matching common secrets and PII shapes (emails, SSNs, credit cards, OpenAI/GitHub/Stripe API-key prefixes) are refused. Pass warn to publish anyway (matches are flagged in the response), or off to skip the scan.

What the free plan gives you

A key on the free plan publishes 3 pages in total, and each one expires 7 days after it is published. The count is lifetime, not concurrent: deleting a page or letting it expire does not give the slot back.

expires_in_hours: "never" is refused on a plan that caps page lifetime, not quietly shortened: 409 expiry_clamped, nothing published, and the body carries the date the page would have got. Pass accept_clamp: true to take the ceiling, or tell the user the plan cannot make the link permanent. A number longer than the ceiling is shortened rather than refused, with expiry_clamped: true in the response. Either way, read expires_at_iso off the response and quote that, never the value you asked for.

Passcodes (set_password) work on every plan, free included. Email gates (set_email_gate) and viewer numbers are on paid plans. Hitting a ceiling returns HTTP 402 with a stable plan_* code in error:

CodeMeans
plan_lifetime_limit_exceededAll 3 free pages used. Deleting one does not help.
plan_site_limit_exceededActive-page cap reached.
plan_password_not_availablePasscodes are not on this plan (they are on Free; a plan can still be without them).
plan_viewer_gate_not_availableEmail gates are not on this plan.
plan_domain_not_availableCustom domains are not on this plan.

GET /me — or the get_me tool — returns the calling key's own limits object. Read caps from there rather than hard-coding them. Current plans and prices: https://stacktr.ee/pricing.md.

來源:README.md,提交 6bc5a8a

工具

0
該伺服器需要登入,因此 SourceWeft 無法在沒有帳號的情況下讀取其工具,也未收錄。已連接帳號所能看到的內容可能因帳號及其權限而異。

版本歷史

4
  1. v0.8.3最新Oct 22, 2026
  2. v0.8.2Oct 13, 2026
  3. v0.8.1Oct 10, 2026
  4. v0.6.0Sep 16, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分