htmldrop ロゴ

htmldrop

エージェントが作るものを、なんでも公開 — API呼び出し1回、MCPサーバー付き。

htmldrop.link CI npm MIT

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

--- htmldropは、HTML・Markdown・PDF・画像の成果物を数秒で共有リンクに変えます。 レポート、ダッシュボード、チャート、デモ — エージェント(または人)が作るもの すべて。Markdown・テキスト・JSONはクリーンなリーダーページとしてレンダリング され、PDFと画像はそのまま配信されます。gitもビルドもダッシュボードも不要です。 **今すぐ試す: [htmldrop.link](https://htmldrop.link)** — HTMLファイルをドラッグ &ドロップ、HTMLソースを貼り付け、またはAPIにPOST。 ## 仕組み ```bash curl -X POST https://htmldrop.link/publish \ -H "Content-Type: application/json" \ -d '{"html":"

Hello agents

","title":"Demo"}' ``` ```json { "url": "https://happy-otter-42.htmldrop.link", "id": "...", "subdomain": "happy-otter-42", "expires_at": "2026-07-17T00:00:00.000Z" } ``` すべてのリンクには専用サブドメイン、自動生成のOpen Graphプレビューカード、 TTLが付きます — 共有した成果物が永遠に残ることはありません。 ## エージェントを接続する (MCP) ホスティッドMCPサーバーは `https://htmldrop.link/mcp` (Streamable HTTP) にあり、 `publish_html` というツールを1つ公開しています。 ### Claude Code ```bash claude mcp add --transport http htmldrop https://htmldrop.link/mcp ``` ### Claude Desktop Claude Desktopはstdioで動くため、 [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) でホスティッド サーバーへブリッジします。`claude_desktop_config.json` に: ```json { "mcpServers": { "htmldrop": { "command": "npx", "args": ["-y", "mcp-remote", "https://htmldrop.link/mcp"] } } } ``` ### Cursor CursorはSSE URLに直接接続できます。`.cursor/mcp.json` に: ```json { "mcpServers": { "htmldrop": { "url": "https://htmldrop.link/mcp" } } } ``` ### Codex CLI `~/.codex/config.toml` に: ```toml [mcp_servers.htmldrop] command = "npx" args = ["-y", "mcp-remote", "https://htmldrop.link/mcp"] ``` ### セルフホスト環境 (npm, stdio) htmldropを自分で運用していますか? [`htmldrop-mcp`](https://www.npmjs.com/package/htmldrop-mcp) パッケージは、 **あなたの**ストレージとドメインへ公開するローカルstdio MCPサーバーです: ```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` ツール | 引数 | 型 | 説明 | |------|----|------| | `html` | string | 公開するHTMLコンテンツ (`markdown` / `url` でも可) | | `markdown` | string | Markdownコンテンツ — スタイル付きリーダーページにレンダリング | | `url` | string | 取得して公開するリモートHTMLページ | | `title` | string | メタデータ・ソーシャルカード用タイトル (任意) | | `ttl_days` | number | 成果物が期限切れになるまでの日数 | | `password` | string | パスワード保護 (任意) | | `owner_key` | string | 上限緩和・長いTTLのためのキー (任意) | エージェント向けの完全なドキュメントは [AGENTS.md](../AGENTS.md) にあり、 [htmldrop.link/agents.md](https://htmldrop.link/agents.md) でも配信されています。 ## REST API | エンドポイント | ボディ | 備考 | |---------------|--------|------| | `POST /publish` | JSON `{ html \| markdown, title, ttl_days, password, url }` | 基本エンドポイント | | `POST /publish/raw` | 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` も後方互換のため引き続き有効です。) ## セルフホスティング ```bash git clone https://github.com/vin-spiegel/htmldrop.git cd htmldrop pnpm install cp .env.example .env # デフォルトのまま動作します pnpm dev # http://localhost:3000 ``` **設定が必要なのは実質 `BASE_DOMAIN` のみです。** それ以外はすべて動作する デフォルト値があります。オブジェクトストレージが未設定の場合はローカル ファイルシステム(`./data`)にフォールバックします — データベース不要です。 ### 環境変数 | 変数 | デフォルト | 説明 | |------|-----------|------| | **`BASE_DOMAIN`** | `localhost` | **成果物サブドメインのベースドメイン。多くのセルフホスターが設定すべき唯一の値。** | | `PORT` | `3000` | HTTPポート (通常はホストが指定) | | `NODE_ENV` | `development` | デプロイ時は `production` に設定 | | `CLOUDFLARE_R2_ENDPOINT` | — | S3互換エンドポイント。R2変数4つをすべて設定するとオブジェクトストレージ、すべて空だとファイルシステム | | `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へのデプロイ ```bash railway login railway init --name htmldrop railway up ``` その後、Railwayダッシュボードで `BASE_DOMAIN` と (任意で) R2変数を設定し、 ドメインとワイルドカードを接続してください。 ## デフォルトの安全対策 - すべての成果物は `X-Robots-Tag: noindex, nofollow, noarchive` 付きで配信 - IPごと・キーごとのレート制限 - すべてTTLで期限切れ - 成果物ごとのパスワード保護 (任意) 脆弱性・不正利用の報告は [SECURITY.md](SECURITY.md) をご覧ください。 ## 開発 ```bash pnpm dev # tsxで実行 pnpm test # vitest pnpm run build # tsc -> dist/ ``` ## ライセンス [MIT](../LICENSE)