mcp-signal
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SIGNAL_DB_KEY | No | Raw key for encrypted desktop DBs if needed. | |
| SIGNAL_ACCOUNT | No | Your Signal account phone number (e.g., +441234567890), required for sending messages. | |
| SIGNAL_CLI_PATH | No | Override the `signal-cli` binary path. | |
| SIGNAL_DATA_DIR | No | Override the Signal Desktop data directory. | |
| SIGNAL_DB_PASSWORD | No | Password for encrypted desktop DBs if needed. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_statusA | Check whether the Signal MCP server can read local messages and send outbound messages. Returns boolean fields: source_dir_exists, signal_cli_available, signal_account_configured, read_available, send_available. Read-only with no side effects. Call this before read or send operations to verify the server is correctly configured. |
| list_chatsA | List direct and group Signal chats from the local desktop database, sorted by most recent message. Each result includes name, phone number, message count, and a preview of the last message. Read-only with no side effects. Use this to discover exact chat names before calling read_messages or search_messages. Use list_groups instead when you need group_id values for send_message. |
| read_messagesA | Read messages from a single Signal chat, returned newest-first. Each message includes sender, date, body text, reactions, and attachment metadata. Read-only with no side effects. Requires an exact chat name from list_chats. Use search_messages instead to find messages by keyword across chats. |
| search_messagesA | Search Signal message bodies for a keyword, within one chat or across all chats, returned newest-first. Read-only with no side effects. Use this to find messages by content. Use read_messages instead to browse a specific chat chronologically. |
| list_groupsA | List Signal groups with group_id, name, description, members, and admin lists, sorted alphabetically. Read-only with no side effects. Queries signal-cli when available; falls back to the local desktop database (without group_id). Use this to obtain group_id values needed by send_message. Use list_chats instead for a combined view of both direct and group chats. |
| chat_activityA | List Signal chats ranked by recent activity, showing last message date, last reply date, and count of unanswered inbound messages. Read-only with no side effects. Use this to identify chats that need a response. Use list_chats instead for a general chat directory with message previews. |
| decrypt_attachmentA | Decrypt a locally stored Signal attachment and return the path to the decrypted file. The encrypted_path and local_key values come from attachment metadata in read_messages or search_messages results. Read-only on Signal data; writes a decrypted copy to a temporary directory. Use this after reading messages that contain attachments. |
| send_messageA | Send a text message via Signal to a direct recipient or group. This is a write operation that delivers a real message through signal-cli. Exactly one of phone_number, group_id, or chat_name must be supplied; providing zero or more than one raises an error. Rate-limited to 1 message per recipient per second and 10 messages per 60-second window globally. Requires signal-cli and SIGNAL_ACCOUNT to be configured — call get_status first to verify send_available is true. Returns target_type, target identifier, and timestamp on success. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool has a distinct purpose: chat_activity for unanswered messages, list_chats for directory, list_groups for group IDs, read_messages for browsing, search_messages for keyword search, send_message for sending, decrypt_attachment for attachments, get_status for configuration. No overlaps or ambiguity.
Most tools follow verb_noun pattern (e.g., decrypt_attachment, list_chats), but chat_activity uses noun_noun. Overall consistent and clear, minor deviation.
8 tools is well-scoped for a Signal messaging server: listing, reading, searching, sending, decrypting, and status checking. Not too few or too many.
Covers key operations: list chats/groups, read/search messages, send messages, decrypt attachments, check status. Missing features like message deletion or editing are likely out of scope for a read-only/send server.