stacktree-dsh
Publish HTML from DeepSeek Harness to a private, live URL. No account for the viewer, unguessable links, replace in place. DSH plugin (Cordis overlay) for the Stacktree MCP server.
- Stars
- 0
- Language
- —
- Created
- Aug 18, 2026
- Updated
- Aug 18, 2026
Introduction
stacktree-dsh
Publish HTML from DeepSeek Harness to a private, live URL.
DSH is very good at making things — a report, an audit, a dashboard, a proposal. It is not built to put one in front of a person who is not at your terminal. This plugin adds that step: your agent calls one tool and gets back a URL that opens in any browser, with no account for whoever you send it to.
Links are unguessable by default, not crawlable, and replace in place — so a URL you already sent keeps showing the current version instead of going stale.
Install
Stacktree speaks MCP, so this is a Cordis overlay rather than a package to build. Pick a transport.
Hosted — nothing to install:
export STACKTREE_API_KEY=stk_live_... # https://app.stacktr.ee/api-keys
dsh web --patch "$PWD/stacktree-hosted.cordis.yml"
Local — runs stacktree-mcp as a child process:
export STACKTREE_API_KEY=stk_live_...
dsh web --patch "$PWD/stacktree.cordis.yml"
To keep it across runs, merge the overlay's single insert patch into $DSH_HOME/profiles/<name>/cordis.patch.yml for one profile, or $DSH_HOME/cordis.patch.yml for every profile. Do not overwrite an existing file — it may hold unrelated patches.
No key yet? A funded agent can buy one without a human: POST https://api.stacktr.ee/provision returns a 402, pay $1 over x402 (USDC on Base) and the response carries a persistent key. One-off page instead: POST the HTML to https://agents.stacktr.ee/api/publish and pay $0.50, no key at all.
Tools
Tools arrive namespaced as mcp__stacktree__<name>. The ones that matter:
| Tool | What it does |
|---|---|
publish_html | Upload HTML, get { url, id, expires_at } back |
update_site | Replace content in place — the URL stays valid |
set_password | Passcode-gate a link |
set_email_gate | Restrict viewers to one company email domain |
set_expiry | Hours from now, or never |
set_client | File a page under a client space |
list_client_spaces | The spaces pages are filed under |
Nineteen in total, including client-space management and reading viewer feedback back off the page.
Client spaces
Name who the work is for and the page files itself under them:
publish this audit for Meridian Group
A space can carry its own address — meridian.youragency.com — and a generated index of everything delivered to that client, newest first. When a space has an address, publish_html returns client_url alongside the stacktr.ee link. Hand over client_url; it is the one their client bookmarks.
Failure behaviour
Both overlays set failOnStartupError: false explicitly. If Stacktree is unreachable at startup, the row activates with no tools registered rather than rejecting activation — it cannot take your composition down with it. Reconnection is on by default with exponential backoff.
Notes
The DSH stdio bridge scrubs ambient variables whose names look like credentials before it launches a child, so STACKTREE_API_KEY is passed through config.env explicitly in the overlay. It is read from your environment — never paste a key into the YAML.
Free plan: 3 pages lifetime, 7-day expiry ceiling. Paid plans add passcodes, email-domain gates, permanence and your own domain. Read expires_at off the publish response rather than assuming.
Every served page carries a strict CSP and X-Robots-Tag: noai, noimageai, noindex.
Links
- stacktr.ee — the product
- stacktr.ee/prompt.md — one-line setup for any agent
- stacktr.ee/llms.txt — machine-readable index
- stacktree-mcp — the MCP server this wraps
MIT.