Fork Notice: This is a security-hardened fork of rymurr/signal-mcp with additional features inspired by signal-cli-rest-api.
An MCP integration for signal-cli that allows AI agents to send and receive Signal messages.
This fork includes the following security improvements:
- Log level changed from DEBUG to INFO - Prevents sensitive message content and phone numbers from being logged
- Phone number validation - E.164 format validation prevents malformed inputs
- Timeout bounds - Maximum timeout capped at 300 seconds to prevent resource exhaustion
- MIT License added - Clear licensing terms
send_message_to_user- Send a direct message to a Signal usersend_message_to_group- Send a message to a Signal groupreceive_message- Wait for and receive messages with timeout support (max 300s)send_message_with_attachment- Send messages with file attachments
link_device- Generate QR code link URI to connect as secondary device to existing Signal accountcheck_signal_registration- Check if a phone number is registered with Signal
list_contacts- List all contacts known to signal-clilist_groups- List all Signal groups you are a member of
send_reaction- React to messages with emojisend_read_receipt- Mark messages as read
This project requires signal-cli to be installed and configured on your system.
-
Download signal-cli from the official releases
-
Extract and add to PATH (e.g.,
C:\tools\signal-cli\bin)
You don't need a new phone number! Signal-cli can link as a secondary device to your existing account (like Signal Desktop):
-
Run the link command:
signal-cli link --name "Claude MCP" -
This outputs a
sgnl://linkdevice?uuid=...URI -
Convert to QR code (using any QR generator or
qrencodeon Linux) -
Open Signal on your phone → Settings → Linked Devices → + button → Scan QR code
-
The MCP server can now send/receive messages on your behalf
cd signal-mcp
uv syncRun the MCP server:
uv run python -m signal_mcp.main --user-id +YOUR_PHONE_NUMBER --transport stdioAdd to your claude_desktop_config.json:
{
"mcpServers": {
"signal": {
"command": "uv",
"args": ["run", "python", "-m", "signal_mcp.main", "--user-id", "+YOUR_PHONE_NUMBER", "--transport", "stdio"],
"cwd": "C:/path/to/signal-mcp"
}
}
}# Install dependencies
uv sync
# Run linting
uv run ruff check .
# Run type checking
uv run mypy .MIT License - see LICENSE file.
- Original project by Ryan Murray (@rymurr)
- Additional features inspired by signal-cli-rest-api by @bbernhard