An MCP (Model Context Protocol) client that uses Signal for sending and receiving messages.
These Instructions are for Ubuntu Linux. With some minor modification this should also work on other Linux Distros, Mac or Windows. I recommend to use an extra phone number for the bot, so you don't have to use your own.
- Install uv and podman:
sudo apt install podman curl -LsSf https://astral.sh/uv/install.sh | sh - Start the Signal CLI Rest Server container:
mkdir -p $HOME/.local/share/signal-api podman run \ --name signal-cli-api \ --replace \ -p 8080:8080 \ -v $HOME/.local/share/signal-api:/home/.local/share/signal-cli \ -e 'MODE=json-rpc' \ docker.io/bbernhard/signal-cli-rest-api:latest-dev
- Connect the signal-cli-rest-api container to your signal account by opening this link and scanning the QR code:
http://localhost:8080/v1/qrcodelink?device_name=signal-api - Create a config.json with your mcp servers. For example for testing you can use:
cat << EOF > config.json { "servers": [{ "name": "echo-mcp-server-for-testing", "command": "uvx", "args": ["echo-mcp-server-for-testing"], "env": {"SECRET_KEY": "123456789"} }] } EOF
- Create a session directory for saving the message history, images, videos and settings for each user and start the MCP client:
export ANTHROPIC_API_KEY='your-key' export SIGNAL_PHONE_NUMBER='+1234567890' export FAL_KEY='your-key' # optional for transcribing voice messages uvx signal-mcp-client \ --config config.json \ --session-save-dir /absolute/path/to/session/dir \ --available-models claude-3-7-sonnet-latest claude-3-5-haiku-latest \ --default-model-name claude-3-7-sonnet-latest \ --default-system-prompt "" \ --default-llm-chat-message-context-limit 50