Skip to main content
Glama
jagypus

signal-mcp

by jagypus

signal-mcp

Сервер MCP на Node/TypeScript, который напрямую считывает зашифрованную базу данных SQLite приложения Signal Desktop и предоставляет более функциональные инструменты для запросов, чем оригинальный Python-сервер signal-mcp-server.

Только для чтения. База данных открывается с параметрами readonly: true и query_only=ON. Сервер не может изменять данные Signal.

Требования

  • macOS с установленным Signal Desktop, в котором выполнен вход хотя бы один раз.

  • Node.js 20+.

  • При первом запуске вы увидите запрос macOS Keychain — подтвердите его (и установите флажок Всегда разрешать, если не хотите, чтобы вас спрашивали снова). Сервер считывает пароль safeStorage приложения Signal из вашей связки ключей для расшифровки ключа SQLCipher.

Related MCP server: Cursor DB MCP Server

Установка

Вариант А — установка из GitHub (рекомендуется)

Установка глобально через npm. Скрипт prepare в репозитории автоматически запускает tsc, поэтому вам не нужен предварительно собранный dist/.

npm install -g git+https://github.com/jagypus/signal-mcp.git

Затем зарегистрируйте его в Claude Code:

claude mcp add signal --scope user -- signal-mcp

Готово. Откройте Claude Code и попробуйте: "List my Signal chats." (Список моих чатов Signal).

Для обновления в будущем:

npm install -g git+https://github.com/jagypus/signal-mcp.git

Для удаления:

claude mcp remove signal
npm uninstall -g signal-mcp

Вариант Б — клонирование и сборка (для разработки)

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"

Вариант В — ручная настройка

Если вы предпочитаете редактировать конфигурацию MCP напрямую, добавьте это в конфигурацию серверов MCP для Claude Code (например, в блок mcpServers файла ~/.claude.json или в проектный файл .mcp.json):

{
  "mcpServers": {
    "signal": {
      "command": "signal-mcp"
    }
  }
}

…или для пути к клонированному репозиторию:

{
  "mcpServers": {
    "signal": {
      "command": "node",
      "args": ["/absolute/path/to/signal-mcp/dist/index.js"]
    }
  }
}

Проверка

claude mcp list

Вы должны увидеть signal в списке. Перезапустите Claude Code, если он уже был запущен, а затем попросите его вывести список ваших чатов.

Инструменты

Инструмент

Назначение

list_chats

Список переписок с метаданными последнего сообщения, с фильтрацией по группам/личным сообщениям, количеству сообщений и дате.

get_recent_messages

Запрос сообщений из разных чатов с фильтрацией по диапазону дат, отправителю и чатам.

get_chat_messages

Тот же набор фильтров, ограниченный одним чатом (по ID или имени).

search_messages

Полнотекстовый поиск по телу сообщений. В случае неудачи переключается на LIKE.

query_sql

SQL-запросы в режиме только для чтения (SELECT/WITH/EXPLAIN/PRAGMA).

Все входные данные проверяются с помощью Zod. Временные метки представлены в формате ISO 8601.

Правила фильтрации

  • exclude_system (по умолчанию true) оставляет только type IN ('incoming','outgoing'), исключая keychange, profile-change, group-v2-change, timer-notification и т. д.

  • only_with_body (по умолчанию true) исключает строки только с вложениями / реакциями / стикерами, где body IS NULL.

  • sender: me (исходящие), them (входящие), any (оба).

Разработка

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 DB

Как происходит открытие БД

Signal Desktop на macOS хранит базу данных SQLCipher v4 по адресу ~/Library/Application Support/Signal/sql/db.sqlite. Современные версии Signal хранят ключ SQLCipher, зашифрованный в config.json в поле encryptedKey с использованием safeStorage Electron:

  • Удаление префикса v10/v11 → шифротекст AES-128-CBC.

  • Ключ шифрования = PBKDF2-HMAC-SHA1(пароль, "saltysalt", 1003 итерации, 16 байт).

  • На macOS пароль извлекается через security find-generic-password -s "Signal Safe Storage" -a "Signal" -w (один запрос к связке ключей при первом запуске).

  • IV составляет 16 байт 0x20.

Открытый текст — это 64-символьный шестнадцатеричный ключ SQLCipher. Также поддерживаются старые сборки Signal с открытым ключом key в config.json.

БД открывается с помощью better-sqlite3-multiple-ciphers в режиме readonly: true, а query_only=ON установлено в качестве дополнительной защиты. Открытие во время работы Signal Desktop проходит успешно, так как SQLCipher использует WAL.

Особенности поиска

messages_fts существует, но использует собственный signal_tokenizer от Signal, который регистрируется только нативным кодом Signal Desktop. Сторонние читатели не могут выполнять запросы MATCH к нему, поэтому search_messages выполняет одну проверку и молча переключается на body LIKE '%query%'.

Окружение

Переменная

Эффект

SIGNAL_DIR

Переопределение стандартной директории данных Signal (полезно для фикстур).

SIGNAL_KEY

64-символьный шестнадцатеричный ключ SQLCipher, обходящий config.json/Keychain.

Кроссплатформенные примечания

  • macOS: поддерживается.

  • Linux: safeStorage v10 использует пароль peanuts. v11 (libsecret/KWallet) не реализован — установите SIGNAL_KEY явно.

  • Windows: не реализовано — установите SIGNAL_KEY явно.

Структура проекта

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 check

Лицензия

MIT — см. LICENSE.

Этот проект не связан с Signal Messenger LLC и не поддерживается ею. Signal Desktop распространяется по лицензии AGPL-3.0; данный проект не распространяет и не изменяет код Signal, он лишь считывает локальную базу данных SQLite, которую Signal Desktop создает на вашем компьютере.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides 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
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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 npm
    10
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Provides 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.
    26
    1,108 npm
    25
    MIT