eXpress MCP connector
This server is a local MCP connector that lets an MCP client read and (optionally, with explicit approval) send text messages in the authenticated user's eXpress chats.
Check eXpress connection status without exposing credentials (
express_status).Search and list corporate or personal chats visible to the user (
express_list_chats), with optional query and include-left filters.Read and locally decrypt one page of chat history, up to 100 events per call, using
nextBeforeSyncIdfor older pages (express_get_history).Send a plain-text message to a specific chat after host confirmation, only when the server was started with
EXPRESS_ENABLE_SEND=1; requireschatId,text, and an idempotency UUID (express_send_message).Default operation is read-only; sending is opt-in and must be explicitly approved by the user.
Provides tools for interacting with the eXpress messenger: checking connection status, searching corporate and personal chats, reading message history, and sending text messages after explicit user confirmation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@eXpress MCP connector Find my eXpress chats named 'Support' and show the last 20 messages."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
eXpress MCP connector
Локальный MCP-сервер для работы с чатами пользователя eXpress. Коннектор регистрируется как отдельное устройство, получает только доступные пользователю чаты, локально расшифровывает историю и при отдельном разрешении может отправлять текстовые сообщения.
Возможности
проверка состояния подключения;
поиск корпоративных и личных чатов;
чтение доступной истории сообщений;
отправка простого текста после показа получателя и текста пользователю;
защита от повторной отправки при перезапуске или неопределённом ответе сервера;
удаление локальной сессии и ключей.
По умолчанию коннектор работает только на чтение. Сессия, токены и ключи хранятся в системном хранилище текущего пользователя: macOS Keychain, Windows Credential Manager или Linux Secret Service. Они не записываются в репозиторий и не возвращаются MCP-клиенту.
Related MCP server: WhatsApp MCP
Требования
Node.js 22 или новее;
мобильное приложение eXpress с уже выполненным входом;
разрешение организации на добавление пользовательского устройства;
Codex или другой MCP-клиент с поддержкой локальных STDIO-серверов.
Работа проверена на macOS. Реализация системного хранилища предусмотрена также для Windows и Linux, но её необходимо проверить в окружении конкретного пользователя.
Установка
git clone https://gitlab.mvs.group/ai/express-mcp-connector.git
cd express-mcp-connector
npm ci
npm run buildДля проверки локальной сборки:
npm testПодключение устройства eXpress
Запустите авторизацию из каталога проекта:
npm run auth:qrКоманда напечатает путь к временному PNG-файлу с QR-кодом. Откройте изображение, затем в мобильном eXpress перейдите в список открытых сессий, выберите добавление устройства и отсканируйте QR-код. Команда дождётся подтверждения и удалит временный файл после завершения.
Если организация использует другой публичный сервер eXpress:
npm run auth:qr -- --rts-host express.example.orgПри успешном завершении команда сообщит, подключён ли корпоративный профиль. Повторная авторизация после перезапуска компьютера не нужна, пока устройство или сессия не отозваны.
Подключение MCP
Сначала выполните npm run build. Локальный MCP-сервер запускается по STDIO
командой:
node /absolute/path/to/express-mcp-connector/dist/mcp/server.jsCodex на macOS или Linux
Находясь в каталоге проекта, добавьте сервер:
codex mcp add express -- "$(command -v node)" "$(pwd)/dist/mcp/server.js"Проверьте регистрацию:
codex mcp get expressПосле добавления перезапустите Codex, если он уже был открыт.
Codex на Windows PowerShell
$node = (Get-Command node).Source
$server = (Resolve-Path .\dist\mcp\server.js).Path
codex mcp add express -- $node $server
codex mcp get expressДля другого MCP-клиента создайте локальный STDIO-сервер с командой запуска
node и единственным аргументом — абсолютным путём к dist/mcp/server.js.
Проверка подключения
После запуска MCP попросите ассистента:
Проверь подключение к eXpress.
Затем можно проверить чтение:
Найди мои чаты eXpress с названием «Поддержка».
Покажи последние 20 сообщений из выбранного чата. Ничего не отправляй.
Корпоративные чаты используются по умолчанию. Для личного пространства явно
укажите ассистенту, что нужен personal scope.
Разрешение отправки сообщений
Отправка отключена при обычном подключении. Чтобы включить её, удалите текущую
запись MCP и добавьте сервер с переменной EXPRESS_ENABLE_SEND=1:
codex mcp remove express
codex mcp add express --env EXPRESS_ENABLE_SEND=1 -- \
"$(command -v node)" "$(pwd)/dist/mcp/server.js"На Windows используйте ранее полученные $node и $server:
codex mcp remove express
codex mcp add express --env EXPRESS_ENABLE_SEND=1 -- $node $serverДаже при включённой отправке MCP-клиент должен показать точный чат и полный текст и запросить подтверждение пользователя. Без подтверждения сообщение не отправляется.
Пример запроса:
Найди чат «Поддержка», подготовь сообщение «Проверка завершена» и покажи мне получателя и текст перед отправкой.
Доступные MCP-инструменты
express_status— проверяет готовность локальной сессии;express_list_chats— ищет и перечисляет доступные чаты;express_get_history— читает одну страницу истории, до 100 событий; для расшифрованных сообщений возвращаетsenderIdиз защищённого payload иsenderNameиз справочника eXpress. Если имя не найдено,senderNameравенnull— придумывать или угадывать имя по другим полям нельзя. Для пересылки полеforwardedFromотдельно содержит исходного автора и чат; при скрытой пересылке эти данные остаютсяnull;express_send_message— отправляет текст после явного подтверждения.
Для старых страниц истории клиент использует курсор nextBeforeSyncId,
возвращённый предыдущим запросом.
Восстановление и диагностика
Если QR-подключение завершилось, но корпоративный профиль ожидает повторного подтверждения:
npm run auth:cts-retryПроверить доступность корпоративного контура регистрации:
npm run auth:doctorЕсли администратор разрешил вход по корпоративной почте:
npm run auth:cts-email-start -- --email user@example.org
npm run auth:cts-email-confirmВторая команда запросит шестизначный код скрытым вводом. Код не сохраняется.
Если сессия сохранилась, но ключ отправки не зарегистрирован во всех доступных контурах:
npm run auth:repairЕсли результат отправки остался неопределённым, сначала проверьте историю чата. После проверки закройте запись одним из вариантов:
npm run send:reconcile -- <idempotency-uuid> delivered
npm run send:reconcile -- <idempotency-uuid> not_deliveredДля новой попытки после not_delivered используйте новый UUID и снова
подтвердите отправку.
Отключение
Удалите MCP из Codex:
codex mcp remove expressЗатем удалите локальную сессию, ключи и журнал отправок:
npm run auth:logoutПосле этого закройте устройство в списке открытых сессий eXpress, чтобы сервер также отозвал его токены.
Текущие ограничения
доступны только чаты и история, разрешённые подключённому пользователю;
глубина истории зависит от хранения на сервере, даты вступления в чат и доступных ключей;
поддерживаются чтение и отправка простого текста; вложения, реакции, редактирование, удаление, пересылка и управление участниками не реализованы;
за один вызов возвращается не более 100 событий;
коннектор использует пользовательские интерфейсы eXpress, совместимость которых может измениться после обновления сервера или клиента.
Available Tools
4 toolsexpress_get_historyRead eXpress chat historyARead-onlyIdempotent
Read and locally decrypt one backward page from a chat visible to the authenticated user. Use nextBeforeSyncId to request older pages.
Inputs: chatId (required), limit, scope, beforeSyncId.
express_list_chatsList my eXpress chatsCRead-onlyIdempotent
List chats and direct conversations visible to the authenticated eXpress user.
Inputs: query, scope, includeLeft.
express_send_messageSend an eXpress messageADestructiveIdempotent
Encrypt and send a text message as the authenticated eXpress user. This external write is disabled unless the process owner sets EXPRESS_ENABLE_SEND=1 and must be approved by the MCP host.
Inputs: text (required), chatId (required), idempotencyKey (required), scope.
express_statuseXpress connection statusARead-onlyIdempotent
Check whether the standalone eXpress user session is available without exposing credentials.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool has a clearly separate purpose: listing conversations, checking session status, reading message history, and sending messages. There is no meaningful overlap between express_list_chats and express_get_history because one identifies chats and the other retrieves messages within a specific chat.
Tools consistently use the express_ prefix with a verb_noun structure, such as express_list_chats, express_get_history, and express_send_message. The only minor deviation is express_status, which uses a noun without an explicit verb like check.
Four tools is well-scoped for a chat connector focused on listing, reading, sending, and session status. Each tool serves a necessary function in the core workflow without unnecessary bloat.
The core chat workflow is covered: list chats, read paginated history, and send messages, plus a session status check. Missing advanced features like creating/deleting chats or managing messges are not essential for the apparent read-and-send scope.
Related MCP Connectors
Search contacts, read chats, and send confirmed messages for one Waspy account.
Your own WhatsApp as an MCP server: read, search and send from any MCP client.
Send and read iMessages from your own Mac and Apple ID — drafts, history and contacts.
Read, search and answer your messages on WhatsApp, iMessage, Slack, Telegram and 14 more networks.
Related MCP Servers
- 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.698 npm10MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to list, read, search, and send WhatsApp messages via a persistent WebSocket connection with local SQLite storage.45 npmAGPL 3.0
- AlicenseBqualityCmaintenanceEnables reading, searching, sending iMessages, viewing image attachments, and managing conversations, with full support for modern macOS attributedBody parsing.142MIT
- AlicenseNot gradedqualityCmaintenanceEnables macOS agents to read eXpress chats and threads, search contacts, send messages and attachments, and download verified files through MCP, while a Keychain-backed session broker manages authentication.4 npmMIT