Skip to main content
Glama

host-html

host-html.com

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-html

The 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 -y

Then 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:

  1. Sign in (free) at host-html.com

  2. Confirm your email

  3. Go to Account → API keys → Create key

  4. Copy the generated key (starts with hh_… — shown once)

  5. 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-html

That 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:

/plugin

To 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 -y

Direct 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

html

string

✓

HTML content (max 1MB)

title

string

Page title

slug

string

Custom URL path matching ^[a-z0-9-]{2,64}$ (paid plans)

password

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 tools
publish_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.

NameRequiredDescriptionDefault
htmlYesThe full, self-contained HTML document to publish. Max 1MB on the free plan, 10MB on Pro, 50MB on Studio/Agency.
slugNoOptional 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.
titleNoHuman-readable title. Sets the link-preview title — pass a real one, not a filename.
passwordNoOptional password (4–72 characters). Viewers must enter it to see the page. Paid plans only; omit for a public page.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
htmlYesThe full, self-contained replacement HTML document.
slugYesThe page's slug (the part after /p/), or its full URL.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 2 tool updatesv0.1.0
    • First observedpublish_html
    • First observedupdate_page

TDQS

A4.2/5.0

Scored across 2 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Publishes 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
  • A
    license
    A
    quality
    D
    maintenance
    Publish 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.
    6
    1
    MIT