WA MCP
Supports the Meta Cloud API as an alternative backend channel for WhatsApp, allowing AI agents to send and receive messages, manage instances, and interact with WhatsApp business features using Meta's official API.
Provides tools for messaging (text, images, video, audio, documents, polls, reactions, etc.), group management (create, manage members, settings, invite links), contacts and profile operations (block/unblock, business profile), and real-time event notifications through the WhatsApp platform using Baileys (WhatsApp Web) or Meta Cloud API.
Click on "Install 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., "@WA MCPsend a message to Mom saying I'll be home soon"
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.
π€ What is WA MCP?
WA MCP is a WhatsApp MCP server built with TypeScript that gives AI agents full access to WhatsApp through the Model Context Protocol. It supports both Baileys (WhatsApp Web) and Meta Cloud API as dual-channel backends, deployable with Docker in a single command.
Your agent connects once and auto-discovers 63 tools, 10 resources, and 12 real-time events β zero configuration, zero REST wrappers, zero glue code.
Your AI Agent ββ MCP Protocol ββ WA MCP ββ WhatsAppInstead of writing HTTP clients, parsing webhook payloads, and mapping endpoints to tools manually β your agent just connects and goes. Works out of the box with Claude, Google ADK, LangChain, and any MCP-compatible AI agent framework.
π‘ MCP (Model Context Protocol) is the open standard for connecting AI agents to tools and data. WA MCP speaks MCP natively via Streamable HTTP and stdio transports.
Related MCP server: WhatsApp MCP Stream
π Quick Start
One command with Docker
docker compose upThat's it. WA MCP + Redis, ready on http://localhost:3000/mcp.
Or run locally
# Prerequisites: Node.js >= 22, Redis running
npm install
cp .env.example .env
# Development (stdio transport)
npm run dev
# Production (HTTP transport)
npm run build && npm startConnect your agent
from google.adk.tools.mcp_tool import McpToolset
tools = McpToolset(url="http://localhost:3000/mcp")
# Agent auto-discovers 63 WhatsApp tools
# wa_create_instance, wa_send_text, wa_send_image, ...from langchain_mcp import McpToolkit
toolkit = McpToolkit(server_url="http://localhost:3000/mcp")
tools = toolkit.get_tools()Add to your claude_desktop_config.json:
{
"mcpServers": {
"whatsapp": {
"command": "node",
"args": ["path/to/wa-mcp/dist/index.js"],
"env": {
"WA_TRANSPORT": "stdio",
"WA_REDIS_URL": "redis://localhost:6379"
}
}
}
}β¨ Features
Feature | Description | |
π | MCP-native | Streamable HTTP + stdio transports. No REST, no webhooks. |
π± | Dual-channel | Baileys (WhatsApp Web) + Meta Cloud API β same interface. |
π | Multi-instance | Run 1β50 WhatsApp numbers from a single server. |
π¨ | Full messaging | Text, images, video, audio, documents, polls, reactions, replies, forwards, edits, deletes, view-once. |
π₯ | Groups | Create, manage members, promote/demote admins, settings, invite links, join requests, ephemeral messages. |
π€ | Contacts & Profile | Number check, block/unblock, business profiles, privacy, status updates. |
π‘ | Real-time events | 12 notification types via SSE: messages, typing, groups, calls, connection status. |
β‘ | Rate limiting | BullMQ queues prevent WhatsApp bans (20 msg/min Baileys, 80 msg/min Cloud). |
π | Auto-reconnect | Automatic reconnection with exponential backoff. |
ποΈ | Persistent | SQLite storage for sessions, messages, contacts, groups. |
π³ | Single container |
|
π οΈ Tools
WA MCP exposes 63 tools across 9 domains. All tools use the wa_ prefix.
Tool | Description |
| Create a new WhatsApp connection |
| Connect (generates QR code) |
| Gracefully disconnect |
| Permanently remove instance |
| Disconnect + reconnect |
| Get QR as base64 (Baileys) |
| Get pairing code (Baileys) |
| Set Cloud API token |
Tool | Description |
| Send text message |
| Send image with caption |
| Send video with caption |
| Send audio / voice note |
| Send file / document |
| Send GPS location |
| Send vCard contact |
| Create a poll |
| React with emoji |
| Send URL with preview |
| Forward a message |
| Edit sent message |
| Delete message |
| Pin a message |
| Send view-once media |
| Show typing / recording |
| Mark messages as read |
Tool | Description |
| Get chat message history |
| Archive / unarchive |
| Pin / unpin chat |
| Mute / unmute |
| Delete chat |
| Clear chat history |
Tool | Description |
| Create group |
| Add members |
| Remove members |
| Promote to admin |
| Demote from admin |
| Change group name |
| Change description |
| Change settings |
| Leave group |
| Get invite link |
| Revoke invite link |
| Join via invite code |
| Toggle disappearing messages |
| Approve / reject join request |
Tool | Description |
| Search contacts by name or phone |
| Check if number is on WhatsApp |
| Block contact |
| Unblock contact |
| Get business profile |
Tool | Description |
| Set profile picture |
| Remove profile picture |
| Change display name |
| Change status text |
| Update privacy settings |
Tool | Description |
| Post text status |
| Post image status |
| Post video status |
Tool | Description |
| Follow a newsletter |
| Unfollow a newsletter |
| Send to newsletter |
Tool | Description |
| Reject incoming call |
π Resources
Resources expose read-only WhatsApp state via whatsapp:// URIs:
URI | Description |
| List all instances |
| Instance details + queue stats |
| All contacts |
| Active conversations |
| All groups |
| Group metadata |
| Message history |
| Own profile |
| Privacy settings |
| Blocked contacts |
π‘ Real-time Notifications
Events are pushed to agents via SSE (Server-Sent Events):
Event | Trigger |
| New incoming message |
| Status change (sent β delivered β read) |
| Message deleted |
| Emoji reaction added/removed |
| Message edited |
| Typing / recording / online |
| Chat metadata changed |
| Group info changed |
| Member add/remove/promote/demote |
| Contact info changed |
| Instance status change (includes QR as base64) |
| Incoming call |
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββ
β AI Agent Runtime β
β (Google ADK, Claude, LangChain, ...) β
ββββββββββββββββββββ¬βββββββββββββββββββββββββββ
β MCP Streamable HTTP
ββββββββββββββββββββΌβββββββββββββββββββββββββββ
β WA MCP Server β
β β
β ββββββββββββββββββββββββββββββββββββββββββ β
β β Layer 1 β MCP Transport (HTTP/stdio) β β
β ββββββββββββββββββββββββββββββββββββββββββ€ β
β β Layer 2 β MCP Core β β
β β 63 Tools β 10 Resources β 12 Events β β
β ββββββββββββββββββββββββββββββββββββββββββ€ β
β β Layer 3 β Services β β
β β Instance Manager β Queue β Dedup β β
β ββββββββββββββββββββββββββββββββββββββββββ€ β
β β Layer 4 β Channel Abstraction β β
β β ββββββββββββββββ ββββββββββββββββββ β β
β β β Baileys β β Cloud API β β β
β β β (WebSocket) β β (HTTPS) β β β
β β ββββββββββββββββ ββββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββ β
β SQLite (Drizzle) BullMQ (Redis) β
βββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ WebSocket / HTTPS
WhatsApp ServersDual-Channel Design
Baileys | Cloud API | |
Protocol | WhatsApp Web (WebSocket) | Meta Official (HTTPS) |
Auth | QR Code / Pairing Code | Access Token |
Cost | Free | Per-conversation pricing |
Compliance | Unofficial | Meta-approved |
Best for | Dev, testing, low volume | Production, enterprise |
Both backends implement the same ChannelAdapter interface. Your agent doesn't know or care which one is active β the tools work identically.
βοΈ Configuration
Copy .env.example to .env and configure:
Variable | Default | Description |
|
|
|
| β | Bearer token auth. Unset = no auth (dev) |
|
| HTTP server port |
|
| Redis for BullMQ queues |
|
|
|
|
| Messages/min per Baileys instance |
|
| Messages/min per Cloud API instance |
|
| Auto-delete old messages |
|
| Auto-reconnect on disconnect |
|
| Media cache size limit |
| β | Meta webhook verification |
|
| Webhook receiver port |
|
| Daily WhatsApp Web version check |
π³ Docker
Production
docker compose up -dServices:
wa-mcp β The MCP server on port
3000redis β BullMQ backend with AOF persistence
Health Check
curl http://localhost:3000/health{
"status": "ok",
"uptime": 3600,
"instances": { "total": 3, "connected": 2, "disconnected": 1 },
"version": "1.0.0"
}Resource Requirements
Instances | RAM | CPU | Disk |
1β5 | 256 MB | 0.5 vCPU | 1 GB |
5β20 | 512 MB | 1 vCPU | 5 GB |
20β50 | 1 GB | 2 vCPU | 10 GB |
π Project Structure
src/
βββ index.ts # Entry point (HTTP/stdio)
βββ constants.ts # Defaults and limits
βββ server/mcp.ts # MCP server setup
βββ tools/ # π§ 63 MCP tools (9 files)
βββ resources/ # π 10 MCP resources (8 files)
βββ notifications/events.ts # π‘ 12 event types
βββ channels/
β βββ channel.interface.ts # ChannelAdapter contract
β βββ baileys/ # Baileys implementation
β βββ cloud-api/ # Cloud API implementation
βββ services/
β βββ instance-manager.ts # Instance lifecycle
β βββ message-queue.ts # BullMQ rate limiting
β βββ dedup.ts # Message deduplication
β βββ media.ts # Media handling
βββ db/
β βββ schema.ts # Drizzle table definitions
β βββ client.ts # SQLite connection
βββ schemas/ # Zod validation (9 files)
βββ types/ # TypeScript definitionsπΊοΈ Roadmap
Phase 1 β Foundation: Baileys adapter, text messaging, QR auth, instance management
Phase 2 β Full messaging: all media types, dedup, reactions, edits, forwards
Phase 3 β Groups, contacts, profile, status/stories, newsletters
Phase 4 β Cloud API adapter: dual-channel unified interface
Phase 5 β Hardening: error recovery, CI/CD, tests, docs, v1.0 release
Phase 6 β Baileys v7 upgrade, LID support, contact sync, message persistence
π€ Contributing
Contributions are welcome! Here's how the codebase is organized:
One file per domain β tools, resources, schemas, and channels each have domain-specific files
Zod schemas for everything β all tool inputs are validated with strict Zod schemas in
src/schemas/Both adapters β new features should be implemented in Baileys and stubbed in Cloud API
Layered architecture β tools β services β channels. No cross-layer imports.
Structured logging β use Pino, never
console.log
# Development
npm run dev # Start with stdio transport
npm run build # Type-check + compile
npx tsc --noEmit # Type-check onlyπ License
MIT β do whatever you want.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Appeared in Searches
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/delltrak/wamcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server