Signal Desk MCP

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.

Category
Visit Server

README

Signal Desk

監視項目を専用画面で管理し、定期実行、履歴、アプリ内通知、Web Pushを扱うPWAです。ChatGPTからはOAuth保護されたMCPツールを使って、同じ監視項目を登録・更新・実行できます。

公開先

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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured