Allows AI agents to send WhatsApp, Telegram, SMS, and bulk messages, manage files, and monitor delivery statuses.
Also known as jetapi/jetapi-mcp-server, jetapi-mcp-server
- Stars
- 0
- Tools
- 14
- Downloads, 30 days
- —
- Latest version
- 1.0.3
- Last commit
- Sep 23, 2026
- License
- MIT
What is JetAPI MCP?
JetAPI allows AI agents to send WhatsApp, Telegram, SMS, and bulk messages, manage files, and monitor delivery statuses. It exposes 14 tools, such as get_account, get_balance, get_utm_tags.
Summary generated from the project's README
About JetAPI MCP server
JetAPI provides an interface for AI agents to manage multi-channel communications through a single integration. Developers using clients like Claude Desktop, Cursor, VS Code, or Claude Code can connect their agents to various messaging services including WhatsApp, Telegram, SMS, VK, OK, and MAX. The server operates locally via stdio and requires a JETAPI_TOKEN obtained from the JetAPI dashboard to function.
This toolset allows for sophisticated messaging workflows such as sending bulk messages to multiple numbers, scheduling future dispatches, and using cascade routing to try different channels if one fails. It also supports file transfers for documents, images, audio, or video up to 100 MB. Beyond sending content, users can monitor delivery statuses, manage webhooks for incoming events, and retrieve account details like current balances or session statuses.
What you can do with it
- 1Automated Multi-Channel MessagingAn AI agent can send a message via WhatsApp and fallback to SMS if the first attempt fails.
- 2Bulk Communication CampaignsA developer can instruct an agent to distribute a single message to a large list of phone numbers simultaneously.
- 3Media and Document DistributionAgents can transmit files such as PDFs or images from a local path or URL to a recipient.
- 4Real-time Event MonitoringUsers can set up webhooks to receive notifications for incoming messages or changes in WhatsApp status.
Written from the project's README. Every use case is checked against a quote from it.
How to install JetAPI MCP
Formats verified 10 Nov 2026Install JetAPI MCP in Claude Code
$ claude mcp add --env JETAPI_TOKEN=<YOUR_JETAPI_TOKEN> jetapi-mcp-server -- npx -y jetapi-mcp-serverInstall JetAPI MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"jetapi-mcp-server": {
"command": "npx",
"args": [
"-y",
"jetapi-mcp-server"
],
"env": {
"JETAPI_TOKEN": "<YOUR_JETAPI_TOKEN>"
}
}
}
}Install JetAPI MCP in VS Code
.vscode/mcp.json
{
"servers": {
"jetapi-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"jetapi-mcp-server"
],
"env": {
"JETAPI_TOKEN": "<YOUR_JETAPI_TOKEN>"
}
}
}
}Install JetAPI MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"jetapi-mcp-server": {
"command": "npx",
"args": [
"-y",
"jetapi-mcp-server"
],
"env": {
"JETAPI_TOKEN": "<YOUR_JETAPI_TOKEN>"
}
}
}
}Install JetAPI MCP in Codex
~/.codex/config.toml
[mcp_servers.jetapi-mcp-server] command = "npx" args = ["-y", "jetapi-mcp-server"] [mcp_servers.jetapi-mcp-server.env] JETAPI_TOKEN = "<YOUR_JETAPI_TOKEN>"
Install JetAPI MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"jetapi-mcp-server": {
"command": "npx",
"args": [
"-y",
"jetapi-mcp-server"
],
"env": {
"JETAPI_TOKEN": "<YOUR_JETAPI_TOKEN>"
}
}
}
}JetAPI MCP tools 14
Detected from the READMEget_accountget_balanceget_utm_tagssend_messagesend_bulkget_delivery_statusdelete_deliveryget_phone_infosend_filecreate_webhookget_webhooklist_webhooks
| get_account | — | |
| get_balance | — | |
| get_utm_tags | — | |
| send_message | — | |
| send_bulk | — | |
| get_delivery_status | — | |
| delete_delivery | — | |
| get_phone_info | — | |
| send_file | — | |
| create_webhook | — | |
| get_webhook | — | |
| list_webhooks | — |
Show all 14 toolsShow fewer tools
delete_webhookupdate_webhook
| delete_webhook | — | |
| update_webhook | — |
Configuration
JETAPI_TOKENRequiredSecretBearer token from the JetAPI dashboard (https://jetapi.io)
JETAPI_BASE_URLAPI host. Change only for a white-label JetAPI installation.
| Name | Description | |
|---|---|---|
| JETAPI_TOKEN | Bearer token from the JetAPI dashboard (https://jetapi.io) | RequiredSecret |
| JETAPI_BASE_URL | API host. Change only for a white-label JetAPI installation. |
Automated checks
Ran Nov 14, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablejetapi/jetapi-mcp-server is public and reachablegithub.com/jetapi/jetapi-mcp-server ↗Pass
- Package names this repository as its sourcejetapi-mcp-server names jetapi/jetapi-mcp-server as sourcenpmjs.com/package/jetapi-mcp-server ↗Pass
- Build provenance (Sigstore attestation)Sigstore attestation for jetapi-mcp-servernpmjs.com/package/jetapi-mcp-server/v/1.0.3#provenance ↗Pass
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-09-23github.com/jetapi/jetapi-mcp-server ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from jetapi-mcp-serverPass
- No critical advisory in the package or its dependencies100 resolved dependencies checked; no critical advisoryosv.dev ↗Pass
- No hidden instructions to the model14 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNot checked
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubJetAPI MCP Server
Official MCP server for JetAPI — send WhatsApp, Telegram, SMS and MAX messages, files and bulk mailings from AI agents like Claude, Cursor and VS Code.
Tools
| Tool | Description |
|---|---|
get_account |
Full account info: balance, dispatch routing, sender names, subscription, WhatsApp/Telegram session status (token is masked) |
get_balance |
Balance, customer ID, dispatch routing channels and registered sender names |
get_utm_tags |
List 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, reply-to and callbacks |
send_bulk |
Send the same message to many phone numbers at once |
get_delivery_status |
Status and details of a delivery, with the status 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 |
send_file |
Send a document, image, audio or video from a local path, URL or base64 (up to 100 MB) |
create_webhook |
Subscribe a URL to events: incoming messages, WhatsApp statuses, login/logout |
get_webhook |
Details of one webhook |
list_webhooks |
All registered webhooks |
delete_webhook |
Delete a webhook |
update_webhook |
Change a webhook's URL and/or event types |
Get a token
Sign up at jetapi.io and copy the API token from the dashboard. To send through WhatsApp or Telegram, connect the messenger in the dashboard first.
Installation
Claude Desktop — one click
- Download
jetapi-mcp-server.mcpbfrom the latest release. - Double-click it (or drag it into Claude Desktop → Settings → Extensions).
- Paste your JetAPI token when asked. It is stored securely by Claude Desktop.
Claude Desktop — config file
Requires Node.js 18.17 or newer. Open Settings → Developer → Edit Config (claude_desktop_config.json) and add:
{
"mcpServers": {
"jetapi": {
"command": "npx",
"args": ["-y", "jetapi-mcp-server"],
"env": { "JETAPI_TOKEN": "your_token_here" }
}
}
}
Restart Claude Desktop.
Claude Code
claude mcp add jetapi -- npx -y jetapi-mcp-server
The server needs JETAPI_TOKEN, so pass it when adding:
claude mcp add jetapi --env JETAPI_TOKEN=your_token_here -- npx -y jetapi-mcp-server
Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"jetapi": {
"command": "npx",
"args": ["-y", "jetapi-mcp-server"],
"env": { "JETAPI_TOKEN": "your_token_here" }
}
}
}
VS Code
Add to .vscode/mcp.json — VS Code will prompt for the token and keep it out of the file:
{
"inputs": [
{ "type": "promptString", "id": "jetapi_token", "description": "JetAPI token", "password": true }
],
"servers": {
"jetapi": {
"type": "stdio",
"command": "npx",
"args": ["-y", "jetapi-mcp-server"],
"env": { "JETAPI_TOKEN": "${input:jetapi_token}" }
}
}
}
MCP Registry
The server is listed in the official MCP Registry as io.github.jetapi/jetapi-mcp-server, so clients and catalogs that read the registry can install it directly.
Other MCP clients
Any client that supports stdio servers:
{
"command": "npx",
"args": ["-y", "jetapi-mcp-server"],
"env": { "JETAPI_TOKEN": "your_token_here" }
}
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
JETAPI_TOKEN |
yes | — | Bearer token from the JetAPI dashboard |
JETAPI_BASE_URL |
no | https://api.jetapi.io |
API host |
JETAPI_DEBUG |
no | 0 |
1 logs every request to stderr |
Channels
dispatch_routing is an ordered list of channels. JetAPI tries them one by one and moves to the next channel only if delivery through the previous one fails. Without it, the default routing from your JetAPI dashboard is used.
| Value | Channel | Recipient |
|---|---|---|
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
Ask Claude in plain language:
| Say | Tool |
|---|---|
| "Show my JetAPI account — is WhatsApp connected?" | get_account |
| "How much money is left on JetAPI?" | get_balance |
| "Which UTM tags do I have?" | get_utm_tags |
| "Send a WhatsApp message to +7 999 123-45-67: Your order has shipped." | send_message |
| "Message @john_doe on Telegram that the meeting moved to 3 pm." | send_message (tdlib) |
| "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 'Sale starts today!' to 79991234567, 79997654321 and 995598464533." | send_bulk |
| "Was message 94396942 delivered?" | get_delivery_status |
| "Delete message 94396942." | delete_delivery |
| "Which operator is +995 598 464 533?" | get_phone_info |
| "Send ~/Documents/invoice.pdf to 79991234567 on WhatsApp." | send_file |
| "Send incoming WhatsApp messages to https://example.com/hook." | create_webhook |
| "Show webhook 57." | get_webhook |
| "List my webhooks." | list_webhooks |
| "Delete webhook 57." | delete_webhook |
| "Point webhook 57 to https://example.com/new-hook." | update_webhook |
Behaviour
- Parameters are sent as URL query parameters, as the JetAPI API expects;
send_fileuploads the file asmultipart/form-data. - Incompatible parameters (e.g. a Telegram
usernamewithout thetdlibchannel, orscheduled_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 responses are retried twice after 1 s — except for requests that send messages or create webhooks (
send_message,send_bulk,send_file,create_webhook), so nothing is sent twice. - Requests time out after 30 seconds.
- Errors are returned as readable tool errors, e.g.
Invalid JetAPI token. Check your JETAPI_TOKEN.orValidation error: text: the text cannot be empty. - All logs go to stderr; stdout is reserved for the MCP protocol.
Development
git clone https://github.com/jetapi/jetapi-mcp-server.git
cd jetapi-mcp-server
npm install
cp .env.example .env # put your token in .env
npm run build
npm start
| Script | What it does |
|---|---|
npm run dev |
Run the TypeScript source directly |
npm run inspector |
Open the MCP Inspector with all tools |
npm run check |
Verify versions in package.json / server.json / manifest.json and that the server exposes all 14 tools |
npm run build:mcpb |
Build the Claude Desktop extension into build/jetapi-mcp-server.mcpb |
Releasing
- Bump the version in
package.json,server.json(bothversionfields) andmanifest.json, and add aCHANGELOG.mdentry. - Merge to
main, then push a tag:git tag v1.2.3 && git push origin v1.2.3. - The Release workflow publishes to npm (trusted publishing with provenance), creates a GitHub release with the
.mcpbbundle and updates the MCP Registry.
Privacy Policy
The extension runs locally, collects no analytics or telemetry, and sends data only to the JetAPI API to perform the actions you request. Your API token is stored by your MCP client (Claude Desktop keeps it in secure storage).
- JetAPI MCP Server privacy policy — what the extension handles, stores and shares
- JETAPI LLC Privacy Policy — how the JetAPI service processes personal data
Questions: support@jetapi.io
License
JetAPI MCP questions
How do I add JetAPI MCP to Claude Code?
Run claude mcp add --env JETAPI_TOKEN=<YOUR_JETAPI_TOKEN> jetapi-mcp-server -- npx -y jetapi-mcp-server in your terminal. Add --scope user to make it available in every project.
How do I add JetAPI MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does JetAPI MCP provide?
It exposes 14 tools, including get_account, get_balance, get_utm_tags, send_message, send_bulk.
Can I send files through the server?
Yes, you can send documents, images, audio, or video from a local path, URL, or base64, with a maximum size of 100 MB.
How does the dispatch routing work?
JetAPI uses an ordered list of channels and tries them one by one, moving to the next only if the previous one fails.
Is my data private?
The extension runs locally, collects no analytics or telemetry, and only sends data to the JetAPI API to perform requested actions.