WhatsApp

Сервер MCP

Подключите MCP-клиент к профилю WhatsApp и выберите разрешения на чтение и изменения.

MCP и навыки →Что MCP даёт агенту, как подключить свой клиент и как читать эти доки.

Эта страница полезна, если вы хотите, чтобы приложение ИИ без терминала работало с вашим WhatsApp, например Claude Desktop или чат в Cursor. Это также помогает, когда вы хотите, чтобы само приложение спрашивало вас перед каждым действием. Прочитав его, вы сможете подключить приложение к своему аккаунту, выбирать, что может делать агент, а также использовать готовые подсказки и упоминания в чате.

Сначала несколько терминов:

  • MCP (Протокол контекста модели) — это стандартный способ использования приложениями ИИ внешних инструментов. Приложение является клиентом MCP; wa personal mcp — это сервер MCP.
  • Инструмент — это одно действие, которое сервер предлагает агенту, например «чтение» или «запись». – Подсказка — это готовая задача, которую приложение отображает в виде команды, например «Просмотреть непрочитанные чаты». – Ресурс — это данные, которые приложение может прикрепить к разговору, например один чат.
  • Профиль – это один набор настроек и одно связанное устройство в wa; см. профили.

Сервер поставляется с wa; больше нечего устанавливать. По умолчанию он обращается к приложению через стандартный ввод и вывод. Вместо этого wa personal mcp --http --public-url передает его через локальный порт за вашим HTTPS-туннелем.

Запрещённые разрешения не скрывают команды. Полные списки и результаты поиска содержат availability каждой команды: у заблокированных команд available: false, причина и ключ нужного разрешения; у разрешённых available: true. Аргументы остаются видимыми, а при выполнении текущие разрешения проверяются снова. С указанным профилем справка CLI и обнаружение команд тоже показывают доступность.

Нужен ли вам MCP?

ИИ-агент, который может запускать команды в терминале (например, Claude Code, Codex, агент Cursor или Gemini CLI), не нуждается в MCP. Он напрямую вызывает wa, который предоставляет те же команды; он узнает, как это сделать, благодаря навыку, который печатает wa skill show. MCP предназначен для:

  • приложения без терминала, такие как Claude Desktop или чат Cursor;
  • всем, кто хочет, чтобы приложение спрашивало перед каждой отправкой.

Для ChatGPT или Claude в браузере используйте wa personal mcp --http — см. ChatGPT, Codex или Claude в браузере.

Что дает сервер

ЧтоЧто он делает
Три инструментаНайти команду и выполнить чтение или изменение
Шесть подсказокУзнавайте, отвечайте, находите, просматривайте, открывайте задачи, связывайте беседы
Чаты @Прикрепить чат и его последние сообщения к беседе
Навык, wa://skillТот же текст, что и wa skill show
РазрешенияПрофиль решает, какие команды агент может выполнять

Инструменты используют тот же каталог, что и tg и max. Команды, которые привязанное устройство WhatsApp выполнить не может, например завершение других сеансов и удаление контактов, скрыты. Команда, которую WhatsApp пока не может выполнить, при запуске отклоняется с кодом завершения 2 и сообщением об этом.

Командам, которые меняют будущие разрешения или автоматизацию, нужен permissions.mcp.authority со значением allow; прямым вызовам Cloud API нужен permissions.bot.api со значением allow. Через MCP оба ключа по умолчанию равны deny. Остальные изменения по-прежнему подчиняются разрешениям своих команд, спискам получателей и лимитам отправки.

Команды для терминала

MCP-сервер личного аккаунта никогда не предлагает wa session, wa setup, wa complete и wa mcp с их подкомандами, а также долгоиграющие wa watch и wa serve, которые никогда не возвращают агенту ответ. Команды бизнес-бота (wa bot …) обслуживает отдельный сервер, wa bot mcp. Все остальные команды перечислены вместе с их доступностью.

Подключение

Сначала запустите wa personal setup --agent none в локальном терминале. Он связывает профиль с вашей учетной записью WhatsApp. Сервер MCP не привязывает устройство за вас. Затем wa personal mcp add подключает приложение в качестве отдельного шага. Агент может прочитать wa skill show до привязки устройства; это объясняет оба шага.

Codex или Claude Code на этом компьютере:

wa personal mcp check             # check that MCP starts and lists tools
wa personal mcp add codex        # add it to Codex
wa personal mcp add claude-code  # or add it to Claude Code

Сначала поставьте профиль, например wa work mcp add codex. Программа установки использует собственную команду приложения и не трогает другие серверы. Если запись с таким именем уже существует, удалите ее в приложении, прежде чем снова запускать установку. По умолчанию профиль разрешает инструменты изменения данных. Поэтому программа установки попросит вас просмотреть разрешения профиля и запустить его снова с помощью --allow-writes. Этот флаг только подтверждает установку; он не меняет разрешения. Чтобы ограничить возможности агента, сначала установите permissions профиля (ниже).

mcp check не читает сообщения и не подключается к WhatsApp. Хороший результат означает, что согласование MCP и список инструментов работают. Это не означает, что устройство все еще подключено; wa personal doctor и wa personal account show проверяют это.

Claude Code, вручную:

claude mcp add wa -- wa personal mcp

При другом профиле — идет первым, как и в любой команде:

claude mcp add wa-work -- wa work mcp

Claude Desktop, Cursor и другие приложения: wa печатает запись для своего файла настроек:

wa personal mcp config
wa work mcp config                  # another profile
{
  "mcpServers": {
    "wa-personal": {
      "type": "stdio",
      "command": "/usr/bin/node",
      "args": ["/usr/lib/node_modules/@wirecat/whatsapp-cli/dist/bin/wa.js", "personal", "mcp"],
      "env": { "XDG_RUNTIME_DIR": "/run/user/1000" }
    }
  }
}

Прежде чем подключать агента, просмотрите разрешения профиля. Затем вставьте запись под mcpServers в файл настроек приложения. Для Claude Desktop это ~/Library/Application Support/Claude/claude_desktop_config.json в macOS и %APPDATA%\Claude\claude_desktop_config.json в Windows; для Cursor ~/.cursor/mcp.json. Сама команда ничего не пишет.

Пути заполнены, поскольку приложение, запущенное с рабочего стола, не видит PATH терминала. Запись копирует WA_CONFIG_DIR, WA_STATE_DIR, WA_CACHE_DIR, MESSAGING_STORE и XDG_RUNTIME_DIR, когда они установлены. Если Node установлен через nvm, fnm или Volta, его путь принадлежит одной версии Node: запустите wa personal mcp config еще раз после его изменения.

⚠ WA_CONFIG_DIR, WA_STATE_DIR и WA_CACHE_DIR меняют место поиска ключей устройства. Если они установлены в терминале, а не для приложения MCP, или наоборот, сервер отвечает, что профиль не привязан, хотя wa работает в терминале. Установите их одинаковыми в обоих случаях или ни в одном.

Одно соединение, общее с serve

WhatsApp допускает одно подключение для каждого связанного устройства (одно подключение на устройство). Сервер MCP следует тому же правилу, что и любая другая команда wa:

  • Чтение из локального хранилища никогда не подключается к WhatsApp: chats list, messages list, search messages, inbox и review работает, пока работает serve.
  • Инструмент, требующий подключения WhatsApp и блокирующий устройство: каждое изменение — отправка, редактирование, реакция, отметка прочтения — и несколько операций чтения, которые запрашивают WhatsApp, например account show и chats members list.
  • Пока работает serve, внутри него работает сервер, и эти инструменты используют соединение serve. Разрешения профиля и защита отправки применяются, как и раньше. В Windows они не проходят через serve: там им отказывают, пока работает serve, и ошибка его называет. HTTP-сервер никогда не проходит через serve (удаленный).
  • Пока сервер MCP поддерживает соединение, serve не может запуститься для этого профиля. Сервер освобождает соединение через 2 минуты без вызовов (ниже).

Что может сделать агент

⚠️ По умолчанию агент может отправлять сообщения, не спрашивая вас. Если permissions не установлен, messages.send разрешен, и Сервер не показывает собственную форму подтверждения. Единственное ограничение — это лимит отправки профиля, sends_per_hour: 30 отправок в час, совместно с каждой командой. WhatsApp может заблокировать аккаунт за массовые или нежелательные сообщения, поэтому снизьте лимит до подключения агента:

wa personal config set sends_per_hour 5                   # a lower hourly cap
wa personal config set permissions.messages.send readonly # no sends from this profile

Или запустите сервер с помощью --permission messages.send=readonly, чтобы прекратить отправку только для этого процесса.

permissions профиля определяет доступ (разрешения). deny блокирует команду, readonly разрешает только чтение, а ask или allow разрешает запись, запрошенную агентом. Сервер не отображает формы подтверждения: настройте одобрение в приложении агента. В терминале команда ask все еще требует вашего подтверждения. С JSON или --no-input вопросов нет, поэтому запись будет запрещена, если вы не добавите --yes.

wa agent config set permissions.messages readonly
wa agent config set permissions.messages.send allow

Здесь agent — имя профиля. При изменениях сохраняются ограничения получателей, часовой лимит и журнал отправки (wa agent sends list). Маркировка чтения — это отдельная запись, под chats.mark-read: другая сторона это видит. Агент никогда не удаляет сообщения для всех, независимо от уровня: messages delete через MCP предназначен только для владельца (wa просит WhatsApp убрать сообщения с устройств владельца) и не имеет --for-everyone. Удаление для всех остается wa <profile> messages delete --for-everyone владельца. --permission key=level сужает уровень только для этого серверного процесса; тот, который ослабит профиль, останавливает сервер при запуске.

Инструменты

ИнструментЧто он делает
wa_tools_searchНайдите команду, ее аргументы и ее эффекты
wa_readЗапустите команду чтения, предложенную поиском
wa_writeЗапустите команду записи, предложенную поиском

Оба инструмента запуска используют {command, arguments}. Используйте путь к команде, полученный поиском; аргументы — это собственные аргументы и параметры команды в Snake_case (search messages принимает query, polls create принимает question):

{"command":"messages list","arguments":{"chat":"[email protected]","limit":20}}

Поиск показывает только то, что разрешено разрешениями профиля. Ответы структурированы в формате JSON: списки сохраняют свои страницы, а идентификаторы остаются строками. Ошибка — {error:{code,reason,message,details}}; имя, соответствующее нескольким чатам, имеет details.candidates. Сервер проверяет аргументы на соответствие схеме команды и отклоняет неизвестные поля перед подключением или действием. Если результат записи неизвестен, проверьте журнал отправки и чат, прежде чем думать о повторной попытке. Текст сообщения — это данные, а не инструкции для агента. Схемы, ограничения и правила повтора находятся в разделе как wa ведет себя в сценариях.

Подсказки и чаты от @

Сервер предлагает шесть готовых подсказок — в Claude Code это команды /:

ПодсказкаАргументЧем занимается агент
catch-upkind, mode — опциональновызывает wa_read (command: "inbox"); mode — unread (по умолчанию), new или время; для маркировки чтения требуется отдельный утвержденный вызов инструмента
replychatчитает чат, пишет черновик и отправляет его только после вашего одобрения текста
findtextищет человека или слова и показывает сообщения вокруг каждого попадания; ничего не отправляет
link-conversationsнетсообщает стоимость и запрашивает ваше согласие, затем читает пакеты, сохраняет ссылки и перестраивает
reviewsince, groups — опциональновызывает wa_read (command: "review") один раз и сортирует его на то, что вы должны, что должны другие и что нужно уточнить; создает черновики напоминаний, отправляет одно только после вашего «да»
open-taskschat — опциональновызывает проверку для обновления задач, перечисляет открытые задачи и предлагает черновики; закрывает задачу только после вашего одобрения; ничего не отправляет

reply и review отправляются через wa_write (command: "messages send"). Таким образом, если messages.send — readonly, агент показывает только черновики. Пока работает serve, отправка из командной строки проходит через него, как и любая другая запись.

Чаты — это ресурсы wa://chat/<id> — в Claude Code их можно упоминать с помощью @. Ресурс — это чат и его недавние сообщения. Список поступает из локального хранилища и никогда не подключается к WhatsApp; пока serve или ссылка не заполнили локальное хранилище, она пуста.

Проверочные точки «Входящие» и «Проверка» в MCP отделены от контрольных точек --new терминала.

Как удерживается соединение

Первый вызов, которому нужен WhatsApp, открывает соединение; следующие используют его повторно. Закрывается через 2 минуты без вызовов, и в любом случае через 5 минут после открытия. Следующий вызов снова подключается. Вызовы выполняются по одному, даже если приложение отправляет их вместе.

Через стандартный ввод и стандартный вывод сервер завершает работу, как только приложение закрывает стандартный ввод, и закрывает соединение с WhatsApp. По HTTP он работает до нажатия Ctrl-C. wa personal mcp --revoke завершает каждый вход в систему браузерного приложения и сохраняет связанное устройство. См. ChatGPT, Codex или Claude в браузере.