# How to host a dashboard your AI agent built · Stacktree

Source: https://stacktr.ee/host-ai-dashboard

[Skip to content](#main) [Stacktree](/)[Developers](/developers)[Agents](/agents)[Docs](/docs)[Use cases](/use-cases)[Pricing](/pricing)[Blog](/blog)[Dashboard](https://app.stacktr.ee)[Sign in →](https://app.stacktr.ee)      By [ Steve Smith ](/about) · Founder, Stacktree  ·  Last updated July 1, 2026          use case

#  Your agent built a dashboard. Here is where to put it.

   Agents now assemble a dashboard on demand and hand you the HTML. But HTML is not a link, and a page with real numbers in it is not something you want public or permanent. Here is how to host an agent-built dashboard on a private URL that opens without an account and clears itself away when it is done.

  [ Get started free ](https://app.stacktr.ee/?join=1&from=seo_host_ai_dashboard)   install npx stacktree-install
Copy
     No card · 3 pages free · about a minute

##  Where do you host a dashboard an AI agent built?

On a host that turns the agent's HTML into a private link. Publish it to an unguessable URL the viewer opens with no account, set an expiry so a single-use page removes itself, and add a password or email-domain gate when it goes to a client. Stacktree does this and lets the agent publish over MCP, so the dashboard goes from generated to a shareable private link in one step, then tidies itself away.

## The step the agent leaves you with

 The on-demand pattern is simple: ask an agent to gather the data and render an HTML dashboard to answer the question in front of you, instead of maintaining a standing dashboard nobody opens. It works. But it stops one step short. The agent produces a block of HTML, and HTML on its own is not something you can send to a colleague or a client. Someone has to open it, often away from your terminal, which means the page needs a URL.

 That is the only gap, and it is small. The page has to be hosted somewhere that hands back a link. The question is just which host, because the obvious ones are built for a different job.

## Why generic hosting is the wrong shape

 You could drop the HTML on GitHub Pages, Netlify, or an S3 bucket. They will serve it. But their defaults are built for publishing a public website and keeping it up: the page is public, often indexable, and permanent unless you go and delete it. An agent-built dashboard is usually the opposite of all three. It tends to carry real data the agent pulled in, it is meant for specific people, and it is single-use. So the generic host leaves you manually setting access you do not have, and manually cleaning up pages that were obsolete an hour after they were built.

 The shape this use case wants is private by default, gateable per link, and disposable on a timer. That is a different host, not a different bucket.

## The private, disposable fix

 Full disclosure: we build Stacktree, so read this as us describing where we fit. Stacktree takes the agent's HTML and publishes it to a private link with three properties that match a throwaway dashboard specifically:

  - Private by default. The URL is unguessable and the page is served with a search and AI opt-out header, so it is not indexed and not discoverable by guessing. A page with client numbers stays between you and the recipient.
 - It expires. Put an expiry on the page so a single-use dashboard removes itself. Anonymous publishes already default to a 24-hour expiry, so disposable is the default, not a chore.
 - Gateable per link. Add a password, or restrict to a client's email domain with magic-link verification, when the page leaves your team.
  The trade is that Stacktree hosts static HTML, so the page is a snapshot, not a self-refreshing dashboard. That is the right shape here: a throwaway dashboard is a snapshot by definition. If you need a standing view that re-queries live data for many viewers, that is a real dashboard tool's job, not this.

## How an agent does it in one step

 Because the publish step runs over MCP, the agent can finish the job without you leaving the conversation. It calls `publish_html` with the rendered page and gets back a private URL, setting an expiry in the same call so the page is disposable from the start. For a client, it adds a password or an email-domain gate. If a follow-up changes the view, `update_site` replaces the page in place at the same URL, so a link you already sent stays correct. We package this as an agent-run-report skill so the gather, render, and publish steps run as one move, but the primitive is just the publish call.

##  Where to host an agent-built dashboard

     Criterion Generic static host Stacktree     Default visibility  Public.   Private, unguessable URL.   Indexed by search engines  Often yes.   No, opt-out header on every page.   Expires on its own  No, permanent until deleted.   Yes, 24h default for anonymous publishes.   Password or email-domain gate  Not built in.   Yes, per link.   Agent can publish over MCP  No, needs a deploy step.   Yes, one publish_html call.   Replace in place at same URL  Via redeploy.   update_site, same URL.   Good for a public website  Yes, that is its job.   Not the target use.
FAQ

## Frequent questions

     Where do I host a dashboard an AI agent built? +  The agent produces HTML, so you need a host that turns it into a link a person can open. A private-by-default host like Stacktree publishes the HTML to an unguessable URL the viewer opens with no account, lets you set an expiry so a single-use dashboard removes itself, and lets the agent publish it directly over MCP. Generic static hosts work too, but they default to keeping pages forever and indexing them, which is the wrong shape for a throwaway dashboard.   How do I share an AI-generated dashboard with a client? +  Publish the HTML to a private link and gate it to the recipient. On Stacktree the URL is unguessable and the page is not indexed; you can require a password or restrict access to the client's email domain with magic-link verification, and set an expiry so the link does not outlive the engagement. The client opens a normal link with no account and no workspace to join.   Can an agent publish the dashboard itself? +  Yes. Stacktree exposes a publish tool over MCP, so an agent wired to it calls publish_html with the rendered HTML and gets back a private URL in the same turn, optionally with an expiry and a gate. If you ask a follow-up that changes the view, the agent calls update_site to replace the page in place at the same URL, so a link you already sent stays correct.   Should an agent-built dashboard expire? +  For a single-use dashboard, yes. A dashboard built to answer one question is a snapshot, and letting it expire keeps it from accumulating as a dead link, the exact maintenance problem that made people stop building standing dashboards. Stacktree supports an expiry on any page and defaults anonymous publishes to 24 hours. Set a longer window or remove the expiry when a page needs to stick around.   Can I just use GitHub Pages or Netlify for an agent dashboard? +  You can host the HTML there, but the defaults fight the use case. Those hosts are built to publish public pages and keep them indefinitely, so a dashboard with client numbers or internal data lands on a public, potentially indexed URL with no expiry and no per-link gate. They are right for a public site and wrong for a private, disposable dashboard, which is what an agent-built one usually is.   Is a hosted snapshot the same as a live dashboard? +  No, and for this pattern that is fine. A hosted page is a snapshot of the data at the moment the agent built it, not a self-refreshing view. The on-demand pattern leans on that: you build the dashboard to answer a question now, and if you want a fresh read tomorrow the agent builds tomorrow's. For a standing, self-refreshing view that many people watch, keep a real dashboard tool.
Keep reading

## Related guides

   -  [ The throwaway dashboard Why agents are replacing standing dashboards, and what the pattern leaves out. ](/blog/throwaway-dashboard)
-  [ Claude Live Artifacts Anthropic's self-refreshing dashboards, and the private-share gap at launch. ](/blog/what-are-claude-live-artifacts)
-  [ Share with clients Put an agent-built report on a private link a client opens without an account. ](/share-with-clients)
-  [ Publish HTML over MCP The publish_html and update_site calls an agent uses. ](/mcp-publish-html)
-  [ Private HTML hosting The access model: unguessable URLs as the credential, plus gates. ](/private-html-hosting)

References

## Sources and further reading

   -  [ Ryan Carson on X, stop building dashboards ↗ The post behind the pattern: ask an agent to gather the data and build a temporary, throw-away HTML dashboard on demand. ](https://x.com/ryancarson/status/2071535177126277239)
-  [ Anthropic, Use live artifacts in Claude Cowork ↗ The model-side version: dashboards an agent builds rather than ones you hand-maintain. ](https://support.claude.com/en/articles/14729249-use-live-artifacts-in-claude-cowork)
-  [ Model Context Protocol ↗ The protocol the agent uses to publish the rendered HTML without leaving the conversation. ](https://modelcontextprotocol.io)

##  Give your agent's dashboard a private link that expires.

 Stacktree publishes agent-built HTML to a private, unguessable URL the viewer opens without an account, and lets it expire on its own. Free tier, no card.

 [ Sign up free → ](https://app.stacktr.ee/?join=1&from=cta_host_ai_dashboard)   install npx stacktree-install
Copy
       Private hosting for the HTML your agents make.

[](https://betalist.com/startups/stacktree?utm_campaign=badge-stacktree&utm_medium=badge&utm_source=badge-featured)[Featured on](https://devhunt.org/tool/stacktree)[](https://buildlist.io)[Get started free](https://app.stacktr.ee/?join=1)

## Product

- [Page video](/page-video)
- [Ask this page](/ask-this-page)
- [Client spaces](/client-spaces)
- [Templates](/templates)
- [Example deliverables](/examples)
- [Custom domains](/custom-domains)
- [Client feedback](/client-feedback-loop)
- [One-time links](/one-time-view-links)
- [See how pages get read](/page-engagement)
- [Made with Stacktree](/made-with)
- [Security](/security)
- [Watch the demo](/demo)

## Agents

- [All integrations](/agents)
- [Claude Code](/claude-code)
- [OpenAI Codex](/codex)
- [Cursor](/cursor)
- [Claude.ai connector](/claude-ai-connector)
- [Claude Cowork](/what-is-claude-cowork)
- [Meta Muse](/muse)
- [MCP server](/mcp-publish-html)
- [Deploy from Claude Code](/deploy-html-from-claude-code)
- [Skills](/skills)
- [Slack app](/slack)
- [n8n node](/n8n)
- [Agent payments (x402)](/x402)

## Alternatives

- [All comparisons](/alternatives)
- [Head-to-head comparisons](/compare)
- [Tiiny Host](/tiiny-host-alternative)
- [GitHub Pages (private)](/github-pages-private-alternative)
- [Vercel](/vercel-alternative-for-agents)
- [ngrok](/ngrok-alternative-for-html)
- [Display.dev](/display-dev-alternative)
- [Static.app](/static-app-alternative)
- [OpenAI Codex Sites](/openai-codex-sites-alternative)
- [here.now](/here-now-alternative)
- [Shippage](/shippage-ai-alternative)
- [Best private hosting](/best-private-html-hosting)

## Use cases

- [All use cases](/use-cases)
- [Share with clients](/share-with-clients)
- [Send a file to a client](/share-html-file-with-client)
- [Share Claude artifacts](/share-claude-artifacts)
- [Share Jupyter notebooks](/share-jupyter-notebook-html)
- [Host Storybook privately](/host-storybook-privately)
- [Architecture diagrams](/share-architecture-diagrams)
- [AI-generated reports](/host-ai-reports)
- [Internal HTML tools](/internal-tool-hosting)
- [Private HTML hosting](/private-html-hosting)
- [Vibe-coded page hosting](/vibe-coding-hosting)
- [Leave a website builder](/website-builder-migration)

## Learn

- [Blog](/blog)
- [Glossary](/glossary)
- [FAQ](/faq)
- [Where AI output should live](/where-ai-output-lives)
- [Agent-loop hosting](/agent-loop-hosting)
- [Why agents need a publish primitive](/blog/why-agents-need-a-publish-primitive)
- [MCP servers explained](/blog/mcp-servers-explained-for-developers)
- [What changed in the 2026-07 MCP spec](/blog/mcp-2026-spec-changes)
- [Sites in Codex explained](/blog/sites-in-codex-explained)
- [Private-by-default hosting](/blog/private-by-default-html-hosting)
- [An agent paid us $1 (x402)](/blog/agent-paid-to-provision-itself)
- [When a loop hits a paywall](/blog/loop-engineering-paywall)
- [Pricing](/pricing)
- [Self-host (new)](/self-host)
- [Changelog](/changelog)
- [Docs](https://stacktr.ee/docs)
- [About](/about)
© 2026 Stacktree · stacktr.ee

[Privacy](/privacy)[Terms](/terms)[Security](/security)[Dashboard](https://app.stacktr.ee)[npm](https://www.npmjs.com/package/stacktree-mcp)[Sitemap](/sitemap.xml)[llms.txt](/llms.txt)[API spec](/openapi.json)

---
Full markdown summary of the Stacktree marketing surface: https://stacktr.ee/llms-full.txt
