share-pages
Enables creating, listing, and deleting temporary shared Markdown/HTML pages with 72-hour expiration. Supports local Node.js or Cloudflare Workers deployment with OAuth login.
README
share-pages
Markdown / HTML を短期間だけ共有するための、Node.js ローカル実装と Cloudflare Workers 実装です。MCPクライアントから共有ページの作成・一覧・削除を実行できます。
初期アイデアは TOKIUM Tech Blog の記事 に着想を得ています。
Features
- Markdown / HTML のアップロード
- ドラッグ&ドロップUI
- 一時共有URLの発行
- Markdownレンダリング
- HTMLのsandbox iframe表示
- 危険なHTML要素の除去
- 元ファイルのダウンロード
- 72時間の有効期限
- 期限切れページの閲覧時・定期削除
- 手動削除とページ一覧
- ローカルJSON永続化
- Cloudflare R2保存
- Cloudflare Durable ObjectsによるMCP Streamable HTTPセッション管理
- OAuth 2.0 / PKCE と Dynamic Client Registration
- MCP tools:
share_markdownshare_htmllist_shared_pagesdelete_shared_page
Requirements
- Node.js 20+
- npm
- Cloudflareアダプターを使う場合: Wrangler 4+
- Cloudflare版の本番利用にはR2、Durable Objects、OAuth用Secretが必要
Local Node.js server
npm ci
npm test
npm run check
npm start
デフォルトでは http://127.0.0.1:8787 で起動し、データを data/pages.json に保存します。
SHARE_PAGES_DATA_DIR=/secure/path/share-pages-data npm start
ローカルのstdio MCPクライアントから使う場合:
SHARE_PAGES_URL=http://127.0.0.1:8787 npm run mcp
Hosted instance
運営者がホスティングしているHosted instanceを利用できます。
https://share-pages-production.pocky1111gm.workers.dev
- Google OAuthによるログインが必要です。
- Googleでメールアドレスが認証済みのアカウントであれば、メールアドレスのドメインを問わず利用できます。
- 共有ページは公開URLを知っている人が閲覧できます。
- 共有ページの有効期限は72時間です。
- 運営者はサービスの停止、データ削除、仕様変更を行う場合があります。
- 可用性やデータ保存を保証するサービスではありません。
- 機密情報、個人情報、認証情報、重要な業務データはアップロードしないでください。
利用者自身で管理したい場合は、以下のCloudflare Workers手順でセルフホストしてください。
Cloudflare Workers
- Cloudflareへログインします。
npx wrangler@4.114.0 login
-
wrangler.jsoncの環境名、R2バケット名、SHARE_PAGES_ORIGINを自分の環境へ変更します。 -
R2バケットを作成します。
npx wrangler@4.114.0 r2 bucket create YOUR_BUCKET_NAME
- GitHub Actions用のCloudflare API Tokenを作成します。
Cloudflare Dashboardの次のページを開きます。
https://dash.cloudflare.com/profile/api-tokens
Create Tokenから、手動のR2 API Tokenではなく、Cloudflare Workers用のテンプレートを選択します。
Create Token
→ Edit Cloudflare Workers
テンプレートが表示されない場合は、Custom tokenで次のAccount権限を設定します。
Account Settings: Read
Workers Scripts: Edit
Workers R2 Storage: Edit
Durable ObjectsはWorkerのデプロイとmigrationの一部として扱うため、別のDurable Objects用S3/R2 Tokenは作成しません。workers_dev: trueの構成ではZone Workers Routes権限も不要です。
Account Resourcesは対象のCloudflareアカウント1つだけに限定してください。All accountsは選択しないでください。CI専用Tokenには有効期限を設定し、定期的にローテーションしてください。
- GitHubリポジトリのSecretへ登録します。Tokenの値はリポジトリへ書き込まず、GitHub Secretだけに保存します。
gh secret set CLOUDFLARE_API_TOKEN --repo YOUR_GITHUB_OWNER/share-pages
プロンプトにTokenを入力します。Tokenはチャット、Issue、ログ、READMEへ貼り付けないでください。
- Google OAuthのSecretを設定します。値はリポジトリへ保存しません。
npx wrangler@4.114.0 secret put GOOGLE_CLIENT_ID --env staging
npx wrangler@4.114.0 secret put GOOGLE_CLIENT_SECRET --env staging
npx wrangler@4.114.0 secret put GOOGLE_ALLOWED_DOMAIN --env staging
npx wrangler@4.114.0 secret put MCP_OAUTH_SIGNING_SECRET --env staging
SHARE_API_TOKENを使う場合は、MCP OAuthの代わりにWorker APIを保護する用途として設定します。
- Google OAuthのリダイレクトURIに登録します。
https://YOUR_WORKER_HOST/auth/callback
- dry-run、テスト、デプロイを実行します。
npm run check
npm test
npx wrangler@4.114.0 deploy --env staging --dry-run
npx wrangler@4.114.0 deploy --env staging
Cloudflare MCP
Cloudflare版のMCPエンドポイントは次の形式です。
https://YOUR_WORKER_HOST/mcp
CursorなどのStreamable HTTPクライアントには、次のように登録します。
{
"mcpServers": {
"share-pages": {
"url": "https://YOUR_WORKER_HOST/mcp"
}
}
}
MCPセッションはMcpAgentとDurable Objectsで保持されます。R2バケットは直接公開せず、Worker経由で配信してください。
Configuration
Cloudflare Secrets:
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_SECRET
GOOGLE_ALLOWED_DOMAIN
GOOGLE_ALLOWED_EMAIL
MCP_OAUTH_SIGNING_SECRET
SHARE_API_TOKEN
公開リポジトリには値をコミットしないでください。サンプルは .env.example を参照してください。
Security notes
- アップロード内容は信頼できない入力として扱ってください。
- HTMLはsandbox iframeとサニタイズを使用しますが、重要な機密情報の共有には使わないでください。
- 共有URLを知っている人は、期限内であればページを閲覧できます。
- 本番で利用者を限定したい場合は、Google OAuthの許可ドメインまたはメールアドレスをSecretで追加設定してください。
- R2バケットを公開設定にしないでください。
- Secret、OAuthコード、トークン、個人データをIssue・ログ・PRへ貼り付けないでください。
詳細は SECURITY.md を参照してください。
Development
npm ci
npm run check
npm test
git diff --check
貢献方法は CONTRIBUTING.md、ライセンスは LICENSE、依存ライセンスの概要は NOTICE を参照してください。
CI/CD
Pushes to main run tests and deploy the production Worker through GitHub Actions. Pull requests create an isolated staging Worker and add its Preview URL to the PR.
Current limitations
- 既定の期限は72時間です。
- 共有ページのURLを知っている利用者への細かなアクセス制御は提供していません。
- OAuthのGoogle設定は利用者自身のCloudflare/Google Cloudプロジェクトが必要です。
- Cloudflare版のMCPツールとローカルstdio MCPは別トランスポートです。
- 高トラフィック用途、監査ログ、利用者ごとの厳密なアクセス制御は未実装です。
License
MIT License. See LICENSE.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。