WhatsApp MCP Server (TypeScript)
Enables AI agents to interact with your personal WhatsApp account to search messages, list chats, and send messages. It stores all authentication and message data locally using SQLite for privacy and direct multi-device API connection.
README
WhatsApp MCP Server (TypeScript/Baileys)
This is a Model Context Protocol (MCP) server for WhatsApp, built with TypeScript and using the @whiskeysockets/baileys library.
It allows you to connect your personal WhatsApp account to an AI agent (like Anthropic Claude via its desktop app or Cursor) enabling it to:
- Search your personal WhatsApp messages.
- Search your contacts (individuals, not groups).
- List your recent chats.
- Retrieve message history for specific chats.
- Send messages to individuals or groups.
It connects directly to your personal WhatsApp account using the WhatsApp Web multi-device API. All your messages and authentication details are stored locally in a SQLite database (./data/) and authentication cache (./auth_info/). Data is only sent to the connected AI agent when it explicitly uses the provided MCP tools (which you control via the agent's interface).
(Optional: Consider adding a screenshot or GIF similar to the reference example here)
Example
User: Send a whatsapp message to "Meu amor" in whatsapp saying "Te amo"
Assistant:
Okay, I need to find the contact first.
Using tool: whatsapp.search_contacts
{
"query": "Meu amor"
}
Tool Result:
[
{
"jid": "5599xxxxxx@s.whatsapp.net",
"name": "Meu Amor"
}
]
Assistant:
Found the contact. Now sending the message.
Using tool: whatsapp.send_message
{
"recipient": "5599xxxxxx@s.whatsapp.net",
"message": "Te amo"
}
Tool Result:
Message sent successfully to 5599xxxxxx@s.whatsapp.net (ID: XXXXXXXXXXX).
Key Features (MCP Tools)
The server exposes the following tools to the connected AI agent:
search_contacts: Search for contacts by name or phone number part (JID).list_messages: Retrieve message history for a specific chat, with pagination.list_chats: List your chats, sortable by activity or name, filterable, paginated, optionally includes last message details.get_chat: Get detailed information about a specific chat.get_message_context: Retrieve messages sent immediately before and after a specific message ID for context.send_message: Send a text message to a specified recipient JID (user or group).
Installation
Installing via Smithery
To install WhatsApp MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @jlucaso1/whatsapp-mcp-ts --client claude
Prerequisites
- Node.js: Version 23.10.0 or higher (as specified in
package.json). You can check your version withnode -v. (Has initial typescript and sqlite builtin support) - npm (or yarn/pnpm): Usually comes with Node.js.
- AI Client: Anthropic Claude Desktop app, Cursor, Cline or Roo Code (or another MCP-compatible client).
Steps
-
Clone this repository:
git clone <your-repo-url> whatsapp-mcp-ts cd whatsapp-mcp-ts -
Install dependencies:
npm install # or yarn install / pnpm install -
Run the server for the first time: Use
nodeto run the main script directly.node src/main.ts- The first time you run it, it will likely generate a QR code link using
quickchart.ioand attempt to open it in your default browser. - Scan this QR code using your WhatsApp mobile app (Settings > Linked Devices > Link a Device).
- Authentication credentials will be saved locally in the
auth_info/directory (this is ignored by git). - Messages will start syncing and be stored in
./data/whatsapp.db. This might take some time depending on your history size. Check thewa-logs.txtand console output for progress. - Keep this terminal window running. After syncing you can close.
- The first time you run it, it will likely generate a QR code link using
Configuration for AI Client
You need to tell your AI client how to start this MCP server.
-
Prepare the configuration JSON: Copy the following JSON structure. You'll need to replace
{{PATH_TO_REPO}}with the absolute path to the directory where you cloned this repository.{ "mcpServers": { "whatsapp": { "command": "node", "args": [ "{{PATH_TO_REPO}}/src/main.ts" ], "timeout": 15, // Optional: Adjust startup timeout if needed "disabled": false } } }- Get the absolute path: Navigate to the
whatsapp-mcp-tsdirectory in your terminal and runpwd. Use this output for{{PATH_TO_REPO}}.
- Get the absolute path: Navigate to the
-
Save the configuration file:
- For Claude Desktop: Save the JSON as
claude_desktop_config.jsonin its configuration directory:- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json(Likely path, verify if needed) - Linux:
~/.config/Claude/claude_desktop_config.json(Likely path, verify if needed)
- macOS:
- For Cursor: Save the JSON as
mcp.jsonin its configuration directory:~/.cursor/mcp.json
- For Claude Desktop: Save the JSON as
-
Restart Claude Desktop / Cursor: Close and reopen your AI client. It should now detect the "whatsapp" MCP server and allow you to use its tools.
Usage
Once the server is running (either manually via node src/main.ts or started by the AI client via the config file) and connected to your AI client, you can interact with your WhatsApp data through the agent's chat interface. Ask it to search contacts, list recent chats, read messages, or send messages.
Architecture Overview
This application is a single Node.js process that:
- Uses
@whiskeysockets/baileysto connect to the WhatsApp Web API, handling authentication and real-time events. - Stores WhatsApp chats and messages locally in a SQLite database (
./data/whatsapp.db) usingnode:sqlite. - Runs an MCP server using
@modelcontextprotocol/sdkthat listens for requests from an AI client over standard input/output (stdio). - Provides MCP tools that query the local SQLite database or use the Baileys socket to send messages.
- Uses
pinofor logging activity (wa-logs.txtfor WhatsApp events,mcp-logs.txtfor MCP server activity).
Data Storage & Privacy
- Authentication: Your WhatsApp connection credentials are stored locally in the
./auth_info/directory. - Messages & Chats: Your message history and chat metadata are stored locally in the
./data/whatsapp.dbSQLite file. - Local Data: Both
auth_info/anddata/are included in.gitignoreto prevent accidental commits. Treat these directories as sensitive. - LLM Interaction: Data is only sent to the connected Large Language Model (LLM) when the AI agent actively uses one of the provided MCP tools (e.g.,
list_messages,send_message). The server itself does not proactively send your data anywhere else.
Technical Details
- Language: TypeScript
- Runtime: Node.js (>= v23.10.0)
- WhatsApp API:
@whiskeysockets/baileys - MCP SDK:
@modelcontextprotocol/sdk - Database:
node:sqlite(Bundled SQLite) - Logging:
pino - Schema Validation:
zod(for MCP tool inputs)
Troubleshooting
- QR Code Issues:
- If the QR code link doesn't open automatically, check the console output for the
quickchart.ioURL and open it manually. - Ensure you scan the QR code promptly with your phone's WhatsApp app.
- If the QR code link doesn't open automatically, check the console output for the
- Authentication Failures / Logged Out:
- If the connection closes with a
DisconnectReason.loggedOuterror, you need to re-authenticate. Stop the server, delete the./auth_info/directory, and restart the server (node src/main.ts) to get a new QR code.
- If the connection closes with a
- Message Sync Issues:
- Initial sync can take time. Check
wa-logs.txtfor activity. - If messages seem out of sync or missing, you might need a full reset. Stop the server, delete both
./auth_info/and./data/directories, then restart the server to re-authenticate and resync history.
- Initial sync can take time. Check
- MCP Connection Problems (Claude/Cursor):
- Double-check the
commandandargs(especially the{{PATH_TO_REPO}}) in yourclaude_desktop_config.jsonormcp.json. Ensure the path is absolute and correct. - Verify Node.js are correctly installed and in your system's PATH.
- Check the AI client's logs for errors related to starting the MCP server.
- Check this server's logs (
mcp-logs.txt) for MCP-related errors.
- Double-check the
- Errors Sending Messages:
- Ensure the recipient JID is correct (e.g.,
number@s.whatsapp.netfor users,groupid@g.usfor groups). - Check
wa-logs.txtfor specific errors from Baileys.
- Ensure the recipient JID is correct (e.g.,
- General Issues: Check both
wa-logs.txtandmcp-logs.txtfor detailed error messages.
For further MCP integration issues, refer to the official MCP documentation.
Credits
- https://github.com/lharries/whatsapp-mcp Do the same as this codebase but uses go and python.
License
This project is licensed under the ISC License (see package.json).
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。