Skip to main content
Glama
ChatPush MCP Server

ChatPush MCP Server

Official
by ChatPush

ChatPush MCP Server

CI License: MIT

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 https://mcp.chatpush.ru/mcp

Yandex and other platforms that connect to a URL; users with no local Node.js

Each caller sends their own token in the Authorization header

Local

stdio, npx -y chatpush-mcp-server

Claude Desktop, Claude Code, Cursor, VS Code

CHATPUSH_TOKEN in the client config

Tools

Tool

Description

get_account

Full account info: balance, dispatch routing, sender names, subscription, WhatsApp/Telegram session status

get_balance

Balance, customer ID, dispatch routing channels and registered sender names

get_utm_tags

UTM tags used to track dispatches

send_message

Send a text via WhatsApp, Telegram (tdlib), Telegram Bot, SMS, VK/OK or MAX — with cascade, scheduling, priority and reply-to

send_bulk

Send the same message to many phone numbers at once

send_file

Send a document, image, audio or video from a local path, URL or base64 (up to 100 MB)

get_delivery_status

Status and details of a delivery, explained in plain words

delete_delivery

Delete a delivered WhatsApp/Telegram message on all recipient devices

get_phone_info

Country, operator and normalized format of a phone number

create_webhook · get_webhook · list_webhooks · update_webhook · delete_webhook

Subscribe your backend to incoming messages, delivery statuses and login events

set_chat_client_name

Rename a contact in the ChatPush web messenger

get_messenger_auth_link

Link to the QR page that connects WhatsApp or a personal Telegram account

create_sub_customer · list_sub_customers · get_sub_customer

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 /healthz returns {"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-server

Without 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

3000

Port to listen on

HOST

0.0.0.0

Interface to bind

CHATPUSH_MCP_PATH

/mcp

Path of the MCP endpoint

CHATPUSH_BASE_URL

https://api.chatpush.ru

ChatPush API host

CHATPUSH_ALLOWED_HOSTS

—

Comma-separated Host values to accept, e.g. mcp.chatpush.ru. Set it in production: it blocks DNS-rebinding attacks

CHATPUSH_ALLOWED_ORIGIN

*

Value for Access-Control-Allow-Origin

CHATPUSH_DEBUG

0

1 logs every request to stderr

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-server

Cursor

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

whatsapp

WhatsApp

phone or whatsapp_lid

tdlib

Personal Telegram account

phone, username or tdlib_user_id (negative ID = group chat)

telegram

Telegram Bot

phone

sms

SMS

phone

notify

VK / OK notifications

phone

max

MAX messenger

phone

Usage examples

Say

Tool

"Send a WhatsApp message to +7 999 123-45-67: your order has shipped."

send_message

"Try WhatsApp first, then SMS: your code is 4821."

send_message (cascade)

"Remind 79991234567 tomorrow at 09:00 UTC about the appointment."

send_message (scheduled)

"Send invoice.pdf to 79991234567."

send_file

"Was message 94396942 delivered?"

get_delivery_status

"Connect my WhatsApp."

get_messenger_auth_link

"Create a sub-client called Acme."

create_sub_customer

"Rename the contact 79991234567 to Ivan from Acme."

set_chat_client_name

Behaviour

  • Parameters go in the URL query string, as the ChatPush API expects; send_file uploads the file as multipart/form-data.

  • Incompatible parameters (a Telegram username without the tdlib channel, scheduled_at in 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/mcp

Script

What it does

npm run check

Versions in sync across package.json / server.json / manifest.json and all 19 tools exposed

npm run build:mcpb

Build the Claude Desktop extension into build/chatpush-mcp-server.mcpb

npm run inspector

Open the MCP Inspector against the local server

License

MIT

Available Tools

19 tools
create_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 deliveryA
DestructiveIdempotent

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 webhookA
DestructiveIdempotent

Delete a webhook by ID. The webhook will stop receiving notifications.

Inputs: id (required).

get_accountGet accountA
Read-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 balanceA
Read-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 statusA
Read-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_phone_infoGet phone infoA
Read-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-customerA
Read-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 tagsA
Read-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 webhookA
Read-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-customersA
Read-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 webhooksA
Read-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 chatA
Idempotent

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 webhookA
Idempotent

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

    A3.9/5.0

    Scored across 19 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count3/5

    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.

    Completeness3/5

    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

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables any MCP-compatible AI agent to send WhatsApp messages, SMS, OTP codes, and email through a single REST API.
      18
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Official 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.
      14
      68 npm
      MIT