能力标签
GOWA
🔌
MCP工具

GOWA

基于 Go · 让 AI 助手直接操作你的系统与工具
英文名:go-whatsapp-web-multidevice
⭐ 4.0k Stars 🍴 964 Forks 💻 Go 📄 MIT 🏷 AI 8.0分
8.0AI 综合评分
gogolangwhatsappbotapi
✦ AI Skill Hub 推荐

AI Skill Hub 强烈推荐:GOWA 是一款优质的MCP工具。已获得 4.0k 颗 GitHub Star,AI 综合评分 8.0 分,在同类工具中表现稳健。如果你正在寻找可靠的MCP工具解决方案,这是一个值得深入了解的选择。

📚 深度解析

GOWA 是一款基于 MCP(Model Context Protocol)标准协议的 AI 工具扩展。MCP 协议由 Anthropic 开发并开源,旨在建立 AI 模型与外部工具之间的标准化通信接口,目前已被 Claude Desktop、Claude Code、Cursor 等主流 AI 工具采纳。

通过安装 GOWA,你的 AI 助手将获得额外的工具调用能力,可以用自然语言直接操控该工具的功能,无需学习复杂的命令行语法。MCP 工具的核心价值在于"一次配置,永久增强"——配置完成后,每次与 AI 对话时都可以无缝调用这些工具。

在技术实现上,MCP 工具通过标准的 JSON-RPC 协议与 AI 客户端通信,工具的功能以"工具列表"的形式暴露给 AI 模型,AI 可以按需调用。GOWA 提供了结构化的工具调用接口,使 AI 模型能够精确地理解和使用每个功能点,显著降低 AI 在工具使用上的错误率。

与传统的 API 集成相比,MCP 工具的优势在于无需编写代码——用户只需在配置文件中添加几行 JSON,即可让 AI 获得全新能力。AI Skill Hub 将 GOWA 评为 AI 评分 8.0 分,属于同类工具中的优质选择。

📋 工具概览

GOWA 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。

GitHub Stars
⭐ 4.0k
开发语言
Go
支持平台
Windows / macOS / Linux(跨平台)
维护状态
持续维护,定期更新
开源协议
MIT
AI 综合评分
8.0 分
工具类型
MCP工具
Forks
964

📖 中文文档

以下内容由 AI Skill Hub 根据项目信息自动整理,如需查看完整原始文档请访问底部「原始来源」。

GOWA 是一款遵循 MCP(Model Context Protocol)标准协议的 AI 工具扩展。通过 MCP 协议,它可以让 Claude、Cursor 等主流 AI 客户端直接访问和操作外部工具、数据源和服务,实现 AI 能力的无缝扩展。无论是文件操作、数据库查询还是 API 调用,都可以通过自然语言在 AI 对话中直接触发,极大提升生产效率。

📌 核心特色
  • 通过标准 MCP 协议与 Claude、Cursor 等主流 AI 客户端深度集成
  • 提供结构化工具调用接口,显著降低 AI 集成复杂度
  • 支持 Claude Desktop 和 Claude Code 无缝接入,开箱即用
  • 可与其他 MCP 工具组合叠加,构建完整 AI 工作站
  • 轻量无侵入设计,不影响现有系统架构
🎯 主要使用场景
  • 在 Claude Desktop 对话中直接调用本地工具,实现 AI 与系统的深度联动
  • 通过自然语言驱动复杂的多步骤自动化任务,代替繁琐手动操作
  • 将多个 MCP 工具组合使用,构建个人专属 AI 工作站
以下安装命令基于项目开发语言和类型自动生成,实际以官方 README 为准。
安装命令
# 方式一:通过 Claude Code CLI 一键安装
claude skill install https://github.com/aldinokemal/go-whatsapp-web-multidevice

# 方式二:手动配置 claude_desktop_config.json
{
  "mcpServers": {
    "gowa": {
      "command": "npx",
      "args": ["-y", "go-whatsapp-web-multidevice"]
    }
  }
}

# 配置文件位置
# macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
# Windows: %APPDATA%/Claude/claude_desktop_config.json
📋 安装步骤说明
  1. 确认已安装 Node.js(v18 或以上版本)
  2. 打开 Claude Desktop 或 Claude Code 的 MCP 配置文件
  3. 按「交给 Agent 安装 → Claude Desktop」标签中的 JSON 配置填入 mcpServers 字段
  4. 保存配置文件并重启 Claude 客户端
  5. 重启后,在对话中即可使用本工具
以下用法示例由 AI Skill Hub 整理,涵盖最常见的使用场景。
常用命令 / 代码示例
# 安装后在 Claude 对话中直接使用
# 示例:
用户: 请帮我用 GOWA 执行以下任务...
Claude: [自动调用 GOWA MCP 工具处理请求]

# 查看可用工具列表
# 在 Claude 中输入:"列出所有可用的 MCP 工具"
以下配置示例基于典型使用场景生成,具体参数请参照官方文档调整。
配置示例
// claude_desktop_config.json 配置示例
{
  "mcpServers": {
    "gowa": {
      "command": "npx",
      "args": ["-y", "go-whatsapp-web-multidevice"],
      "env": {
        // "API_KEY": "your-api-key-here"
      }
    }
  }
}

// 保存后重启 Claude Desktop 生效
📑 README 深度解析 真实文档 完整度 74/100 查看 GitHub 原文 →
以下内容由系统直接从 GitHub README 解析整理,保留代码块、表格与列表结构。

简介

GoWA Logo

Features

- Send WhatsApp messages through the HTTP API. See docs/openapi.yaml for details. - MCP (Model Context Protocol) server support — Integrate with AI agents and tools using a standardized protocol. - Optional MCP OAuth 2.1 — Connect remote MCP clients that cannot supply a Basic Auth header. See MCP OAuth. - Mention users: - @phoneNumber - Example: Hello @628974812XXXX, @628974812XXXX - Ghost mentions (mention all) — Mention group participants without showing @phone in the message text. - Pass phone numbers in the mentions field to mention users without a visible @ in the message. - Use the special keyword @everyone to automatically mention all group participants. - Post WhatsApp status updates. - Mark incoming audio messages and voice notes as played. - Send stickers — Automatically convert images to WebP sticker format. - Supports JPG, JPEG, PNG, WebP, and GIF formats. - Automatically resizes images to 512×512 pixels. - Preserves transparency in PNG images. - Animated WebP stickers are supported but must meet WhatsApp requirements: - Exactly 512×512 pixels. - Less than 500 KB. - No more than 10 seconds long. - If an animated sticker does not meet these requirements, resize it before uploading with a tool such as ezgif.com. - Compress images before sending. - Compress videos before sending. - Customize the OS name shown as the linked device name in WhatsApp: - --os=Chrome or --os=MyApplication - Basic Auth with multiple credentials: - --basic-auth=kemal:secret,toni:password,userName:secretPassword - Short form: -b=kemal:secret,toni:password,userName:secretPassword - Subpath deployment support: - --base-path="/gowa" allows deployment under a path such as /gowa. - Customizable port and debug mode: - --port 8000 - --debug true - Automatic replies to incoming messages: - --autoreply="Don't reply to this message" - Automatically mark incoming messages as read: - --auto-mark-read=true - Automatically download media from incoming messages: - --auto-download-media=false disables automatic media downloads (default: true). - Automatically reject incoming calls: - --auto-reject-call=true or WHATSAPP_AUTO_REJECT_CALL=true (see Webhook Payload for call events). - Configurable presence on connect: - --presence-on-connect=unavailable or WHATSAPP_PRESENCE_ON_CONNECT=unavailable - available — Mark the account as online (suppresses phone notifications). - unavailable — Register the push name without going online (default; preserves phone notifications). - none — Skip presence entirely (the push name is not registered, so contacts may see - as the name). - Daily presence pulse: - --presence-pulse-enabled=true or WHATSAPP_PRESENCE_PULSE_ENABLED=true (default: true). - --presence-pulse-interval=24h controls how often each connected device is pulsed. - --presence-pulse-duration=5m controls how long the account stays available before returning to unavailable. - Webhooks for received messages and other events: - --webhook="http://yourwebhook.site/handler" - Short form: -w="http://yourwebhook.site/handler" - See Webhook Payload Documentation for details. - Per-device webhooks — Each device can have its own webhook URL and event filters. - Set via API: PATCH /devices/:device_id/webhook with {"webhook_url": "https://device-webhook.site/handler"}. - Get via API: GET /devices/:device_id/webhook. - When a device has a custom webhook, events for that device are sent to the device-specific URL. - When no device webhook is set, events fall back to the global webhook (--webhook). - Set webhook_url to an empty string with PATCH to clear it and use the global webhook. - Webhook signatures — Webhook requests include an HMAC-SHA-256 signature in the X-Hub-Signature-256 header, generated with the default key secret.

Change the key with: - --webhook-secret="secret" - Webhook payload documentation — For detailed schemas, security implementation, and integration examples, see Webhook Payload Documentation. - Webhook event filtering — Filter which events are forwarded to your webhook with: - --webhook-events="message,message.ack" (a comma-separated list), or - WHATSAPP_WEBHOOK_EVENTS=message,message.ack.

Available Webhook Events:

| Event | Description | |----------------------|-----------------------------------------------| | message | Text, media, contact, location messages | | message.reaction | Emoji reactions to messages | | message.revoked | Deleted/revoked messages | | message.edited | Edited messages | | message.ack | Delivery and read receipts | | message.deleted | Messages deleted for the user | | chat_presence | Typing and recording indicators from contacts | | group.participants | Group member join/leave/promote/demote events | | group.joined | You were added to a group | | label.edit | WhatsApp label metadata changed | | label.association | Label applied to or removed from a chat | | newsletter.joined | You subscribed to a newsletter/channel | | newsletter.left | You unsubscribed from a newsletter | | newsletter.message | New message(s) posted in a newsletter | | newsletter.mute | Newsletter mute setting changed | | call.offer | Incoming call received |

If this setting is empty, all events are forwarded. - Webhook JID filtering

You can skip events for specific chats or senders (for example, mute all groups) before they are forwarded: - --webhook-ignore-jids="@g.us,628123456789@s.whatsapp.net" (a comma-separated list), or - WHATSAPP_WEBHOOK_IGNORE_JIDS=@g.us. - Supports the @g.us / @s.whatsapp.net / @lid wildcards (match a whole address space) and exact JIDs. - This filters by conversation or sender and is independent of --webhook-events, which filters by event type. The Chatwoot integration has a separate CHATWOOT_IGNORE_JIDS setting. - Webhook TLS configuration

If you encounter TLS certificate verification errors when using webhooks (e.g., with Cloudflare tunnels or self-signed certificates):

  tls: failed to verify certificate: x509: certificate signed by unknown authority
  

You can disable TLS certificate verification with: - --webhook-insecure-skip-verify=true, or - WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true.

Security Warning: This option disables TLS certificate verification and should only be used in: - Development or testing environments. - Cloudflare tunnels, which provide their own security layer. - Internal networks with self-signed certificates.

For production environments, use a valid TLS certificate (for example, from Let's Encrypt) instead of disabling verification.

Requirements

System Requirements

  • Go 1.26.0 or later (when building from source)
  • FFmpeg (for media processing)

Dependencies (without Docker)

- macOS: - brew install ffmpeg webp - export CGO_CFLAGS_ALLOW="-Xpreprocessor" - Linux: - sudo apt update - sudo apt install ffmpeg webp - Windows (WSL is recommended; see Install WSL): - Install FFmpeg. - Install libwebp, then extract it and add its bin directory to PATH.

Note: The webp package provides cwebp (encoder), dwebp (decoder), and webpmux (frame extractor) tools. FFmpeg is required for media processing. The libwebp tools (webpmux + dwebp) are used for animated WebP sticker support.

Docker

Docker avoids the need to install Go, FFmpeg, and libwebp directly on the host.

  1. Clone the repository: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.
  2. Open the cloned directory in a terminal.
  3. Copy the environment file: cp src/.env.example src/.env.
  4. Run docker compose up -d --build.
  5. Open http://localhost:3000.

Build your own binary

1. Clone the repository: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice. 2. Open the cloned directory in a terminal. 3. Run cd src. 4. Build the binary: - Linux and macOS: go build -o whatsapp - Windows (Command Prompt or PowerShell): go build -o whatsapp.exe 5. Start the server: - Linux and macOS: ./whatsapp rest - Windows: .\whatsapp.exe rest 6. Open http://localhost:3000 in a browser.

Run ./whatsapp --help (or .\whatsapp.exe --help on Windows) to see all flags.

Cross-compile for Raspberry Pi (ARM)

To build for a Raspberry Pi or another ARM device without a C toolchain (CGO), use the purego build tag. This selects a pure-Go SQLite implementation.

  1. Clone the repository: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice.
  2. Open the cloned directory in a terminal.
  3. Run cd src.
  4. Build for Raspberry Pi Zero / 1 (ARMv6):
   CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -tags purego -o whatsapp-armv6
   
  1. Build for Raspberry Pi 2 / 3 / 4 (ARMv7 32-bit):
   CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7 go build -tags purego -o whatsapp-armv7
   

6. Transfer the binary to your Pi, give it execution permission (chmod +x), and run it: - If you built ARMv6: ./whatsapp-armv6 rest - If you built ARMv7: ./whatsapp-armv7 rest

Production REST Server (Docker)

Using Docker Hub:

docker volume create whatsapp-storages
docker volume create whatsapp-statics
docker run --detach \
  --publish 3000:3000 \
  --name whatsapp \
  --restart always \
  --volume whatsapp-storages:/app/storages \
  --volume whatsapp-statics:/app/statics \
  aldinokemal2104/go-whatsapp-web-multidevice \
  rest --autoreply="Don't reply to this message, please"

Using GitHub Container Registry:

docker volume create whatsapp-storages
docker volume create whatsapp-statics
docker run --detach \
  --publish 3000:3000 \
  --name whatsapp \
  --restart always \
  --volume whatsapp-storages:/app/storages \
  --volume whatsapp-statics:/app/statics \
  ghcr.io/aldinokemal/go-whatsapp-web-multidevice \
  rest --autoreply="Don't reply to this message, please"

Production REST Server (Docker Compose)

Create a docker-compose.yml file with one of the following configurations.

Using Docker Hub:

services:
  whatsapp:
    image: aldinokemal2104/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    command:
      - rest
      - --basic-auth=admin:admin
      - --port=3000
      - --debug=true
      - --os=Chrome
      - --account-validation=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

Using GitHub Container Registry:

services:
  whatsapp:
    image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    command:
      - rest
      - --basic-auth=admin:admin
      - --port=3000
      - --debug=true
      - --os=Chrome
      - --account-validation=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

Using environment variables with Docker Hub:

services:
  whatsapp:
    image: aldinokemal2104/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    environment:
      - APP_BASIC_AUTH=admin:admin
      - APP_PORT=3000
      - APP_DEBUG=true
      - APP_OS=Chrome
      - WHATSAPP_ACCOUNT_VALIDATION=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

Using environment variables with GitHub Container Registry:

services:
  whatsapp:
    image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice
    container_name: whatsapp
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - whatsapp_storages:/app/storages
      - whatsapp_statics:/app/statics
    environment:
      - APP_BASIC_AUTH=admin:admin
      - APP_PORT=3000
      - APP_DEBUG=true
      - APP_OS=Chrome
      - WHATSAPP_ACCOUNT_VALIDATION=false

volumes:
  whatsapp_storages:
  whatsapp_statics:

Start the selected stack with docker compose up -d.

How to use

Configuration

Configuration is loaded in this order of priority:

  1. Command-line flags (highest priority)
  2. Environment variables
  3. .env file (lowest priority)

Environment Variables

To use environment variables:

  1. From the repository root, copy the example file: cp src/.env.example src/.env.
  2. Update the values in src/.env as needed.
  3. Alternatively, set the same variables in the process environment.

Available Environment Variables

VariableDescriptionDefaultExample
APP_PORTApplication port3000APP_PORT=8080
APP_HOSTHost address to bind the server0.0.0.0APP_HOST=127.0.0.1
APP_DEBUGEnable debug loggingfalseAPP_DEBUG=true
APP_OSOS name (device name in WhatsApp)GOWAAPP_OS=MyApp
APP_BASIC_AUTHBasic authentication credentials-APP_BASIC_AUTH=user1:pass1,user2:pass2
APP_BASE_PATHBase path for subpath deployment-APP_BASE_PATH=/gowa
APP_TRUSTED_PROXIESTrusted proxy IP ranges for reverse proxy-APP_TRUSTED_PROXIES=0.0.0.0/0
APP_CORS_ALLOWED_ORIGINSAllowed CORS origins (any origin when empty)-APP_CORS_ALLOWED_ORIGINS=https://ui.example.com
APP_UI_ENABLEDServe the downloaded gowa-ui dashboardtrueAPP_UI_ENABLED=false
APP_UI_AUTO_UPDATEDownload and periodically refresh the latest dashboardtrueAPP_UI_AUTO_UPDATE=false
APP_UI_REPOGitHub repository containing gowa-ui releasesaldinokemal/gowa-uiAPP_UI_REPO=my-org/gowa-ui
APP_UI_ASSET_NAMEDashboard release asset filenamegowa-ui.htmlAPP_UI_ASSET_NAME=gowa-ui.html
APP_UI_UPDATE_INTERVALInterval between dashboard update checks3hAPP_UI_UPDATE_INTERVAL=6h
APP_UI_GITHUB_TOKENOptional GitHub token for a higher API rate limit-APP_UI_GITHUB_TOKEN=github_pat_xxx
APP_UI_ASSET_SHA256Optional SHA-256 pin for the dashboard asset-APP_UI_ASSET_SHA256=<hex-digest>
MCP_ENABLEDServe the streamable HTTP MCP endpoint at /mcptrueMCP_ENABLED=false
MCP_OAUTH_ENABLEDEnable OAuth 2.1 authentication for MCPfalseMCP_OAUTH_ENABLED=true
MCP_OAUTH_ISSUER_URLPublic HTTPS OAuth issuer URL-MCP_OAUTH_ISSUER_URL=https://gowa.example.com
MCP_OAUTH_RESOURCE_URLOptional canonical public MCP URLDerived from issuer and base pathMCP_OAUTH_RESOURCE_URL=https://gowa.example.com/mcp
MCP_OAUTH_DB_URISQLite URI for OAuth clients, codes, and token hashesfile:storages/oauth.dbMCP_OAUTH_DB_URI=file:storages/oauth.db
DB_URIDatabase connection URIfile:storages/whatsapp.dbDB_URI=postgres://user:pass@host/db
DB_KEYS_URIOptional database URI for encryption/session key cache. Leave blank to use DB_URI; avoid in-memory storage in production because restarts can lose WhatsApp session state.-DB_KEYS_URI=file:storages/whatsapp-keys.db?_foreign_keys=on
CHAT_STORAGE_MAX_OPEN_CONNSMaximum concurrent SQLite connections for chat storage5CHAT_STORAGE_MAX_OPEN_CONNS=10
WHATSAPP_AUTO_REPLYAuto-reply message-WHATSAPP_AUTO_REPLY="Auto reply message"
WHATSAPP_AUTO_MARK_READAuto-mark incoming messages as readfalseWHATSAPP_AUTO_MARK_READ=true
WHATSAPP_AUTO_DOWNLOAD_MEDIAAuto-download media from incoming messagestrueWHATSAPP_AUTO_DOWNLOAD_MEDIA=false
WHATSAPP_AUTO_REJECT_CALLAuto-reject incoming WhatsApp callsfalseWHATSAPP_AUTO_REJECT_CALL=true
WHATSAPP_WEBHOOKWebhook URL(s) for events (comma-separated)-WHATSAPP_WEBHOOK=https://webhook.site/xxx
WHATSAPP_WEBHOOK_SECRETWebhook secret for validationsecretWHATSAPP_WEBHOOK_SECRET=super-secret-key
WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFYSkip TLS verification for webhooks (insecure)falseWHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true
WHATSAPP_WEBHOOK_EVENTSWhitelist of events to forward (comma-separated, empty = all)-WHATSAPP_WEBHOOK_EVENTS=message,message.ack
WHATSAPP_WEBHOOK_IGNORE_JIDSJIDs/wildcards to skip when forwarding (comma-separated)-WHATSAPP_WEBHOOK_IGNORE_JIDS=@g.us
WHATSAPP_ACCOUNT_VALIDATIONEnable account validationtrueWHATSAPP_ACCOUNT_VALIDATION=false
WHATSAPP_PRESENCE_ON_CONNECTPresence on connect: available, unavailable, or noneunavailableWHATSAPP_PRESENCE_ON_CONNECT=unavailable
WHATSAPP_PROXYOutbound proxy for the WhatsApp WebSocket (SOCKS5/HTTP/HTTPS)-WHATSAPP_PROXY=socks5://user:pass@host:1080
WHATSAPP_PRESENCE_PULSE_ENABLEDEnable daily available/unavailable presence pulsetrueWHATSAPP_PRESENCE_PULSE_ENABLED=false
WHATSAPP_PRESENCE_PULSE_INTERVALInterval between presence pulses24hWHATSAPP_PRESENCE_PULSE_INTERVAL=24h
WHATSAPP_PRESENCE_PULSE_DURATIONDuration to stay available during each pulse5mWHATSAPP_PRESENCE_PULSE_DURATION=5m
CHATWOOT_ENABLEDEnable Chatwoot integrationfalseCHATWOOT_ENABLED=true
CHATWOOT_URLChatwoot instance URL-CHATWOOT_URL=https://app.chatwoot.com
CHATWOOT_API_TOKENChatwoot API access token-CHATWOOT_API_TOKEN=your-api-token
CHATWOOT_ACCOUNT_IDChatwoot account ID-CHATWOOT_ACCOUNT_ID=12345
CHATWOOT_INBOX_IDChatwoot inbox ID-CHATWOOT_INBOX_ID=67890
CHATWOOT_DEVICE_IDWhatsApp device ID for Chatwoot (single-device/env fallback)-CHATWOOT_DEVICE_ID=628xxx@s.whatsapp.net
CHATWOOT_ALLOWED_HOSTSAllowlist of Chatwoot hosts for per-device configs (SSRF guard)-CHATWOOT_ALLOWED_HOSTS=app.chatwoot.com,chat.example.com
CHATWOOT_IMPORT_MESSAGESEnable message history sync to ChatwootfalseCHATWOOT_IMPORT_MESSAGES=true
CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGESDays of history to import3CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES=7
CHATWOOT_IMPORT_DB_URIDirect Chatwoot PostgreSQL URI for history sync-CHATWOOT_IMPORT_DB_URI=postgresql://user:pass@host:5432/chatwoot_production?sslmode=disable
CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGEInsert text placeholders for media rows during direct DB importtrueCHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=true
CHATWOOT_IMPORT_MEDIA_WITH_RESTUpload direct-DB import media rows through Chatwoot RESTfalseCHATWOOT_IMPORT_MEDIA_WITH_REST=true
CHATWOOT_AUTO_CREATEAuto-create or reuse the Chatwoot API inbox at startupfalseCHATWOOT_AUTO_CREATE=true
CHATWOOT_INBOX_NAMEInbox name used when auto-create is enabledWhatsAppCHATWOOT_INBOX_NAME=WhatsApp Support
CHATWOOT_WEBHOOK_URLPublic GOWA Chatwoot reply webhook URL-CHATWOOT_WEBHOOK_URL=https://api.example.com/chatwoot/webhook?secret=shared
CHATWOOT_WEBHOOK_SECRETShared secret required for incoming Chatwoot webhooks-CHATWOOT_WEBHOOK_SECRET=shared
CHATWOOT_REOPEN_CONVERSATIONReopen resolved Chatwoot conversations for returning contactstrueCHATWOOT_REOPEN_CONVERSATION=false
CHATWOOT_CONVERSATION_PENDINGCreate new Chatwoot conversations as pendingfalseCHATWOOT_CONVERSATION_PENDING=true
CHATWOOT_IGNORE_JIDSJIDs or wildcards to exclude from Chatwoot forwarding-CHATWOOT_IGNORE_JIDS=@g.us,628123@s.whatsapp.net
CHATWOOT_SIGN_MSGPrefix Chatwoot agent replies with the agent namefalseCHATWOOT_SIGN_MSG=true
CHATWOOT_SIGN_DELIMITERDelimiter between Chatwoot agent signature and message body\n\nCHATWOOT_SIGN_DELIMITER=" - "
CHATWOOT_FORWARD_EDITSMirror WhatsApp edits into Chatwoot threaded notestrueCHATWOOT_FORWARD_EDITS=false
CHATWOOT_FORWARD_DELETESMirror WhatsApp delete-for-everyone events into Chatwoot notestrueCHATWOOT_FORWARD_DELETES=false
CHATWOOT_MESSAGE_READSync read state for linked WhatsApp/Chatwoot messagesfalseCHATWOOT_MESSAGE_READ=true
CHATWOOT_MESSAGE_DELETEDelete linked opposite-side messages when deletion is reportedfalseCHATWOOT_MESSAGE_DELETE=true

Documentation:

- For detailed webhook payload schemas, security implementation, and integration examples, see Webhook Payload Documentation. - For the comprehensive Chatwoot integration guide, see Chatwoot Integration Documentation. - For OAuth deployment and security details, see MCP OAuth.

Run ./whatsapp --help to see all command-line flags.

MCP Configuration

Point your MCP client at the /mcp endpoint. It inherits the REST server's Basic Auth, so include the same Authorization header your REST calls use:

{
  "mcpServers": {
    "whatsapp": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Basic dXNlcjpzZWNyZXQ=",
        "X-Device-Id": "628123456789"
      }
    }
  }
}

headers is optional: include Authorization only when Basic Auth is configured, and X-Device-Id only for multi-device setups.

OAuth for remote MCP clients

OAuth 2.1 is available for remote clients that cannot attach a Basic Auth header. It is disabled by default. A minimal configuration is:

APP_BASIC_AUTH=admin:replace-with-a-strong-password
MCP_ENABLED=true
MCP_OAUTH_ENABLED=true
MCP_OAUTH_ISSUER_URL=https://gowa.example.com

When OAuth is enabled, /mcp accepts either a Bearer token or the configured Basic Auth credentials. OAuth does not authenticate REST or UI routes. See MCP OAuth for client setup, reverse-proxy requirements, subpath behavior, and the security model.

Migrating from the standalone MCP mode

  • ./whatsapp mcp./whatsapp rest (MCP is now included automatically).
  • http://localhost:8080/ssehttp://localhost:3000/mcp.
  • 40 granular tools → 5 consolidated tools (agents choose actions through the type/action field).

Current API

MCP (Model Context Protocol) API

- Served at /mcp by the REST server using streamable HTTP whenever MCP_ENABLED is true. With APP_BASE_PATH set, the route is <base-path>/mcp. - Available tools are listed in the "Available MCP Tools" section above. - Compatible with MCP-enabled AI tools and agents.

HTTP REST API

StatusOperationMethodURL
Health CheckGET/health
List DevicesGET/devices
Add DevicePOST/devices
Get Device InfoGET/devices/:device_id
Remove DeviceDELETE/devices/:device_id
Login Device (QR)GET/devices/:device_id/login
Login Device (Code)POST/devices/:device_id/login/code
Logout DevicePOST/devices/:device_id/logout
Reconnect DevicePOST/devices/:device_id/reconnect
Get Device StatusGET/devices/:device_id/status
Get Device WebhookGET/devices/:device_id/webhook
Set Device WebhookPATCH/devices/:device_id/webhook
Log In with QR CodeGET/app/login
Log In with Pairing CodeGET/app/login-with-code
Passkey Pairing StatusGET/app/passkey
Passkey Pairing ResponsePOST/app/passkey/response
Confirm Passkey PairingPOST/app/passkey/confirm
LogoutGET/app/logout
ReconnectGET/app/reconnect
DevicesGET/app/devices
Connection StatusGET/app/status
App Info (version, limits)GET/app/info
User InfoGET/user/info
User AvatarGET/user/avatar
Change User AvatarPOST/user/avatar
Change User Push NamePOST/user/pushname
List My Groups*GET/user/my/groups
List My NewslettersGET/user/my/newsletters
Get My Privacy SettingsGET/user/my/privacy
List My ContactsGET/user/my/contacts
Check WhatsApp UserGET/user/check
Get Business ProfileGET/user/business-profile
Send MessagePOST/send/message
Send ImagePOST/send/image
Send AudioPOST/send/audio
Send FilePOST/send/file
Send VideoPOST/send/video
Send StickerPOST/send/sticker
Send ContactPOST/send/contact
Send LinkPOST/send/link
Send LocationPOST/send/location
Send Poll / VotePOST/send/poll
Send PresencePOST/send/presence
Send Chat Presence (Typing Indicator)POST/send/chat-presence
Revoke MessagePOST/message/:message_id/revoke
React MessagePOST/message/:message_id/reaction
Delete MessagePOST/message/:message_id/delete
Edit MessagePOST/message/:message_id/update
Mark Message as ReadPOST/message/:message_id/read
Mark Audio Message as PlayedPOST/message/:message_id/played
Star MessagePOST/message/:message_id/star
Unstar MessagePOST/message/:message_id/unstar
Forward MessagePOST/message/:message_id/forward
Download Message MediaGET/message/:message_id/download
Reject CallPOST/call/reject
Join Group with LinkPOST/group/join-with-link
Get Group Info from LinkGET/group/info-from-link
Get Group InfoGET/group/info
Leave GroupPOST/group/leave
Create GroupPOST/group
List Group ParticipantsGET/group/participants
Add Group ParticipantsPOST/group/participants
Remove Group ParticipantsPOST/group/participants/remove
Promote Group ParticipantsPOST/group/participants/promote
Demote Group ParticipantsPOST/group/participants/demote
Export Group Participants (CSV)GET/group/participants/export
List Group Join RequestsGET/group/participant-requests
Approve Group Join RequestsPOST/group/participant-requests/approve
Reject Group Join RequestsPOST/group/participant-requests/reject
Set Group PhotoPOST/group/photo
Set Group NamePOST/group/name
Lock or Unlock Group SettingsPOST/group/locked
Set Group Announcement ModePOST/group/announce
Set Group TopicPOST/group/topic
Get Group Invite LinkGET/group/invite-link
Unfollow NewsletterPOST/newsletter/unfollow
Get Newsletter MessagesGET/newsletter/messages
Download Newsletter Message MediaGET/newsletter/messages/{server_id}/download
Get Chat ListGET/chats
Get Chat MessagesGET/chat/:chat_jid/messages
Pin ChatPOST/chat/:chat_jid/pin
Archive ChatPOST/chat/:chat_jid/archive
Set Disappearing MessagesPOST/chat/:chat_jid/disappearing
Chatwoot Sync HistoryPOST/chatwoot/sync
Chatwoot Sync StatusGET/chatwoot/sync/status
List Chatwoot ConfigurationsGET/chatwoot/configs
Get Device Chatwoot ConfigurationGET/devices/:device_id/chatwoot/config
Set Device Chatwoot ConfigurationPUT/devices/:device_id/chatwoot/config
Delete Device Chatwoot ConfigurationDELETE/devices/:device_id/chatwoot/config
Chatwoot Reply WebhookPOST/chatwoot/webhook
Device Chatwoot Reply WebhookPOST/chatwoot/webhook/:device_id

= available. * = has known limitations; see the notes below.

Notes:

- *List My Groups: Returns a maximum of 500 groups because of a WhatsApp protocol limitation. WhatsApp's servers, not this API, enforce the limit. See the whatsmeow source for details. - /health is public and always registered at the root path, even when APP_BASE_PATH is set. - Chatwoot routes are registered only when CHATWOOT_ENABLED=true.

User Interface

🇨🇳 中文文档镜像 AI 翻译 2026-05-28
英文原文章节由系统翻译为中文摘要,便于快速理解。完整原文见上方 "📑 README 深度解析"。
📌 简介

go-whatsapp-web-multidevice 是一个基于 Go 语言开发的 WhatsApp 多设备管理工具,旨在通过 HTTP API 为开发者提供便捷的 WhatsApp 消息交互能力。该项目不仅支持传统的 RESTful 接口,还前瞻性地集成了 MCP (Model Context Protocol) 协议,让 AI Agent 能够更轻松地操控 WhatsApp 进行通信。

⚡ 功能介绍

本项目具备多项核心功能:首先,支持通过 HTTP API 发送 WhatsApp 消息,并提供详尽的 openapi.yml 文档;其次,原生支持 MCP (Model Context Protocol) Server,可无缝集成到各类 AI Agent 和工具中;此外,支持通过 @phoneNumber 方式提及特定用户,并提供独特的 Ghost Mentions(隐形提及)功能,可以在不破坏消息文本美观度的前提下实现群组成员的 @ 提醒。

📋 环境依赖

在进行源码构建前,系统需安装 Go 1.24.0 或更高版本,并配置 FFmpeg 用于多媒体处理。若不使用 Docker,macOS 用户需通过 brew 安装 ffmpeg 和 webp,并设置 CGO_CFLAGS_ALLOW;Linux 用户需通过 apt 安装相关依赖;Windows 用户建议在 WSL 环境下运行以获得最佳兼容性。

🛠 安装步骤(Docker/pip/源码)

项目支持多种部署方式:推荐使用 Docker 部署,只需克隆仓库并运行 `docker-compose up -d --build` 即可快速启动;若需自行构建二进制文件,可进入 src 目录使用 `go build` 命令进行编译。此外,针对 Raspberry Pi 等 ARM 设备,项目提供了基于 `purego` 标签的交叉编译方案,无需复杂的 CGO 工具链即可实现纯 Go 实现的 SQLite 支持。

🚀 使用教程

项目启动后,可通过不同的运行模式满足不同场景需求。例如,使用 `./whatsapp rest` 进入 REST API 模式,或使用 `./whatsapp mcp` 启动 MCP Server 模式。开发者可以通过 `./whatsapp --help` 查看所有可用的命令行参数(flags),以根据实际需求调整运行行为。

⚙️ 配置说明(含 MCP / env)

应用的配置遵循优先级原则:命令行参数 (Flags) 优先级最高,其次是环境变量 (Environment Variables),最后是 `.env` 文件。用户可以通过复制 `.env.example` 并修改为 `.env` 来配置环境变量。对于支持 MCP SSE 协议的 AI 工具(如 Cursor),需在配置文件中添加对应的 SSE URL 进行集成。

🔌 API 说明

项目提供两套 API 体系:一是 MCP (Model Context Protocol) API,通过 SSE (Server-Sent Events) 传输协议,为 AI Agent 提供标准化工具(如发送文本、联系人、链接和位置);二是 HTTP REST API,开发者可以参考 openapi.yml 文档,并利用 SwaggerEditor 进行可视化调试,或使用 openapi-generator 自动生成客户端代码。

🔄 工作流/模块

本项目已深度集成自动化工作流工具 n8n。开发者可以通过在 n8n 的 Settings -> Community Nodes 中搜索并安装 `@aldinokemal2104/n8n-nodes-gowa` 节点,从而将 WhatsApp 的消息能力轻松引入到复杂的自动化业务流程中。

🎯 aiskill88 AI 点评 A 级 2026-05-27

高质量的开源MCP工具,支持多账号和Webhooks

📚 实用指南(长尾问题)
适合谁
  • 需要让 Claude / Cursor 操作本地工具的 AI 工程师
  • 构建多智能体协作系统的 Agent 开发者
最佳实践
  • 配置 MCP 服务器时建议使用 stdio 传输 + JSON-RPC,避免暴露公网
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • Agent 任务先做 dry-run 验证工具调用链,再开启自主执行
常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • MCP 配置路径拼错或权限不足,重启 Claude Desktop 才生效
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal
部署方案
  • Docker:go-whatsapp-web-multidevice 提供官方镜像,docker compose up 一键启动
  • CLI:直接 npm install -g / pip install,命令行调用
  • 云端托管:可放在 Vercel / Railway / Fly.io 等 PaaS 平台
相关搜索
go-whatsapp-web-multidevice 中文教程go-whatsapp-web-multidevice 安装报错怎么办go-whatsapp-web-multidevice MCP 配置go-whatsapp-web-multidevice Docker 部署go-whatsapp-web-multidevice Agent 工作流go-whatsapp-web-multidevice 与同类工具对比go-whatsapp-web-multidevice 最佳实践go-whatsapp-web-multidevice 适合谁用

⚡ 核心功能

👥 适合谁
  • 需要让 Claude / Cursor 操作本地工具的 AI 工程师
  • 构建多智能体协作系统的 Agent 开发者
⭐ 最佳实践
  • 配置 MCP 服务器时建议使用 stdio 传输 + JSON-RPC,避免暴露公网
  • 生产部署优先使用 Docker Compose 隔离依赖,并挂载 volume 持久化数据
  • Agent 任务先做 dry-run 验证工具调用链,再开启自主执行
⚠️ 常见错误
  • API key 直接提交到 git 仓库(请用 .env 并加入 .gitignore)
  • MCP 配置路径拼错或权限不足,重启 Claude Desktop 才生效
  • 容器内无法访问宿主机 localhost — 使用 host.docker.internal

👥 适合人群

Claude Desktop / Claude Code 用户AI 工具开发者需要扩展 AI 能力的专业人士自动化工程师

🎯 使用场景

  • 在 Claude Desktop 对话中直接调用本地工具,实现 AI 与系统的深度联动
  • 通过自然语言驱动复杂的多步骤自动化任务,代替繁琐手动操作
  • 将多个 MCP 工具组合使用,构建个人专属 AI 工作站

⚖️ 优点与不足

✅ 优点
  • +MIT 协议,可免费商用
  • +标准化 MCP 协议,生态互联性强
  • +与 Claude 官方生态无缝对接
  • +即插即用,配置简单快捷
⚠️ 不足
  • 依赖 Claude 客户端,非 Claude 用户无法使用
  • MCP 协议仍在持续演进,接口可能变更
  • 需要一定的配置步骤
⚠️ 使用须知

AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。

建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。

📄 License 说明

✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。

🔗 相关工具推荐

📚 相关教程推荐
📰 相关 AI 新闻
🍿 AI 圈相关吃瓜
🗺️ 相关解决方案
🧩 你可能还需要
基于当前 Skill 的能力图谱,自动补全的工具组合

❓ 常见问题 FAQ

go-whatsapp-web-multidevice 是一款Go开发的AI辅助工具。开源MCP工具:GOWA - WhatsApp REST API with support for UI, Multi Account, Webhooks, and MCP, 。⭐4.0k · Go 主要应用场景包括:WhatsApp自动化和集成。
💡 AI Skill Hub 点评

总体来看,GOWA 是一款质量优秀的MCP工具,在同类工具中具备一定竞争力。AI Skill Hub 将持续追踪其更新动态,建议收藏备用,结合自身场景选择合适时机引入使用。

⬇️ 获取与下载
⬇ 下载源码 ZIP

✅ MIT 协议 · 可免费商用 · 直接从 aiskill88 服务器下载,无需跳转 GitHub

📚 深入学习 GOWA
查看分步骤安装教程和完整使用指南,快速上手这款工具
🌐 原始信息
原始名称 go-whatsapp-web-multidevice
原始描述 开源MCP工具:GOWA - WhatsApp REST API with support for UI, Multi Account, Webhooks, and MCP, 。⭐4.0k · Go
Topics gogolangwhatsappbotapi
GitHub https://github.com/aldinokemal/go-whatsapp-web-multidevice
License MIT
语言 Go
🔗 原始来源
🐙 GitHub 仓库  https://github.com/aldinokemal/go-whatsapp-web-multidevice

收录时间:2026-05-27 · 更新时间:2026-05-30 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。

📺 订阅 AI Skill Hub Daily Telegram 频道
每天 8 条精选 AI Skill、MCP、Agent 与自动化工具推送
加入频道 →