mcp-signal
mcp-signal
Ein lokaler Model Context Protocol (MCP)-Server, der den Signal Desktop-Verlauf aus der lokalen verschlüsselten Datenbank über
signal-exportliest und ausgehende Nachrichten übersignal-clisendet.
mcp-signal konzentriert sich auf den Kern-Workflow für persönliche Signal-Automatisierung – Chats auflisten, Nachrichten lesen, Nachrichten durchsuchen, Gruppen inspizieren und Nachrichten an Direkt- oder Gruppenchats senden. Alles läuft lokal; stdio-Transport ohne Netzwerk-Listener.
Hinweis – gemischtes Backend. Lesen/Suchen erfolgt aus der lokalen Signal Desktop-Datenbank. Das Senden verwendet
signal-cli, das separat installiert und mit einem Signal-Konto verknüpft sein muss. Wennsignal-clinicht verfügbar ist, funktionieren Lesen/Suchen weiterhin, aber die Sende-Tools nicht.
Funktionen
Auflisten von Direkt- und Gruppenchats aus Signal Desktop
Lesen aktueller Nachrichten aus einem Chat
Suchen von Nachrichten innerhalb eines Chats oder über alle Chats hinweg
Auflisten von Gruppenchats mit
signal-cli-Gruppen-IDs für die Verwendung beim SendenSenden einer Nachricht an:
einen direkten Empfänger per Telefonnummer
eine Gruppe per Gruppen-ID
einen Chat per exaktem Chat-Namen (mit Mehrdeutigkeitsprüfungen)
Läuft vollständig auf Ihrem Rechner; stdio-Transport ohne Netzwerk-Listener
Einrichtung
Voraussetzungen
Python 3.13+
Signal Desktop mit einer bestehenden lokalen Nachrichtendatenbank
signal-cliinstalliert und verknüpft, falls Sie ausgehende Nachrichten senden möchten
Installation
Klonen Sie dieses Repository
git clone https://github.com/Sealjay/mcp-signal.git cd mcp-signalAbhängigkeiten installieren
uv syncsignal-cliinstallieren (optional – nur für ausgehende Nachrichten erforderlich)Unter macOS ist der einfachste Weg Homebrew:
brew install signal-cli
Ausgehende Nachrichten konfigurieren
Der Server lädt automatisch eine lokale .env.local-Datei aus dem Repository-Stammverzeichnis, falls vorhanden. Diese Datei ist in gitignore enthalten und ist der empfohlene Ort für maschinenlokale Konfigurationen.
cat > .env.local <<'EOF'
SIGNAL_ACCOUNT="+441234567890"
EOFOptionale Umgebungsvariablen:
Variable | Zweck |
| Pfad zur |
| Datenverzeichnis von Signal Desktop überschreiben |
| Passwort für verschlüsselte Desktop-Datenbanken, falls erforderlich |
| Rohschlüssel für verschlüsselte Desktop-Datenbanken, falls erforderlich |
Umgebungsvariablen, die in der Shell gesetzt sind, haben Vorrang vor .env.local.
signal-cli verknüpfen (nur beim ersten Start)
mcp-signal verwaltet die Verknüpfung nicht selbst. Verknüpfen Sie zuerst das lokale signal-cli-Gerät:
signal-cli link -n "signal-mcp"Scannen Sie den QR-Code in der Signal-Mobil-App (Einstellungen → Verknüpfte Geräte → Neues Gerät verknüpfen).
Übergeben Sie bei aktuellen signal-cli-Versionen nicht -a / --account an link – das Verknüpfen eines neuen sekundären Geräts erfordert dort keine Telefonnummer.
Nachdem der QR-Code akzeptiert wurde, bestätigen Sie, dass das verknüpfte Konto sichtbar ist:
signal-cli listAccountsDieses Konto sollte mit dem Wert SIGNAL_ACCOUNT in .env.local übereinstimmen.
signal-cli speichert seinen Status des verknüpften Kontos unter seinem eigenen lokalen Datenverzeichnis (normalerweise ~/.local/share/signal-cli/data unter macOS/Linux). Dieser Status befindet sich außerhalb dieses Repositorys und wird nicht von mcp-signal committet.
Überprüfen Sie, ob alles verbunden ist:
uv run signal-mcp smokeMCP-Client-Konfiguration
Alle Clients starten den Server auf die gleiche Weise über stdio. Unter macOS benötigen Sie möglicherweise den absoluten Pfad zu uv – siehe macOS: uv PATH unten.
Claude Code
Der schnellste Weg ist die CLI:
claude mcp add --transport stdio signal --scope user -- uv run --directory /absolute/path/to/mcp-signal signal-mcp serveAlternativ fügen Sie dies zu .mcp.json in Ihrem Projektstammverzeichnis hinzu (oder ~/.claude.json für einen benutzerspezifischen Server):
{
"mcpServers": {
"signal": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/mcp-signal", "signal-mcp", "serve"]
}
}
}Wenn Sie die Datei direkt bearbeiten, starten Sie die Claude Code-Sitzung neu, um die Änderungen zu übernehmen.
Claude Desktop
Fügen Sie dies zu ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) hinzu:
{
"mcpServers": {
"signal": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/mcp-signal", "signal-mcp", "serve"]
}
}
}Starten Sie Claude Desktop neu. Sie sollten signal als verfügbare Integration sehen.
Cursor
Fügen Sie dies zu ~/.cursor/mcp.json hinzu:
{
"mcpServers": {
"signal": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/mcp-signal", "signal-mcp", "serve"]
}
}
}Starten Sie Cursor neu.
macOS: uv PATH
GUI-Apps (Claude Desktop, Cursor) erben nicht immer den PATH von Ihrem interaktiven Terminal, daher kann uv mit spawn uv ENOENT fehlschlagen. Beheben Sie dies, indem Sie den absoluten Pfad zu uv in command verwenden:
Homebrew —
/opt/homebrew/bin/uv(Apple Silicon) oder/usr/local/bin/uv(Intel)Manuelle Installation — führen Sie
which uvin Ihrem Terminal aus, um ihn zu finden
Beispiel:
{
"mcpServers": {
"signal": {
"command": "/opt/homebrew/bin/uv",
"args": ["run", "--directory", "/absolute/path/to/mcp-signal", "signal-mcp", "serve"]
}
}
}Architektur
Komponente | Beschreibung |
MCP-Server | Python/FastMCP, stdio-Transport |
Lesepfad |
|
Sendepfad |
|
Status | Kein separater Cache; liest direkt aus Signal Desktop-Daten |
Datenfluss
Der MCP-Client startet
signal-mcp serveüber stdio.Lese-/Such-Tools rufen
signal-exportgegen die lokale Signal Desktop-Datenbank auf.Gruppenauflistung und ausgehende Nachrichten rufen
signal-cli -a ACCOUNT jsonRpcauf.Ergebnisse werden als strukturiertes JSON zurückgegeben.
Projektstruktur
mcp-signal/
src/mcp_signal/
config.py
main.py
reader.py
server.py
signal_cli.py
tests/
CLAUDE.md
LICENSE
README.md
SECURITY.mdTools
Tool | Zweck |
| Direkt- und Gruppenchats aus Signal Desktop auflisten |
| Nachrichten aus einem bestimmten Chat lesen |
| Nachrichten innerhalb eines Chats oder über alle Chats hinweg suchen |
| Gruppen von |
| Eine Textnachricht an einen direkten Empfänger oder eine Gruppe senden |
| Desktop-DB / |
Datenschutz und Sicherheit
Kein Cloud-Relay. Kein Netzwerk-Listener. Alle Daten bleiben auf Ihrem Rechner.
Lesen/Suchen verwendet nur Ihre lokalen Signal Desktop-Daten.
Sendeoperationen erfordern ein lokal konfiguriertes
signal-cli-Konto..env.localist für lokale Geheimnisse wieSIGNAL_ACCOUNTgedacht und wird nicht committet.Der Status des verknüpften
signal-cli-Geräts wird in seinem eigenen lokalen App-Datenverzeichnis außerhalb dieses Repositorys gespeichert und nicht committet.
Siehe SECURITY.md, wie Schwachstellen gemeldet werden können.
Einschränkungen
Prompt-Injection-Risiko: Wie bei vielen MCP-Servern unterliegt dieser der tödlichen Triade. Bösartige eingehende Nachrichten könnten versuchen, einen Agenten anzuweisen, andere Nachrichten zu exfiltrieren. Behandeln Sie die Tool-Oberfläche entsprechend und überprüfen Sie ausgehende Aktionen, bevor Sie sie genehmigen.
Gemischtes Backend: Der Chatverlauf stammt von Signal Desktop, während ausgehende Nachrichten von
signal-clistammen.Keine Anhänge: Nur Textversand.
Keine Echtzeit-Benachrichtigungen: Nur Polling/Lesen.
Ein Konto pro MCP-Instanz.
Gruppensendungen benötigen
signal-cli: Lokale DB-Lesevorgänge allein liefern nicht genügend Informationen, um sicher an Gruppen zu senden.
Entwicklung
uv sync
uv run signal-mcp smoke
uv run pytest
uv run ruff check .Fehlerbehebung
signal-clinicht gefunden — bestätigen Sie, dasssignal-cliimPATHist oder setzen SieSIGNAL_CLI_PATHin.env.local. Unter macOS istbrew install signal-clider einfachste Weg.Lesen/Suchen funktioniert, aber Senden schlägt fehl —
signal-cliist nicht verknüpft oderSIGNAL_ACCOUNTist nicht gesetzt. Führen Siesignal-cli listAccountszur Überprüfung aus und prüfen Sie dann.env.local.signal-cli linkhängt oder schlägt fehl — übergeben Sie bei aktuellen Versionen kein-a/--accountanlink. Führen Siesignal-cli link -n "signal-mcp"aus und scannen Sie den QR-Code von Ihrem Telefon.MCP-Client kann den Server nicht starten —
argsmuss einen absoluten Pfad zum Repository enthalten, nicht relativ. Wennuvselbst mitspawn uv ENOENTfehlschlägt, siehe macOS:uvPATH.Keine Nachrichten zurückgegeben — bestätigen Sie, dass Signal Desktop installiert ist und einen Nachrichtenverlauf hat. Der Lesepfad fragt die lokale Signal Desktop-Datenbank direkt ab.
Mitwirken
Beiträge sind per Pull Request willkommen. Bitte:
Führen Sie
uv run ruff check .vor dem Pushen aus.Stellen Sie sicher, dass
uv run pytesterfolgreich ist.
Siehe CLAUDE.md für den vollständigen Entwicklungsworkflow.
Lizenz
MIT-Lizenz – siehe LICENSE.
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sealjay/mcp-signal'
If you have feedback or need assistance with the MCP directory API, please join our Discord server