Send Signal messages and read replies through your own signal-cli JSON-RPC daemon (unofficial).
Connect Runs on your machine
claude mcp add signal-mcp -e SIGNAL_SENDER=<SIGNAL_SENDER> -e SIGNAL_DEFAULT_RECIPIENT=<SIGNAL_DEFAULT_RECIPIENT> -e SIGNAL_RPC_URL=<SIGNAL_RPC_URL> -e SIGNAL_TCP_HOST=<SIGNAL_TCP_HOST> -e SIGNAL_TCP_PORT=<SIGNAL_TCP_PORT> -e SIGNAL_INBOX_PATH=<SIGNAL_INBOX_PATH> -e SIGNAL_POLL_INTERVAL=<SIGNAL_POLL_INTERVAL> -e SIGNAL_INBOX_RETENTION_DAYS=<SIGNAL_INBOX_RETENTION_DAYS> -- docker run -i --rm ghcr.io/joshuawowk/signal-mcp:1.0.1
{
"mcpServers": {
"signal-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/joshuawowk/signal-mcp:1.0.1"
],
"env": {
"SIGNAL_SENDER": "<SIGNAL_SENDER>",
"SIGNAL_DEFAULT_RECIPIENT": "<SIGNAL_DEFAULT_RECIPIENT>",
"SIGNAL_RPC_URL": "<SIGNAL_RPC_URL>",
"SIGNAL_TCP_HOST": "<SIGNAL_TCP_HOST>",
"SIGNAL_TCP_PORT": "<SIGNAL_TCP_PORT>",
"SIGNAL_INBOX_PATH": "<SIGNAL_INBOX_PATH>",
"SIGNAL_POLL_INTERVAL": "<SIGNAL_POLL_INTERVAL>",
"SIGNAL_INBOX_RETENTION_DAYS": "<SIGNAL_INBOX_RETENTION_DAYS>"
}
}
}
}
{
"mcpServers": {
"signal-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/joshuawowk/signal-mcp:1.0.1"
],
"env": {
"SIGNAL_SENDER": "<SIGNAL_SENDER>",
"SIGNAL_DEFAULT_RECIPIENT": "<SIGNAL_DEFAULT_RECIPIENT>",
"SIGNAL_RPC_URL": "<SIGNAL_RPC_URL>",
"SIGNAL_TCP_HOST": "<SIGNAL_TCP_HOST>",
"SIGNAL_TCP_PORT": "<SIGNAL_TCP_PORT>",
"SIGNAL_INBOX_PATH": "<SIGNAL_INBOX_PATH>",
"SIGNAL_POLL_INTERVAL": "<SIGNAL_POLL_INTERVAL>",
"SIGNAL_INBOX_RETENTION_DAYS": "<SIGNAL_INBOX_RETENTION_DAYS>"
}
}
}
}
{
"servers": {
"signal-mcp": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/joshuawowk/signal-mcp:1.0.1"
],
"env": {
"SIGNAL_SENDER": "<SIGNAL_SENDER>",
"SIGNAL_DEFAULT_RECIPIENT": "<SIGNAL_DEFAULT_RECIPIENT>",
"SIGNAL_RPC_URL": "<SIGNAL_RPC_URL>",
"SIGNAL_TCP_HOST": "<SIGNAL_TCP_HOST>",
"SIGNAL_TCP_PORT": "<SIGNAL_TCP_PORT>",
"SIGNAL_INBOX_PATH": "<SIGNAL_INBOX_PATH>",
"SIGNAL_POLL_INTERVAL": "<SIGNAL_POLL_INTERVAL>",
"SIGNAL_INBOX_RETENTION_DAYS": "<SIGNAL_INBOX_RETENTION_DAYS>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
SIGNAL_SENDERRequired | E.164 number of the account registered in signal-cli (e.g. +15555550100) |
SIGNAL_DEFAULT_RECIPIENTRequired | E.164 number messaged by default; tools accept a per-call recipient override |
SIGNAL_RPC_URLOptional | 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_HOSTOptional | signal-cli daemon TCP host, used only for the receive-path health check |
SIGNAL_TCP_PORTOptional | signal-cli daemon TCP port (daemon started with --tcp), used only for the receive-path health check |
SIGNAL_INBOX_PATHOptional | Path of the replies inbox file inside the container (populated only by the subscriber process) |
SIGNAL_POLL_INTERVALOptional | Subscriber poll cadence in seconds |
SIGNAL_INBOX_RETENTION_DAYSOptional | Days of replies kept in the inbox file |
Details
| Package | ghcr.io/joshuawowk/signal-mcp:1.0.1 (OCI, stdio) |
| First published | 20 Oct 2026 |
| Last updated | 20 Oct 2026 |
| Registry name | io.github.joshuawowk/signal-mcp |
More communication servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
