关于 htmldrop
htmldrop 将 HTML、Markdown、PDF 和图片发布为可分享链接,适用于 Agent 或个人分享生成的内容。它提供过期时间、密码保护和独立子域名。
主要功能
- 01发布 HTML、Markdown、PDF 和图片
- 02Markdown、文本和 JSON 渲染为阅读页
- 03为链接生成 Open Graph 预览卡
- 04设置过期时间和密码保护
- 05提供 REST API 和自托管选项
适用场景
- 01分享 Agent 生成的报告或图表
- 02发布可通过链接访问的演示内容
- 03为共享文件设置到期时间或访问密码
MCP 相关
托管的 MCP 服务位于 https://htmldrop.link/mcp,并提供 publish_html 工具,可发布 HTML、Markdown 或远程网页。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://htmldrop.link/mcpclaude mcp add --transport http vin-spiegel-htmldrop https://htmldrop.link/mcp{"mcpServers":{"vin-spiegel-htmldrop":{"type":"http","url":"https://htmldrop.link/mcp"}}}在 Cursor 中打开{"servers":{"vin-spiegel-htmldrop":{"type":"http","url":"https://htmldrop.link/mcp"}}}在 VS Code 中打开{"mcpServers":{"vin-spiegel-htmldrop":{"type":"http","url":"https://htmldrop.link/mcp"}}}{"mcpServers":{"vin-spiegel-htmldrop":{"serverUrl":"https://htmldrop.link/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
1| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 否 | 要获取并发布的 HTML 页面的 URL。请提供 html、markdown 或 url 中的一项。 |
| html | string | 否 | 要发布的 HTML 内容。请提供 html、markdown 或 url 中的一项。 |
| title | string | 否 | 发布内容的可选页面标题。 |
| markdown | string | 否 | 要发布的 Markdown 内容;将其渲染为带样式的阅读页面。请提供 html、markdown 或 url 中的一项。 |
| password | string | 否 | 用于保护内容的可选密码。 |
| ttl_days | number | 否 | 可选的自定义 TTL 天数。匿名层级默认有效期为 7 天。 |
| owner_key | string | 否 | 用于提高限额和确立所有权的可选所有者密钥。 |
详细介绍
htmldrop
为 Agent 发布任何内容 — 只需一次 API 调用,并内置 MCP 服务。
English · 한국어 · 日本語 · 简体中文 · Español · Français · Deutsch
htmldrop 能在几秒内将任意 HTML、Markdown、PDF 或图像内容转换为可分享的链接。报告、仪表板、图表、演示——无论是 Agent(或人类)创建的任何内容。Markdown、文本和 JSON 会渲染为简洁的阅读页面;PDF 和图像则原样提供。无需 git、无需构建、无需仪表板。
立即试用:htmldrop.link — 拖放 HTML 文件、粘贴 HTML 源码,或向 API 发送 POST 请求。
工作原理
curl -X POST https://htmldrop.link/publish \
-H "Content-Type: application/json" \
-d '{"html":"<h1>Hello agents</h1>","title":"Demo"}'
{
"url": "https://happy-otter-42.htmldrop.link",
"id": "...",
"subdomain": "happy-otter-42",
"expires_at": "2026-07-17T00:00:00.000Z"
}
每个链接都有独立的子域名、自动生成的 Open Graph 预览卡片和 TTL — 分享的内容不会永远保留。
连接你的 Agent(MCP)
托管的 MCP 服务位于 https://htmldrop.link/mcp(Streamable HTTP),并提供
一个工具:publish_html。
Claude Code
claude mcp add --transport http htmldrop https://htmldrop.link/mcp
Claude Desktop
Claude Desktop 使用 stdio,因此可通过
mcp-remote 连接到托管服务。在
claude_desktop_config.json 中:
{
"mcpServers": {
"htmldrop": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://htmldrop.link/mcp"]
}
}
}
Cursor
Cursor 可直接连接远程 MCP URL。在 .cursor/mcp.json 中:
{
"mcpServers": {
"htmldrop": { "url": "https://htmldrop.link/mcp" }
}
}
Codex CLI
在 ~/.codex/config.toml 中:
[mcp_servers.htmldrop]
command = "npx"
args = ["-y", "mcp-remote", "https://htmldrop.link/mcp"]
自托管实例(npm,stdio)
正在运行你自己的 htmldrop?htmldrop-mcp
软件包是一个本地 stdio MCP 服务,可将内容发布到你自己的存储和
域名:
{
"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 工具
| 参数 | 类型 | 描述 |
|---|---|---|
html | 字符串 | 要发布的 HTML 内容(或使用 markdown / url) |
markdown | 字符串 | Markdown 内容 — 渲染为样式化的阅读页面 |
url | 字符串 | 要抓取并发布的远程 HTML 页面 |
title | 字符串 | 可选标题,用于元数据和社交卡片 |
ttl_days | 数字 | 内容过期前的天数 |
password | 字符串 | 可选的密码保护 |
owner_key | 字符串 | 可选密钥,用于提高限额并延长 TTL |
面向 Agent 的完整文档见 AGENTS.md,也可在 htmldrop.link/agents.md 查看。
REST API
| 端点 | 请求体 | 说明 |
|---|---|---|
POST /publish | JSON { html | markdown, title, ttl_days, password, url } | 主要端点 |
POST /publish/raw | 原始请求体:text/html、text/markdown、text/plain、application/json、text/csv、application/pdf、image/* | 通过 x-htmldrop-title 标头或 ?title= 指定标题 |
POST /publish/from-url | JSON { url, title, ttl_days, password } | 抓取并重新发布页面 |
在 x-htmldrop-key 标头中传入所有者密钥,可提高速率限制并延长默认 TTL。(仍接受 x-pin-key,以保持向后兼容。)
自托管
git clone https://github.com/vin-spiegel/htmldrop.git
cd htmldrop
pnpm install
cp .env.example .env # defaults work out of the box
pnpm dev # http://localhost:3000
你只需设置 BASE_DOMAIN 这一个变量。 其他所有设置都有可用的默认值。如果未配置对象存储,存储将回退到本地文件系统(./data)——无需数据库。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
BASE_DOMAIN | localhost | 产物子域名的基础域名。大多数自托管用户必须设置的唯一值。 |
PORT | 3000 | HTTP 端口(通常由主机设置) |
NODE_ENV | development | 部署时设置为 production |
CLOUDFLARE_R2_ENDPOINT | — | 兼容 S3 的端点。设置全部 4 个 R2 变量以使用对象存储;全部留空则使用文件系统 |
CLOUDFLARE_R2_ACCESS_KEY_ID | — | 对象存储访问密钥 |
CLOUDFLARE_R2_SECRET_ACCESS_KEY | — | 对象存储密钥 |
CLOUDFLARE_R2_BUCKET_NAME | — | 存储桶名称 |
ANON_TTL_DAYS | 7 | 匿名发布的 TTL |
KEY_TTL_DAYS | 30 | 使用密钥发布的 TTL |
MAX_HTML_SIZE_BYTES | 26214400 | 上传大小上限(25 MiB) |
RATE_LIMIT_ANON_PER_MINUTE | 10 | 每个 IP 的速率限制 |
RATE_LIMIT_KEY_PER_MINUTE | 60 | 每个所有者密钥的速率限制 |
CLOUDFLARE_R2_* 变量支持任何兼容 S3 的存储服务(Cloudflare
R2、AWS S3、MinIO 等)。在临时性/容器主机上,请使用对象存储,
或将持久卷挂载到 ./data,否则重新部署时产物会丢失。
生产环境需要一条指向服务的通配符 DNS 记录(*.your-domain),
以便解析产物子域名。
部署到 Railway
railway login
railway init --name htmldrop
railway up
然后在 Railway
控制面板中设置 BASE_DOMAIN 和(可选的)R2 变量,并绑定你的域名及其通配符域名。
安全默认设置
- 产物使用
X-Robots-Tag: noindex, nofollow, noarchive提供 - 新的 HTML 产物使用带版本的 CSP 沙箱:内联脚本可正常运行,但会阻止 外部网络请求/资源、表单、弹出窗口和顶层导航
- 按 IP 和密钥实施速率限制
- 所有内容都会通过 TTL 过期
- 可选择为每个产物设置密码保护
如需报告漏洞和滥用行为,请参阅 SECURITY.md。
开发
pnpm dev # run with tsx
pnpm test # vitest
pnpm run build # tsc -> dist/
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。