htmldrop

io.github.vin-spiegelPublished by GitHub account vin-spiegelv0.1.0Updated Oct 24, 2026

Publish HTML, Markdown, PDF, or images as instant shareable links with expiry and passwords.

The publisher's own server: Htmldrop

VerifiedStreamable HTTPWeb executableProductivity & WorkflowFiles & Storage

Overview

AI-generated overview

Publishes HTML, Markdown, PDF or image artifacts to a shareable htmldrop.link URL, with optional expiry and password protection.

What you can do
  • Publish HTML or Markdown content as a hosted artifact and get back a shareable subdomain URL
  • Render Markdown, text or JSON into a clean reader page
  • Fetch a remote HTML page by URL and republish it
  • Set a title for metadata and social preview cards, a TTL in days, and an optional password
When to use it
Useful when an assistant produces a report, dashboard, chart, demo or other document that someone else should open in a browser without git, a build step or a hosting dashboard.
Requirements
Remote Streamable HTTP endpoint at htmldrop.link/mcp; no account, key or environment variable is required for anonymous use. Desktop clients that only speak stdio need a bridge such as mcp-remote. Self-hosting instead uses the htmldrop-mcp npm package with BASE_DOMAIN and optional Cloudflare R2 variables.
Before you install
Published artifacts are publicly reachable at their subdomain unless a password is set, and anonymous links expire by default (7 days). An owner_key or x-htmldrop-key raises limits and TTL. Content is uploaded to a third-party service, so avoid publishing secrets or private data; HTML runs inline scripts under a sandboxed CSP.

Installation

In SourceWeft

  1. Open htmldrop in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.vin-spiegel%2Fhtmldrop/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "htmldrop": {
      "type": "http",
      "url": "https://htmldrop.link/mcp"
    }
  }
}

README

[htmldrop logo]

htmldrop

Publish anything for agents — one API call, MCP server included.

[htmldrop.link] [CI] [npm] [MIT]

English · 한국어 · 日本語 · 简体中文 · Español · Français · Deutsch


htmldrop turns any HTML, Markdown, PDF, or image artifact into a shareable link in seconds. Reports, dashboards, charts, demos — anything an agent (or a human) creates. Markdown/text/JSON render into a clean reader page; PDFs and images are served as-is. No git, no build, no dashboard.

Try it now: htmldrop.link — drag & drop an HTML file, paste HTML source, or POST to the API.

How it works

bash
curl -X POST https://htmldrop.link/publish \  -H "Content-Type: application/json" \  -d '{"html":"<h1>Hello agents</h1>","title":"Demo"}'
json
{  "url": "https://happy-otter-42.htmldrop.link",  "id": "...",  "subdomain": "happy-otter-42",  "expires_at": "2026-07-17T00:00:00.000Z"}

Every link gets its own subdomain, an auto-generated Open Graph preview card, and a TTL — shared artifacts don't live forever.

Connect your agent (MCP)

The hosted MCP server lives at https://htmldrop.link/mcp (Streamable HTTP) and exposes one tool: publish_html.

Claude Code

bash
claude mcp add --transport http htmldrop https://htmldrop.link/mcp

Claude Desktop

Claude Desktop speaks stdio, so bridge to the hosted server with mcp-remote. In claude_desktop_config.json:

json
{  "mcpServers": {    "htmldrop": {      "command": "npx",      "args": ["-y", "mcp-remote", "https://htmldrop.link/mcp"]    }  }}

Cursor

Cursor connects to a remote MCP URL directly. In .cursor/mcp.json:

json
{  "mcpServers": {    "htmldrop": { "url": "https://htmldrop.link/mcp" }  }}

Codex CLI

In ~/.codex/config.toml:

toml
[mcp_servers.htmldrop]command = "npx"args = ["-y", "mcp-remote", "https://htmldrop.link/mcp"]

Self-hosted instance (npm, stdio)

Running your own htmldrop? The htmldrop-mcp package is a local stdio MCP server that publishes to your storage and domain:

json
{  "mcpServers": {    "htmldrop": {      "command": "npx",      "args": ["-y", "htmldrop-mcp"],      "env": {        "BASE_DOMAIN": "your-domain.example",        "CLOUDFLARE_R2_ENDPOINT": "...",        "CLOUDFLARE_R2_ACCESS_KEY_ID": "...",        "CLOUDFLARE_R2_SECRET_ACCESS_KEY": "...",        "CLOUDFLARE_R2_BUCKET_NAME": "..."      }    }  }}

publish_html tool

ArgumentTypeDescription
htmlstringHTML content to publish (or use markdown / url)
markdownstringMarkdown content — rendered into a styled reader page
urlstringRemote HTML page to fetch and publish
titlestringOptional title for metadata and social cards
ttl_daysnumberDays until the artifact expires
passwordstringOptional password protection
owner_keystringOptional key for higher limits and longer TTL

Full agent-facing docs live in AGENTS.md, also served at htmldrop.link/agents.md.

REST API

EndpointBodyNotes
POST /publishJSON { html | markdown, title, ttl_days, password, url }Primary endpoint
POST /publish/rawraw body: text/html, text/markdown, text/plain, application/json, text/csv, application/pdf, image/*Title via x-htmldrop-title header or ?title=
POST /publish/from-urlJSON { url, title, ttl_days, password }Fetches and republishes a page

Pass an owner key in the x-htmldrop-key header for higher rate limits and a longer default TTL. (x-pin-key is still accepted for backwards compatibility.)

Self-hosting

bash
git clone https://github.com/vin-spiegel/htmldrop.gitcd htmldroppnpm installcp .env.example .env   # defaults work out of the boxpnpm dev               # http://localhost:3000

The only variable you need to set is BASE_DOMAIN. Everything else has a working default. Storage falls back to the local filesystem (./data) when no object store is configured — no database required.

Environment variables

VariableDefaultDescription
BASE_DOMAINlocalhostBase domain for artifact subdomains. The one value most self-hosters must set.
PORT3000HTTP port (usually set by your host)
NODE_ENVdevelopmentSet to production when deploying
CLOUDFLARE_R2_ENDPOINT—S3-compatible endpoint. Set all four R2 vars to use object storage; leave all blank for filesystem
CLOUDFLARE_R2_ACCESS_KEY_ID—Object-storage access key
CLOUDFLARE_R2_SECRET_ACCESS_KEY—Object-storage secret key
CLOUDFLARE_R2_BUCKET_NAME—Bucket name
ANON_TTL_DAYS7TTL for anonymous publishes
KEY_TTL_DAYS30TTL for keyed publishes
MAX_HTML_SIZE_BYTES26214400Upload cap (25 MiB)
RATE_LIMIT_ANON_PER_MINUTE10Per-IP rate limit
RATE_LIMIT_KEY_PER_MINUTE60Per-owner-key rate limit

Any S3-compatible store works for the CLOUDFLARE_R2_* variables (Cloudflare R2, AWS S3, MinIO, …). On ephemeral/container hosts, either use object storage or mount a persistent volume at ./data, or artifacts are lost on redeploy.

Production needs a wildcard DNS record (*.your-domain) pointing at the server so artifact subdomains resolve.

Deploy to Railway

bash
railway loginrailway init --name htmldroprailway up

Then set BASE_DOMAIN and (optionally) the R2 variables in the Railway dashboard, and attach your domain plus its wildcard.

Safety defaults

  • Artifacts are served with X-Robots-Tag: noindex, nofollow, noarchive
  • New HTML artifacts use a versioned CSP sandbox: inline scripts work, while external network requests/assets, forms, popups, and top-level navigation are blocked
  • Per-IP and per-key rate limits
  • Everything expires via TTL
  • Optional password protection per artifact

See SECURITY.md for vulnerability and abuse reporting.

Development

bash
pnpm dev        # run with tsxpnpm test       # vitestpnpm run build  # tsc -> dist/

License

MIT

Source: README.md at commit 8f8c42b

Tools

1

publish_html

Publish an HTML or markdown artifact (or fetch a remote HTML page) and get a shareable URL. Markdown is rendered into a clean reader page. Useful for sharing reports, dashboards, visualizations, or any document produced by an agent.

Parametersurlhtmltitlemarkdownpasswordttl_daysowner_key

Version history

1
  1. v0.1.0LatestSep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Htmldrop integrations