whatsapp mcp server
A Python server that enables language models like Claude to interact with WhatsApp Business API through GreenAPI, supporting features like sending messages and managing groups.
A Python server that enables language models like Claude to interact with WhatsApp Business API through GreenAPI, supporting features like sending messages and managing groups.
A server that provides a Model Context Protocol (MCP) interface to interact with WhatsApp Business API using FastMCP.
WhatsApp MCP Server is a Python implementation that enables language models like Claude to interact with WhatsApp functionality through GreenAPI. It leverages FastMCP for improved performance, better developer experience, and a cleaner implementation.
This project uses the whatsapp-api-client-python
library to interact with WhatsApp. The client provides access to the WhatsApp Cloud API, which requires a GreenAPI account to use.
This project uses environment variables for configuration:
GREENAPI_ID_INSTANCE
: Your GreenAPI ID instanceGREENAPI_API_TOKEN
: Your GreenAPI API tokenYou can either set these in your environment or use the provided .env
file (see Installation instructions).
# Clone the repository
git clone https://github.com/yourusername/whatsapp-mcp-server.git
cd whatsapp-mcp-server
# Install dependencies
pip install -e .
# Set up environment variables
cp .env-template .env
# Edit the .env file with your GreenAPI credentials
Run the MCP server:
# Run the MCP server on default host (127.0.0.1) and port (8000)
whatsapp-mcp
# Specify host and port
whatsapp-mcp --host 0.0.0.0 --port 9000
For debugging:
whatsapp-mcp --debug
The server communicates using the Model Context Protocol (MCP) and can be accessed via HTTP or WebSockets when running with FastMCP.
open_session
: Open a new WhatsApp sessionsend_message
: Send a message to a chatget_chats
: Get a list of chatscreate_group
: Create a new WhatsApp groupget_group_participants
: Get the participants of a groupThe WhatsApp MCP Server uses FastMCP to provide both WebSocket and HTTP endpoints:
ws://localhost:8000/mcp
http://localhost:8000/mcp
You can test the API directly using tools like curl:
# List available tools
curl -X POST http://localhost:8000/mcp/listTools
# Call a tool
curl -X POST http://localhost:8000/mcp/callTool
-H "Content-Type: application/json"
-d '{"name": "open_session", "arguments": {}}'
To add a WhatsApp server to Claude, use the claude mcp add
command:
# Add the WhatsApp MCP server
$ claude mcp add whatsapp -- whatsapp-mcp
# List existing MCP servers - Validate that the server is running
claude mcp list
# Start claude code
claude
Once the WhatsApp MCP server is running, you can interact with it using Claude in your conversations:
Login to WhatsApp
Send the "Hello" message to John Doe
To use the WhatsApp MCP server with Claude Desktop, you need to add it to your claude_desktop_config.json
file:
"mcpServers": {
"whatsapp": {
"command": "python",
"args": ["-m", "whatsapp_mcp"]
}
}
"mcpServers": {
"whatsapp": {
"command": "whatsapp-mcp"
}
}
"mcpServers": {
"whatsapp": {
"command": "docker",
"args": ["run", "--rm", "-i", "-e", "GREENAPI_ID_INSTANCE=your_instance_id", "-e", "GREENAPI_API_TOKEN=your_api_token", "whatsapp-mcp-server"]
}
}
Remember to set your GreenAPI credentials either as environment variables or in your .env
file before starting Claude Desktop.
The WhatsApp MCP server accepts these command-line arguments:
- --debug
: Increase verbosity level for debugging
- --host
: Host to bind the server to (default: 127.0.0.1)
- --port
: Port to bind the server to (default: 8000)
For debugging the MCP server:
- Use MCP inspector: npx @modelcontextprotocol/inspector whatsapp-mcp
- View logs in your Claude Desktop logs directory (typically ~/Library/Logs/Claude/
on macOS)
- Access the FastMCP web interface at http://localhost:8000 for interactive API documentation
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run linting
flake8 src/
# Run type checking
mypy src/
The project uses a modern pyproject.toml
configuration which includes:
- Core dependencies needed for running the application
- Development dependencies available with pip install -e ".[dev]"
This project is licensed under the MIT License - see the LICENSE file for details.
[
{
"description": "Open a new WhatsApp session.",
"inputSchema": {
"properties": {},
"title": "open_sessionArguments",
"type": "object"
},
"name": "open_session"
},
{
"description": " Send a message to a chat. Parameters: - phone_number: The phone number of the recipient - content: The content of the message to send - reply_to: ID of the message to reply to (optional) ",
"inputSchema": {
"properties": {
"content": {
"title": "Content",
"type": "string"
},
"phone_number": {
"title": "Phone Number",
"type": "string"
},
"reply_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reply To"
}
},
"required": [
"phone_number",
"content"
],
"title": "send_messageArguments",
"type": "object"
},
"name": "send_message"
},
{
"description": " Get a list of chats. Parameters: - limit: Maximum number of chats to return (default: 50) - offset: Offset for pagination (default: 0) ",
"inputSchema": {
"properties": {
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
}
},
"title": "get_chatsArguments",
"type": "object"
},
"name": "get_chats"
},
{
"description": " Create a new WhatsApp group. Parameters: - group_name: Name of the group to create - participants: List of participant phone numbers ",
"inputSchema": {
"properties": {
"group_name": {
"title": "Group Name",
"type": "string"
},
"participants": {
"items": {
"type": "string"
},
"title": "Participants",
"type": "array"
}
},
"required": [
"group_name",
"participants"
],
"title": "create_groupArguments",
"type": "object"
},
"name": "create_group"
},
{
"description": " Get the participants of a WhatsApp group. Parameters: - group_id: The WhatsApp ID of the group ",
"inputSchema": {
"properties": {
"group_id": {
"title": "Group Id",
"type": "string"
}
},
"required": [
"group_id"
],
"title": "get_group_participantsArguments",
"type": "object"
},
"name": "get_group_participants"
}
]