PasteHTML について
PasteHTML は HTML と Markdown を共有ページとして公開し、アカウント内のフォルダー、更新、閲覧数の確認に対応します。リモート MCP サーバーでは、ブラウザーで OAuth 認可したエージェントがペーストやフォルダーを管理できます。
主な機能
- 01HTML と Markdown の公開
- 02既存ペースト内容の更新
- 03ペーストのフォルダー整理
- 04パスワードとカスタムサブドメインの設定
- 05ペースト情報と統計の確認
活用シーン
- 01エージェントが作成した設計文書を共有
- 02公開済みの計画を同じリンクで更新
- 03アカウント内のプロジェクト資料を整理
- 04ペーストの閲覧統計を確認
MCP 対応
PasteHTML は Streamable HTTP のリモート MCP サーバーを提供します。OAuth 認可後、クライアントはペーストの作成、更新、設定、取得、一覧表示、統計確認、フォルダー管理を行えます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://pastehtml.dev/mcpclaude mcp add --transport http dev-pastehtml https://pastehtml.dev/mcp{"mcpServers":{"dev-pastehtml":{"type":"http","url":"https://pastehtml.dev/mcp"}}}Cursor で開く{"servers":{"dev-pastehtml":{"type":"http","url":"https://pastehtml.dev/mcp"}}}VS Code で開く{"mcpServers":{"dev-pastehtml":{"type":"http","url":"https://pastehtml.dev/mcp"}}}{"mcpServers":{"dev-pastehtml":{"serverUrl":"https://pastehtml.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
pastehtml.dev
HTML ページを数秒で共有できます。HTML ファイルをアップロードすると、友人が開いてプレビューしたり、ソースを表示したりできる非公開リンクが発行されます。匿名での公開も引き続き利用でき、アカウントを作成すると、フォルダー、カスタムサブドメイン、閲覧数、ブラウザーからの再アップロードによる更新機能、フォルダーへのエージェント公開用アカウント API キーが利用できます。
仕組み
.html/.htmファイルをドラッグ&ドロップするか、参照してアップロードします。ファイルサイズの上限は 2 MB です。- ドキュメントは
https://<token>.pastehtml.dev/で公開されます。取得済みのカスタムサブドメイン(https://launch-plan.pastehtml.dev/など)でも公開できます。リンクのコピー、プレビュー、ハイライト表示されたソースを利用できるインスペクターページは/p/<token>にあります。トークンはランダムな 32 文字の小文字英数字 ID(約 165 ビットのエントロピー)です。サブドメインとしても使われ、ブラウザーがホスト名を小文字に変換するため、小文字のみを使用しています。リンクを共有しない限り、ランダムなリンクは非公開です。 - ペーストはパスワードで保護できます。ロックされたペーストは、インスペクターページ、未加工バイト列、レンダリング済みプレビュー、ライブサブドメインを表示する前にパスワードが必要です。
- サインインしたユーザーは、ペーストをフォルダーに保存したり、閲覧数を確認したり、共有リンクを変更せずに新しい
.html/.htmファイルを再アップロードして置き換えたりできます。ペーストは削除できません。API で作成した更新トークンを使った、トークンベースの自動更新も引き続き利用できます。 - 共有ページでは、ライブプレビュー(サイト内の全画面表示モード付き)と、Rouge でハイライト表示されたソースを利用できます。
- 各ペーストは、それぞれ固有のオリジン(
https://<token>.pastehtml.dev/)から実際のページとして配信されます。そのため、他のペーストやアプリ本体から完全に分離された状態でスクリプトや localStorage が動作し(レビュー進捗チェックリストが保持されます)、パスベースの/p/<token>/rawエンドポイントはペーストの正確なバイト列をtext/plainとして返します。CDN による転送中の HTML 書き換えの影響を受けない、プログラム用クライアント向けのバイト単位で正確なコピーです。一方、/p/<token>/renderは同じバイト列を CSPsandbox内でtext/htmlとして配信します。
エージェント API
ブラウザーを使わずに公開できます。デザインドキュメントや実装計画を作成し、共有リンクを渡したい AI エージェントに最適です。認証情報なしの匿名公開も引き続き利用できます。サインインしたユーザーは /api_keys でアカウント API キーを作成でき、エージェントが自分のアカウントに公開し、対象のフォルダーを指定できます。
# Multipart upload
curl -F "[email protected]" https://pastehtml.dev/api/pastes
# Or stream the HTML straight from a pipe
curl --data-binary @plan.html -H "Content-Type: text/html" \
"https://pastehtml.dev/api/pastes?filename=plan.html"
匿名での作成は 201 と { token, title, custom_subdomain, folder, owner, account_paste, password_protected, views_count, live_url, url, raw_url, render_url, markdown_url, update_token } を返します(または { errors } と 422 を返します)。アカウントキーで作成した場合は同じペーストフィールドを返しますが、update_token は含まれません。アカウント所有のペーストを更新する際はアカウントキーを使用してください。キーを取り消すと、そのエージェントは以後アクセスできなくなります。作成/更新リクエストに password=<secret>(またはアカウントキーが必要な custom_subdomain=<name>)を追加できます。更新時に clear_password=1 を送信すると、ペーストのパスワードを削除できます。raw_url を取得すると、ペーストの正確なバイト列を読み取れます(text/plain として返され、転送中に書き換えられることはありません)。
エージェント向けアカウント API キー
サインイン済みのユーザーは、ダッシュボードからAPI キーを開き、キーを作成して、そのシークレットをエージェントに渡せます。Authorization: Bearer pht_... または X-PasteHTML-API-Key: pht_... として使用してください。有効なアカウントキーを POST /api/pastes に指定すると、ペーストはそのユーザーの所有となり、ダッシュボードに表示されます。フォルダーの指定はアカウントキーのみで行えます。
curl -H "Authorization: Bearer $PASTEHTML_API_KEY" \
--data-binary @plan.html -H "Content-Type: text/html" \
"https://pastehtml.dev/api/pastes?filename=plan.html&folder_name=Roadmap"
folder_name=<name> を指定すると、そのアカウント内でフォルダーを検索または作成し、folder_id=<id> を指定すると既存のフォルダーを指定できます。また、更新時に clear_folder=1 を指定すると、ペーストを「すべてのペースト」に戻せます。キーの作成時にデフォルトのフォルダーをスコープとして設定することもできます。スコープ付きキーは常にそのフォルダーに公開し、そのフォルダー内にすでにあるペーストのみを更新でき、フォルダーの上書きを拒否します。また、フォルダー API を通じてそのフォルダーのみを一覧表示でき、関連のないフォルダーは作成できません。フォルダーが削除されると、スコープ付きキーは自動的に失効します。スコープなしのエージェントは、次の方法で既存のフォルダー ID を取得できます。
curl -H "Authorization: Bearer $PASTEHTML_API_KEY" \
https://pastehtml.dev/api/folders
スコープなしのキーでは、入れ子形式のフォームパラメーター(folder[name]=Roadmap)またはシンプルなトップレベルの name=Roadmap のどちらでもフォルダーを作成できます。クライアントで使いやすい形式を選んでください。フォルダースコープ付きキーでフォルダーを作成すると、403 が返されます。
アカウントキーでは、そのアカウントが所有するペーストを更新できます。一方、ペーストが匿名のままであれば、ペーストごとの update_token を使う方法も引き続き利用できます。エージェントが匿名のペーストをアカウントに紐付ける必要がある場合は、アカウントキーを Authorization: Bearer ... に指定し、ペーストのシークレットを X-Update-Token: ... として別途送信してください。紐付けは一方向です。紐付け後はアカウントキーがペーストの更新認証情報となり、古いトークンは使えなくなります。
update_token は一度だけ表示されます。サーバーにはダイジェストのみが保存され、ペーストが匿名のままであれば、何度でもインプレース更新を認証できます。
curl -X PATCH -H "Authorization: Bearer $UPDATE_TOKEN" \
-F "[email protected]" https://pastehtml.dev/api/pastes/$TOKEN
更新では作成時と同じ2種類の本文形式を受け付け、更新後の { token, title, custom_subdomain, folder, owner, account_paste, password_protected, views_count, live_url, url, raw_url, render_url, markdown_url } を含む 200 を返します。更新トークンが誤っている、または指定されていない場合や、アカウントキーがペーストを所有していない場合は 403、ペーストが見つからない場合は 404 を返します。ペーストの公開/更新エンドポイントは、IP ごとに1分あたり20リクエスト、1日あたり1,000リクエストにレート制限されています。フォルダー API エンドポイントにもアカウントキーが必要で、IP ごとのレート制限が適用されます。
エージェントはこれらすべてを自分で確認できます。統合ガイド全文は /llms.txt にあります(ホームページからも、画面上のリンクと raw fetcher 向けの HTML コメントの両方で案内されています)。エージェントには「pastehtml.dev にこれを公開して」と伝えるだけで十分です。
MCP サーバー
Model Context Protocol を話すエージェント向けに、pastehtml.dev は https://pastehtml.dev/mcp にもリモート MCP サーバー(Streamable HTTP)を用意しています。pht_ キーの代わりに、エージェント作成者はブラウザー経由の OAuth で一度認証すると、アカウント内で操作できます。ダッシュボードと同じフォルダー、閲覧数、永続的なペーストを利用できます。
# Claude Code
claude mcp add --transport http pastehtml https://pastehtml.dev/mcp
# Codex
codex mcp add pastehtml --url https://pastehtml.dev/mcp
初回利用時にクライアントでブラウザーの同意画面が開きます。承認するとエージェントが接続されます。キーをコピーしたり保存したりする必要はありません。認証には、mcp:read、mcp:pastes:write、mcp:folders:write をスコープとする OAuth 2.1、PKCE、RFC 7591 Dynamic Client Registration を使用します。ダッシュボードの Connected agents から、接続済みのエージェントをいつでも確認または取り消せます。
10 個のツールが公開されています(ペーストは永続的なため、ペーストを削除するツールはありません)。
create_paste— 新しい HTML または Markdown のペーストを公開します。必要に応じてフォルダーに追加できます。update_paste— 既存のペーストの内容を再公開します(その場で上書きします)。configure_paste— ペーストのパスワード、カスタムサブドメイン、またはフォルダーを変更します。get_paste— 1 件のペーストのメタデータ、URL、保存された内容を取得します。get_paste_stats— ペーストの閲覧分析データを集計します。list_pastes— アカウントのペーストをページごとに取得します。必要に応じてフォルダーで絞り込めます。list_folders— フォルダーと、それぞれに含まれるペースト数を一覧表示します。create_folder— 新しい空のフォルダーを作成します。rename_folder— フォルダーの名前を変更します。delete_folder— フォルダーを削除します(その中のペーストは削除されず、フォルダーに未分類の状態で残ります)。
本番環境では、MCP_DYNAMIC_REGISTRATION_DISABLED 環境変数を使用して Dynamic Client Registration を無効にできます(登録済みのクライアントは引き続き動作します)。デプロイをスモークテストするには、ディスカバリードキュメントを取得します。
curl https://pastehtml.dev/.well-known/oauth-protected-resource
技術スタック
- Ruby on Rails 8.1 · PostgreSQL · Hotwire(Turbo + Stimulus)
- Tailwind CSS v4(cssbundling)· esbuild(jsbundling)· Yarn 4
- ツール管理には mise、PostgreSQL には Docker Compose を使用
- コミックブック風デザイン:Inter の上に Bangers のディスプレイ書体を配置し、ハーフトーンテクスチャ、インクで縁取ったパネル、くっきりしたオフセットシャドウを採用
- インストール可能な PWA:マニフェストと、オフライン時のフォールバックページを備えた最小限のネットワーク優先サービスワーカー(ペースト自体はキャッシュされません)
- meta-tags による SEO(ブランドロゴ入り OG 画像、OG/Twitter カード、canonical、ペーストページの noindex)と、コミック風の静的エラーページ
開発
mise run dev # starts postgres (docker), installs deps, prepares db, runs bin/dev
または、手順を追って実行する場合:
mise run docker:start # postgres on localhost:5435
mise run deps # bundle install + yarn install
mise run db:prepare
bin/dev # rails server + js/css watchers on port 3000
テストと Lint
mise run test # rails test
mise run lint # rubocop + brakeman
デプロイ
GitHub Actions の「Kamal Run」ワークフローから Kamal を使って、単一サーバーにデプロイします。構成はアプリコンテナと postgres 18 のアクセサリーです。db/production.sql は、アクセサリーの初回起動時に Solid Cache/Queue データベースを作成します。ペーストは <token>.pastehtml.dev サブドメインから配信されるため、プロキシはワイルドカードを Cloudflare Origin CA 証明書でルーティングします(ワイルドカード証明書は HTTP-01 では Let's Encrypt から取得できません)。
初回のみの設定:
- Cloudflare(無料プラン):
pastehtml.dev、wwwにプロキシを有効にしたAレコードを追加し、ワイルドカード*レコードにもプロキシを有効にして、すべてサーバーを指定します。SSL/TLS モードを Full (strict) に設定します。pastehtml.dev, *.pastehtml.dev用の Origin Server 証明書を作成し、PEM ペアを保管します。 - リポジトリの Actions シークレット:
SERVER_IP、SSH_PRIVATE_KEY(サーバーへの root アクセス)、RAILS_MASTER_KEY(config/master.keyから取得)、POSTGRES_PASSWORD、CLOUDFLARE_ORIGIN_CERTIFICATE、CLOUDFLARE_ORIGIN_KEY(Origin CA の PEM ペア)。コンテナレジストリ(ghcr.io)の認証には、ワークフロー自身のGITHUB_TOKENを使用します。 - 「Kamal Run」ワークフローを
setupコマンドで一度実行して(postgres とプロキシを準備)、以降のリリースごとにdeployを実行します。
ローカルで kamal コマンドを実行する場合は、Origin CA ペアを .kamal/certs/origin.pem / origin-key.pem(gitignore 対象)に配置し、SERVER_IP と POSTGRES_PASSWORD をエクスポートします。イメージをローカルでビルドする必要がある場合は、config/deploy.yml から GHA ビルダーキャッシュのブロックを削除します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。