Skip to main content
Glama
README.md
# host-html

[![host-html.com](screenshot.png)](https://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](https://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](#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)
```jsonc
// 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/`](mcp-server/) · npm: [`host-html-mcp`](https://www.npmjs.com/package/host-html-mcp)

### Other AI Agents (Skills)
```bash
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](https://host-html.com).

---

## Setup: get an API key

Publishing now requires a free host-html account:

1. Sign in (free) at [host-html.com](https://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:

   ```bash
   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:

```bash
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](#setup-get-an-api-key) to generate
one. Pass it via the `Authorization` header (no `apikey` header is needed):

```bash
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`**

```json
{
  "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

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