Skip to main content

Complete Signal MCP server and CLI via signal-cli

Project description

signal-mcp

Tests PyPI Python License: MIT

The most complete Signal MCP server and CLI. Let Claude send and receive Signal messages, manage contacts and groups, search history, and more — all running 100% locally via signal-cli.

What Claude can do

Once connected, just ask Claude naturally:

"Check my Signal messages and summarize what I missed" "Send Anna a message saying I'll be 10 minutes late" "Search my Signal history for anything about the meeting" "Show me all my conversations and who messaged me most recently" "Import all my old messages from Signal Desktop"

Features

  • 25 MCP tools — full coverage of everything signal-cli supports
  • Complete conversation history — both sent and received messages stored locally
  • Full-text search — FTS5 SQLite index across all messages
  • Signal Desktop import — pull your entire message history in one command
  • Background service — macOS LaunchAgent captures messages automatically
  • Full CLI — use Signal from your terminal without Claude
  • 100% local — no cloud, no third-party services, your data stays on your machine
  • Auto-starts daemon — no manual process management

Prerequisites

# 1. Install signal-cli
brew install signal-cli

# 2. Link to your existing Signal account
signal-cli link --name "MyMac"
# Scan the QR code in Signal mobile: Settings → Linked Devices → +

# 3. (Optional) For Signal Desktop history import
brew install sqlcipher

Install

pip install signal-mcp
# or with uv (recommended)
uv tool install signal-mcp

Connect to Claude Code

# Recommended — one command:
claude mcp add signal -- signal-mcp serve

Or manually add to ~/.claude.json:

{
  "mcpServers": {
    "signal": {
      "command": "signal-mcp",
      "args": ["serve"]
    }
  }
}

Or per-project in .mcp.json:

{
  "mcpServers": {
    "signal": {
      "command": "uvx",
      "args": ["signal-mcp", "serve"]
    }
  }
}

Restart Claude Code. Signal tools will appear automatically.

MCP Tools

Tool Description
send_message Send text to a contact
send_group_message Send text to a group
receive_messages Poll for new messages
list_contacts All contacts with names and numbers
list_groups All groups with members
list_conversations All conversations ordered by most recent
get_conversation Message history with a contact or group
search_messages Full-text search across all stored messages
send_attachment Send a file or image to a contact
send_group_attachment Send a file or image to a group
react_to_message React with an emoji
set_typing Send a typing indicator
get_profile Contact profile info
get_unread Unread messages only
block_contact Block a contact
delete_message Remote-delete (unsend) a sent message
delete_group_message Remote-delete a message from a group
send_read_receipt Mark messages as read
update_contact Set a local display name for a contact
leave_group Leave a Signal group
list_identities List identity keys and trust levels
trust_identity Trust a contact's identity key
store_stats Stored message count and date range
import_desktop Import full history from Signal Desktop

CLI Usage

# Status
signal-mcp status                          # account + daemon info
signal-mcp daemon                          # start daemon in foreground
signal-mcp stop                            # stop the daemon

# Send & receive
signal-mcp send +1234567890 "Hello!"
signal-mcp send-group <group_id> "Hey!"
signal-mcp receive                         # poll once
signal-mcp receive --watch                 # keep watching (saves to store)

# Contacts & groups
signal-mcp contacts
signal-mcp contacts --json
signal-mcp groups

# History & search
signal-mcp history +1234567890
signal-mcp history +1234567890 --limit 20
signal-mcp search "keyword"
signal-mcp store-stats

# Signal Desktop import (macOS — full history)
signal-mcp import-desktop

# Background service (macOS)
signal-mcp install-service    # auto-starts on login, captures all messages
signal-mcp uninstall-service

# MCP server (for Claude Code)
signal-mcp serve

Getting full message history

signal-cli only delivers new messages — it has no history API. Two ways to get history:

Going forward (captures everything from now on):

signal-mcp install-service   # background watcher, auto-starts on login

Retroactively (imports everything from Signal Desktop):

signal-mcp import-desktop    # macOS will prompt for Keychain access — click Allow

Run both for complete coverage.

Architecture

Claude Code
    │  MCP (stdio transport)
    ▼
signal-mcp serve
    ├── SQLite store  (~/.local/share/signal-mcp/messages.db)
    │     FTS5 full-text search, sent + received messages
    │
    └── signal-cli daemon  (JSON-RPC on localhost:7583)
            │  Signal protocol (libsignal)
            ▼
        Signal network

The signal-cli daemon is started automatically on first use and kept alive across tool calls. Received attachments are saved to ~/Downloads/signal-attachments/.

Development

git clone https://github.com/googlarz/signal-mcp
cd signal-mcp
uv sync --dev
uv run pytest
uv run pytest --cov --cov-report=term-missing

All tests are fully mocked — no signal-cli installation or Signal account required.

See CONTRIBUTING.md for how to add new tools.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

signal_mcp-1.0.0.tar.gz (65.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

signal_mcp-1.0.0-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file signal_mcp-1.0.0.tar.gz.

File metadata

  • Download URL: signal_mcp-1.0.0.tar.gz
  • Upload date:
  • Size: 65.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for signal_mcp-1.0.0.tar.gz
Algorithm Hash digest
SHA256 73b31215e28df42ba51a9654649904e0dedd9974884e67b920c5079b72dd3e11
MD5 dd94b55e280ebdfa2cb6efde2536b68a
BLAKE2b-256 131174d9c71a56f012762755635041842d15c688e8202825761e0af85d5287be

See more details on using hashes here.

File details

Details for the file signal_mcp-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: signal_mcp-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 22.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for signal_mcp-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1058536c6bba78a41e9084c9eaa0401c8aa104796ed25b371bf4931f603cce35
MD5 345fcc74801779ad92f0844ed3fccef3
BLAKE2b-256 4a6e0adba934849c2d8b1930aa32f7b35d578660399555bd031bfea357dc7318

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page