host-html
host-html

Publish any HTML file as a live link — instantly. Free account required. No deploy pipeline, no server to manage. → host-html.com
Heads up — breaking change in v2.0.0: Anonymous publishing has been retired. Publishing now requires a free, email-verified host-html account and a personal API key set as
HOSTHTML_API_KEY. See Setup: get an API key. Older releases that relied on the built-in shared key will stop publishing.
Install
Claude Code
/plugin marketplace add phanosh/host-html
/plugin install host-html@host-htmlThe official Claude Code marketplace listing is in the works — until it lands, install directly from this repo with the two commands above.
Claude Desktop, Cursor, Codex (MCP server)
// claude_desktop_config.json / .cursor/mcp.json / .mcp.json
{
"mcpServers": {
"host-html": {
"command": "npx",
"args": ["-y", "host-html-mcp"],
"env": { "HOSTHTML_API_KEY": "hh_your_key_here" }
}
}
}Two tools: publish_html (HTML in, link out) and update_page (new HTML, same link).
Source and docs: mcp-server/ · npm: host-html-mcp
Other AI Agents (Skills)
npx skills add phanosh/host-html -g -yThen use the skills:
/host-html # publish HTML as a live link
/host-pdf # export HTML slides to PDF/host-html finds the HTML, publishes it, and hands you a live URL in seconds.
/host-pdf captures each slide at retina quality and assembles a PDF.
Works with Claude Code, Cursor, Codex, Copilot, and 40+ more agents.
Related MCP server: dochost
Setup: get an API key
Publishing now requires a free host-html account:
Sign in (free) at host-html.com
Confirm your email
Go to Account → API keys → Create key
Copy the generated key (starts with
hh_…— shown once)Set it as an environment variable:
export HOSTHTML_API_KEY=hh_your_key_here
The skill reads HOSTHTML_API_KEY automatically. Custom slugs (see the Direct
API table below) still require a Pro/Team plan; publishing itself does not.
Update
When a new version is released here, pull it into your local Claude Code with:
/plugin marketplace update phanosh/host-htmlThat single command refreshes the marketplace catalog and installs any version bumps in marketplace.json, plugin.json, or the skill frontmatter. To check what you're on:
/pluginTo stay current automatically, open /plugin, go to the Marketplaces tab, select phanosh/host-html, and toggle auto-update on — Claude Code will then pull updates on startup.
For the standalone skills install (npx skills add ...), re-run the same command to upgrade:
npx skills add phanosh/host-html -g -yDirect API
The publish edge function requires a personal host-html API key (format
hh_…) as the bearer token — see Setup to generate
one. Pass it via the Authorization header (no apikey header is needed):
curl -X POST https://suifgsvtcbrawzdhyuhk.supabase.co/functions/v1/publish \
-H "Authorization: Bearer $HOSTHTML_API_KEY" \
-H "Content-Type: application/json" \
-d '{"html": "<h1>Hello</h1>", "title": "my page"}'Request
Field | Type | Required | Description |
| string | ✓ | HTML content (max 1MB) |
| string | Page title | |
| string | Custom URL path matching | |
| string | Password-protect the page (4–72 chars, paid plans, JSON body only) |
Response 201
{
"url": "https://host-html.com/p/abc123",
"slug": "abc123",
"edit_token": "...",
"page_id": "...",
"has_password": false,
"expires_at": "2026-03-16T..."
}has_password is true when the request set a password (the page is locked
and served from private storage); false otherwise.
expires_at is string | null. On a free plan it is the ISO timestamp when the page goes
dark; on a paid plan the page never expires and the field is null. It is the authoritative
expiry — read it from the response rather than assuming a fixed duration, and handle the null
rather than formatting it as a date.
License
MIT
Available Tools
2 toolspublish_htmlPublish HTML as a hosted linkA
Publish a self-contained HTML document and get back a public URL. Use this whenever the user wants to share, send, or host HTML you produced — a report, dashboard, deck, prototype or one-page site — instead of leaving it as a file they cannot open. The HTML must be self-contained: inline the CSS and JS, or reference them by absolute URL.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The full, self-contained HTML document to publish. Max 1MB on the free plan, 10MB on Pro, 50MB on Studio/Agency. | |
| slug | No | Optional custom path, e.g. 'q3-report' → /p/q3-report. 2–64 lowercase letters, digits and internal hyphens. Requires a paid plan (Pro or above); omit for a random slug. | |
| title | No | Human-readable title. Sets the link-preview title — pass a real one, not a filename. | |
| password | No | Optional password (4–72 characters). Viewers must enter it to see the page. Paid plans only; omit for a public page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. It usefully discloses that output is a public URL and that the document must be self-contained, but is silent on the lifecycle: whether the link is permanent, how re-publishing to the same slug behaves, and whether a published page can be deleted or updated (which is exactly what update_page implies).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and result, then usage triggers, then the hard constraint. No filler, and the constraint is placed where an agent will read it before constructing the call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description states the return value (a public URL), and the size/plan limits and slug/password rules live in the fully documented schema. The only meaningful gap is the post-publish lifecycle (link persistence, re-publish behavior), which matters for a creation tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns an extra point by adding real constraint semantics for the key parameter beyond the schema text — CSS and JS must be inlined or referenced by absolute URL, which is not spelled out in the 'html' field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource (publish a self-contained HTML document) and states the outcome (get back a public URL). This is inherently distinguishable from the sibling update_page, which modifies an existing page rather than creating a hosted link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance with a concrete trigger ('whenever the user wants to share, send, or host HTML you produced') and example artifacts (report, dashboard, deck, prototype, one-page site), plus the rationale of avoiding an unopenable file. It stops short of naming the sibling update_page as the alternative for editing an already-published page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pageUpdate a published page in placeA
Replace the HTML of a page you already published, keeping the SAME link. Use this for every revision — a fix, a new draft, refreshed numbers — instead of publishing a new page, so a link the user already shared keeps working. Only pages owned by the same API key's account can be updated.
| Name | Required | Description | Default |
|---|---|---|---|
| html | Yes | The full, self-contained replacement HTML document. | |
| slug | Yes | The page's slug (the part after /p/), or its full URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the operation is an in-place overwrite ("Replace the HTML"), that the URL is preserved, and that authorization is scoped to the calling API key's account. It stops short of saying what happens when the slug doesn't exist (error vs. create) or whether prior revisions are recoverable, which matters for an irreversible-looking overwrite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and the link-preservation guarantee, then the usage rule, then the ownership caveat. No restatement of the name or schema, and every clause carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter update tool with no annotations and no output schema, the definition covers purpose, alternative, and access scope adequately. The remaining gap is the outcome on failure (nonexistent or unowned slug) and whether anything is returned, but these are minor for a tool this simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so slug and html are already documented, including that slug may be a bare slug or a full URL and that html must be a complete self-contained document. The description adds only indirect meaning, tying the slug to the link the user already shared. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Replace the HTML of a page you already published, keeping the SAME link" gives a specific verb (replace), resource (page HTML) and the distinguishing invariant (link stability). It explicitly contrasts with publishing a new page, which is the behavior of the sibling publish_html, so an agent can pick between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the condition for use ("every revision — a fix, a new draft, refreshed numbers") and names the alternative to avoid ("instead of publishing a new page"), including the reason: a shared link must keep working. It also states an eligibility constraint (only pages owned by the same API key's account), which is a when-you-cannot-use-this rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
publish_html - First observed
update_page
TDQS
Scored across 2 tools
Publish vs. update are cleanly separated, and the descriptions explicitly tell the agent which to choose (new page vs. same-link revision). There is no realistic scenario where an agent would confuse the two.
Both names follow a verb_noun pattern (publish_html, update_page), so the convention is predictable. The minor wrinkle is that the same object is referred to as 'html' in one name and 'page' in the other.
Two tools is minimal but each earns its place for a narrowly scoped hosting service: create a page and revise it. The surface is deliberately small rather than arbitrarily thin, though there is no room for supporting operations.
Create and update are covered, but the lifecycle has gaps: there is no delete/unpublish, no list of published pages, and no way to read back an existing page's HTML. An agent asked to remove or enumerate pages would hit a dead end.
Maintenance
Related MCP Connectors
Publish HTML pages and live dashboards from your agent to a link that stays up to date.
Publish HTML/code from your agent to openanthropic.com and get a shareable link.
Publish HTML or markdown from your agent as a shareable link, with password or work-email walls. No key needed to start: your agent can create the account and verify the email right from the chat, then publish.
Publish HTML to private, unguessable, replace-in-place URLs from any MCP-compatible AI agent.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenancePublishes HTML pages straight from your AI assistant to a shareable URL, then lets you manage them - update, list, search, fetch, and delete pages in a public or private workspace. Turns "share what I just made" into a single tool call from Claude, Cursor, or any MCP client.MIT
- AlicenseAqualityDmaintenancePublish Markdown or HTML to a shareable link from your AI assistant, then list, inspect, update or delete your pages. Six tools cover publishing, page management and account usage. Connect through hosted Streamable HTTP with OAuth, or use an API key for headless clients.61MIT
- AlicenseNot gradedqualityDmaintenancePublishes AI-generated HTML and Markdown to a hosted, shareable URL with versioning, theming, and access control.1MIT

Publee MCP Serverofficial
AlicenseAqualityCmaintenanceEnables AI tools to publish HTML pages and get shareable URLs instantly, with optional account features for persistence, in-place updates, and visibility control.1MIT