ChatPush MCP Server
OfficialEnables sending Telegram messages through ChatPush via personal Telegram account (tdlib) or Telegram Bot, including text, files, bulk sends, scheduling, cascade routing, delivery status tracking, deletion of delivered messages, and webhook subscriptions for incoming messages and statuses.
Enables sending WhatsApp messages and files through ChatPush, including bulk mailings, scheduling, cascade routing with other channels, delivery status tracking, deletion of delivered messages, and linking WhatsApp accounts via QR/auth link.
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., "@ChatPush MCP Server send WhatsApp to +7 916 555-01-23 saying order is ready"
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.
ChatPush MCP Server
Official MCP server for ChatPush — send WhatsApp, Telegram, SMS, VK/OK and MAX messages, files and bulk mailings from AI agents.
It runs in two modes from the same codebase:
Mode | Transport | Who it is for | Token |
Remote | Streamable HTTP, hosted at | Yandex and other platforms that connect to a URL; users with no local Node.js | Each caller sends their own token in the |
Local | stdio, | Claude Desktop, Claude Code, Cursor, VS Code |
|
Tools
Tool | Description |
| Full account info: balance, dispatch routing, sender names, subscription, WhatsApp/Telegram session status |
| Balance, customer ID, dispatch routing channels and registered sender names |
| UTM tags used to track dispatches |
| Send a text via WhatsApp, Telegram (tdlib), Telegram Bot, SMS, VK/OK or MAX — with cascade, scheduling, priority and reply-to |
| Send the same message to many phone numbers at once |
| Send a document, image, audio or video from a local path, URL or base64 (up to 100 MB) |
| Status and details of a delivery, explained in plain words |
| Delete a delivered WhatsApp/Telegram message on all recipient devices |
| Country, operator and normalized format of a phone number |
| Subscribe your backend to incoming messages, delivery statuses and login events |
| Rename a contact in the ChatPush web messenger |
| Link to the QR page that connects WhatsApp or a personal Telegram account |
| Multi-account: create and inspect sub-clients, each with its own token |
Related MCP server: SendAPI MCP Server
Get a token
Sign up at chatpush.ru and copy the API token from the dashboard. To send through WhatsApp or Telegram, connect the messenger in the dashboard first — or call get_messenger_auth_link and scan the QR code.
Remote mode (hosted)
The hosted server exposes one MCP endpoint:
POST https://mcp.chatpush.ru/mcp
Authorization: Bearer <ChatPush API token>Transport: Streamable HTTP (MCP protocol 2025-06-18), JSON responses enabled.
Stateless: a fresh server instance per request, so it scales horizontally behind any proxy.
No credentials on the server: the token is read from the request header and used only for that request. Nothing is stored or logged.
GET /healthzreturns{"status":"ok",...}without a token, for load-balancer checks.
Connecting from a client that supports remote MCP servers:
{
"url": "https://mcp.chatpush.ru/mcp",
"headers": { "Authorization": "Bearer your_token_here" }
}Deployment
docker build -t chatpush-mcp-server .
docker run -p 3000:3000 -e CHATPUSH_ALLOWED_HOSTS=mcp.chatpush.ru chatpush-mcp-serverWithout Docker: npm ci && npm run build && npm run start:http.
Put TLS in front (nginx, Traefik, a cloud load balancer) and point mcp.chatpush.ru at it. The service needs no database, no disk and no secrets.
Variable | Default | Description |
|
| Port to listen on |
|
| Interface to bind |
|
| Path of the MCP endpoint |
|
| ChatPush API host |
| — | Comma-separated |
|
| Value for |
|
|
|
Local mode (stdio)
Requires Node.js 20 or newer.
Claude Desktop
Settings → Developer → Edit Config (claude_desktop_config.json):
{
"mcpServers": {
"chatpush": {
"command": "npx",
"args": ["-y", "chatpush-mcp-server"],
"env": { "CHATPUSH_TOKEN": "your_token_here" }
}
}
}Claude Code
claude mcp add chatpush --env CHATPUSH_TOKEN=your_token_here -- npx -y chatpush-mcp-serverCursor
Add the same mcpServers block to ~/.cursor/mcp.json.
VS Code
.vscode/mcp.json — VS Code asks for the token and keeps it out of the file:
{
"inputs": [
{ "type": "promptString", "id": "chatpush_token", "description": "ChatPush token", "password": true }
],
"servers": {
"chatpush": {
"type": "stdio",
"command": "npx",
"args": ["-y", "chatpush-mcp-server"],
"env": { "CHATPUSH_TOKEN": "${input:chatpush_token}" }
}
}
}Channels
dispatch_routing is an ordered list of channels. ChatPush tries them one by one and moves to the next only if delivery through the previous one fails. Without it, the default routing from your dashboard is used.
Value | Channel | Recipient |
|
| |
| Personal Telegram account |
|
| Telegram Bot |
|
| SMS |
|
| VK / OK notifications |
|
| MAX messenger |
|
Usage examples
Say | Tool |
"Send a WhatsApp message to +7 999 123-45-67: your order has shipped." |
|
"Try WhatsApp first, then SMS: your code is 4821." |
|
"Remind 79991234567 tomorrow at 09:00 UTC about the appointment." |
|
"Send invoice.pdf to 79991234567." |
|
"Was message 94396942 delivered?" |
|
"Connect my WhatsApp." |
|
"Create a sub-client called Acme." |
|
"Rename the contact 79991234567 to Ivan from Acme." |
|
Behaviour
Parameters go in the URL query string, as the ChatPush API expects;
send_fileuploads the file asmultipart/form-data.Incompatible parameters (a Telegram
usernamewithout thetdlibchannel,scheduled_atin the past) are rejected before any request is sent.HTTP 429 is retried up to 3 times with exponential backoff, honouring
Retry-After; 5xx twice — except for requests that send messages, so nothing is sent twice.Requests time out after 30 seconds.
Errors come back as readable tool errors, e.g.
Invalid ChatPush token. Check your CHATPUSH_TOKEN.All logs go to stderr; stdout carries the MCP protocol in stdio mode.
Development
npm install
cp .env.example .env # put your token in .env
npm run build
npm run dev # stdio
npm run dev:http # remote, http://localhost:3000/mcpScript | What it does |
| Versions in sync across |
| Build the Claude Desktop extension into |
| Open the MCP Inspector against the local server |
License
Available Tools
19 toolscreate_sub_customerCreate sub-customerA
Create a sub-client under your ChatPush multi-customer account. The response contains the sub-customer's own API token — it is shown only here, so save it.
Use it when onboarding a new client of a platform built on ChatPush: each sub-customer gets a separate account, its own messengers and its own subscription.
Requires a multi-customer account: a ChatPush client that may create sub-clients through the API.
Inputs: name (required).
create_webhookCreate webhookA
Register a webhook URL to receive real-time notifications for specific ChatPush events (e.g. whatsapp_log_out, delivery status updates, incoming messages). Use it when the user wants their server, CRM or automation (n8n, Make, Zapier) to receive replies or react to WhatsApp/Telegram events.
Inputs: url (required), types (required).
delete_deliveryDelete deliveryADestructiveIdempotent
Delete a sent message from WhatsApp or Telegram (tdlib). Only works for messages with final 'Delivered' status. Deletion occurs on all recipient devices.
Only messages sent through ChatPush via the tdlib or whatsapp channels can be deleted; SMS cannot. Use it when the user asks to unsend or recall a message.
Inputs: delivery_id (required).
delete_webhookDelete webhookADestructiveIdempotent
Delete a webhook by ID. The webhook will stop receiving notifications.
Inputs: id (required).
get_accountGet accountARead-only
Get full ChatPush account information including token, balance, dispatch routing, sender names, subscription status and Telegram/WhatsApp sessions count. Use it to verify the token works, check whether the subscription is active, or diagnose undelivered messages (e.g. WhatsApp or Telegram not authorized). For just the balance use get_balance.
Inputs: no named parameters.
get_balanceGet balanceARead-only
Get ChatPush account balance, customer ID, available dispatch routing channels, and registered sender names. Use it when the user asks how much money is left, before a large mailing, or to find a valid sender_name for SMS.
Inputs: no named parameters.
get_delivery_statusGet delivery statusARead-only
Get the current status and full details of a specific message delivery by its ID. Returns status, operator info, phone, scheduled time, costs and more. Use it after send_message or send_file when the user asks whether a message was delivered or read, or why it failed — the status is explained in plain words.
Inputs: id (required).
get_messenger_auth_linkGet messenger authorization linkA
Get a link to the QR-code page that connects a WhatsApp or personal Telegram account to ChatPush. Open the link in a browser and scan the code with the phone that will send messages.
Use it when sending fails because the messenger is not connected (WhatsApp session not started, Telegram not authorized), or when setting the account up for the first time. Check the result afterwards with get_account.
Inputs: messenger (required).
get_phone_infoGet phone infoARead-only
Look up phone number information including country, mobile operator name and brand. Useful before sending to verify the number and determine routing. Also returns the number normalized to international format, e.g. when the user wrote it with spaces or brackets.
Inputs: phone (required).
get_sub_customerGet sub-customerARead-only
Show one sub-client by its customer_id: subscription status and expiry, and whether WhatsApp and Telegram are connected.
Requires a multi-customer account: a ChatPush client that may create sub-clients through the API.
Inputs: customer_id (required), include_tokens.
get_utm_tagsGet UTM tagsARead-only
Get list of all UTM tags (utm_marks) configured in the ChatPush account for tracking message dispatches. Use it to reuse an existing label as utm_mark in send_message, send_bulk or send_file, so statistics stay grouped.
Inputs: no named parameters.
get_webhookGet webhookARead-only
Get details of a specific webhook by its ID: the URL it posts to and the event types it subscribes to.
Inputs: id (required).
list_sub_customersList sub-customersARead-only
List the sub-clients of your ChatPush multi-customer account with their subscription status and whether WhatsApp and Telegram are connected.
Requires a multi-customer account: a ChatPush client that may create sub-clients through the API.
Inputs: include_tokens.
list_webhooksList webhooksARead-only
List all registered webhooks for this ChatPush account. Use it to see where events are delivered or to find a webhook ID before updating or deleting it.
Inputs: no named parameters.
send_bulkSend bulk messageA
Send the same message to multiple phone numbers at once. Supports scheduling, UTM marks, dispatch routing cascade, Telegram usernames and tdlib user IDs.
Use it for announcements, campaigns or reminders to a list of recipients. For one recipient, or when a delivery ID is needed for tracking, use send_message.
Inputs: text (required), phones_numbers (required), utm_mark, usernames, +4 more.
send_fileSend fileA
Send a file (document, image, audio, video, contact) to a recipient via WhatsApp or Telegram. File is uploaded as multipart/form-data. Images under 10MB sent natively, larger files as download links active for 7 days.
Use it when the user wants to share a document, photo, voice message, video or contact card. Provide the file as exactly one of: file_path (local file), file_url (downloaded by the server) or file_base64 (with file_name).
Supported: pdf, doc, docx, ppt, pptx, xls, xlsx, zip, 7z; ogg, opus, mp3, aac, amr, 3gp; jpeg, png, webp; mp4; vcf. Max 100 MB. Recipient rules are the same as send_message.
Inputs: type, phone, caption, file_url, +15 more.
send_messageSend messageA
Send a text message via WhatsApp, Telegram (tdlib), Telegram Bot, SMS, VK/OK (notify), or MAX (max), with optional cascade fallback between channels. Supports scheduling, priority, reply-to, typing simulation, and delivery callbacks.
Use it when the user asks to text, message, notify or reply to one person or group chat. For many phone numbers use send_bulk; for documents, images, audio or video use send_file.
Recipient: phone is required, except for personal Telegram (dispatch_routing ["tdlib"]) where username or tdlib_user_id can be used instead, and WhatsApp where whatsapp_lid can be used.
Returns the delivery ID for get_delivery_status and delete_delivery.
Inputs: text (required), phone, priority, username, +10 more.
set_chat_client_nameSet client name in chatAIdempotent
Rename a contact in the ChatPush web messenger, so operators see a person's real name instead of a phone number. The name is stored as the CRM client name of the conversation.
Find the conversation by phone, Telegram username or Telegram user ID — at least one is required. If the contact has both WhatsApp and Telegram conversations, both are renamed.
Inputs: name (required), phone, tdlib_user_id, tdlib_username.
update_webhookUpdate webhookAIdempotent
Update an existing webhook — change its URL or the list of event types it subscribes to. Pass only what should change; types replaces the whole list.
Inputs: id (required), url, types.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools target clearly distinct resources and actions, and the descriptions explicitly route users between similar tools such as get_account vs get_balance and send_message vs send_bulk vs send_file. The main residual ambiguity is overlapping account/balance information, so it is not quite perfectly distinct.
All tools use consistent snake_case with predictable verb_noun phrasing such as get_webhook, create_webhook, list_webhooks, and delete_webhook. Singular/plural forms are used appropriately for single-resource versus list operations.
Nineteen tools is above the ideal 3-15 range and feels somewhat heavy for this server's scope. Most tools earn their place, but there is some natural overlap between account/balance and messaging variants that could be tightened.
Core messaging workflows are well covered: send, bulk send, file send, delivery status, deletion, webhook CRUD, account diagnostics, and auth linking. However, sub-customer management has create/list/get but no update or delete, delivery management lacks listing or cancelling operations, and UTM tags are read-only.
Maintenance
Related MCP Connectors
Send WhatsApp messages and templates, manage chats, contacts, broadcasts and AI agents.
Email, WhatsApp and Telegram for AI agents: send, campaigns, automations, contacts, agent inboxes.
Send and schedule SMS and WhatsApp messages, manage contacts and templates, and track delivery.
Manage WhatsApp, Telegram and MAX mailings: audiences, drafts, moderation and sending.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to send WhatsApp messages, templates, and retrieve media through the WhatsApp Cloud API. Provides webhook handling and seamless integration with Meta's WhatsApp Business platform.23ISC

SendAPI MCP Serverofficial
AlicenseAqualityDmaintenanceEnables any MCP-compatible AI agent to send WhatsApp messages, SMS, OTP codes, and email through a single REST API.18MIT
jetapi-mcp-serverofficial
AlicenseAqualityBmaintenanceOfficial JetAPI MCP server for sending WhatsApp, Telegram (personal account or bot), SMS, VK/OK and MAX messages and files from AI agents. Supports channel cascades, scheduling, bulk mailings, delivery status tracking, phone number lookup and webhook management.1468 npmMIT- AlicenseAqualityCmaintenanceLets AI agents send notifications, manage templates and read delivery status.128 npmMIT