关于 Stacktree
Stacktree 是用于将 HTML 页面发布到私密、难以猜测的 URL 并持续维护的 MCP 服务,面向需要分享页面和管理访问权限的 Agent 与 MCP 客户端。其工具还支持收集反馈、修订页面及管理版本。
主要功能
- 01发布到难以猜测的 URL
- 02保留 URL 更新页面
- 03密码与邮箱域名访问限制
- 04管理有效期、版本与恢复
- 05收集并处理页面反馈
适用场景
- 01向客户分享私密 HTML 内容
- 02更新已发布页面且不更换链接
- 03按密码或邮箱域名限制访问
- 04收集评论并跟踪审批
MCP 相关
Stacktree 向 MCP 客户端提供发布和页面管理工具,并支持 stdio 桥接及 https://api.stacktr.ee/mcp 托管端点。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://api.stacktr.ee/mcpclaude mcp add --transport http stacktree https://api.stacktr.ee/mcp{"mcpServers":{"stacktree":{"type":"http","url":"https://api.stacktr.ee/mcp"}}}在 Cursor 中打开{"servers":{"stacktree":{"type":"http","url":"https://api.stacktr.ee/mcp"}}}在 VS Code 中打开{"mcpServers":{"stacktree":{"type":"http","url":"https://api.stacktr.ee/mcp"}}}{"mcpServers":{"stacktree":{"serverUrl":"https://api.stacktr.ee/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
21| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| content | string | 是 | 要发布的完整 HTML。 |
| filename | string | 否 | |
| password | string | 否 | |
| expires_in_hours | any | 否 | |
| burn_after_read | boolean | 否 | |
| agentation | boolean | 否 | |
| public_slug | string | 否 | |
| pii_check | enum | 否 | off | warn | block |
| client | string | 否 | |
| client_path | string | 否 |
详细介绍
stacktree-mcp
适用于 stacktr.ee 的 MCP 服务。从任意 MCP 客户端(Claude Desktop、Claude Code、Cursor、Continue 等)发布 HTML 产物。
使用 Agent 设置
如果你已打开编码 Agent,把这一行交给它,它就会处理剩下的事 — 安装、验证连接,并了解工具的使用方式:
Fetch and follow the setup instructions at https://stacktr.ee/prompt.md
适用于任何能获取 URL 的 Agent。说明采用纯 Markdown 编写; 你也可以先阅读。
安装
添加到 MCP 客户端配置中:
{
"mcpServers": {
"stacktree": {
"command": "npx",
"args": ["-y", "stacktree-mcp"],
"env": { "STACKTREE_API_KEY": "stk_live_..." }
}
}
}
在 https://app.stacktr.ee 生成 API 密钥。
你可能不需要这个软件包
这是 stdio 桥接程序,适用于无法使用可流式传输 HTTP 的客户端。
如果你的客户端可以使用,则直接连接托管服务:
https://api.stacktr.ee/mcp。它提供相同的 42 个工具,并使用相同的密钥:
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":{}}'
无需浏览器,也不需要 OAuth 流程:stk_live_ 密钥可作为 MCP 端点的有效凭据,就像在 REST API 中一样。对于代表已登录用户行事的连接器,也接受带动态客户端注册的 OAuth 2.1;不接受会话 Cookie。请发送一种凭据。
没有密钥,也没有人可以询问?发送 POST https://api.stacktr.ee/provision,通过 x402 获取密钥。附近有人但没有浏览器?发送 POST https://api.stacktr.ee/api-keys/device-code,向对方显示返回的
verification_url_complete,然后轮询
/api-keys/device-code/poll,直到返回密钥(RFC 8628)。
工具
| 工具 | 功能说明 |
|---|---|
publish_html | 发布 HTML;返回 { url, id, expires_at, ... }。传入 client 可将其归入某个客户空间。 |
update_site | 原位替换现有网站的 HTML;URL 保持不变。 |
get_site | 读取网站当前的 HTML 源码 — 编辑后调用 update_site。 |
set_password | 添加或清除密码保护。所有套餐均可使用。 |
set_expiry | 设置从现在起算的过期小时数,或设为 null 表示永不过期。过期时间会限制在套餐上限内。 |
set_email_gate | 限制只有特定电子邮件域名的用户才能查看(通过一次性魔法链接验证)。仅限付费套餐。 |
set_client_feedback | 让你发送页面的对象发表评论(文字、图片、视频)并作出回应,无需账号。 |
set_agentation | 较旧的开发者标注工具栏。建议使用 set_client_feedback。 |
list_sites | 列出此 API 密钥拥有的网站。支持分页(has_more + 游标);可按 client 筛选。 |
delete_site | 下线页面。链接会立即失效;内容保留 30 天后销毁。 |
restore_site | 在 30 天保留期内,将已删除或过期的页面恢复到原 URL。 |
claim_site | 使用页面的 claim_token,认领在未登录账号时发布的页面。URL 不变;认领计为一次发布。 |
get_content | 以 html(完全按存储内容返回,可编辑)或 text(去除格式,读取成本低)的形式读取页面。 |
get_me | 此密钥对应账号的套餐、用量和强制执行的 limits。请从此处读取限制,切勿根据描述推断。 |
link_wallet | 关联你的钱包,使你发布的页面归你的账号所有。 |
list_feedback | 读取客户端评论,未解决的排在前面;每条评论都会显示相关内容及其是否仍在页面上。 |
create_share_link | 创建一个发给特定对象的链接 — 每次通过该链接打开页面,都会归因到该对象的姓名。 |
list_share_links | 列出页面的链接、归因的打开次数以及每个链接的最近打开时间。 |
revoke_share_link | 使单个链接失效;页面和其他所有链接仍可正常使用。 |
resolve_feedback | 将一条反馈标记为已处理,可附带备注。 |
set_client | 按名称或 slug 将页面归入某个客户空间(不存在时会自动创建),或设为 null 以解除关联。 |
list_client_spaces | 列出账号中的客户空间:页面数量、绑定的主机名和门户状态。 |
create_client_space | 提前创建空间。通常无需使用 — 发布时传入 client 会自动创建空间。 |
update_client_space | 重命名、归档空间,或设置该空间下所有页面继承的统一查看限制。 |
delete_client_space | 删除空间。其页面会解除关联,URL 保持不变。 |
get_design_guide | 产品的设计指南 — 生成页面或调整页面样式前请先阅读。 |
get_passcode | 显示你拥有的页面的密码,以便再次发送给客户(2026 年 9 月 13 日之后设置的密码)。 |
list_versions | 列出页面的历史版本,按时间从新到旧排列:每次更新对应一个快照。 |
restore_version | 更新出错后,将较早的版本恢复到原 URL。 |
whos_it_for | 记录页面面向的对象,并获取他们专属的链接。不会发送任何内容。 |
unopened_pages | 列出发出一小时后仍未打开的页面及指定对象。 |
get_revision_brief | 获取页面收到的所有反馈,作为下一版本的修改概要。 |
publish_revision | 原位替换页面,并一次性解决所回应的评论。 |
resolve_comments | 一次解决多条评论,并为每条添加审核者可见的备注。 |
request_approval | 邀请指定对象审批页面;每人获得一个专属链接。 |
get_approval_status | 查看哪些人已批准当前发布的版本,按章节列出。 |
list_responses | 查看读者通过页面上标记的表单提交的内容。 |
resolve_addressed_notes | 关闭更新已回应的审核者备注,每条附上一行说明。 |
open_html_file | 在 ChatGPT 桌面版的文件查看器中打开 .html 文件。此处只会原样返回该文件。 |
stacktree_pages | 你最近的 25 个页面:ChatGPT 的页面面板。数据与 list_sites 相同。 |
publish_card_status | 刷新 ChatGPT 和 Claude 中的发布卡片。此处会返回页面详情。 |
publish_card_open | 发布卡片上的“打开”按钮:生成一个有效期为 15 分钟的页面所有者预览链接。 |
链接钱包
如果你的 Agent 使用自己的钱包支付发布费用(x402 / MPP),请将该钱包链接到你的 Stacktree 账户,这样它发布的每个页面(包括过去和未来发布的页面)都会归属于该账户:
- 由你的人工用户在 https://app.stacktr.ee/wallets 生成链接代码。
link_wallet({ code })→ 返回要签名的确切消息。- 使用你的钱包对其签名(
personal_sign)。 link_wallet({ code, wallet, signature })→ 链接钱包,并接管它已发布的页面。
阅读反馈
使用 set_client_feedback 开启评论。你分享链接的对象可以选中文字,或点击图片、视频或某个版块并发表评论;只有所有者能看到这些评论。list_feedback 会返回评论,未解决的排在前面,每条评论都包含一行 target 和 on_page(目标内容仍在页面中,还是已因编辑而消失)。使用 update_site 在原处修复页面(URL 不变):响应会列出哪些未解决的评论与新版本不再匹配。然后对每条已处理的评论调用 resolve_feedback,并附上一条简短说明,客户端会在评论旁看到这条说明。
隐私政策
完整政策:https://stacktr.ee/privacy。简而言之:
- 收集内容。 此服务会将你要求发布的内容(HTML 和文件)以及你的工具调用发送到
https://api.stacktr.ee,并使用你的 Stacktree API 密钥进行身份验证。除此之外,它不会收集你设备上的任何信息,也不会在本地存储数据。 - 用途和存储方式。 发布的文件存储在 Cloudflare R2 中,页面元数据(URL、可见性、过期时间、密码哈希、浏览量)存储在 Cloudflare D1 中,以便提供页面服务。你为每个页面单独开启的可选功能(例如设计优化、询问此页面和页面视频)会将该页面的文本发送给政策中列出的 AI 服务,并遵循排除将其用于训练的条款。
- 共享。 Stacktree 不出售个人数据。它仅与运行服务所需的子处理商共享数据,这些子处理商列于政策中(例如用于登录的 Cloudflare、Clerk,以及用于账单处理的 Stripe)。
- 保留期限。 页面会保留到过期或被删除为止;之后,内容会保留 30 天以便恢复,随后销毁。服务日志会保留 30 天,其中的 IP 地址经过哈希处理。
- 联系。 [email protected]
默认隐私设置
每个站点都会获得一个无法猜测的 https://stacktr.ee/p/{token}/ URL。传入 public_slug 即可选择使用 https://{slug}.stacktr.ee/。
pii_check 默认为 block——拒绝上传与常见机密信息和个人身份信息特征相符的内容(邮箱、SSN、信用卡信息、OpenAI/GitHub/Stripe API 密钥前缀)。传入 warn 即可仍然发布(匹配项会在响应中标记),传入 off 则跳过扫描。
免费套餐包含的内容
免费套餐的密钥总共可发布 3 个页面,每个页面在发布 7 天后过期。次数按生命周期计算,而非按同时存在的页面数计算:删除页面或等待页面过期,都不会返还名额。
对于限制页面有效期的套餐,expires_in_hours: "never" 会被拒绝,而不会悄悄缩短有效期:返回 409 expiry_clamped,不发布任何内容,并在响应正文中附上页面原本会获得的日期。传入 accept_clamp: true 即表示接受有效期上限,或者告知用户该套餐无法生成永久链接。超过上限的数字会被缩短,而非拒绝,响应中会包含 expiry_clamped: true。无论哪种情况,都要从响应中读取 expires_at_iso 并引用其中的值,切勿引用你请求的值。
密码(set_password)在所有套餐中均可用,包括免费套餐。邮件验证门(set_email_gate)和查看者数量限制仅适用于付费套餐。达到上限时会返回 HTTP 402,error 中包含稳定的 plan_* 代码:
| 代码 | 含义 |
|---|---|
plan_lifetime_limit_exceeded | 免费套餐的 3 个页面名额已用完。删除页面也无济于事。 |
plan_site_limit_exceeded | 已达到活跃页面上限。 |
plan_password_not_available | 此套餐不提供密码功能(免费套餐提供此功能;某些套餐仍可能不提供)。 |
plan_viewer_gate_not_available | 此套餐不提供邮件验证门。 |
plan_domain_not_available | 此套餐不提供自定义域名。 |
GET /me — 或 get_me 工具 — 会返回调用密钥自身的 limits 对象。请从中读取上限,而不要将其硬编码。当前套餐和价格:https://stacktr.ee/pricing.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。