MCP для AI-агентов
PushData говорит на Model Context Protocol: пакет @pushdata/mcp — MCP-сервер, через который Claude Desktop, Claude Code, Cursor, Codex — любой MCP-клиент — отправляет уведомления, ведёт контакты и устройства, запускает сценарии и читает эту документацию для одного из ваших приложений. Он работает с секретным ключом приложения (pd_…), поэтому его место — машина разработчика или доверенный хост агента, но не браузер и не мобильное приложение.
Ещё два файла для моделей: https://pushdata.ru/llms.txt — карта документации (llmstxt.org), https://pushdata.ru/llms-full.txt (русский) и https://pushdata.ru/llms-full.en.txt (английский) содержат все страницы одним файлом — вставьте любой в контекст ассистента, и он знает API.
Установка
Нужен только Node 20+; npx скачает пакет сам.
Claude Desktop — claude_desktop_config.json:
{
"mcpServers": {
"pushdata": {
"command": "npx",
"args": ["-y", "@pushdata/mcp"],
"env": { "PUSHDATA_API_KEY": "pd_…" }
}
}
}Claude Code — в проекте:
claude mcp add pushdata -e PUSHDATA_API_KEY=pd_… -- npx -y @pushdata/mcpCursor — .cursor/mcp.json с тем же JSON-блоком; Codex и другие клиенты принимают ту же команду (npx -y @pushdata/mcp) и ту же переменную окружения.
| Переменная | По умолчанию | Значение |
|---|---|---|
PUSHDATA_API_KEY | — | Секретный ключ приложения (Приложения → Настройки → API-ключи). Один ключ = одно приложение; для двух приложений добавьте сервер дважды. |
PUSHDATA_BASE_URL | https://api.pushdata.ru | Адрес API. |
PUSHDATA_SITE_URL | https://pushdata.ru | Откуда читаются файлы документации. |
Инструменты
| Инструмент | Что делает |
|---|---|
send_notification | Push на устройства или письмо / SMS / Telegram / MAX / in-app-сообщение контактам. target — ровно один из all, user_ids, tags, device_ids, contact_ids, segment_id; scheduled_at планирует, category — категория отписки, idempotency_key делает повтор безопасным, variants — A/B-тест, goal — цель конверсии, local_time / transactional — ограничения отправки. Возвращает id уведомления. |
get_notification | Статус и счётчики: total_targets, total_sent, total_delivered, total_failed, total_opened, total_clicked. |
cancel_notification | Отменяет запланированную или ещё не ушедшую отправку. |
list_deliveries | Журнал доставок отправки: по строке на получателя — исход, отметки, причина отказа, вариант A/B; фильтр по status. |
list_templates, get_template | Шаблоны приложения с их {{переменными}}; send_notification с template_id + variables (+ locale) отправляет по шаблону. |
list_devices | Устройства по user_id, platform, status, постранично; токены не возвращаются. |
update_device_tags, deactivate_device | Заменить теги устройства; деактивировать устройство. |
upsert_contact, get_contact, delete_contact | Контакты по вашему external_id: имя, e-mail, телефон, id в MAX, локаль, metadata. |
trigger_workflow | Запускает сценарий для контакта с переменными payload. |
track_event | Сообщает пользовательское событие (order_placed со свойствами): запускает сценарий с триггером-именем события и питает сегменты. |
search_docs, get_doc | Полнотекстовый поиск по этой документации (на русском или английском) и целые страницы. |
Ресурсы: карта документации (llms.txt) и OpenAPI-спецификация REST API — для всего, чего инструменты не покрывают (регистрация устройств, события вовлечённости, inbox).
У каждого инструмента есть MCP-аннотации — readOnlyHint, destructiveHint, idempotentHint, — чтобы клиент спрашивал подтверждение перед отправкой или удалением. Отправки и удаления настоящие: агент, которого попросили «оповестить всех», отправит всем. Отклонённый запрос приходит как ошибка инструмента со стабильным кодом REST API (unauthorized, validation_error, payment_required, not_found, rate_limited, …) и текстом.
Что агент может с этим сделать
- «Отправь пользователям с тегом
betapush о новой сборке со ссылкой на release notes» →send_notificationсtarget.tags, через минутуget_notificationза счётчиками. - «Заведи контакт для пользователя 4711 с этим e-mail и запусти сценарий онбординга» →
upsert_contact+trigger_workflow. - «Почему вчерашняя кампания дошла только до половины устройств?» →
get_notification,list_devicesсоstatus: inactive,search_docsпро счётчики доставки. - «Как зарегистрировать токен RuStore?» →
search_docs/get_doc /docs/channels/push.
Встраивание сервера
Пакет экспортирует createPushDataMcpServer({ client }) для хоста, который запускает сервер в своём процессе (внутренняя платформа агентов, endpoint Streamable HTTP):
import { createPushDataMcpServer } from '@pushdata/mcp'
import { PushData } from '@pushdata/node'
const server = createPushDataMcpServer({ client: new PushData({ apiKey: process.env.PUSHDATA_API_KEY! }) })
await server.connect(transport)Пакет публикуется. Пока@pushdata/mcpнет в npm, возьмите его изintegrations/mcpв репозитории PushData (npm install && npm run build, затемcommand: node,args: ["<путь>/integrations/mcp/dist/cli.js"]в конфигурации клиента). Исходники в репозитории, MIT.