WAHA MCP Server
The WAHA MCP Server provides 50+ tools for comprehensive WhatsApp automation, enabling AI agents to manage messaging, chats, contacts, groups, and interactive workflows.
Agent-Grade Tools: Inbox triage (waha_inbox), chat lookup (waha_find_chat), LLM-ready conversation context (waha_get_chat_context), human-like replies (waha_reply), and autonomous workflows via ask_user_via_whatsapp (sends a question and blocks until the user replies).
Session Management: List, create, start, stop, restart, delete, and logout sessions; authenticate via QR code or pairing code; check auth status; capture WhatsApp Web screenshots.
Messaging: Send text (with mentions, reply-to, link previews), images, videos, voice, files, locations, contacts, and polls; react, forward, edit, delete, star/unstar, mark as read; retrieve messages with filters and pagination.
Chat Management: List, get, archive/unarchive, pin/unpin, mute/unmute, delete, and clear chats.
Contacts: List contacts, get info, check if a number exists on WhatsApp, block/unblock, get profile pictures.
Group Management: Create, list, and get group details; add/remove/promote/demote participants; update subject, description, and picture; join via invite links; get/revoke invite codes; leave groups.
Presence: Set online/offline status, get contact presence/last seen, show/stop typing indicators.
Status/Stories: Post text, image, or voice status updates; delete statuses.
Labels (WhatsApp Business): Get, create, delete, and update labels; add/remove labels from chats; find chats by label.
Provides comprehensive tools for automating WhatsApp accounts via the WAHA HTTP API, including messaging (text, media, polls), chat and group management, contact interactions, and real-time presence control.
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., "@WAHA MCP Server Send a WhatsApp message to 1234567890@c.us saying the report 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.
Hermes MCPs
Personal WhatsApp + Telegram MCP servers for AI agents (hermes-agent, Claude, and any MCP client)
Documentation • Installation • Configuration • 🤖 Agent Setup • 🪽 Hermes Setup • Tools Reference
🚀 What is Hermes MCPs?
Two sibling MCP servers that give an AI agent control of the owner's personal messaging accounts, built on one shared TypeScript core:
WhatsApp (
dist/index.js, 84waha_*tools) — via WAHA (WhatsApp HTTP API) on the GOWS engineTelegram (
dist/telegram/index.js, 15tg_*tools) — directly over MTProto via gramjs, no bot API
Both share the same agent-grade design: inbox triage, LLM-ready conversation rendering, inline voice-note transcription (Soniox), compact token-efficient output, and self-explanatory errors.
✨ Key Features
📱 Complete WhatsApp Control - Send/receive messages, manage chats, create groups
🎯 84 Tools - Comprehensive API coverage for sessions, messaging, contacts, groups, status, labels, and interactive workflows
🧠 Agent-Grade Compound Tools -
waha_inbox(triage),waha_find_chat(name → chatId),waha_reply(human-like answering),waha_get_chat_context(LLM-ready conversation rendering)🎙️ Voice Transcription - Incoming voice notes transcribed automatically via Soniox (Hebrew + 60 languages, OGG/Opus native) — verified end-to-end on real speech
🔄 Smart Media Handling - Auto-conversion for voice/video, URLs & local files, inline image viewing for vision models
🤖 AI-Native - Token-efficient compact responses, MCP tool annotations (read-only/destructive hints)
🔒 Secure - Environment-based API key management, optional local-file sandbox (
WAHA_MCP_FILES_DIR)⚡ Fast & Reliable - TypeScript-powered, request timeouts, typed errors, vitest suite
🔔 Event-Driven Chat Watches - WAHA webhooks wake Hermes only for watched chats; no minute-level polling. See
docs/event-driven-chat-watches.md✈️ Telegram too - a second MCP server (
dist/telegram/index.js) controls your personal Telegram account over MTProto: 15tg_*tools sharing the same core (inbox digest, conversation rendering, voice transcription, send/react/edit, media, search). See Telegram server
Related MCP server: OpenWA MCP Server
📋 Prerequisites
Before you begin, ensure you have:
Node.js 18+ - Download here
WAHA Plus on the GOWS engine, running in Docker - required for media (the basis of transcription & image viewing) and for connection stability. Full server setup →
docs/waha-server-setup.mdWAHA API Key - any strong secret you set via
WHATSAPP_API_KEY(optional) Soniox API key - enables voice-note transcription (soniox.com; Hebrew + 60 languages)
Why Plus + GOWS? Core can't download incoming media (no voice transcription, no image viewing). NOWEB/WEBJS get the device force-unlinked or break on WhatsApp updates. The setup guide explains the tradeoffs and the anti-ban configuration in detail.
🛠️ Installation
1. Clone & Install
git clone https://github.com/dudu1111685/hermes_mcps.git
cd waha-mcp
npm install
npm run build2. Set Environment Variables
Create a .env file or export variables:
export WAHA_API_KEY="your-api-key-here"
export WAHA_URL="http://localhost:3001" # Optional, defaults to localhost:3001
export WAHA_DEFAULT_SESSION="default" # Optional — see Session policy below
export SONIOX_API_KEY="your-soniox-key" # Optional — enables voice note transcription
export WAHA_TIMEOUT_MS="30000" # Optional — WAHA request timeout
export WAHA_MCP_FILES_DIR="/tmp/waha-mcp" # Optional — restrict local-file reads to this dir
export WAHA_THROTTLE=1 # Optional — enable anti-ban send pacing (off by default)Session policy: WAHA_DEFAULT_SESSION sets the default session name for every tool call. Set it to your session name (e.g. default) for a single-account setup. If you leave it unset, the session parameter becomes required on every tool call — the safe choice when multiple WhatsApp accounts are connected, since a silent default could send from the wrong account. Call waha_list_sessions to enumerate available sessions.
Anti-ban throttle: off by default since the GOWS engine fixed device_removed disconnects. Set WAHA_THROTTLE=1 to enable pacing (3–8s jitter between sends, max 8/min, group ops spaced 120s). High-volume or bursty sends to many recipients are still risky regardless of engine — enable throttling for those use cases.
⚙️ Configuration
Claude Desktop
Add to claude_desktop_config.json:
Linux: ~/.config/claude/claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"waha": {
"command": "node",
"args": ["/absolute/path/to/waha-mcp/dist/index.js"],
"env": {
"WAHA_API_KEY": "your-api-key-here",
"WAHA_URL": "http://localhost:3001",
"WAHA_DEFAULT_SESSION": "default"
}
}
}
}Session note:
WAHA_DEFAULT_SESSIONmakes every tool default to that session. Omit it only if you connect multiple WhatsApp accounts and want the tool to require an explicitsessionon every call.
Cline / VS Code
Add to your Cline MCP settings (~/.vscode/mcp.json or workspace settings):
{
"mcpServers": {
"waha": {
"command": "node",
"args": ["/absolute/path/to/waha-mcp/dist/index.js"],
"env": {
"WAHA_API_KEY": "your-api-key-here",
"WAHA_DEFAULT_SESSION": "default"
}
}
}
}AI Agents (hermes-agent, Claude Code, and more)
🤖 Enable truly autonomous AI workflows:
Instead of the agent stopping when it needs user input, it can ask questions via WhatsApp and continue working!
🚀 Setup guides: AGENT_SETUP.md (Claude Code / generic MCP) • HERMES_SETUP.md (hermes-agent)
Quick config example:
{
"mcpServers": {
"waha": {
"command": "node",
"args": ["/path/to/waha-mcp/dist/index.js"],
"env": {
"WAHA_API_KEY": "your-key",
"WAHA_DEFAULT_SESSION": "default",
"USER_WHATSAPP_CHAT_ID": "1234567890@c.us"
}
}
},
"globalInstructions": "When you need user input during development, send the question with waha_ask_user and poll waha_check_replies every ~30-60s until answered. Never stop and wait for manual console input."
}How it works:
Claude hits a question → asks via WhatsApp
You reply from your phone
Claude continues working immediately
Zero downtime! ⚡
📖 See also:
AGENT_SETUP.md- Setup + the ask/check-replies pattern for any MCP agentHERMES_SETUP.md- hermes-agent: config.yaml, tool selection, autonomy patternsskills/whatsapp-assistant/- WhatsApp behavioral playbook skill (agentskills.io format)skills/event-driven-whatsapp-watches/- bounded WAHA webhook watches that resume the exact opening Hermes sessionskills/telegram-assistant/- Telegram behavioral playbook skill
Other MCP Clients
Use the mcporter CLI for quick testing:
mcporter call 'waha-mcp.waha_list_sessions()'
mcporter call 'waha-mcp.waha_send_text(chatId: "1234567890@c.us", text: "Hello from MCP!")'🧰 Tools Reference
📂 Categories
Tool | Description |
| Triage first. Chats sorted by recent activity with last-message previews — "what needs attention?" |
| Resolve a person/group name to a chatId (fuzzy, ranked). Use before any send/read when you only have a name |
| Primary reading tool. LLM-ready conversation rendering: names resolved, voice notes transcribed inline (Soniox), media summarized |
| Human-like answering: mark seen → typing indicator → proportional delay → send (anti-ban sequence in one call) |
| Create a bounded event-driven watch so a new incoming message wakes Hermes once |
| List active/closed watches without exposing secrets |
| Update objective, sender scope, permissions, expiry or wake target |
| Stop waking Hermes when the delegated work is finished |
Tool | Description |
| Transcribe a specific voice message via Soniox ( |
| Download incoming media — images returned inline so vision models can see them, larger files saved to a temp path |
| Fetch a single message (quoted-message resolution, fresh media URLs) |
Tool | Description |
| List all sessions and their statuses |
| Get detailed info about a session |
| Create a new session |
| Start a stopped session |
| Stop a running session |
| Restart a session |
| Delete a session permanently |
| Disconnect WhatsApp account from session |
| Visual debug — screenshot of the WhatsApp Web screen (returned as an image) |
Tool | Description |
| Get QR code for WhatsApp authentication |
| Request phone number pairing code |
| Check session authentication status |
Tool | Description |
| Send a text message (mentions, reply-to, link preview) |
| Send an image (local file or URL) |
| Send a video with auto-conversion |
| Send a voice message with auto-conversion |
| Send any document/file |
| Send a location pin |
| Send a contact vCard |
| Create and send a poll |
| React with emoji 👍❤️😂 |
| Forward a message to another chat |
| Get messages with pagination + timestamp/ack filters |
| Delete a message |
| Edit a sent message |
| Mark messages as read |
| Star/unstar a message |
| Pin a message for 24h/7d/30d |
📤 Media Upload Features:
✅ Local files & URLs supported
✅ Auto MIME type detection
✅ Auto video/voice conversion to WhatsApp format
✅ 50+ file types supported
✅ Base64 encoding handled automatically
Tool | Description |
| List all chats (sortable, paginated) |
| Get chat info (via overview lookup) |
| Archive/unarchive a chat |
| Mark a chat unread for human follow-up |
| Delete a chat |
| Clear all messages in a chat |
Note: WAHA has no chat-level pin/mute endpoints, so no pin/mute chat tools are exposed (message pinning is available via
waha_pin_message).
Tool | Description |
| Get contacts (paginated, sortable) |
| Get info about a contact |
| Get a contact's "about" status text |
| Check if number is on WhatsApp (verify before first-time sends!) |
| Save/edit a contact's name |
| Block/unblock a contact |
| Get profile picture URL |
Tool | Description |
| Create a new group |
| List all groups (lean payload by default) |
| Get detailed group info |
| List group participants |
| Add participants |
| Remove participants |
| Promote to admin |
| Demote from admin |
| Update group name |
| Update group description |
| Set group picture (local file or URL) |
| Join a group via invite link/code |
| Preview a group before joining |
| Admin-only messages/info settings |
| Leave a group |
| Get invite link |
| Revoke & regenerate link |
Tool | Description |
| Set online/offline status |
| Get contact's presence (last seen) |
| Subscribe to a contact's presence updates |
| Show typing indicator |
| Stop typing indicator |
| Send read receipts (see Messaging) |
Tool | Description |
| Post a text status (background color, font) |
| Post an image status (local file or URL) |
| Post a voice status (auto-converted to Opus) |
| Delete a posted status |
Tool | Description |
| Get all labels |
| Create a new label |
| Rename/recolor a label |
| Delete a label |
| Get labels of a chat |
| Replace a chat's label set |
| Find all chats with a label (triage loop) |
Tool | Description |
| Send a question via WhatsApp, return immediately with tracking info (non-blocking) |
| Check for replies since the question was sent — single quick poll, the agent manages its own waiting loop |
Use Case Example:
// Claude Code is building a feature and needs clarification
const q = await waha_ask_user({
question: "Should I use REST or GraphQL for the API?",
chatId: "1234567890@c.us"
});
// ...continue other work, then periodically:
const replies = await waha_check_replies({
chatId: "1234567890@c.us",
sinceTimestamp: q.sinceTimestamp,
questionMessageId: q.questionMessageId
});
// User replied from phone: "Use GraphQL" → continue with GraphQLWhy non-blocking? The old blocking design waited up to 60 minutes inside one tool call — every MCP client times out long before that. The new pair lets the agent keep working and poll on its own schedule. Quoted replies to the question are detected reliably (including in groups via the fromUser filter).
🔒 Security Note: Local File Access
Send tools that accept a local file path (waha_send_image, waha_send_file, waha_send_voice, status tools, etc.) can read any file the server process can access. Since chat content (including voice transcripts) from other people reaches the agent, a prompt-injected instruction could try to exfiltrate local files (e.g. SSH keys) by "sending" them.
To restrict reads to a single directory, set the WAHA_MCP_FILES_DIR environment variable (e.g. to /tmp/waha-mcp, where waha_get_media saves downloads). Paths outside it are then rejected. When unset, any local path is allowed.
📚 Chat ID Formats
Understanding WhatsApp ID formats:
Type | Format | Example |
User |
|
|
Group |
|
|
Channel |
|
|
Status |
|
|
Note: Phone numbers should exclude the
+prefix.
🎯 Quick Examples
Send a Text Message
mcporter call 'waha-mcp.waha_send_text(
chatId: "1234567890@c.us",
text: "Hello from WAHA MCP!"
)'Send an Image from URL
mcporter call 'waha-mcp.waha_send_image(
chatId: "1234567890@c.us",
imageUrl: "https://example.com/photo.jpg",
caption: "Check this out!"
)'Create a Group & Add Participants
# Create group
mcporter call 'waha-mcp.waha_create_group(
name: "Team Chat",
participants: ["1111111111@c.us", "2222222222@c.us"]
)'
# Add more participants
mcporter call 'waha-mcp.waha_add_group_participants(
chatId: "{group_id}@g.us",
participants: ["3333333333@c.us"]
)'List All Chats
mcporter call 'waha-mcp.waha_list_chats()'✈️ Telegram Server
The repo ships a second, independent MCP server that operates your personal Telegram account directly over MTProto (via gramjs) — no bot, no Telegram Bot API limits. It reuses the same core layer as the WhatsApp server (tool wrapper, compact formatting, Soniox voice transcription).
Setup
# 1. Get api_id + api_hash at https://my.telegram.org → "API development tools"
# 2. One-time interactive sign-in (phone → code → optional 2FA password).
# Writes TELEGRAM_API_ID / TELEGRAM_API_HASH / TELEGRAM_SESSION into .env:
npm run telegram:login⚠️
TELEGRAM_SESSIONgrants full access to the account — treat it like a password and only pass it via environment configuration.
MCP client config
{
"mcpServers": {
"telegram": {
"command": "node",
"args": ["/absolute/path/to/waha-mcp/dist/telegram/index.js"],
"env": {
"TELEGRAM_API_ID": "123456",
"TELEGRAM_API_HASH": "...",
"TELEGRAM_SESSION": "...",
"SONIOX_API_KEY": "..."
}
}
}
}Tools (15, prefixed tg_)
Tool | Purpose |
| Digest of unread chats — start here |
| Discover chats, resolve names to ids |
| Conversation rendered for reading; voice notes transcribed inline |
| Send messages/files, optional quote-reply |
| Act on messages |
| Per-chat or account-wide text search |
| Download media, transcribe voice |
| Housekeeping |
chat accepts what tg_list_chats returns: a numeric id (channels use the
-100… form), @username, a +phone of a contact, or me (Saved Messages).
🧪 Development
Run in Watch Mode
npm run dev # Recompiles on file changesRun Tests
npm testBuild for Production
npm run build📖 Documentation
For detailed documentation, see the docs folder:
🤝 Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
WAHA (WhatsApp HTTP API) - The backbone of this integration
Model Context Protocol - Enabling AI-native tool integration
Anthropic - For Claude Desktop and MCP SDK
Built with ❤️ for the MCP community
Available Tools
63 toolsask_user_via_whatsappA
🤖 IMPORTANT FOR AI ASSISTANTS: Use this tool instead of stopping work when you need user input!
WHEN TO USE:
You need architectural decisions (REST vs GraphQL, etc.)
You need missing requirements or specifications
You need API keys, credentials, or configuration values
You encounter ANY question that would normally block your progress
You need user approval or preference for a decision
DO NOT:
Stop and wait for manual console input
Ask the user to provide information manually
Halt progress when this tool can unblock you
HOW IT WORKS:
Send your question via WhatsApp
This tool WAITS (blocking) for the user's reply
Returns the reply text to you
You continue working with the answer
EXAMPLE USAGE: const answer = await ask_user_via_whatsapp({ question: "Should I use REST or GraphQL for this API?", chatId: "1234567890@c.us", timeoutMinutes: 30 }); // Parse answer and continue working
USER EXPERIENCE: User gets WhatsApp notification → replies from phone → you continue instantly
This enables truly autonomous AI development!
Inputs: question (required), chatId (required), session, timeoutMinutes, +1 more.
waha_add_group_participantsC
Add participants to a group
Inputs: groupId (required), participants (required), session.
waha_add_label_to_chatC
Add a label to a chat
Inputs: labelId (required), chatId (required), session.
waha_archive_chatC
Archive or unarchive a chat
Inputs: chatId (required), archive, session.
waha_block_contactC
Block or unblock a contact
Inputs: contactId (required), block, session.
waha_check_auth_statusB
Check the authentication status of a WhatsApp session
Inputs: session.
waha_check_number_existsB
Check if a phone number is registered on WhatsApp
Inputs: phone (required), session.
waha_clear_chatC
Clear all messages in a chat
Inputs: chatId (required), session.
waha_create_groupC
Create a new WhatsApp group
Inputs: name (required), participants (required), session.
waha_create_labelC
Create a new label
Inputs: name (required), color, session.
waha_create_sessionC
Create a new WhatsApp session
Inputs: name, webhookUrl, webhookEvents, enableStore, +1 more.
waha_delete_chatC
Delete a chat entirely
Inputs: chatId (required), session.
waha_delete_labelC
Delete a label
Inputs: labelId (required), session.
waha_delete_messageC
Delete a message from a WhatsApp chat
Inputs: chatId (required), messageId (required), session.
waha_delete_sessionC
Delete a WhatsApp session permanently
Inputs: session.
waha_demote_group_participantC
Demote admin(s) to regular participant in a group
Inputs: groupId (required), participants (required), session.
waha_edit_messageC
Edit a previously sent message
Inputs: chatId (required), messageId (required), text (required), session.
waha_forward_messageC
Forward a message to another chat
Inputs: chatId (required), messageId (required), toChatId (required), session.
waha_get_chatC
Get detailed info about a specific chat
Inputs: chatId (required), session.
waha_get_contactC
Get info about a specific contact
Inputs: contactId (required), session.
waha_get_contactsC
Get all contacts from a WhatsApp session
Inputs: session.
waha_get_groupC
Get detailed info about a specific group
Inputs: groupId (required), session.
waha_get_group_invite_codeB
Get the invite link/code for a group
Inputs: groupId (required), session.
waha_get_group_participantsB
List all participants in a group
Inputs: groupId (required), session.
waha_get_labelsC
Get all labels/categories in a WhatsApp session
Inputs: session.
waha_get_messagesC
Get messages from a WhatsApp chat with optional filters
Inputs: chatId (required), session, limit, offset, +2 more.
waha_get_presenceB
Get presence status of a contact (online/offline/typing)
Inputs: contactId (required), session.
waha_get_profile_pictureB
Get the profile picture URL of a contact or group
Inputs: contactId (required), session.
waha_get_qr_codeB
Get QR code for WhatsApp authentication. Returns the raw QR string value that can be used to generate a scannable QR code.
Inputs: session.
waha_get_sessionB
Get detailed info about a specific WhatsApp session
Inputs: session.
waha_leave_groupC
Leave a WhatsApp group
Inputs: groupId (required), session.
waha_list_chatsB
List all chats in a WhatsApp session
Inputs: session, limit, offset.
waha_list_groupsC
List all WhatsApp groups
Inputs: session, limit, offset.
waha_list_sessionsB
List all WhatsApp sessions and their statuses
Inputs: no named parameters.
waha_logout_sessionA
Logout from a WhatsApp session (keeps session but disconnects WhatsApp account)
Inputs: session.
waha_mark_as_readC
Mark messages in a chat as read (send seen)
Inputs: chatId (required), session, messageIds.
waha_mute_chatC
Mute or unmute a chat
Inputs: chatId (required), mute, duration, session.
waha_pin_chatC
Pin or unpin a chat
Inputs: chatId (required), pin, session.
waha_promote_group_participantC
Promote participant(s) to group admin
Inputs: groupId (required), participants (required), session.
waha_react_to_messageC
React to a message with an emoji
Inputs: messageId (required), reaction (required), session.
waha_remove_group_participantsC
Remove participants from a group
Inputs: groupId (required), participants (required), session.
waha_remove_label_from_chatC
Remove a label from a chat
Inputs: labelId (required), chatId (required), session.
waha_request_pairing_codeB
Request a pairing code for phone number authentication (alternative to QR code). The user will receive a code on their phone to enter in WhatsApp.
Inputs: phoneNumber (required), session.
waha_restart_sessionB
Restart a WhatsApp session
Inputs: session.
waha_revoke_group_inviteC
Revoke the current invite link and generate a new one
Inputs: groupId (required), session.
waha_send_contactC
Send contact card(s) (vCard) to a WhatsApp chat
Inputs: chatId (required), contactsId (required), session.
waha_send_fileC
Send a document/file to a WhatsApp chat (from local file OR URL)
Inputs: chatId (required), filePath, fileUrl, mimetype, +3 more.
waha_send_imageB
Send an image to a WhatsApp chat (from local file OR URL)
Inputs: chatId (required), imagePath, imageUrl, caption, +2 more.
waha_send_locationC
Send a location to a WhatsApp chat
Inputs: chatId (required), latitude (required), longitude (required), title, +1 more.
waha_send_pollC
Send a poll to a WhatsApp chat
Inputs: chatId (required), pollName (required), options (required), multipleAnswers, +1 more.
waha_send_statusC
Post a text status/story update
Inputs: text (required), session.
waha_send_textB
Send a text message to a WhatsApp chat
Inputs: chatId (required), text (required), session, replyTo, +2 more.
waha_send_videoC
Send a video to a WhatsApp chat (from local file OR URL)
Inputs: chatId (required), videoPath, videoUrl, caption, +2 more.
waha_send_voiceC
Send a voice message to a WhatsApp chat (from local file OR URL)
Inputs: chatId (required), audioPath, audioUrl, convert, +1 more.
waha_set_presenceB
Set your presence status (online/offline)
Inputs: presence (required), session.
waha_star_messageC
Star or unstar a message
Inputs: chatId (required), messageId (required), star, session.
waha_start_sessionC
Start a stopped WhatsApp session
Inputs: session.
waha_start_typingC
Show typing indicator in a chat (simulates real user behavior)
Inputs: chatId (required), session.
waha_stop_sessionC
Stop a running WhatsApp session
Inputs: session.
waha_stop_typingC
Stop showing typing indicator in a chat
Inputs: chatId (required), session.
waha_update_group_descriptionC
Update the description of a group
Inputs: groupId (required), description (required), session.
waha_update_group_pictureC
Set the profile picture of a group
Inputs: groupId (required), imageUrl (required), session.
waha_update_group_subjectC
Update the name/subject of a group
Inputs: groupId (required), subject (required), session.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 63 tools
Most tools have distinct purposes targeting specific WhatsApp actions like sending messages, managing groups, or handling sessions. However, some overlap exists, such as waha_send_text, waha_send_image, and waha_send_video, which could be confused as variants of a general send function, though their descriptions clarify media types. Overall, the set is well-differentiated with minimal ambiguity.
All tools follow a consistent waha_verb_noun naming pattern, using snake_case uniformly. This predictability makes it easy for agents to understand and navigate the toolset, with no deviations in style or structure across the 63 tools.
With 63 tools, the count is excessive for a WhatsApp API server, likely overwhelming agents and causing decision paralysis. A more focused set of 15-25 tools could cover the same functionality without redundancy, such as consolidating send operations into fewer tools. This high number feels heavy and unnecessary for the domain.
The toolset provides comprehensive coverage for WhatsApp operations, including messaging (text, media, polls), group management (create, update, participants), session handling (start, stop, QR codes), and chat features (archive, mute, labels). No obvious gaps exist; it supports full CRUD and lifecycle management for the domain.
Maintenance
Related MCP Connectors
Read, search and reply to your WhatsApp chats from your AI, using your own number.
WhatsApp for Claude, ChatGPT or any AI agent: search, reply and send. Personal or Business API.
Read, summarize and send your own WhatsApp messages from AI assistants (OAuth 2.1).
Send WhatsApp messages and templates, manage chats, contacts, broadcasts and AI agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to interact with WhatsApp through the WSAPI service, supporting comprehensive messaging, contact management, group operations, and account management functionality. Allows sending various media types, managing chats, and controlling WhatsApp sessions through natural language.10130 npm3MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to manage WhatsApp sessions, send multi-format messages, control group participants, and configure webhooks by wrapping the OpenWA REST API with 44 tools.442MIT
- AlicenseBqualityDmaintenanceEnables AI agents to control WhatsApp, including sending messages and media, reading chats, managing groups and communities, with QR/pairing auth and session persistence.1422 npm2MIT

GoWA MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceEnables AI agents and tools to send and manage WhatsApp messages, media, statuses, and scheduled sends across multiple linked devices.MIT