关于 WhatsApp Web MCP Server
MCP WhatsApp Web 是用 TypeScript 实现的 WhatsApp Web MCP 服务,可读取与搜索个人消息、联系人并收发文件。它支持 whatsapp-web.js 与无需浏览器的 Baileys 两种后端,并提供 stdio 与 Streamable HTTP 传输。使用前需注意,自动化操作可能违反 WhatsApp 服务条款,账号可能被限制。
主要功能
- 01读取、搜索消息,包括媒体内容
- 02搜索联系人并向个人或群组发送消息
- 03收发图片、视频、文档和音频
- 04可选 web.js 或 Baileys 后端
- 05支持 stdio 与 Streamable HTTP 传输
适用场景
- 01让 AI 助手搜索并汇总个人 WhatsApp 对话
- 02通过 MCP 客户端查找联系人并发送消息
- 03在无浏览器环境中运行 Baileys 后端
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 WhatsApp 的消息、联系人、聊天与认证等工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y mcp-whatsapp-webWHATSAPP_BACKENDWhatsApp backend: webjs uses a persistent browser profile; baileys connects without a browser and requires separate pairingBAILEYS_SESSION_DIRBaileys credentials and synchronized history directory (default: <working directory>/baileys-sessions). Use a private absolute path, owned by one server process.LOG_LEVELLog level for the log file (logs/mcp-whatsapp.log)LOG_STDERR_LEVELLog level for stderr (visible in most MCP client logs)WHATSAPP_HEADLESSwebjs only: set to false to show the browser window instead of running headlessWHATSAPP_NO_SANDBOXwebjs only: explicitly disable the browser sandbox for containers that require it. The sandbox is enabled by default.BROWSER_EXECUTABLE_PATHwebjs only: browser executable. Chrome and Edge are auto-detected; set this to use a specific browser. Chrome/Edge is required for sending videos and GIFs.WHATSAPP_SESSION_DIRwebjs only: persistent browser profile directory (default: <working directory>/whatsapp-sessions)WHATSAPP_PAIRING_PHONE_NUMBERPhone number pairing: when set (international, symbol-free format, e.g. 4915112345678), an 8-character pairing code is logged to stderr on startup instead of relying on the QR codeFFMPEG_PATHPath to an ffmpeg binary (only needed to override the ffmpeg installed automatically via the ffmpeg-static npm package)WA_WEB_VERSIONwebjs only: pin the WhatsApp Web version if a WhatsApp-side update breaks the client.HEALTH_CHECK_INTERVAL_MSwebjs only: connection health check interval in milliseconds (<=0 disables)TOOL_READY_TIMEOUT_MSHow long tool calls wait for the WhatsApp client to become ready before erroringMCP_HTTP_PORTWhen set, additionally exposes the MCP endpoint at http://127.0.0.1:<port>/mcp (Streamable HTTP) from the same processMCP_HTTP_HOSTBind address for the HTTP endpoint (do not expose publicly; the endpoint controls your personal WhatsApp account)MCP_OAUTH密钥Enable OAuth for the HTTP endpoint: /mcp requires a bearer token and clients authenticate via a browser page showing the WhatsApp QR code / pairing form本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
18收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
非常重要
不使用 Meta(Business-)API 自动化处理 Whatsapp 消息,违反 WhatsApp 的服务条款! 你必须为使用此 MCP 服务的一切行为承担全部责任。你的账号可能会被标记或限制。
MCP WhatsApp Web(TypeScript)
一个以 TypeScript 实现的 WhatsApp Web 模型上下文协议(MCP)服务。本项目是对原始 whatsapp-mcp 仓库的 TypeScript 移植。
使用此 MCP 服务,你可以:
- 搜索和阅读个人 WhatsApp 消息(包括媒体)
- 搜索联系人
- 向个人或群组发送消息
- 发送和接收媒体文件(图片、视频、文档、音频)
功能
- TypeScript 实现:代码库完整类型化,提升开发体验和代码可靠性
- 可选的 WhatsApp 后端:默认使用 whatsapp-web.js,也可选用无需浏览器即可运行的 Baileys 后端
- MCP 服务:实现 模型上下文协议,可与 AI 助手无缝集成
- 媒体支持:发送和接收图片、视频、文档及音频消息
- 多种传输选项:支持 stdio 和 Streamable HTTP 传输,也可由单个进程同时使用两者(通过 stdio 启动并设置
MCP_HTTP_PORT,即可额外开放http://127.0.0.1:<port>/mcp;也可使用--http仅运行 HTTP) - 灵活的身份验证:支持二维码(作为 MCP 图片工具)、配对码(通过
request_pairing_code工具获取,或在启动时通过WHATSAPP_PAIRING_PHONE_NUMBER自动打印到 stderr),以及供 HTTP 客户端使用的可选 OAuth 流程(MCP_OAUTH=true)。浏览器授权页面会显示 WhatsApp 二维码;解除 WhatsApp 关联后会撤销令牌,客户端将自动重新进行身份验证
架构
此 MCP 服务由以下部分组成:
- TypeScript MCP 服务:实现模型上下文协议,为 AI 助手提供标准化工具,以便与 WhatsApp 交互
- WhatsApp 后端:通过共享服务接口选择 web.js/Puppeteer 或 Baileys/WebSocket,处理身份验证,并管理消息的发送和接收
- 工具实现:提供联系人、聊天、消息、媒体和身份验证等各类工具
前置条件
- Node.js >= 22.0.0(Baileys SQLite 依赖推荐使用 Node 22 或 24)
- npm 或 yarn
- 对于默认的
webjs后端:Google Chrome 或 Microsoft Edge(会自动检测;视频/GIF 编解码支持需要使用它;其他操作可使用 Puppeteer 自带的 Chromium) - 对于
baileys:安装可选依赖,包括原生better-sqlite3模块。运行时不需要 Chrome、Edge 或 Chromium。
FFmpeg 会通过 npm 包 ffmpeg-static 自动附带,无需手动安装。你可以将 FFMPEG_PATH 环境变量指向自己的二进制文件以覆盖默认设置。
安装
npx
npx mcp-whatsapp-web
手动安装
-
克隆此仓库
git clone https://github.com/mario-andreschak/mcp-whatsapp-web.git cd mcp-whatsapp-web -
安装依赖
npm install -
构建项目
npm run build -
配置环境变量(可选)
复制示例环境文件,并根据需要进行修改:
cp .env.example .env你可以通过
WHATSAPP_BACKEND选择后端、调整日志级别、固定 WhatsApp Web 版本,或覆盖自动检测到的浏览器(BROWSER_EXECUTABLE_PATH)和 ffmpeg 二进制文件(FFMPEG_PATH)。WHATSAPP_HEADLESS=false会显示 web.js 浏览器窗口,WHATSAPP_SESSION_DIR可更改其持久化配置文件的存放位置。请使用绝对会话目录,以便在不同工作目录间保持一致。
选择后端
WHATSAPP_BACKEND=webjs 是默认设置,可保留现有会话和 MCP 工具名称。它使用专用的持久化 LocalAuth 配置文件,而非你的个人 Chrome 配置文件。现在,它会保留浏览器原生的用户代理和图形默认设置,不使用 Puppeteer 的自动化横幅标记,并保持浏览器沙箱启用。需要禁用沙箱的容器可以显式设置 WHATSAPP_NO_SANDBOX=true。这些设置不能保证自动化操作无法被检测到。
要使用可选的 Baileys 后端,请在 MCP 客户端配置或 .env 中设置以下变量,然后重启服务:
WHATSAPP_BACKEND=baileys
BAILEYS_SESSION_DIR=C:/path/to/your/baileys-sessions
BAILEYS_SESSION_DIR 默认为 <working directory>/baileys-sessions;请将上面的示例替换为你自己的绝对路径。使用此后端时,需另行通过 get_qr_code 或 request_pairing_code 配对。现有的 WHATSAPP_PAIRING_PHONE_NUMBER 选项也可使用。Baileys 无法复用 web.js 浏览器配置文件。你可以切换回 webjs 并继续使用其现有会话。
Baileys 和 SQLite 是固定版本的可选依赖,通过常规的 npm install 安装。如果包管理器未安装它们,请运行 npm install --include=optional。SQLite 使用原生附加组件;需要受支持的预编译二进制文件或本地原生构建工具链。若要在为 Baileys 安装或使用现有系统浏览器时避免下载 Chromium,请使用:
$env:PUPPETEER_SKIP_DOWNLOAD = 'true'
npm install --include=optional
npm run build
在 macOS/Linux 上,对应的安装命令为 PUPPETEER_SKIP_DOWNLOAD=true npm install --include=optional。选择 Baileys 时只会加载其驱动程序,不会启动或清理浏览器进程。如果后端不可用,系统会报错;不会静默切换驱动程序,也不会通过其他后端重试发送。
Baileys 会话和历史记录
- 凭据、Signal 密钥、联系人、聊天和消息会持久化在
BAILEYS_SESSION_DIR/session.sqlite中。请妥善保护整个目录,并勿将其纳入版本控制。一个会话目录只能由一个正在运行的服务使用。不同账号请使用单独的目录。 - 正常关闭会保留会话。显式退出登录或身份验证失效时,会清除 Baileys 凭据和缓存的账号数据,并撤销其 OAuth 访问令牌。Baileys 的 HTTP OAuth 状态与 web.js 分开,存储在
BAILEYS_SESSION_DIR/oauth-store.json中。 get_backend_status会报告当前使用的后端、身份验证状态、存储的记录数和历史记录同步状态。已连接并不代表历史记录已接收完毕。历史状态为available表示本地数据可用,并不代表 WhatsApp 已提供完整存档。- 联系人和历史记录工具会查询本地同步存储。系统会请求初次完整历史记录同步;对于大型账号,此过程可能需要一些时间。如果已知聊天中的消息少于请求数量,
list_messages可能会请求最多 100 条更早的消息,并设有等待时限和每个聊天的冷却时间。较晚到达的历史记录批次会保存下来,供后续查询使用。WhatsApp 仍可能只提供账号部分历史记录。 - 请将返回的消息 ID 视为不透明值,并使用当前后端的 ID。支持旧版
@c.us电话号码输入、@s.whatsapp.net、群组和@lid标识符;已知的 LID/电话号码映射会持久化保存。web.js 的消息 ID 不能传给 Baileys 使用,反之亦然。 - 文本、媒体、下载、语音消息和现有身份验证工具使用相同的 MCP 接口。语音消息输入必须是本地文件或 base64;发送前会由 FFmpeg 将其转换为单声道 Opus/Ogg。如果转换失败,工具会报告错误,不会改为发送其他消息类型。
Baileys 后端需显式启用,且版本固定为 7.0.0-rc14。升级前请查看上游变更,尤其是身份验证和消息格式迁移。请参阅 Baileys 文档和发布历史。
使用 FLUJO 安装
FLUJO 提供了简化的安装流程:
- 在 FLUJO 中导航到 MCP 部分
- 点击“Add Server”
- 复制并粘贴此 GitHub 仓库 URL:
https://github.com/mario-andreschak/mcp-whatsapp-web - 点击“Parse”、“Clone”、“Install”、“Build”和“Update Server”
FLUJO 将自动为你处理克隆、依赖项安装和构建流程。
使用方法
启动 MCP 服务
npm start
默认情况下,这会使用 stdio 传输启动 MCP 服务,适用于与 Claude Desktop 或类似应用集成。
重要: 首次启动服务后,你必须使用
get_qr_code工具进行身份验证,并用手机扫描二维码。详细说明请参阅身份验证部分。
开发模式
npm run dev
这会以开发模式启动服务,并启用 TypeScript 监视模式和自动重启服务。
使用 MCP Inspector 调试
npm run debug
这会启动 MCP Inspector 工具,它提供了一个 Web 界面,用于测试和调试你的 MCP 服务。Inspector 允许你:
- 查看所有可用工具及其架构
- 直接执行工具并查看其响应
- 无需连接 AI 助手即可测试服务
- 调试工具执行并检查响应
连接到 Claude Desktop
-
为 Claude Desktop 创建配置文件:
{ "mcpServers": { "whatsapp": { "command": "npx", "args": [ "mcp-whatsapp-web" ] } } }将
PATH_TO替换为仓库的绝对路径。 -
将其保存为
claude_desktop_config.json,并放入 Claude Desktop 配置目录:- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- macOS:
-
重启 Claude Desktop
连接到 Cursor
-
为 Cursor 创建配置文件:
{ "mcpServers": { "whatsapp": { "command": "node", "args": [ "PATH_TO/dist/index.js" ] } } }将
PATH_TO替换为仓库的绝对路径。 -
将其保存为
mcp.json,并放入 Cursor 配置目录:- macOS/Linux:
~/.cursor/mcp.json - Windows:
%USERPROFILE%\.cursor\mcp.json
- macOS/Linux:
-
重启 Cursor
身份验证
首次运行服务时,你需要通过 WhatsApp 进行身份验证:
- 启动 MCP 服务
- 重要: 必须使用
get_qr_code工具生成二维码- 在 Claude 或其他 AI 助手中,明确要求“使用 get_qr_code 工具验证 WhatsApp”
- 助手会调用此工具并显示二维码图片
- 使用 WhatsApp 手机应用扫描二维码
- 在手机上打开 WhatsApp
- 前往 Settings > Linked Devices > Link a Device
- 将手机摄像头对准显示的二维码
你的会话将保存在本地的 whatsapp-sessions 目录中,并在后续运行时自动复用。如果不使用二维码进行身份验证,你将无法使用任何 WhatsApp 功能。
身份验证状态和退出登录
你可以查看当前身份验证状态并管理会话:
- 使用
check_auth_status工具确认当前是否已通过身份验证 - 如果需要使用其他 WhatsApp 账号进行身份验证,或重新验证:
- 使用
logout工具退出当前会话 - 然后使用
get_qr_code工具通过新的二维码进行身份验证
- 使用
以下情况尤其适合使用此功能:
- 你想在不同的 WhatsApp 账号之间切换
- 会话已过期或失效
- 遇到连接问题,需要重新进行身份验证
可用的 MCP 工具
身份验证
get_qr_code- 获取用于 WhatsApp Web 身份验证的二维码check_auth_status- 检查当前是否已通过 WhatsApp 身份验证logout- 退出 WhatsApp 并清除当前会话
联系人
search_contacts- 按姓名或电话号码搜索联系人get_contact- 获取特定联系人的信息
聊天
list_chats- 列出可用聊天及其元数据get_chat- 获取特定聊天的信息get_direct_chat_by_contact- 查找与特定联系人的直接聊天
消息
list_messages- 根据可选筛选条件检索消息get_message- 按 ID 获取特定消息send_message- 向聊天发送文本消息
媒体
send_file- 向聊天发送文件(图像、视频、文档)send_audio_message- 发送音频消息(语音留言)download_media- 从消息中下载媒体
浏览器进程管理
此 MCP 服务使用 Puppeteer 控制 Chrome 浏览器,以连接 WhatsApp Web。该服务包含一套完善的浏览器进程管理系统,可防止出现孤立的 Chrome 进程。
自动清理浏览器
该服务会自动:
- 使用 PID 跟踪系统跟踪 Chrome 浏览器进程
- 在启动时清理孤立进程
- 在关闭期间正确关闭浏览器进程
- 在
.chrome-pids.json中保存浏览器 PID 记录
手动清理浏览器
如果发现未被自动清理的孤立 Chrome 进程,可以使用附带的清理工具:
npm run cleanup-browsers
此工具将:
- 扫描可能与 WhatsApp Web 相关的 Chrome 进程
- 显示可能孤立的进程列表
- 在终止进程前请求确认
- 清理 PID 跟踪文件
开发
项目结构
src/index.ts- 入口点src/server.ts- MCP 服务实现src/services/whatsapp.ts- WhatsApp Web 服务src/tools/- 各种 WhatsApp 功能的工具实现src/types/- TypeScript 类型定义src/utils/- 实用函数
脚本
npm run build- 构建 TypeScript 代码npm run dev- 在监视模式下运行开发环境npm run lint- 运行 ESLintnpm run format- 使用 Prettier 格式化代码npm run cleanup-browsers- 检测并清理孤立的 Chrome 浏览器进程npm test- 运行单元测试套件(速度快,无需浏览器)npm run test:watch- 在开发期间以监视模式运行单元测试npm run test:e2e- 构建后运行端到端测试(启动真实服务,包括无头浏览器)
故障排除
身份验证问题
- 如果二维码未显示,请尝试重启服务
- 如果已通过身份验证,则不会显示二维码(使用
check_auth_status验证) - 如果需要重新进行身份验证,请先使用
logout工具,然后请求新的二维码 - WhatsApp 对已关联设备的数量有限制;你可能需要移除一台已有设备
- 如果收到“No QR code is currently available”消息,但你已经通过身份验证,这是正常情况——使用
check_auth_status确认身份验证状态
连接问题
- 确保网络连接稳定
- 如果连接失败,请尝试重启服务
- 查看日志以获取详细错误消息
浏览器进程问题
- 如果发现 CPU 使用率或内存占用过高,可能存在孤立的 Chrome 进程
- 运行
npm run cleanup-browsers检测并清理孤立进程 - 如果服务频繁崩溃,请检查并清理孤立进程
- 在 Windows 上,也可以使用任务管理器查找命令行中包含“headless”的多个 Chrome 进程
- 在 Linux/macOS 上,使用
ps aux | grep chrome检查是否存在孤立进程
许可证
MIT
此项目是原始 whatsapp-mcp 的 TypeScript 移植版,原作者为 lharries。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。