Signal Desk MCP
Enables ChatGPT to list, create, update, pause, resume, and delete monitoring items in Signal Desk via OAuth-protected MCP tools, with support for periodic execution and Web Push notifications.
README
Signal Desk
監視項目を専用画面で管理し、定期実行、履歴、アプリ内通知、Web Pushを扱うPWAです。ChatGPTからはOAuth保護されたMCPツールを使って、同じ監視項目を登録・更新・実行できます。
公開先
- GitHub Pages(ローカル試作モード): https://rune-markar.github.io/signal-desk/
- GitHub: https://github.com/Rune-markar/signal-desk
GitHub Pagesは秘密情報や定期処理を持てないため、ブラウザ内デモとして動作します。自動監視・MCP・Pushを使う本稼働URLは、Cloudflare Workerをdeployしたときに発行されます。
動作モード
GitHub Pages / ローカル試作モード
- 監視項目の追加、編集、停止、再開、削除、検索、絞り込み
- 通知の未読、一括既読、スヌーズ
- 実行履歴と次回予定
- ChatGPT Scheduled taskの内容を手入力し、停止中で移行
localStorageへの保存- Worker版へ渡す非サンプルデータのJSON書き出し
- 外部通信をしない「デモ結果」
- PWAアプリシェルのオフライン表示
Cloudflare Worker接続モード
- D1を正本にした端末間同期
- セッション認証と単一所有者のデータ分離
- 15分ごとのCronと実行lease
- 参照先URL付き監視を判定するCloudflare Workers AI
- OpenAI Responses APIによる公開Web検索(APIキー設定時)
- HTTPSページの安全な取得、またはWeb検索
- 成功・不一致・失敗の履歴と通知重複防止
- VAPID Web Pushと静かな時間
- OAuth 2.1 + PKCEで保護された
/mcp - ChatGPTからの一覧、作成、更新、停止・再開、即時実行、削除
- 接続前ローカルデータの明示的一回移行
- GitHub Pages版で書き出したJSONの検証・読み込み
認証済みの画面がそのままオフラインになった場合は、同じ起動中だけ直前のサーバー状態を閲覧できます。再読込時は認証確認までローカルデータだけを表示し、ログアウト・401・未認証確認時には端末のサーバーキャッシュを削除します。オフライン中のサーバーデータ変更は行いません。
ChatGPTとの境界
Signal Deskを監視項目の正本にします。ChatGPTにMCPを接続すると、会話からSignal Deskの監視を操作できます。
一方、ChatGPT Scheduled Tasksの既存一覧や実行履歴を取得する一般向けAPIは確認できないため、次は行いません。
- 既存Scheduled Tasksの自動取り込み
- ChatGPT側通知の送信先をSignal Deskへ置換
- ChatGPT側とSignal Desk側の双方向同期
既存タスクは画面の「ChatGPTから移行」で内容を確認し、停止中として手動保存します。Signal Deskでテスト成功後に、元のChatGPTタスクを利用者が停止してください。
GitHub Pages版とWorker版はオリジンが異なるため、ブラウザ保存データは自動共有されません。Pages版の「設定」で移行用JSONを書き出し、Worker版へログインして同じ「設定」から読み込んだ後、件数とURLを確認して明示的に移行します。JSONには監視条件やURLが含まれるため、安全な端末で扱ってください。
ローカル起動
Node.js 20.19以上(または22.12以上)を使用してください。
GitHub Pages相当のローカル試作モード:
npm install
npm run dev
Worker接続モード:
cp .dev.vars.example .dev.vars
npm run db:migrate:local
npm run dev:worker
Worker接続モードのアプリはhttp://localhost:8787/signal-desk/、MCPはhttp://localhost:8787/mcpです。.dev.varsへ実際の秘密値を設定し、Gitへ追加しないでください。OpenAI APIキーを省略した場合も、参照先URLを設定した監視はWorkers AIで実行できます。URLなしで公開Web検索する監視にはOpenAI APIキーが必要です。
品質確認
npm run check
npm run checkは次を実行します。
- Vitestのドメイン、UI、監視元URL、Push URLテスト
- フロントエンドTypeScriptとVite本番ビルド
- Worker TypeScript
- Wranglerのdeploy dry-run
配置
CloudflareへのD1 migration、Worker Secret、VAPID、deploy、ChatGPT MCP接続は配置手順を参照してください。実装上の境界とセキュリティ設計はアーキテクチャにまとめています。
主な構成
src/
api/ PWAから同一オリジンAPIへのクライアント
components/ 共通UI、モーダル、監視カード
domain/ 型、予定計算、Reducer、ローカル保存
pages/ 概要、監視、通知、履歴、設定
state/ ローカル/サーバー両モードの状態管理
worker/
migrations/ D1 schema
api.ts Cookie認証されたPWA API
auth.ts セッション、同一オリジン、試行制限
db.ts D1 repository
runner.ts Workers AI / Responses API、外部取得、Cron、lease
push.ts VAPID Web Push
mcp.ts ChatGPT用MCPツール
oauth.ts OAuth同意フロー
index.ts Worker統合入口
技術構成
- React 19 + TypeScript + Vite
- Vitest + Testing Library
- Vite PWA / Workbox
- Cloudflare Workers + D1 + KV + Cron + Static Assets
- Cloudflare Workers AI
- Cloudflare Agents SDKのstateless MCP handler
- Cloudflare Workers OAuth Provider
- OpenAI Responses API
- Web Push / VAPID
- Temporal polyfill
セキュリティ上の注意
- APIキー、ログイン用パスフレーズ、VAPID private keyをフロントエンドやGitへ置かないでください。
- 監視元はHTTPSのみです。Workerはprivate network、危険なredirect、非テキスト応答、512KB超過を拒否します。
- 外部ページは信頼できないデータとしてモデルへ渡し、ページ内の命令を実行しません。
- この版の認証は単一所有者向けです。不特定多数へ公開する前に外部IdPとアカウント管理を追加してください。
- Push受信、通知クリック、PWAインストール、Android/iOSアイコンは本番HTTPSと実機で最終確認してください。
Noto Sans JPのライセンスはpublic/THIRD_PARTY_NOTICES.txtに収録しています。このプロジェクト自体には、現時点で再利用ライセンスを付与していません。
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.