CapyAgent MAX MCP
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., "@CapyAgent MAX MCPSummarize my unread chats"
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.
CapyAgent MAX MCP
Подключает личный аккаунт мессенджера MAX к CapyAgent, Codex, Cursor и любым другим MCP-клиентам. Первая версия, read-first: список чатов, история, поиск по чату, сводка непрочитанного, контакты. Запись (отправка, ответ, отметка прочитанным, удаление) есть, но выключена по умолчанию.
Сделано по образцу capy-tg-mcp — те же принципы (read-only по умолчанию, allowlist чатов, один процесс на сессию), другой транспорт.
Главное про безопасность и риски
MAX не даёт официального API для чтения личных чатов пользователя (см. ниже, «Почему не Bot API»). Этот сервер идёт неофициальным путём — библиотекой MaxApiTeam/PyMax (maxapi-python), которая реализует реверс-инжиниренный протокол MAX. Это означает:
Юридически — прямое нарушение пользовательского соглашения MAX (legal.max.ru/ps): п. 4.3.7 запрещает автоматизированные скрипты без разрешения компании, п. 4.3.10 требует пользоваться только официальным интерфейсом, п. 10.1.2.2 разрешает блокировку без объяснений за любое разовое нарушение.
Технически — протокол не документирован официально, может измениться без предупреждения. PyMax поддерживается активно (пуши в день, когда собирался этот сервер), но гарантий нет.
Поэтому
maxapi-python— не обязательная зависимость, а optional extra (pyproject.toml,[project.optional-dependencies].transport). Базовая установка (uv sync) ставит сервер и тесты без него; тесты гоняются на фейковом транспорте, без сети и без реального аккаунта. Подключаться к реальному MAX — осознанный отдельный шаг:uv sync --extra transport.
По умолчанию сервер отдаёт агенту только инструменты чтения (MAX_EXPOSED_TOOLS=read-only). Запись включается явно:
read-only+send_message,reply_to_message— чтение плюс перечисленные инструменты;all— всё, включая удаление сообщений.
Дополнительно можно ограничить чаты: MAX_ALLOWED_CHAT_IDS=123456,987654.
Один файл сессии нельзя открывать двумя процессами одновременно (см. «Один процесс на сессию» ниже).
Related MCP server: telegram-mcp
Установка
git clone <repo> capy-max-mcp && cd capy-max-mcp
uv sync # база: сервер + тесты, без реального транспорта
uv sync --extra transport # + maxapi-python, когда готовы подключаться к реальному MAX
cp .env.example .env
uv run capy-max-mcp-login # вход по QR (или --token, см. «Вход» ниже)Вход
QR (по умолчанию).
uv run capy-max-mcp-loginоткроет ASCII QR-код в терминале (PyMax сам рисует его и ждёт сканирования — та же логика, что при обычном входе на web.max.ru). Отсканировать в приложении MAX. После подтверждения PyMax сохраняет сессию в SQLite-файл (MAX_WORK_DIR/MAX_SESSION_NAME, по умолчанию./max_session.db) — это и есть аналогTELEGRAM_SESSION_STRINGу capy-tg-mcp, только файл, а не переносимая строка (так устроен PyMax, не наше решение).Токен вручную (запасной путь). Если QR не проходит: в браузере, уже залогиненном на web.max.ru, открыть консоль разработчика и выполнить
copy(JSON.parse(localStorage.__oneme_auth).token)и передать результат как
uv run capy-max-mcp-login --token <вставленный токен>(или положить в.envкакMAX_LOGIN_TOKENперед первым запуском). PyMax поддерживает вход по готовому токену из коробки (ExtraConfig(token=...)) — этот сервер просто передаёт его через.Дальше
capy-max-mcpпереиспользует файл сессии без повторного входа, пока MAX его не отозвал.Если сервер начал отвечать «сессия истекла» — повторить шаги 1-2, как переавторизация Телеграма при «новом устройстве». Важно: по данным статьи на Хабре про этот же токен,
logoutв одном месте гасит сессию везде — не входить в тот же аккаунт вторым процессом одновременно (см. ниже).
Один процесс на сессию
Как и у Телеграма, два процесса не должны одновременно держать одну и ту же сессию — это может её сломать. capy-max-mcp берёт файловую блокировку (max_mcp/singleton.py, аналог telegram_mcp/singleton.py) на файл сессии перед подключением: второй процесс с той же сессией отказывается стартовать вместо того, чтобы рисковать обеими.
Инструменты первой версии
Read-only (включены по умолчанию):
Инструмент | Что делает |
| Список чатов, опционально только с непрочитанным ( |
| Название, тип, число участников и непрочитанных одного чата |
| История сообщений одного чата, свежие сверху |
| Поиск подстроки в истории чата — не серверный поиск: у MAX/PyMax нет вызова полнотекстового поиска (проверено по исходникам PyMax 2.4.1), поэтому тул листает последние |
| Сводка чатов с непрочитанным: id, название, счётчик, превью последнего сообщения. Строго read-only — никогда не вызывает пометку прочитанным как побочный эффект (тот же принцип, что у |
| Список контактов, опционально фильтр по имени |
Write (выключены по умолчанию, включаются через MAX_EXPOSED_TOOLS):
Инструмент | Что делает |
| Отправить сообщение в чат |
| Ответить на конкретное сообщение |
| Отметить прочитанным до сообщения — сделано write-тулом (не read-only), потому что меняет видимый другой стороне статус на сервере, как и |
| Удалить сообщение ( |
Реакции, пересылка, медиа, группы — не в этой версии; при необходимости добавляются по тому же паттерну (max_mcp/transport.py → pymax_transport.py → tools/).
Почему не официальный Bot API
Бот видит только диалоги, куда его добавили, или которые сами написали ему первыми — историю личных чатов владельца ему не отдают. Личные 1-на-1 диалоги в MAX вообще не входят в список чатов бота (это только групповые), адресуются по user_id собеседника, а не chat_id. «Прочитать мои существующие переписки, сводка непрочитанного по всем чатам» ботом не сделать в принципе — нужен пользовательский протокол, отсюда PyMax вместо Bot API.
Что не проверено на живом аккаунте
Этот сервер собран без доступа к реальному аккаунту MAX (задача явно это исключала). Проверено по исходникам PyMax 2.4.1 (скачан с PyPI, прочитан файл за файлом: client_web.py, base.py, infra/{chat,message,user}.py, types/domain/{chat,message,user,profile}.py) — то есть названия методов и полей реальные, не выдуманные. НЕ проверено вживую:
Сам вход по QR и по токену — что PyMax при реальном сканировании ведёт себя так, как обещает его код и докстринги.
Формат и текст реальных ошибок сервера MAX (блокировка, невалидный токен, флуд-контроль) —
pymax_transport._classify_api_errorраскладываетApiErrorна «сессия истекла» / «заблокировано» по ключевым словам в тексте ошибки, подобранным по чтению кода, не по наблюдению за настоящим ответом сервера. После первой реальной ошибки этого рода стоит свериться и поправить списки_BLOCKED_KEYWORDS/_SESSION_KEYWORDSвmax_mcp/pymax_transport.py.Реальные значения полей
Chat/Message/Userна боевых данных (пустые ли, в каких единицах время и т.п.) — типы взяты из pydantic-моделей PyMax, но не сверены с живым ответом.Поведение
read_message(аналогmark_as_read) — PyMax предупреждает, чтоWebClientждётmessage_idкак строку, аClient(TCP) какint; этот сервер использует толькоWebClient, но сам факт не проверялся вызовом.Устойчивость сессии при реальном простое/реконнекте — файловая блокировка (
singleton.py) протестирована юнит-тестами, но не под реальным MAX-соединением.
Что нужно сделать владельцу перед боевым использованием: поставить uv sync --extra transport, прогнать uv run capy-max-mcp-login на своём аккаунте, руками вызвать list_chats/get_messages через MCP-клиент и убедиться, что содержимое соответствует реальным чатам, прежде чем включать запись (MAX_EXPOSED_TOOLS).
Тесты
uv sync --group dev && uv run pytest -qЮнит-тесты работают на tests/fakes.py::FakeTransport — сеть и maxapi-python им не нужны. Тест test_errors.py::test_classify_api_error_requires_pymax_installed пропускается, если maxapi-python не установлен (pytest.importorskip).
Подключение к MCP-клиенту
Сервер работает по stdio:
uv --directory /path/to/capy-max-mcp run main.pyПеременные MAX_WORK_DIR, MAX_SESSION_NAME (или MAX_LOGIN_TOKEN для разового входа по токену) передаются в окружении процесса — см. .env.example.
This server cannot be deployed
Maintenance
Related MCP Connectors
Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.
Read-only MCP server: let AI agents read your ORANO saved-video library, tasks, and memory.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Unified inbox MCP for WhatsApp, Telegram, Email, voice — read/send messages, search, AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables full access to your personal Telegram account via MCP, allowing reading, sending, and searching messages, managing chats, and retrieving user information through natural language commands.1829 npm4MIT
- AlicenseAqualityBmaintenanceEnables use of a personal Telegram account within MCP clients for reading and sending messages, searching chats, and managing media, all running locally.163 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to read and search macOS Messages history through a read-only MCP interface.-
- FlicenseNot gradedqualityCmaintenanceEnables users to interact with their own Telegram account through MTProto, supporting chat listing, message reading and searching, sending messages, and fetching contacts via MCP tools.-