Send Signal messages and read replies through your own signal-cli JSON-RPC daemon (unofficial).
unavailable — the image reference already carries a tag
Docker
docker run -i --rm ghcr.io/joshuawowk/signal-mcp:1.0.1
Pick your client — the config below is generated for this server (local stdio). Copy respects the “Pin version” switch above.
claude_desktop_config.json
{
"mcpServers": {
"signal-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/joshuawowk/signal-mcp:1.0.1"
],
"env": {
"SIGNAL_SENDER": "<YOUR_SIGNAL_SENDER>",
"SIGNAL_DEFAULT_RECIPIENT": "<YOUR_SIGNAL_DEFAULT_RECIPIENT>"
}
}
}
}Format verified against the official Claude Desktop docs ↗.
terminal
claude mcp add --env SIGNAL_SENDER=<YOUR_SIGNAL_SENDER> --env SIGNAL_DEFAULT_RECIPIENT=<YOUR_SIGNAL_DEFAULT_RECIPIENT> signal-mcp -- docker run -i --rm ghcr.io/joshuawowk/signal-mcp:1.0.1
Format verified against the official Claude Code docs ↗.
.cursor/mcp.json
{
"mcpServers": {
"signal-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/joshuawowk/signal-mcp:1.0.1"
],
"env": {
"SIGNAL_SENDER": "<YOUR_SIGNAL_SENDER>",
"SIGNAL_DEFAULT_RECIPIENT": "<YOUR_SIGNAL_DEFAULT_RECIPIENT>"
}
}
}
}Format verified against the official Cursor docs ↗.
.vscode/mcp.json
{
"servers": {
"signal-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/joshuawowk/signal-mcp:1.0.1"
],
"env": {
"SIGNAL_SENDER": "<YOUR_SIGNAL_SENDER>",
"SIGNAL_DEFAULT_RECIPIENT": "<YOUR_SIGNAL_DEFAULT_RECIPIENT>"
}
}
}
}Format verified against the official VS Code docs ↗.
mcp_config.json
{
"mcpServers": {
"signal-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/joshuawowk/signal-mcp:1.0.1"
],
"env": {
"SIGNAL_SENDER": "<YOUR_SIGNAL_SENDER>",
"SIGNAL_DEFAULT_RECIPIENT": "<YOUR_SIGNAL_DEFAULT_RECIPIENT>"
}
}
}
}Format verified against the official Windsurf docs ↗.
Defined in the server's official registry manifest. Required secrets are shown as <YOUR_…> placeholders in the configs above.
SIGNAL_SENDER required — E.164 number of the account registered in signal-cli (e.g. +15555550100)SIGNAL_DEFAULT_RECIPIENT required — E.164 number messaged by default; tools accept a per-call recipient overrideSIGNAL_RPC_URL — signal-cli HTTP JSON-RPC endpoint as seen from the container. The server's built-in default is http://127.0.0.1:8080/api/v1/rpc (use with --network host on Linux); this listing defaults to the Docker host alias.SIGNAL_TCP_HOST — signal-cli daemon TCP host, used only for the receive-path health checkSIGNAL_TCP_PORT — signal-cli daemon TCP port (daemon started with --tcp), used only for the receive-path health checkSIGNAL_INBOX_PATH — Path of the replies inbox file inside the container (populated only by the subscriber process)SIGNAL_POLL_INTERVAL — Subscriber poll cadence in secondsSIGNAL_INBOX_RETENTION_DAYS — Days of replies kept in the inbox fileDistributed as Docker, listed under Developer Tools. Review our MCP security guide before granting access to real data.
Run the install command shown above, then paste the config for your client (Claude Desktop, Claude Code, Cursor, VS Code or Windsurf) into its MCP settings and restart the client.
The MCP server itself is free to install. The source is public on https://github.com/joshuawowk/signal-mcp. Any third-party service it calls may require its own API key and account.
Any MCP-compatible client can use it, including Claude Desktop, Claude Code, Cursor, VS Code, Windsurf and custom agents.
Publish this server? Link back with a badge on your README or site — copy either snippet.
Markdown
[](https://mcpnav.net/server/signal-mcp/)
HTML
<a href="https://mcpnav.net/server/signal-mcp/"><img src="https://mcpnav.net/badge/signal-mcp.svg" alt="Listed on MCPNav" height="20"></a>