Skip to main content
Glama
razvangirgiz

wazap-mcp

by razvangirgiz
██╗    ██╗ █████╗ ███████╗ █████╗ ██████╗
██║    ██║██╔══██╗╚══███╔╝██╔══██╗██╔══██╗
██║ █╗ ██║███████║  ███╔╝ ███████║██████╔╝
██║███╗██║██╔══██║ ███╔╝  ██╔══██║██╔═══╝
╚███╔███╔╝██║  ██║███████╗██║  ██║██║
 ╚══╝╚══╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝

WhatsApp для вашего ИИ-агента. MCP-сервер, который предоставляет ваш аккаунт WhatsApp — чаты, сообщения, медиа, контакты, группы — через 22 инструмента, которые может вызывать любой MCP-клиент. Вход по коду сопряжения, без браузера, без перепродажи номеров телефонов, ~20 МБ ОЗУ.

Построен на Baileys, который говорит на мультиустройственном протоколе WhatsApp через WebSocket.

Начало работы

npm-пакет называется wazap-mcp; команда, которую он устанавливает, — wazap.

npx wazap-mcp setup

Это вся установка. Она связывает ваш аккаунт, находит MCP-клиентов, установленных на этой машине, записывает их конфигурацию и сообщает, что нужно перезапустить.

Или пусть это сделает ваш агент. Вставьте это:

Настрой мне WhatsApp: выполни npx wazap-mcp setup --agent и следуй тому, что он выведет.

Затем спросите агента: «Что я пропустил в WhatsApp сегодня?»

Ниже приведены шаги, которые setup выполняет за вас. Каждый из них — отдельная команда, если вы хотите выполнить её вручную.

npx wazap-mcp login показывает QR-код; отсканируйте его в Настройки → Связанные устройства → Привязать устройство. Нет камеры под рукой или связывание через SSH? npx wazap-mcp login --phone +15550100 выводит 8-значный код, который вы вводите в разделе Привязать по номеру телефона. В конце он спрашивает, может ли агент отправлять сообщения; ответ «нет», если вы не скажете «да», а npx wazap-mcp config writes on изменит это позже.

npx wazap-mcp connect claude-code записывает запись MCP для одного клиента. Остальные — в таблице под Подключение клиента.

npx wazap-mcp сам по себе безопасен для запуска: он выводит, где вы находитесь и что делать дальше, и не запускает сервер. Если что-то не так, npx wazap-mcp status — первое, что нужно запустить: он проверяет Node, каталог данных, блокировку, учётные данные и наличие новой версии, а рядом с каждой проблемой выводит исправление.

Подключение клиента

wazap connect <client> записывает запись за вас, сохраняя всё остальное в файле и делая резервную копию один раз перед первым изменением. --dry-run показывает, что он запишет.

Клиент

Что записывает connect

claude-code

выполняет claude mcp add whatsapp за вас

claude-desktop

claude_desktop_config.json в каталоге приложения Claude

cursor

~/.cursor/mcp.json

codex

[mcp_servers.whatsapp] в ~/.codex/config.toml

vscode

./.vscode/mcp.json для текущей рабочей области

gemini

~/.gemini/settings.json

что-то удалённое

поле URL MCP клиента: https://your-host/mcp с заголовком Authorization: Bearer <token> (см. Сам хостинг)

Любой MCP-клиент работает одинаково: команда — npx -y wazap-mcp, транспорт — stdio. Скажите агенту сначала вызвать learn — он вернёт форматы идентификаторов, рабочие процессы и каждый код ошибки с указанием, что делать.

{
  "mcpServers": {
    "whatsapp": {
      "command": "npx",
      "args": ["-y", "wazap-mcp"]
    }
  }
}

Claude Desktop, Cursor и Gemini CLI принимают именно это. VS Code вкладывает это в servers и требует "type": "stdio" рядом с command. Codex CLI — это TOML:

[mcp_servers.whatsapp]
command = "npx"
args = ["-y", "wazap-mcp"]

Папка skills/ соответствует формату Agent Skills, поэтому Codex, Cursor и другие агенты, поддерживающие навыки, могут загрузить те же пять навыков.

Related MCP server: wa-bridge

Инструменты

Инструмент

Вид

Что делает

learn

чтение

Руководство по каждому инструменту, формату идентификаторов и коду ошибки. Вызовите его первым.

get_status

чтение

Статус подключения, состояние синхронизации, связанный аккаунт, версии, каталог данных.

list_chats

чтение

Разговоры от новых к старым; фильтр all/unread/groups/individual/archived.

read_messages

чтение

Сообщения в чате; before листает дальше, подтягивая более старую историю с телефона.

get_recent_messages

чтение

Всё за последние N часов, сгруппированное по чатам. Инструмент для навёрстывания.

search_messages

чтение

Текстовый поиск по локально хранимым сообщениям.

get_message

чтение

Одно сообщение полностью, с цитируемым сообщением и реакциями.

search_contacts

чтение

Поиск контактов по имени или номеру.

get_contact

чтение

Имя, номер, текст «о себе», фото профиля.

get_group_info

чтение

Участники, администраторы, режим объявлений, ссылка-приглашение (если вы администратор).

download_media

чтение

Сохранить вложение на диск; небольшие изображения также возвращаются встроенно.

send_message

запись

Отправить текст, опционально как ответ, с @-упоминаниями.

send_media

запись

Отправить изображение, видео, аудио, голосовое сообщение или документ из пути или URL.

send_poll

запись

Отправить опрос с 2–12 вариантами.

send_location

запись

Отправить метку на карте.

edit_message

запись

Редактировать своё сообщение в течение 15-минутного окна WhatsApp.

react_to_message

запись

Добавить или удалить реакцию-эмодзи.

forward_message

запись

Переслать сообщение в другой чат.

delete_message

запись

Отозвать своё сообщение в течение 2-дневного окна WhatsApp.

manage_chat

запись

Архивировать, закрепить, заглушить (по умолчанию 8 часов), отметить прочитанным/непрочитанным.

create_group

запись

Создать группу и добавить участников.

manage_group

запись

Добавить, удалить, повысить, понизить, выйти, переименовать, ссылки-приглашения.

Каждое сообщение возвращается с непустым text: медиа- и системные сообщения содержат заполнитель, например [image] caption, [voice message], [deleted] или [poll] Pizza or pasta?. Временные метки — ISO 8601 со смещением UTC машины, рядом человекочитаемый age, например 2h ago.

Навыки

wazap поставляется с пятью Agent Skills, которые обучают агента рабочим процессам, стоящим за инструментами, а не только самим инструментам:

Навык

Что делает агент

wazap-setup

Диагностика с помощью wazap status, связывание по QR или коду сопряжения, подключение клиента с помощью wazap connect, восстановление истёкшей сессии

whatsapp-inbox

«Что я пропустил?» Сортировка на нужно вам / к сведению / шум, с ранжированием, плюс забытые ответы. Только чтение

whatsapp-recall

«Найди счёт, который отправил Дэн.» Поиск с вариантами запросов, листание назад во времени, загрузка и чтение файла. Только чтение

whatsapp-groups

Наверстать группу из 300 сообщений: решения, даты, что от вас требуется. Только чтение

whatsapp-send

Черновик в собственном регистре чата, показ получателя и текста, отправка только после согласия пользователя

Установите всё (сервер и навыки) как плагин Claude Code:

/plugin marketplace add razvangirgiz/wazap
/plugin install wazap@wazap

Или скопируйте skills/<name>/ в любой каталог навыков, который читает ваш агент.

Ошибки

Каждый сбой — это структурированный { error, message, fix }, а не трассировка стека, чтобы агент мог решить: повторить попытку, спросить пользователя или остановиться.

Код

Значение

NOT_LINKED

Аккаунт не связан. Выполните npx wazap-mcp login.

SESSION_EXPIRED

Отвязан от телефона. Выполните npx wazap-mcp login.

SESSION_CORRUPT

Учётные данные не читаются. Выполните npx wazap-mcp logout, затем login.

NOT_CONNECTED

Всё ещё подключается или переподключается.

SYNC_IN_PROGRESS

Синхронизация истории не завершена; результаты могут быть неполными.

INVALID_PHONE

Номер не в международном формате.

INVALID_ID

Не является идентификатором чата, контакта или группы WhatsApp.

NOT_ON_WHATSAPP

У этого номера нет аккаунта WhatsApp.

CHAT_NOT_FOUND / MESSAGE_NOT_FOUND / CONTACT_NOT_FOUND / GROUP_NOT_FOUND

Неизвестный идентификатор.

NOT_A_PARTICIPANT / NOT_ADMIN / GROUP_ANNOUNCEMENT_ONLY

Права в группе.

MEDIA_UNAVAILABLE

WhatsApp истёк срок файла, или он никогда не был синхронизирован здесь.

FILE_NOT_FOUND / FILE_TOO_LARGE / URL_FETCH_FAILED

Проблемы с исходящими медиа.

TEXT_TOO_LONG

Превышен лимит сообщений WhatsApp.

EDIT_WINDOW_EXPIRED / RETRACT_WINDOW_EXPIRED / NOT_OWN_MESSAGE

Собственные ограничения WhatsApp на редактирование и удаление.

READ_ONLY

wazap работает в режиме только для чтения.

RATE_LIMITED

Слишком много записей; fix указывает, сколько ждать.

TIMEOUT / WHATSAPP_ERROR

WhatsApp не ответил или отклонил операцию.

Каталог данных

Всё хранится в ~/.wazap (переопределяется с помощью --data-dir или WAZAP_DATA_DIR), создаётся с правами 0700, учётные данные записываются с правами 0600:

~/.wazap/
  auth/         WhatsApp credentials — treat this like a password
  media/        downloads from download_media
  history/      per-chat message history, so a restart is not amnesia
  store.json    chat-list snapshot
  server.lock   pid of the running server
  daemon.json   loopback endpoint a second wazap bridges to
  .env          optional settings, see .env.example

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

Несколько клиентов одновременно

Claude Desktop, Claude Code и Cursor — каждый запускает собственный wazap. WhatsApp разрешает один сокет на привязанное устройство, поэтому они делят одну сессию, а не борются за неё. Первый wazap в каталоге данных владеет сессией и открывает MCP-эндпоинт на 127.0.0.1; каждый последующий подключается к нему через этот эндпоинт. Ничего настраивать не нужно, и ни один клиент не видит разницы. Владелец публикует <data-dir>/daemon.json (0600) со своим pid, своим портом и токеном, с которым мост аутентифицируется.

Мост обслуживает всё, что предоставляет владелец, поэтому владелец, запущенный с --read-only, делает каждого клиента доступным только для чтения, независимо от того, с какими флагами был запущен этот клиент.

Когда владелец выходит, мосты выходят вместе с ним, а следующий wazap, который запустит клиент, становится новым владельцем.

WAZAP_NO_SHARE=1 отключает это: второй wazap в том же каталоге завершается с кодом 2 и указывает pid уже запущенного. Явный --http — это самостоятельный сервер, а не мост, и ему отказывается так же.

Режим только для чтения

Запись — опциональна. login спрашивает один раз и сохраняет ответ в <data-dir>/.env; wazap config writes on|off меняет его, а один wazap config выводит все действующие настройки с указанием их источника.

WAZAP_READ_ONLY=1 или wazap serve --read-only вообще не регистрирует инструменты записи. Агент их никогда не видит, поэтому не может отправить сообщение с вашего номера даже по ошибке — полезно, когда привязанный аккаунт ваш личный.

Запись также ограничена по скорости до WAZAP_RATE_LIMIT в минуту (по умолчанию 20, 0 отключает). Отправка быстрее, чем человек, — это способ получить бан аккаунта.

HTTP-режим

WAZAP_READ_TOKEN=$(openssl rand -hex 32) \
WAZAP_WRITE_TOKEN=$(openssl rand -hex 32) \
npx wazap-mcp serve --http --host 0.0.0.0 --port 8766

Streamable HTTP на /mcp с проверкой работоспособности по /healthz. Два bearer-токена: токен чтения даёт инструменты чтения, токен записи дополнительно разблокирует инструменты записи, так что утёкший токен чтения никогда не сможет никому написать. wazap отказывается привязываться к адресу не-loopback без токена чтения.

Самостоятельный хостинг

Запустите wazap на собственном сервере, когда агент не на вашем ноутбуке: другая машина, VPS, инфраструктура клиента. Сессия остаётся на этом сервере; ничего не проходит через третьи стороны.

С systemd

npm install -g wazap-mcp
sudo useradd --system --home /var/lib/wazap --create-home wazap
sudo -u wazap WAZAP_DATA_DIR=/var/lib/wazap wazap login --phone +15550100   # pairing code works over SSH
sudo -u wazap tee /var/lib/wazap/.env >/dev/null <<END
WAZAP_READ_TOKEN=$(openssl rand -hex 32)
WAZAP_WRITE_TOKEN=$(openssl rand -hex 32)
END
sudo curl -fsSL https://raw.githubusercontent.com/razvangirgiz/wazap/main/deploy/wazap.service -o /etc/systemd/system/wazap.service
sudo systemctl enable --now wazap
curl -s http://127.0.0.1:8766/healthz

Юнит привязывается только к loopback. Поставьте TLS спереди с помощью двухстрочного deploy/Caddyfile (caddy run --config deploy/Caddyfile после редактирования имени хоста) или любого обратного прокси, затем укажите клиенту https://your-host/mcp с Authorization: Bearer <read or write token>.

С Docker

git clone https://github.com/razvangirgiz/wazap && cd wazap
printf 'WAZAP_READ_TOKEN=%s\nWAZAP_WRITE_TOKEN=%s\n' $(openssl rand -hex 32) $(openssl rand -hex 32) > .env
docker compose run --rm wazap login --phone +15550100   # once; the session lands in the wazap-data volume
docker compose up -d
curl -s http://127.0.0.1:8766/healthz

Контейнер публикует 8766 только на loopback; добавьте тот же TLS-прокси спереди. Обновление — это git pull && docker compose up -d --build; том сохраняет сессию.

Какие клиенты могут подключиться

Claude Code, Claude Desktop, Cursor, Codex, VS Code и любой клиент с полем «MCP URL + header» подключаются с bearer-токеном. Connectors в claude.ai требуют OAuth, а не статический токен, поэтому они пока не могут использовать самостоятельный wazap. Держите read-токен в клиентах, которым нужно только читать; выдавайте write-токен осознанно.

Настройки

Переменная

По умолчанию

Значение

WAZAP_DATA_DIR

~/.wazap

Где хранится всё.

WAZAP_READ_ONLY

0

Не регистрировать инструменты записи.

WAZAP_SYNC_FULL_HISTORY

0

Запросить у WhatsApp более полную синхронизацию истории.

WAZAP_PERSIST_HISTORY

1

Сохранять чаты и сообщения между перезапусками.

WAZAP_RATE_LIMIT

20

Вызовы инструментов записи в минуту; 0 отключает.

WAZAP_TRANSPORT

stdio

stdio или http.

WAZAP_HOST / WAZAP_PORT

127.0.0.1 / 8766

Адрес привязки HTTP.

WAZAP_READ_TOKEN / WAZAP_WRITE_TOKEN

не задан

Bearer-токены HTTP.

WAZAP_NO_UPDATE_CHECK

0

1 запрещает status запрашивать у npm новую версию.

Флаги важнее переменных окружения, а те важнее <data-dir>/.env.

Известные ограничения

  • Ключи медиа истекают. WhatsApp удаляет старые вложения со своих серверов, поэтому download_media для старого сообщения возвращает MEDIA_UNAVAILABLE.

  • История — это то, что синхронизирует телефон. wazap видит ту историю, которую WhatsApp передаёт привязанному устройству, а не всю вашу переписку.

  • @lid идентификаторы. WhatsApp адресует собеседников по приватному идентификатору, а не по номеру телефона. wazap переводит их обратно в номера телефонов, когда знает соответствие, и передаёт @lid как есть, когда не знает.

  • Телефон должен оставаться доступным. Привязанное устройство перестаёт получать сообщения, если телефон был офлайн достаточно долго; get_status сообщает об этом.

  • Токен одного устройства. Привязка привязана к одному устройству; повторный вход переносит сессию и разлогинивает предыдущую.

  • @lid не везде. Некоторые поля адресуются по @lid, а не по номеру телефона; wazap преобразует их обратно в номера телефонов, когда узнаёт соответствие.

Разработка

npm install
npm run typecheck
npm test                       # builds, then runs node --test
node test/smoke-stdio.mjs      # drives the built binary over MCP stdio
npm run dev -- status          # run from source with tsx

npm test не требует подключённого телефона. Smoke-тест stdio запускает собранный бинарник с временным каталогом данных и проверяет, что инструменты перечисляются и get_status работает без привязки.

Лицензия MIT.

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
8Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    WhatsApp MCP server that exposes messaging, groups, contacts, and profile management as tools and resources for AI agents, supporting Baileys and Meta Cloud API.
    19
  • A
    license
    Not graded
    quality
    A
    maintenance
    A self-hosted WhatsApp bridge that exposes a stdio MCP server with ~20 tools for reading conversations, sending messages, managing groups, contacts, and aliases, enabling AI agents to operate WhatsApp directly.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that connects AI agents to WhatsApp using the multi-device API, enabling messaging, group management, and more as a regular user.
    15
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A native MCP server for SocialMate that gives your AI a WhatsApp, enabling it to send and read messages, manage contacts and groups, and more through 44 tools.
    83
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Free public MCP for AI agents — 193 tools, 44 workflows. No API key.

  • Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.

  • Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/razvangirgiz/wazap'

If you have feedback or need assistance with the MCP directory API, please join our Discord server