Skip to main content
Glama
BusinessNone

WhatsApp MCP Stream

by BusinessNone

WhatsApp MCP Stream

[CI

一个基于 Streamable HTTP 传输构建的 WhatsApp MCP 服务端,使用 Bailys 实现 WhatsApp 连接,并附带 Web 管理界面和双向媒体流(上传 + 下载)。

要点:

  • 传输:位于 /mcp 的 Streamable HTTP

  • 引擎:Baileys

  • 管理界面:二维码、状态、退出登录、运行时设置、聊天历史记录查看器

  • 媒体:上传端点 + /media 托管 + MCP 下载工具

快速开始(Docker)

# build and run

docker compose build

docker compose up -d

服务器可通过以下地址访问:

  • 管理界面:http://localhost:3001/admin

  • MCP 端点:http://localhost:3000/mcp

  • 媒体文件:http://localhost:3000/media/<filename>

Related MCP server: lingtai-whatsapp

在带 --ifconfig=false 的主机上进行 DNS

在某些 NAS / 加固主机(例如启用了 dockerd --iptables=false 的 Synology)上,Docker 内嵌的 DNS 代理(127.0.0.11)没有 iptables DNAT 规则,因此会拒绝容器内的连接。

修复:复制 resolv.conf.exampleresolv.conf,并添加一个卷覆盖:

cp resolv.conf.example resolv.conf

然后将和内容添加到本地 docker-compose.override.yml(不提交):

services:
  mcp-whatsapp:
    volumes:
      - ./resolv.conf:/etc/resolv.conf:ro

docker compose up 会自动加载这个 override 文件。

运行时设置

设置可以在管理界面中编辑,并持久化到 SETTINGS_PATH(默认是 MEDIA_DIR/settings.json)。

管理界面

管理界面 管理控制台,包括运行时设置、二维码关联、聊天记录查看器、导出和状态。

支持的设置:

  • media_public_base_url

  • upload_max_mb

  • upload_enabled

  • max_files_per_upload

  • require_upload_token

  • upload_token

  • auto_download_media

  • auto_download_max_mb

认证

内置认证尚未实现。在生产环境中,请使用强制认证的网关。此项目在 authmcp-gateway 之后运行良好:

https://github.com/loglux/authmcp-gateway

媒体上传 API

Base64 JSON:

curl -X POST http://localhost:3003/api/upload \
  -H "Content-Type: application/json" \
  -d {filename:photo.jpg,mime_type:image/jpeg,data:<base64>}

Multipart(建议用于大文件):

curl -X POST http://localhost:3003/api/upload-multipart \
  -F "file=@/path/to/file.jpg"

两者都会返回 url,并且(如果配置了)还会返回 publicUrl

通过 send_media 发送本地文件

项目根目录中的 ./files/ 目录被绑定挂载到容器内的 /app/files 路径。把文件放到该目录后即可立即引用——无需重启容器:

# On host:
cp report.pdf /path/to/whatsapp-mcp-stream/files/

# In send_media:
media_path: /app/files/report.pdf

如果使用 URL 源,直接将 media_url 传给 send_mediastage_media 即可——服务器会自行下载文件,不用 base64。

上传认证(可选)

如果 require_upload_token=true,请通过以下任一方式提供 token:

  • x-upload-token: <token>

  • Authorization: Bearer <token>

MCP 传输

服务器在 /mcp 上暴露 Streamable HTTP。

典型流程:

  1. 使用 JSON-RPC initialize 发送 POST /mcp

  2. 在进行后续请求时使用返回的 mcp-session-id 请求头

  3. 通过 POST /mcp 进行工具调用

注意:客户端在 initialize 时必须发送 Accept: application/json, text/event-stream

Smoke 测试

对 MCP 工具进行的快速回归冒烟测试:

npm run smoke:mcp

可选的中的:

MCP_BASE_URL=http://localhost:3003 npm run smoke:mcp

MCP 工具

认证

工具

描述

get_qr_code

获取最新的 WhatsApp 二维码图片,用于身份验证。

check_auth_status

检查 WhatsApp 客户端是否已通过认证并准备就绪运行。

logout

退出 WhatsApp 并清除当前会话。

联系人

工具

描述

search_contacts

变量

默认值

描述

DB_PATH

<SESSION_DIR>/store.sqlite

用于聊天/消息持久化的 SQLite 数据库路径。

WA_EVENT_LOG

0

启用详细的 WhatsApp 事件日志。

WA_EVENT_STREAM

0

将原始 Baileys 事件流写入文件,以便深度调试。

WA_EVENT_STREAM_PATH

/app/logs/wa-events.log

事件流日志的文件路径。

WA_RESYNC_RECONNECT

1

在强制重新同步后启用重连安全网。

WA_RESYNC_RECONNECT_DELAY_MS

15000

强制重新同步后重连前的延迟(毫秒)。

WA_SYNC_RECOVERY_COOLOWN_MS

300000

自动应用状态恢复之间的最小延迟。

WA_SYNC_RECOVERY_WINDOW_MS

900000

用于统计重复应用状态损坏失败的时间窗口。

WA_SYNC_SOFT_RECOVERY_LIMIT

2

软恢复次数达到该值后升级为内部重启。

WA_READINESS_GRACE_MS

180000

恢复/断开连接期间,/healthz 转为不健康前的宽限期。

WA_DISCONNECT_RECOVERY_DELAY_MS

30000

socket 关闭后,断开看门狗强制重连/重启前等待的时间。

WA_DISCONNECT_RECOVERYRESTART_CODES

428

逗号分隔的断开状态码,这些状态码应直接升级为内部重启看门狗。

WA_SEND_DEDUP_WINDOW_MS

45000

在此窗口内,抑制到同一 JID 的完全重复 send_message 请求。

WA_IDEMPOTENCY_TTL_MS

86400000

已完成的 send_message 等幂记录在 SQLite 中保留的时间,以便安全重试。

WA_MESSAGE_INDEX_MAX

20000

消息索引(jid:id -> 原始消息)的最大内存条目数。

WA_MESSAGE_KEY_INDEX_MAX

20000

消息键索引(id -> 原始消息)的最大内存条目数。

WA_INITIALIZE_TIMEOUT_MS

120000

以此期限竞争 WhatsApp 客户端初始化;设置为 0 以禁用。超时后抛出异常,使恢复可以重试而不是挂起。

WA_AUTODOWNLOAD_CONCURRENCY

3

最大并行自动下载数。自动下载通过进程内有界队列进行,因此突发入站媒体不会耗尽 I/O。

WA_AUTO_DOWNLOAD_QUEUE_MAX

200

最大排队自动下载作业数。超出部分以 FIFO(最旧)方式丢弃并记录警告日志;较新的消息保持优先。

MCP_HTTP_ENABLE_JSON_RESPONSE

1

默认对 Streamable HTTP POST 请求使用直接 JSON 响应。设置为 0 以强制使用旧版 SSE 风格 POST 响应处理。

传输诊断附加信息:

  • /mcp POST 请求现在会在 logs/mcp-whatsapp.log 中记录请求生命周期事件

  • 其中包括请求进入、传输分发、transport.handleRequest 完成,以及 HTTP finish / close

  • 使用这些日志判断延迟是发生在响应离开 whatsapp-mcp-stream 之前,还是之后在网关/客户端

聊天历史 API

通过以下接口浏览已存储的聊天和消息:

GET /api/chats?limit=50&offset=0&q=<search> — 分页聊天列表,可选择性按名称过滤。

GET /api/chats/jid/messages?limit=50&offset=0 — 聊天的分页消息(最新在前)。

两个接口均被 admin UI 中的 Chats 标签使用。

导出

通过以下导出聊天(JSON + 可选的下载媒体):

GET /api/export/chat/:jid?include_media=true

如果 include_media=true,ZIP 将包含已通过 download_media 下载的文件。它不会从 WhatsApp 获取缺失媒体。

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables WhatsApp automation through MCP protocol, allowing users to manage sessions, send messages, handle groups/communities, and access contacts through natural language interactions with AI agents.
    11
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for interacting with the official Meta WhatsApp Business Platform/Cloud API, enabling sending messages, managing contacts, templates, and handling webhook callbacks.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Integrates WhatsApp with AI agents, enabling message sending, chat search, media sharing, approval workflows, and activity summaries via any MCP client.
    1
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Search, document and execute authenticated API calls across 700+ apps via one MCP server

  • Give AI agents real phone numbers, messages, and voice calls via MCP.

  • Instagram, WhatsApp and Messenger DMs through official Meta Business APIs.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BusinessNone/WhatsAppMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server