signal-mcp
signal-mcp
Un servidor MCP de Node/TypeScript que lee
directamente la base de datos SQLite cifrada de Signal Desktop y expone herramientas de consulta más completas que el signal-mcp-server original de Python.
Solo lectura. La base de datos se abre con
readonly: trueyquery_only=ON. El servidor no puede modificar los datos de Signal.
Requisitos
macOS, con Signal Desktop instalado y al menos una sesión iniciada.
Node.js 20+.
En la primera ejecución verás una solicitud del Llavero de macOS: apruébala (y marca Siempre permitir si no quieres que se te vuelva a preguntar). El servidor lee la contraseña de
safeStoragede Signal desde tu llavero de inicio de sesión para descifrar la clave de SQLCipher.
Related MCP server: Cursor DB MCP Server
Instalación
Opción A: instalar desde GitHub (recomendado)
Se instala globalmente mediante npm. El script prepare del repositorio ejecuta tsc automáticamente
para que no necesites una carpeta dist/ precompilada.
npm install -g git+https://github.com/jagypus/signal-mcp.gitLuego regístralo en Claude Code:
claude mcp add signal --scope user -- signal-mcpEso es todo. Abre Claude Code y prueba: "List my Signal chats." (Lista mis chats de Signal).
Para actualizar más tarde:
npm install -g git+https://github.com/jagypus/signal-mcp.gitPara eliminar:
claude mcp remove signal
npm uninstall -g signal-mcpOpción B: clonar y compilar (para desarrollo)
git clone https://github.com/jagypus/signal-mcp.git
cd signal-mcp
npm install
npm run build
claude mcp add signal --scope user -- node "$(pwd)/dist/index.js"Opción C: configuración manual
Si prefieres editar tu configuración de MCP directamente, añade esto a la configuración de servidores
MCP de Claude Code (por ejemplo, el bloque mcpServers de ~/.claude.json, o un archivo de proyecto
.mcp.json):
{
"mcpServers": {
"signal": {
"command": "signal-mcp"
}
}
}…o, para la ruta del repositorio clonado:
{
"mcpServers": {
"signal": {
"command": "node",
"args": ["/absolute/path/to/signal-mcp/dist/index.js"]
}
}
}Verificar
claude mcp listDeberías ver signal en la lista. Reinicia Claude Code si ya estaba
ejecutándose, luego pídele que liste tus chats.
Herramientas
Herramienta | Propósito |
| Lista conversaciones con metadatos del último mensaje, filtrable por grupo/DM, recuento de mensajes y antigüedad. |
| Consulta de mensajes entre chats con rango de fechas, remitente y filtros de chat. |
| Mismo conjunto de filtros, limitado a un solo chat (por id o nombre). |
| Búsqueda de texto completo en todos los cuerpos de los mensajes. Recurre a |
| Pasarela SQL de solo lectura ( |
Todas las entradas se validan con Zod. Las marcas de tiempo son ISO 8601 de entrada/salida.
Reglas de filtrado
exclude_system(por defectotrue) mantiene solotype IN ('incoming','outgoing'), filtrandokeychange,profile-change,group-v2-change,timer-notification, etc.only_with_body(por defectotrue) excluye filas que solo contienen archivos adjuntos / reacciones / stickers dondebody IS NULL.sender:me(saliente),them(entrante),any(ambos).
Desarrollo
git clone https://github.com/jagypus/signal-mcp.git
cd signal-mcp
npm install
npm run build # compile to dist/
npm run dev # tsx, stdio (no build step)
npm run probe # dump schema/FTS/types against the live DB
npx tsx scripts/smoke.ts # exercise every tool against the live DBCómo abre la base de datos
Signal Desktop en macOS almacena la base de datos SQLCipher v4 en
~/Library/Application Support/Signal/sql/db.sqlite. Las versiones modernas de Signal
almacenan la clave de SQLCipher cifrada en config.json bajo encryptedKey usando
el safeStorage de Electron:
Elimina el prefijo
v10/v11→ texto cifrado AES-128-CBC.Clave de cifrado = PBKDF2-HMAC-SHA1(contraseña, "saltysalt", 1003 iteraciones, 16 bytes).
En macOS, la
contraseñase obtiene mediantesecurity find-generic-password -s "Signal Safe Storage" -a "Signal" -w(una solicitud del llavero la primera vez).El IV es de 16 bytes de
0x20.
El texto plano es la clave SQLCipher hexadecimal de 64 caracteres. También se admiten compilaciones antiguas de Signal con una key en texto plano en config.json.
La base de datos se abre con better-sqlite3-multiple-ciphers en modo readonly: true
y query_only=ON se establece como medida de seguridad adicional. Abrirla mientras
Signal Desktop se está ejecutando funciona bien porque SQLCipher utiliza WAL.
Advertencia sobre la búsqueda
messages_fts existe pero utiliza el signal_tokenizer personalizado de Signal, que solo es registrado por el código nativo de Signal Desktop. Los lectores de terceros no pueden ejecutar consultas MATCH contra él, por lo que search_messages prueba una vez y recurre silenciosamente a body LIKE '%query%'.
Entorno
Var | Efecto |
| Sobrescribe el directorio de datos predeterminado de Signal (útil para fixtures). |
| Clave SQLCipher hexadecimal de 64 caracteres, omitiendo |
Notas multiplataforma
macOS: gestionado.
Linux:
safeStoragev10 usa la contraseña literalpeanuts. v11 (libsecret/KWallet) no está implementado: estableceSIGNAL_KEYexplícitamente.Windows: no implementado: establece
SIGNAL_KEYexplícitamente.
Estructura del proyecto
src/
index.ts # MCP server bootstrap
db.ts # connection + safeStorage key decryption
schema.ts # zod input shapes
util/
time.ts # iso <-> ms
messages.ts # row shaping, display name resolution
sql.ts # shared filter SQL
tools/
listChats.ts
getRecentMessages.ts
getChatMessages.ts
searchMessages.ts
querySql.ts
scripts/
probe.ts # live-DB schema dump
smoke.ts # live-DB end-to-end checkLicencia
MIT — ver LICENSE.
Este proyecto no está afiliado ni respaldado por Signal Messenger LLC. Signal Desktop en sí tiene licencia AGPL-3.0; este proyecto no redistribuye ni modifica ningún código de Signal, solo lee la base de datos SQLite local que Signal Desktop crea en tu propia máquina.
This server cannot be deployed
Maintenance
Related MCP Connectors
Explore your Messages SQLite database to browse tables and inspect schemas with ease. Run flexible…
Explore, query, and inspect SQLite databases with ease. List tables, preview results, and view det…
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides read-only access to local Beeper message history on macOS, enabling users to search conversations, read messages, and list recent chats through natural language queries. Supports both SQLite and IndexedDB storage formats with privacy-focused local-only operation.1-
- AlicenseNot gradedqualityDmaintenanceEnables querying, searching, and analyzing Cursor IDE conversation history from SQLite workspaceStorage databases. Supports exporting chat data in multiple formats and provides workspace utilities for managing conversation data across projects.MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading, searching, and sending iMessages directly from MCP-compatible clients by accessing the local macOS iMessage database, supporting conversations, attachments, and both individual and group chats.1,108 npm10MIT
- AlicenseAqualityAmaintenanceProvides read-only access to local iMessage databases on macOS for searching message history and analyzing conversation patterns. It includes 25 tools to explore contacts, attachments, reaction statistics, and messaging trends through natural language queries.261,108 npm25MIT