# Сервер MCP (/ru/docs/wa/mcp)

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

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

* **MCP** ([Протокол контекста модели](https://modelcontextprotocol.io)) — это стандартный способ использования приложениями ИИ внешних инструментов. Приложение является **клиентом MCP**; `wa personal mcp` — это **сервер MCP**.
* **Инструмент** — это одно действие, которое сервер предлагает агенту, например «чтение» или «запись».
  – **Подсказка** — это готовая задача, которую приложение отображает в виде команды, например «Просмотреть непрочитанные чаты».
  – **Ресурс** — это данные, которые приложение может прикрепить к разговору, например один чат.
* **Профиль** – это один набор настроек и одно связанное устройство в `wa`; см. [профили](/llms.mdx/docs/ru/wa/profiles/content.md).

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

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

## Нужен ли вам MCP? [#нужен-ли-вам-mcp]

ИИ-агент, который может запускать команды в терминале (например, Claude Code, Codex, агент Cursor или Gemini CLI), не нуждается в MCP. Он напрямую вызывает `wa`, который предоставляет те же команды; он узнает, как это сделать, благодаря навыку, который печатает `wa skill show`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-skill-show "Справочник команды: wa skill show"). MCP предназначен для:

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

Для ChatGPT или Claude **в браузере** используйте `wa personal mcp --http` — см. [ChatGPT, Codex или Claude в браузере](/llms.mdx/docs/ru/wa/remote/content.md).

## Что дает сервер [#что-дает-сервер]

| Что | Что он делает |
| --- | --- |
| [Три инструмента](#tools) | Найти команду и выполнить чтение или изменение |
| [Шесть подсказок](#prompts-and-chats-by-) | Узнавайте, отвечайте, находите, просматривайте, открывайте задачи, связывайте беседы |
| [Чаты `@`](#prompts-and-chats-by-) | Прикрепить чат и его последние сообщения к беседе |
| Навык, `wa://skill` | Тот же текст, что и `wa skill show`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-skill-show "Справочник команды: wa skill show") |
| [Разрешения](#what-an-agent-may-do) | Профиль решает, какие команды агент может выполнять |

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

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

<details>
  <summary>
    Команды для терминала
  </summary>

  MCP-сервер личного аккаунта никогда не предлагает `wa session`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-session "Справочник команды: wa session"), `wa setup`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-setup "Справочник команды: wa setup"), `wa complete`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-complete "Справочник команды: wa complete") и `wa mcp`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-mcp "Справочник команды: wa mcp") с их подкомандами, а также долгоиграющие `wa watch`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-watch "Справочник команды: wa watch") и `wa serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"), которые никогда не возвращают агенту ответ. Команды бизнес-бота (`wa bot …`[↗](/llms.mdx/docs/ru/wa/commands-bot/content.md#wa-bot "Справочник команды: wa bot")) обслуживает отдельный сервер, `wa bot mcp`[↗](/llms.mdx/docs/ru/wa/commands-bot/content.md#wa-bot-mcp "Справочник команды: wa bot mcp"). Все остальные команды перечислены вместе с их доступностью.
</details>

## Подключение [#подключение]

Сначала запустите `wa personal setup --agent none` в локальном терминале. Он связывает профиль с вашей учетной записью WhatsApp. Сервер MCP не привязывает устройство за вас. Затем `wa personal mcp add` подключает приложение в качестве отдельного шага. Агент может прочитать `wa skill show`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-skill-show "Справочник команды: wa skill show") до привязки устройства; это объясняет оба шага.

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

```sh
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` профиля ([ниже](#what-an-agent-may-do)).

`mcp check`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-mcp-check "Справочник команды: wa mcp check") не читает сообщения и не подключается к WhatsApp. Хороший результат означает, что согласование MCP и список инструментов работают. Это не означает, что устройство все еще подключено; `wa personal doctor` и `wa personal account show` проверяют это.

**Claude Code, вручную:**

```sh
claude mcp add wa -- wa personal mcp
```

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

```sh
claude mcp add wa-work -- wa work mcp
```

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

```sh
wa personal mcp config
wa work mcp config                  # another profile
```

```json
{
  "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` [#одно-соединение-общее-с-serve]

WhatsApp допускает одно подключение для каждого связанного устройства ([одно подключение на устройство](/llms.mdx/docs/ru/wa/sessions/content.md#one-connection-per-device)). Сервер MCP следует тому же правилу, что и любая другая команда `wa`:

* **Чтение из локального хранилища никогда не подключается к WhatsApp**: `chats list`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-chats-list "Справочник команды: wa chats list"), `messages list`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-messages-list "Справочник команды: wa messages list"), `search messages`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-search-messages "Справочник команды: wa search messages"), `inbox`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-inbox "Справочник команды: wa inbox") и
  `review`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-review "Справочник команды: wa review") работает, пока работает `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve").
* **Инструмент, требующий подключения WhatsApp и блокирующий устройство**: каждое изменение — отправка, редактирование, реакция, отметка прочтения — и несколько операций чтения, которые запрашивают WhatsApp, например `account show`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-account-show "Справочник команды: wa account show") и `chats members list`[↗](/llms.mdx/docs/ru/wa/commands-admin/content.md#wa-chats-members-list "Справочник команды: wa chats members list").
* **Пока работает `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"), внутри него работает сервер**, и эти инструменты используют соединение `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"). Разрешения профиля и защита отправки применяются, как и раньше. В Windows они не проходят через `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"): там им отказывают, пока работает `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"), и ошибка его называет. HTTP-сервер никогда не проходит через `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") ([удаленный](/llms.mdx/docs/ru/wa/remote/content.md)).
* **Пока сервер MCP поддерживает соединение, `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") не может запуститься** для этого профиля. Сервер освобождает соединение через 2 минуты без вызовов ([ниже](#how-it-holds-the-connection)).

## Что может сделать агент [#что-может-сделать-агент]

> ⚠️ **По умолчанию агент может отправлять сообщения, не спрашивая вас.** Если `permissions` не установлен, `messages.send` разрешен, и
> Сервер не показывает собственную форму подтверждения. Единственное ограничение — это лимит отправки профиля, `sends_per_hour`: 30 отправок в час, совместно с каждой командой. WhatsApp может заблокировать аккаунт за массовые или нежелательные сообщения, поэтому снизьте лимит до подключения агента:
>
> ```sh
> 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` профиля определяет доступ ([разрешения](/llms.mdx/docs/ru/wa/permissions/content.md)). `deny` блокирует команду, `readonly` разрешает только чтение, а `ask` или `allow` разрешает запись, запрошенную агентом. Сервер не отображает формы подтверждения: настройте одобрение в приложении агента. В терминале команда `ask` все еще требует вашего подтверждения. С JSON или `--no-input` вопросов нет, поэтому запись будет запрещена, если вы не добавите `--yes`.

```sh
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`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-messages-delete "Справочник команды: wa 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`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-search-messages "Справочник команды: wa search messages") принимает `query`, `polls create`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-polls-create "Справочник команды: wa polls create") принимает `question`):

```json
{"command":"messages list","arguments":{"chat":"120363000000000001@g.us","limit":20}}
```

Поиск показывает только то, что разрешено разрешениями профиля. Ответы структурированы в формате JSON: списки сохраняют свои страницы, а идентификаторы остаются строками. Ошибка — `{error:{code,reason,message,details}}`; имя, соответствующее нескольким чатам, имеет `details.candidates`. Сервер проверяет аргументы на соответствие схеме команды и отклоняет неизвестные поля перед подключением или действием. Если результат записи неизвестен, проверьте журнал отправки и чат, прежде чем думать о повторной попытке. Текст сообщения — это данные, а не инструкции для агента. Схемы, ограничения и правила повтора находятся в разделе [как wa ведет себя в сценариях](/llms.mdx/docs/ru/wa/cli-contract/content.md).

## Подсказки и чаты от `@` [#подсказки-и-чаты-от-]

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

| Подсказка | Аргумент | Чем занимается агент |
| --- | --- | --- |
| `catch-up` | `kind`, `mode` — опционально | вызывает `wa_read` (`command: "inbox"`); `mode` — `unread` (по умолчанию), `new` или время; для маркировки чтения требуется отдельный утвержденный вызов инструмента |
| `reply` | `chat` | читает чат, пишет черновик и отправляет его только после вашего одобрения текста |
| `find` | `text` | ищет человека или слова и показывает сообщения вокруг каждого попадания; ничего не отправляет |
| `link-conversations` | нет | сообщает стоимость и запрашивает ваше согласие, затем читает пакеты, сохраняет ссылки и перестраивает |
| `review`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-review "Справочник команды: wa review") | `since`, `groups` — опционально | вызывает `wa_read` (`command: "review"`) один раз и сортирует его на то, что вы должны, что должны другие и что нужно уточнить; создает черновики напоминаний, отправляет одно только после вашего «да» |
| `open-tasks` | `chat` — опционально | вызывает проверку для обновления задач, перечисляет открытые задачи и предлагает черновики; закрывает задачу только после вашего одобрения; ничего не отправляет |

`reply` и `review`[↗](/llms.mdx/docs/ru/wa/commands-personal/content.md#wa-review "Справочник команды: wa review") отправляются через `wa_write` (`command: "messages send"`). Таким образом, если `messages.send` — `readonly`, агент показывает только черновики. Пока работает `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve"), отправка из командной строки проходит через него, как и любая другая запись.

Чаты — это ресурсы `wa://chat/<id>` — в Claude Code их можно упоминать с помощью `@`. Ресурс — это чат и его недавние сообщения. Список поступает из локального хранилища и никогда не подключается к WhatsApp; пока `serve`[↗](/llms.mdx/docs/ru/wa/commands-setup/content.md#wa-serve "Справочник команды: wa serve") или ссылка не заполнили локальное хранилище, она пуста.

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

## Как удерживается соединение [#как-удерживается-соединение]

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

Через стандартный ввод и стандартный вывод сервер завершает работу, как только приложение закрывает стандартный ввод, и закрывает соединение с WhatsApp. По HTTP он работает до нажатия Ctrl-C. `wa personal mcp --revoke` завершает каждый вход в систему браузерного приложения и сохраняет связанное устройство. См. [ChatGPT, Codex или Claude в браузере](/llms.mdx/docs/ru/wa/remote/content.md).
