MCP server for stacktr.ee: publish HTML privately from any AI agent (Claude Code, Codex, Cursor, Claude.ai). Unguessable, replace-in-place URLs, passcodes, and who opened it.
stacktree-mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
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:
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:
Generate an API key at .
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:
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
| Tool | What it does |
| ------------------ | --------------------------------------------------------------------------- |
| publish_html | Publish HTML; returns { url, id, expires_at, ... }. Pass client to file it under a client space. |
| update_site | Replace the HTML of an existing site in place; URL is preserved. |
| get_site | Read a site's current HTML source — edit it, then update_site. |
| set_password | Add or clear a passcode gate. Works on every plan. |
| set_expiry | Set hours-from-now expiry, or null for never. Clamped to the plan ceiling.|
| set_email_gate | Restrict viewers to an email domain (one-time magic-link verify). Paid plans only. |
| set_client_feedback | Let the people you send a page to comment on it (words, images, video) and react, with no account. |
| set_agentation | Older developer mark-up toolbar. Prefer set_client_feedback. |
| list_sites | List sites owned by this API key. Paged (has_more + cursor); filter with client. |
| delete_site | Take a page down. The link dies at once; the content is kept 30 days, then destroyed. |
| restore_site | Put a deleted or expired page back at the same URL, inside those 30 days. |
| claim_site | Adopt a page published without an account, using its claim_token. Same URL; a claim counts as a publish. |
| get_content | Read a page back as html (exact stored source, editable) or text (stripped, cheap to read). |
| get_me | This key's account, plan, counts and enforced limits. Read limits from here, never from a description. |
| link_wallet | Link your wallet so pages you publish are owned by your account. |
| list_feedback | Read client comments, unresolved first, each with what it is on and whether it is still on the page. |
| create_share_link| Mint a link addressed to one person — every open through it is attributed to that name. |
| list_share_links | The links on a page, with attributed opens and when each was last opened. |
| revoke_share_link| Kill one link; the page and every other link keep working. |
| resolve_feedback | Mark a feedback item addressed, with an optional note. |
| set_client | File a page under a client space by name or slug (auto-created), or null to detach. |
| list_client_spaces | The client spaces on the account: page counts, bound hostname, portal state. |
| create_client_space | Create a space up front. Rarely needed — publishing with client creates one. |