Back to home@stevysmith

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:

ToolWhat it does
publish_htmlUpload HTML, get { url, id, expires_at } back
update_siteReplace content in place — the URL stays valid
set_passwordPasscode-gate a link
set_email_gateRestrict viewers to one company email domain
set_expiryHours from now, or never
set_clientFile a page under a client space
list_client_spacesThe 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

MIT.