Skip to main content
Glama
NathanDai5287

signal-mcp

signal-mcp

Signal Desktopのメッセージ用の、ローカル・読み取り専用のModel Context Protocolサーバー。

MCP対応エージェントに、スコープを絞った4つのツールを提供します:

  • signal_list_conversations — メッセージ本文を返さずに、最近のダイレクト会話とグループ会話を検索します。

  • signal_get_messages — 1つの正確な会話から、上限付きの時系列ウィンドウを取得します。

  • signal_search_messages — リテラル部分文字列検索。会話と時刻で任意に範囲を限定できます。

  • signal_get_message — 引用と添付ファイルのメタデータを含む、1つの正確なメッセージを取得します。

このサーバーはメッセージを送信せず、Signalのデータベースにも書き込みません。stdioを介してローカルで実行され、HTTPリスナーはありません。

重要なプライバシー警告

このサーバーは、接続先のMCPホストとモデルに、あなたのプライベートなSignal履歴を公開する可能性があります。そのホストのデータ処理ポリシーを確認し、リクエストのスコープを狭く保ち、信頼できないエージェントにはこのサーバーを設定しないでください。

Signal Desktopのローカルデータベースは実装の詳細であり、公開APIではありません。Signalのスキーマ更新により、このプロジェクトが一時的に動作しなくなる可能性があります。このプロジェクトは非公式であり、Signal Messenger LLCとは提携しておらず、その承認も受けていません。

Related MCP server: msteams-local-mcp

現在の対応状況

  • Windows

  • 同じWindowsユーザー向けにインストールされたSignal Desktop

  • Node.js 20以降

  • ローカルstdio MCPホスト

現在、自動キーリカバリにはWindowsが必要です。SignalはChromium OSCryptマスターキーを現在のユーザーのDPAPI資格情報で保護しているためです。

インストール

git clone https://github.com/NathanDai5287/signal-mcp.git
cd signal-mcp
npm install
npm run build

デフォルトでは、サーバーは%APPDATA%\Signalの下でSignalを検出します。通常、設定は不要です。

MCPホストを設定せずに接続をテストするには:

npx @modelcontextprotocol/inspector node dist/src/index.js

Inspectorは、実際のプライベートメッセージを返すツールを呼び出すことができます。そのブラウザセッションもそれに応じて取り扱ってください。

MCPホスト設定

プロジェクトをビルドし、ホストが絶対パスでコンパイル済みエントリポイントを起動するように設定します:

{
  "mcpServers": {
    "signal": {
      "command": "node",
      "args": ["C:\\path\\to\\signal-mcp\\dist\\src\\index.js"]
    }
  }
}

MCP設定を変更した後、ホストを再起動してください。正確な設定ファイルの場所はホストによって異なります。

オプション設定

環境変数はMCPホストのサーバー設定を通じて渡されます:

変数

目的

デフォルト

SIGNAL_MCP_DB

Signal SQLCipherデータベースのパス

%APPDATA%\Signal\sql\db.sqlite

SIGNAL_MCP_CONFIG

Signal config.jsonのパス

%APPDATA%\Signal\config.json

SIGNAL_MCP_LOCAL_STATE

Signal Chromium Local Stateのパス

%APPDATA%\Signal\Local State

SIGNAL_MCP_KEY

明示的な64文字のSQLCipherキー

DPAPIで回復

SIGNAL_MCP_MAX_MESSAGES

メッセージ/検索呼び出しのハード上限

200

SIGNAL_MCP_MAX_CONVERSATIONS

会話一覧取得のハード上限

100

SIGNAL_MCP_KEYをコミット済みファイルに含めないでください。Windowsでは自動回復が推奨されます。

データベースアクセスの仕組み

Signal Desktopは、AES-256-GCMで暗号化されたSQLCipherキーをconfig.jsonに保存します。そのラッピングキーはChromiumのLocal Stateにあり、Windows DPAPIで保護されています。起動時に、このサーバーは次の処理を行います:

  1. 現在のWindowsユーザーのOSCryptマスターキーをDPAPIで保護解除します。

  2. SignalのSQLCipherキーをメモリ内で復号します。

  3. SQLCipher互換レベル4でデータベースを開きます。

  4. ツール呼び出しを処理する前に、SQLiteのquery_onlyモードを有効にします。

キーが出力されたり、MCPを通じて返されたり、このプロジェクトによって永続化されたりすることはありません。

すべての検索入力はバインドされたSQLパラメータです。%_\はエスケープされるため、検索語は呼び出し元が制御するSQLパターンではなく、リテラル部分文字列になります。すべての結果セットには上限があります。

返されるデータ

メッセージ結果には以下を含めることができます:

  • SignalのメッセージIDと会話ID

  • ミリ秒単位のタイムスタンプ

  • 受信/送信の方向

  • 送信者のサービスIDと表示名

  • メッセージ本文

  • 非正規化された引用返信テキスト

  • 添付ファイルのメタデータとローカルダウンロードの可否

このマイルストーンでは、添付ファイルのバイト列の復号や返却、永続的なアーカイブの作成、セマンティック検索、メッセージの送信は行いません。Signalがすでに削除した消えるメッセージは復元できません。

開発

npm test
npm run check
npm run build

テストスイートはインメモリのフェイクリーダーを使用し、Signalデータにはアクセスしません。Signalのプライベートデータベーススキーマの変更を検出するには、手動によるローカルスモークテストが依然として必要です。

運用ログはstderrに出力されます。stdoutはMCP JSON-RPCトラフィック用に予約されているためです。

セキュリティ

メッセージ本文、データベースファイル、キー、サービスID、電話番号、ローカルパスを含む公開Issueを開かないでください。脆弱性を非公開で報告する方法については、SECURITY.mdを参照してください。

ライセンス

プロジェクトのソースコードはMITライセンスです。依存関係はそれぞれのライセンスを保持します。特に、@signalapp/sqlcipherはAGPL-3.0-onlyで配布されています。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying Signal Desktop chats and messages by reading the encrypted SQLite database directly, providing tools for listing chats, searching messages, and running read-only SQL queries.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A read-only MCP server that lets AI search a user's own LINE Desktop chat history on macOS, providing tools to list chats, retrieve messages, and search conversations directly from the local encrypted database.
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to read the entire Apple Messages (iMessage/SMS) history on a Mac through a read-only, batched tool that supports listing chats, retrieving transcripts, polling recent messages, and searching message bodies via REST or streamable HTTP MCP.
    MIT