Skip to main content
Glama
WAHA MCP Server

WAHA MCP Server

by dudu1111685

Hermes MCPs

Personal WhatsApp + Telegram MCP servers for AI agents (hermes-agent, Claude, and any MCP client)

License: MIT Node.js Version MCP Compatible TypeScript

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, 84 waha_* tools) — via WAHA (WhatsApp HTTP API) on the GOWS engine

  • Telegram (dist/telegram/index.js, 15 tg_* 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: 15 tg_* 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.md

  • WAHA 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 build

2. 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_SESSION makes every tool default to that session. Omit it only if you connect multiple WhatsApp accounts and want the tool to require an explicit session on 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:

  1. Claude hits a question → asks via WhatsApp

  2. You reply from your phone

  3. Claude continues working immediately

  4. Zero downtime! ⚡

📖 See also:

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

waha_inbox

Triage first. Chats sorted by recent activity with last-message previews — "what needs attention?"

waha_find_chat

Resolve a person/group name to a chatId (fuzzy, ranked). Use before any send/read when you only have a name

waha_get_chat_context

Primary reading tool. LLM-ready conversation rendering: names resolved, voice notes transcribed inline (Soniox), media summarized

waha_reply

Human-like answering: mark seen → typing indicator → proportional delay → send (anti-ban sequence in one call)

waha_watch_chat

Create a bounded event-driven watch so a new incoming message wakes Hermes once

waha_list_chat_watches

List active/closed watches without exposing secrets

waha_update_chat_watch

Update objective, sender scope, permissions, expiry or wake target

waha_close_chat_watch

Stop waking Hermes when the delegated work is finished

Tool

Description

waha_transcribe_message

Transcribe a specific voice message via Soniox (SONIOX_API_KEY required; Hebrew + 60 languages)

waha_get_media

Download incoming media — images returned inline so vision models can see them, larger files saved to a temp path

waha_get_message

Fetch a single message (quoted-message resolution, fresh media URLs)

Tool

Description

waha_list_sessions

List all sessions and their statuses

waha_get_session

Get detailed info about a session

waha_create_session

Create a new session

waha_start_session

Start a stopped session

waha_stop_session

Stop a running session

waha_restart_session

Restart a session

waha_delete_session

Delete a session permanently

waha_logout_session

Disconnect WhatsApp account from session

waha_screenshot

Visual debug — screenshot of the WhatsApp Web screen (returned as an image)

Tool

Description

waha_get_qr_code

Get QR code for WhatsApp authentication

waha_request_pairing_code

Request phone number pairing code

waha_check_auth_status

Check session authentication status

Tool

Description

waha_send_text

Send a text message (mentions, reply-to, link preview)

waha_send_image

Send an image (local file or URL)

waha_send_video

Send a video with auto-conversion

waha_send_voice

Send a voice message with auto-conversion

waha_send_file

Send any document/file

waha_send_location

Send a location pin

waha_send_contact

Send a contact vCard

waha_send_poll

Create and send a poll

waha_react_to_message

React with emoji 👍❤️😂

waha_forward_message

Forward a message to another chat

waha_get_messages

Get messages with pagination + timestamp/ack filters

waha_delete_message

Delete a message

waha_edit_message

Edit a sent message

waha_mark_as_read

Mark messages as read

waha_star_message

Star/unstar a message

waha_pin_message / waha_unpin_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

waha_list_chats

List all chats (sortable, paginated)

waha_get_chat

Get chat info (via overview lookup)

waha_archive_chat

Archive/unarchive a chat

waha_mark_unread

Mark a chat unread for human follow-up

waha_delete_chat

Delete a chat

waha_clear_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

waha_get_contacts

Get contacts (paginated, sortable)

waha_get_contact

Get info about a contact

waha_get_contact_about

Get a contact's "about" status text

waha_check_number_exists

Check if number is on WhatsApp (verify before first-time sends!)

waha_update_contact

Save/edit a contact's name

waha_block_contact

Block/unblock a contact

waha_get_profile_picture

Get profile picture URL

Tool

Description

waha_create_group

Create a new group

waha_list_groups

List all groups (lean payload by default)

waha_get_group

Get detailed group info

waha_get_group_participants

List group participants

waha_add_group_participants

Add participants

waha_remove_group_participants

Remove participants

waha_promote_group_participant

Promote to admin

waha_demote_group_participant

Demote from admin

waha_update_group_subject

Update group name

waha_update_group_description

Update group description

waha_update_group_picture

Set group picture (local file or URL)

waha_join_group

Join a group via invite link/code

waha_preview_group_invite

Preview a group before joining

waha_group_security_settings

Admin-only messages/info settings

waha_leave_group

Leave a group

waha_get_group_invite_code

Get invite link

waha_revoke_group_invite

Revoke & regenerate link

Tool

Description

waha_set_presence

Set online/offline status

waha_get_presence

Get contact's presence (last seen)

waha_subscribe_presence

Subscribe to a contact's presence updates

waha_start_typing

Show typing indicator

waha_stop_typing

Stop typing indicator

waha_mark_as_read

Send read receipts (see Messaging)

Tool

Description

waha_send_text_status

Post a text status (background color, font)

waha_send_image_status

Post an image status (local file or URL)

waha_send_voice_status

Post a voice status (auto-converted to Opus)

waha_delete_status

Delete a posted status

Tool

Description

waha_get_labels

Get all labels

waha_create_label

Create a new label

waha_update_label

Rename/recolor a label

waha_delete_label

Delete a label

waha_get_chat_labels

Get labels of a chat

waha_set_chat_labels

Replace a chat's label set

waha_get_chats_by_label

Find all chats with a label (triage loop)

Tool

Description

waha_ask_user

Send a question via WhatsApp, return immediately with tracking info (non-blocking)

waha_check_replies

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 GraphQL

Why 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

{phone}@c.us

1234567890@c.us

Group

{id}@g.us

1234567890-1234567890@g.us

Channel

{id}@newsletter

1234567890@newsletter

Status

status@broadcast

status@broadcast

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_SESSION grants 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

tg_inbox

Digest of unread chats — start here

tg_list_chats / tg_find_chat / tg_list_contacts

Discover chats, resolve names to ids

tg_get_chat_context

Conversation rendered for reading; voice notes transcribed inline

tg_send_text / tg_send_file

Send messages/files, optional quote-reply

tg_react / tg_edit_message / tg_delete_message

Act on messages

tg_search_messages

Per-chat or account-wide text search

tg_get_media / tg_transcribe_message

Download media, transcribe voice

tg_mark_read / tg_me

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 changes

Run Tests

npm test

Build 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.

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request


📄 License

This project is licensed under the MIT License - see the LICENSE file for details.


🙏 Acknowledgments


Built with ❤️ for the MCP community

⭐ Star this repo • 🐛 Report Bug • 💡 Request Feature

Available Tools

63 tools
ask_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:

  1. Send your question via WhatsApp

  2. This tool WAITS (blocking) for the user's reply

  3. Returns the reply text to you

  4. 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

    B3.2/5.0

    Scored across 63 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count2/5

    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.

    Completeness5/5

    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

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables 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.
      101
      30 npm
      3
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables 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.
      44
      2
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables AI agents to control WhatsApp, including sending messages and media, reading chats, managing groups and communities, with QR/pairing auth and session persistence.
      14
      22 npm
      2
      MIT

    Appeared in Searches