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 分