MCP WhatsApp

MCP WhatsApp

Enables sending messages, images, documents and more on WhatsApp directly from any MCP-compatible AI, with tools for chat management, groups, and webhooks.

Category
Visit Server

README

<div align="center">

šŸ“± MCP WhatsApp

Send messages, images, documents and more on WhatsApp — directly from any AI.

Python MCP License: MIT Stars

Works with Claude, Gemini, Cursor, Windsurf, Continue.dev and any MCP-compatible AI.

100% Open Source and MIT Licensed.

</div>


✨ What can you do?

Just talk to your AI naturally:

"Send a message to +5511999998888 saying the meeting is postponed"

"Send the invoice.pdf to the Clients group"

"Get the last 20 messages from my support chat"

"Create a group called 'Team Sprint' with these numbers"

No code. No manual API calls. Just ask.


šŸš€ Quick Start (3 steps)

Step 1 — Clone and start WuzAPI

git clone https://github.com/YOUR_USER/mcp-whatsapp
cd mcp-whatsapp
docker compose up -d

That's it — WuzAPI starts automatically on http://localhost:7143 with message history enabled. āœ…

The included docker-compose.yml sets everything up for you.
Default admin token: admin123 (change via WUZAPI_ADMIN_TOKEN env var).

Step 2 — Install the MCP server

python -m venv .venv

# Windows
.venv\Scripts\activate

# Linux / macOS
source .venv/bin/activate

pip install -e .

Step 3 — Register with Claude Code (global, one-time)

# Windows (replace with your absolute path)
claude mcp add whatsapp -s user -- C:\path\to\mcp-whatsapp\.venv\Scripts\python.exe -m mcp_whatsapp.server

# Linux / macOS (replace with your absolute path)
claude mcp add whatsapp -s user -- /path/to/mcp-whatsapp/.venv/bin/python -m mcp_whatsapp.server

Restart Claude, then just ask:

"Configure my WhatsApp with token mytoken123"

Magic: The server will automatically create the user in WuzAPI for you (Plug & Play). No manual dashboard work required! šŸŖ„


šŸ”‘ Manual Configuration (Optional)

If you prefer to use the dashboard, it is available at http://localhost:7143.

  1. Open http://localhost:7143 → click Admin Mode
  2. Enter the admin token — default is admin123
  3. Go to Users → Create User, enter any name and choose a token.

"Configure my WhatsApp with token myusertoken"

šŸ’” Two tokens, two purposes:

  • User token → sends/receives messages — this is what you use daily
  • Admin token → manages users — only needed for whatsapp_admin_* tools

šŸ”Œ Connect to Your AI

Claude Code (recommended)

claude mcp add whatsapp -s user -- \
  /path/to/.venv/bin/python -m mcp_whatsapp.server

Then ask Claude to configure:

"Configure my WhatsApp: token=abc123, url=http://localhost:7143"

Claude Desktop

Add to claude_desktop_config.json:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "whatsapp": {
      "command": "/path/to/mcp-whatsapp/.venv/bin/python",
      "args": ["-m", "mcp_whatsapp.server"],
      "env": {
        "WUZAPI_BASE_URL": "http://localhost:7143",
        "WUZAPI_TOKEN": "your_token_here"
      }
    }
  }
}

Cursor / Windsurf / Continue.dev

Add to your editor's MCP config file:

{
  "mcpServers": {
    "whatsapp": {
      "command": "/path/to/mcp-whatsapp/.venv/bin/python",
      "args": ["-m", "mcp_whatsapp.server"],
      "env": {
        "WUZAPI_BASE_URL": "http://localhost:7143",
        "WUZAPI_TOKEN": "your_token_here"
      }
    }
  }
}

Any other MCP-compatible AI

  • Transport: stdio (standard)
  • Command: python -m mcp_whatsapp.server
  • Env vars: WUZAPI_BASE_URL, WUZAPI_TOKEN

šŸ› ļø Available Tools (30+)

Category Tools
āš™ļø Setup whatsapp_configure
šŸ”— Session whatsapp_connect, whatsapp_disconnect, whatsapp_status, whatsapp_get_qrcode, whatsapp_health
šŸ’¬ Messages whatsapp_send_text, whatsapp_send_image, whatsapp_send_document, whatsapp_send_audio, whatsapp_send_video, whatsapp_send_sticker, whatsapp_send_location, whatsapp_send_contact, whatsapp_send_link, whatsapp_send_buttons, whatsapp_send_list, whatsapp_send_poll
šŸ“„ Chat whatsapp_get_chats, whatsapp_get_unread_messages, whatsapp_get_messages, whatsapp_reply_message, whatsapp_delete_message, whatsapp_react, whatsapp_mark_read, whatsapp_download_media, whatsapp_search_messages, whatsapp_forward_message
šŸ‘¤ Users whatsapp_get_user_info, whatsapp_get_contacts, whatsapp_search_contacts, whatsapp_check_phones, whatsapp_get_avatar
šŸ‘„ Groups whatsapp_list_groups, whatsapp_get_group_info, whatsapp_create_group, whatsapp_update_group_participants, whatsapp_get_group_invite_link
šŸ”” Webhook whatsapp_set_webhook
šŸ“¢ Newsletter whatsapp_get_newsletter_messages, whatsapp_subscribe_newsletter
šŸ” Admin whatsapp_admin_list_users, whatsapp_admin_create_user, whatsapp_admin_delete_user

šŸ’” Usage Examples

First-time setup

You: "Configure my WhatsApp with token abc123"
Claude: āœ… Configuration saved! Now use whatsapp_connect() to connect.

You: "Connect my WhatsApp"
Claude: [generates QR Code — scan with your phone]

You: "Check if WhatsApp is connected"
Claude: āœ… Connected as +5511999998888

Sending messages

You: "Send 'Hello!' to +5511999998888"
You: "Send the file report.pdf to the Sales group"
You: "Send my location to +5511987654321"
You: "React with šŸ‘ to the last message in chat 5511999998888@s.whatsapp.net"

Managing groups

You: "List all my WhatsApp groups"
You: "Create a group 'Project X' with +5511111111111 and +5522222222222"
You: "Get the invite link for group 120363XXXXXXXX@g.us"

šŸ“ž Phone Number Format

WhatsApp via WuzAPI uses numbers without the + prefix:

Format Valid?
5511999998888 āœ… Brazil (DDD 11)
14155552671 āœ… USA (415)
+5511999998888 āŒ Remove the +
011999998888 āŒ Use country code

šŸ“ Project Structure

mcp-whatsapp/
ā”œā”€ā”€ pyproject.toml          # Python project config
ā”œā”€ā”€ .env.example            # Environment variables template
└── src/
    └── mcp_whatsapp/
        ā”œā”€ā”€ server.py       # MCP server with all tools
        └── wuzapi_client.py # Async HTTP client for WuzAPI

šŸ›”ļø Security & Responsible Use

IMPORTANT: This project uses an unofficial WhatsApp API. Use it at your own risk.

To ensure your account stays safe and you remain compliant with global data laws (LGPD/GDPR), please follow these guidelines:

  1. Avoid Spam: Do not use this tool for bulk messaging or automated marketing. Excessive automated activity is the #1 cause of WhatsApp account bans.
  2. Privacy Guardrails: By default, this server includes masking for sensitive information (PII) like CPFs, Credit Cards, and Emails (when WUZAPI_PRIVACY_MODE=true).
  3. Audit Logs: All tool calls are logged in logs/audit_privacy.log. This is essential for transparency and accountability.
  4. Token Safety: Never share your WUZAPI_TOKEN or WUZAPI_ADMIN_TOKEN. These grant full access to your messages.
  5. AI Autonomy: Be careful when giving the AI "autonomy" to send messages. Always review the output if the AI is performing high-stakes tasks.
  6. Terms of Service: Be aware that using unofficial APIs violates WhatsApp's Terms of Service. This tool is intended for personal productivity and research.

šŸ¤ Contributing

Contributions are welcome! Feel free to open issues and pull requests.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes
  4. Open a Pull Request

šŸ“„ License

This project is open-source and available under the MIT License.


<div align="center">

Built with ā¤ļø for the MCP ecosystem

If this project helped you, please ⭐ star it!

</div>

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured