
Golang WhatsApp - Built with Go for efficient memory use
**If you're using this tools to generate income, consider supporting its development by becoming a Patreon member!**Your support helps ensure the library stays maintained and receives regular updates!
Support for ARM & AMD Architecture along with MCP Support
Download:
-
Release
-
Docker Hub
-
GitHub Container Registry
Support n8n package (n8n.io)
-
n8n package
-
Go to Settings -> Community Nodes -> Input
@aldinokemal2104/n8n-nodes-gowa-> Install
Breaking Changes
-
v6 -
For REST mode, you need to run
<binary> restinstead of<binary>
- for example:
./whatsapp restinstead of ./whatsapp
- For MCP mode, you need to run
<binary> mcp
- for example:
./whatsapp mcp
-
v7 -
Starting version 7.x we are using goreleaser to build the binary, so you can download the binary from release
-
v8 -
Multi-device support: You can now connect and manage multiple WhatsApp accounts simultaneously in a single server instance
-
New Device Management API: New endpoints under
/devicesfor managing multiple devices -
Device scoping required: All device-scoped REST API calls now require either:
X-Device-Idheader, ordevice_idquery parameter- If only one device is registered, it will be used as the default
-
WebSocket device scoping: Connect to
/ws?device_id=<id>to scope WebSocket to a specific device -
Webhook payload changes: All webhook payloads now include a top-level
device_idfield identifying which device received the event:
```json
{
"event": "message",
"device_id": "[emailΒ protected]",
"payload": { ... }
}
Feature
-
Send WhatsApp message via http API, docs/openapi.yaml for more details
-
MCP (Model Context Protocol) Server Support - Integrate with AI agents and tools using standardized protocol
-
Mention someone
-
@phoneNumber -
example:
Hello @628974812XXXX, @628974812XXXX -
Ghost Mentions (Mention All) - Mention group participants without showing
@phonein message text -
Pass phone numbers in
mentionsfield to mention users without visible@in message -
Use special keyword
@everyoneto automatically mention ALL group participants -
UI checkbox available in Send Message modal for groups
-
Post Whatsapp Status
-
Send Stickers - Automatically converts images to WebP sticker format
-
Supports JPG, JPEG, PNG, WebP, and GIF formats
-
Automatic resizing to 512x512 pixels
-
Preserves transparency for PNG images
-
Animated WebP stickers are supported but must meet WhatsApp requirements:
- Must be exactly 512x512 pixels
- Must be under 500KB file size
- Maximum 10 seconds duration
- If your animated sticker doesn't meet these requirements, please resize it before uploading using tools like ezgif.com
-
Compress image before send
-
Compress video before send
-
Change OS name become your app (it's the device name when connect via mobile)
-
--os=Chromeor--os=MyApplication -
Basic Auth (able to add multi credentials)
-
--basic-auth=kemal:secret,toni:password,userName:secretPassword, or you can simplify -
-b=kemal:secret,toni:password,userName:secretPassword -
Subpath deployment support
-
--base-path="/gowa"(allows deployment under a specific path like/gowa/sub/path) -
Customizable port and debug mode
-
--port 8000 -
--debug true -
Auto reply message
-
--autoreply="Don't reply this message" -
Auto mark read incoming messages
-
--auto-mark-read=true(automatically marks incoming messages as read) -
Auto download media from incoming messages
-
--auto-download-media=false(disable automatic media downloads, default:true) -
Auto reject incoming calls
-
--auto-reject-call=trueorWHATSAPP_AUTO_REJECT_CALL=true(see Webhook Payload for call events) -
Configurable presence on connect
-
--presence-on-connect=unavailableorWHATSAPP_PRESENCE_ON_CONNECT=unavailable -
availableβ mark as online (suppresses phone notifications) -
unavailableβ register pushname without going online (default, preserves phone notifications) -
noneβ skip presence entirely (pushname won't be registered, contacts may see "-" as name) -
Daily presence pulse
-
--presence-pulse-enabled=trueorWHATSAPP_PRESENCE_PULSE_ENABLED=true(default:true) -
--presence-pulse-interval=24hcontrols how often each connected device is pulsed -
--presence-pulse-duration=5mcontrols how long the account staysavailablebefore returning tounavailable -
Webhook for received message
-
--webhook="http://yourwebhook.site/handler", or you can simplify -
-w="http://yourwebhook.site/handler" -
for more detail, see Webhook Payload Documentation
-
Per-Device Webhook - Each device can have its own webhook URL
-
Set via API:
PATCH /devices/:device_id/webhookwith{"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 to empty string
""via PATCH to clear and use global webhook -
Webhook Secret Our webhook will be sent to you with an HMAC header and a sha256 default key
secret. You may modify this by using the option below: -
--webhook-secret="secret" -
Webhook Payload DocumentationFor detailed webhook payload schemas, security implementation, and integration examples, see Webhook Payload Documentation
-
Webhook Event FilteringYou can filter which events are forwarded to your webhook using:
-
--webhook-events="message,message.ack"(comma-separated list) -
Or environment variable:
WHATSAPP_WEBHOOK_EVENTS=message,message.ackAvailable 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 not configured (empty), all events will be forwarded. -
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 using:
-
--webhook-insecure-skip-verify=true -
Or environment variable:
WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=trueSecurity Warning: This option disables TLS certificate verification and should only be used in: -
Development/testing environments
-
Cloudflare tunnels (which provide their own security layer)
-
Internal networks with self-signed certificates For production environments, it's strongly recommended to use proper SSL certificates (e.g., Let's Encrypt) instead of disabling verification.
Current API
MCP (Model Context Protocol) API
-
MCP server provides standardized tools for AI agents to interact with WhatsApp
-
Supports Server-Sent Events (SSE) transport
-
Available tools are listed in the "Available MCP Tools" section above.
-
Compatible with MCP-enabled AI tools and agents
HTTP REST API
-
Check docs/openapi.yaml for detailed API specifications.
-
Use SwaggerEditor to visualize the API.
-
Generate HTTP clients using openapi-generator.
Feature Menu Method URL β Health Check GET /health β List Devices GET /devices β Add Device POST /devices β Get Device Info GET /devices/:device_id β Remove Device DELETE /devices/:device_id β Login Device (QR, reserved) GET /devices/:device_id/login β Login Device (Code, reserved) POST /devices/:device_id/login/code β Logout Device POST /devices/:device_id/logout β Reconnect Device POST /devices/:device_id/reconnect β Get Device Status GET /devices/:device_id/status β Get Device Webhook GET /devices/:device_id/webhook β Set Device Webhook PATCH /devices/:device_id/webhook β Login with Scan QR GET /app/login β Login With Pair Code GET /app/login-with-code β Passkey Pairing Status GET /app/passkey β Passkey Pairing Response POST /app/passkey/response β Passkey Pairing Confirm POST /app/passkey/confirm β Logout GET /app/logout β Reconnect GET /app/reconnect β Devices GET /app/devices β Connection Status GET /app/status β User Info GET /user/info β User Avatar GET /user/avatar β User Change Avatar POST /user/avatar β User Change PushName POST /user/pushname β User My Groups* GET /user/my/groups β User My Newsletter GET /user/my/newsletters β User My Privacy Setting GET /user/my/privacy β User My Contacts GET /user/my/contacts β User Check GET /user/check β User Business Profile GET /user/business-profile β Send Message POST /send/message β Send Image POST /send/image β Send Audio POST /send/audio β Send File POST /send/file β Send Video POST /send/video β Send Sticker POST /send/sticker β Send Contact POST /send/contact β Send Link POST /send/link β Send Location POST /send/location β Send Poll / Vote POST /send/poll β Send Presence POST /send/presence β Send Chat Presence (Typing Indicator) POST /send/chat-presence β Revoke Message POST /message/:message_id/revoke β React Message POST /message/:message_id/reaction β Delete Message POST /message/:message_id/delete β Edit Message POST /message/:message_id/update β Read Message (DM) POST /message/:message_id/read β Star Message POST /message/:message_id/star β Unstar Message POST /message/:message_id/unstar β Download Message Media GET /message/:message_id/download β Reject Call POST /call/reject β Join Group With Link POST /group/join-with-link β Group Info From Link GET /group/info-from-link β Group Info GET /group/info β Leave Group POST /group/leave β Create Group POST /group β List Participants in Group GET /group/participants β Add Participants in Group POST /group/participants β Remove Participant in Group POST /group/participants/remove β Promote Participant in Group POST /group/participants/promote β Demote Participant in Group POST /group/participants/demote β Export Group Participants (CSV) GET /group/participants/export β List Requested Participants in Group GET /group/participant-requests β Approve Requested Participant in Group POST /group/participant-requests/approve β Reject Requested Participant in Group POST /group/participant-requests/reject β Set Group Photo POST /group/photo β Set Group Name POST /group/name β Set Group Locked POST /group/locked β Set Group Announce POST /group/announce β Set Group Topic POST /group/topic β Get Group Invite Link GET /group/invite-link β Unfollow Newsletter POST /newsletter/unfollow β Get Newsletter Messages GET /newsletter/messages β Get Chat List GET /chats β Get Chat Messages GET /chat/:chat_jid/messages β Pin Chat POST /chat/:chat_jid/pin β Archive Chat POST /chat/:chat_jid/archive β Set Disappearing Messages POST /chat/:chat_jid/disappearing β Chatwoot Sync History POST /chatwoot/sync β Chatwoot Sync Status GET /chatwoot/sync/status β Chatwoot Reply Webhook POST /chatwoot/webhook
β
= Available
β = Not Available Yet
* = Has known limitations (see notes below)
Notes:
-
*User My Groups: Returns a maximum of 500 groups due to WhatsApp protocol limitation. This is enforced by WhatsApp servers, not this API. See whatsmeow source for details. -
/healthis public and always registered at the root path, even whenAPP_BASE_PATHis set. -
Device-specific login routes are reserved by the router but not implemented by the current usecase. Use
/app/loginor/app/login-with-codewithX-Device-Idordevice_idto pair a specific slot. -
Chatwoot routes are registered only when
CHATWOOT_ENABLED=true.
User Interface
MCP UI
-
Setup MCP (tested in cursor)
-
Test MCP
-
Successfully setup MCP
HTTP REST API UI
Description Image Homepage Login Login With Code Send Message Send Image Send File Send Video Send Sticker Send Contact Send Location Send Audio Send Poll Send Presence Send Link My Group Group Info From Link Create Group Join Group with Link Manage Participant My Newsletter My Contacts Business Profile
Mac OS NOTE
- Please do this if you have an error (invalid flag in pkg-config --cflags: -Xpreprocessor)
export CGO_CFLAGS_ALLOW="-Xpreprocessor"
Important
-
This project is unofficial and not affiliated with WhatsApp.
-
Please use official WhatsApp API to avoid any issues.
-
We only able to run MCP or REST API, this is limitation from whatsmeow library. independent MCP will be available in the future.
Configuration
You can configure the application using either command-line flags (shown above) or environment variables. Configuration can be set in three ways (in order of priority):
-
Command-line flags (highest priority)
-
Environment variables
-
.envfile (lowest priority)
Environment Variables
You can configure the application using environment variables. Configuration can be set in three ways (in order of priority):
To use environment variables:
-
Copy
.env.exampleto.envin your project root (cp src/.env.example src/.env) -
Modify the values in
.envaccording to your needs -
Or set the same variables as system environment variables
Available Environment Variables
Variable Description Default Example APP_PORT Application port 3000 APP_PORT=8080 APP_HOST Host address to bind the server 0.0.0.0 APP_HOST=127.0.0.1 APP_DEBUG Enable debug logging false APP_DEBUG=true APP_OS OS name (device name in WhatsApp) GOWA APP_OS=MyApp APP_BASIC_AUTH Basic authentication credentials - APP_BASIC_AUTH=user1:pass1,user2:pass2 APP_BASE_PATH Base path for subpath deployment - APP_BASE_PATH=/gowa APP_TRUSTED_PROXIES Trusted proxy IP ranges for reverse proxy - APP_TRUSTED_PROXIES=0.0.0.0/0 DB_URI Database connection URI file:storages/whatsapp.db DB_URI=postgres://user:pass@host/db DB_KEYS_URI Optional 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_CONNS Max concurrent SQLite connections for chat storage 5 CHAT_STORAGE_MAX_OPEN_CONNS=10 WHATSAPP_AUTO_REPLY Auto-reply message - WHATSAPP_AUTO_REPLY="Auto reply message" WHATSAPP_AUTO_MARK_READ Auto-mark incoming messages as read false WHATSAPP_AUTO_MARK_READ=true WHATSAPP_AUTO_DOWNLOAD_MEDIA Auto-download media from incoming messages true WHATSAPP_AUTO_DOWNLOAD_MEDIA=false WHATSAPP_AUTO_REJECT_CALL Auto-reject incoming WhatsApp calls false WHATSAPP_AUTO_REJECT_CALL=true WHATSAPP_WEBHOOK Webhook URL(s) for events (comma-separated) - WHATSAPP_WEBHOOK=https://webhook.site/xxx WHATSAPP_WEBHOOK_SECRET Webhook secret for validation secret WHATSAPP_WEBHOOK_SECRET=super-secret-key WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY Skip TLS verification for webhooks (insecure) false WHATSAPP_WEBHOOK_INSECURE_SKIP_VERIFY=true WHATSAPP_WEBHOOK_EVENTS Whitelist of events to forward (comma-separated, empty = all) - WHATSAPP_WEBHOOK_EVENTS=message,message.ack WHATSAPP_ACCOUNT_VALIDATION Enable account validation true WHATSAPP_ACCOUNT_VALIDATION=false WHATSAPP_PRESENCE_ON_CONNECT Presence on connect: available, unavailable, or none unavailable WHATSAPP_PRESENCE_ON_CONNECT=unavailable WHATSAPP_PRESENCE_PULSE_ENABLED Enable daily available/unavailable presence pulse true WHATSAPP_PRESENCE_PULSE_ENABLED=false WHATSAPP_PRESENCE_PULSE_INTERVAL Interval between presence pulses 24h WHATSAPP_PRESENCE_PULSE_INTERVAL=24h WHATSAPP_PRESENCE_PULSE_DURATION Duration to stay available during each pulse 5m WHATSAPP_PRESENCE_PULSE_DURATION=5m CHATWOOT_ENABLED Enable Chatwoot integration false CHATWOOT_ENABLED=true CHATWOOT_URL Chatwoot instance URL - CHATWOOT_URL=https://app.chatwoot.com CHATWOOT_API_TOKEN Chatwoot API access token - CHATWOOT_API_TOKEN=your-api-token CHATWOOT_ACCOUNT_ID Chatwoot account ID - CHATWOOT_ACCOUNT_ID=12345 CHATWOOT_INBOX_ID Chatwoot inbox ID - CHATWOOT_INBOX_ID=67890 CHATWOOT_DEVICE_ID WhatsApp device ID for Chatwoot (multi-device setup) - CHATWOOT_DEVICE_ID=[emailΒ protected] CHATWOOT_IMPORT_MESSAGES Enable message history sync to Chatwoot false CHATWOOT_IMPORT_MESSAGES=true CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES Days of history to import 3 CHATWOOT_DAYS_LIMIT_IMPORT_MESSAGES=7 CHATWOOT_IMPORT_DB_URI Direct Chatwoot PostgreSQL URI for history sync - CHATWOOT_IMPORT_DB_URI=postgresql://user:pass@host:5432/chatwoot_production?sslmode=disable CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE Insert text placeholders for media rows during direct DB import true CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=true CHATWOOT_IMPORT_MEDIA_WITH_REST Upload direct-DB import media rows through Chatwoot REST false CHATWOOT_IMPORT_MEDIA_WITH_REST=true CHATWOOT_AUTO_CREATE Auto-create or reuse the Chatwoot API inbox at startup false CHATWOOT_AUTO_CREATE=true CHATWOOT_INBOX_NAME Inbox name used when auto-create is enabled WhatsApp CHATWOOT_INBOX_NAME=WhatsApp Support CHATWOOT_WEBHOOK_URL Public GOWA Chatwoot reply webhook URL - CHATWOOT_WEBHOOK_URL=https://api.example.com/chatwoot/webhook?secret=shared CHATWOOT_WEBHOOK_SECRET Shared secret required for incoming Chatwoot webhooks - CHATWOOT_WEBHOOK_SECRET=shared CHATWOOT_REOPEN_CONVERSATION Reopen resolved Chatwoot conversations for returning contacts true CHATWOOT_REOPEN_CONVERSATION=false CHATWOOT_CONVERSATION_PENDING Create new Chatwoot conversations as pending false CHATWOOT_CONVERSATION_PENDING=true CHATWOOT_IGNORE_JIDS JIDs or wildcards to exclude from Chatwoot forwarding - [emailΒ protected] ,[emailΒ protected] CHATWOOT_SIGN_MSG Prefix Chatwoot agent replies with the agent name false CHATWOOT_SIGN_MSG=true CHATWOOT_SIGN_DELIMITER Delimiter between Chatwoot agent signature and message body \n\n CHATWOOT_SIGN_DELIMITER=" - " CHATWOOT_FORWARD_EDITS Mirror WhatsApp edits into Chatwoot threaded notes true CHATWOOT_FORWARD_EDITS=false CHATWOOT_FORWARD_DELETES Mirror WhatsApp delete-for-everyone events into Chatwoot notes true CHATWOOT_FORWARD_DELETES=false CHATWOOT_MESSAGE_READ Sync read state for linked WhatsApp/Chatwoot messages false CHATWOOT_MESSAGE_READ=true CHATWOOT_MESSAGE_DELETE Delete linked opposite-side messages when deletion is reported false CHATWOOT_MESSAGE_DELETE=true
Documentation:
-
For detailed webhook payload schemas, security implementation, and integration examples, see Webhook Payload Documentation
-
For comprehensive Chatwoot integration guide, see Chatwoot Integration Documentation
Note: Command-line flags will override any values set in environment variables or .env file.
- For more command
./whatsapp --help
Requirements
System Requirements
-
Go 1.25.5 or higher (for building from source)
-
FFmpeg (for media processing)
Platform Support
-
Linux (x86_64, ARM64)
-
macOS (Intel, Apple Silicon)
-
Windows (x86_64) - WSL recommended
Dependencies (without docker)
-
Mac OS:
-
brew install ffmpeg webp -
export CGO_CFLAGS_ALLOW="-Xpreprocessor" -
Linux:
-
sudo apt update -
sudo apt install ffmpeg webp -
Windows (not recommended, prefer using WSL):
-
Install ffmpeg: download here
-
Install libwebp: download here (extract and add
binfolder to PATH) -
Add both to environment variable
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.
How to use
Basic
-
Clone this repo:
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice -
Open the folder that was cloned via cmd/terminal.
-
run
cd src -
run
go run . rest(for REST API mode) -
Open
http://localhost:3000
Docker (you don't need to install in required)
-
Clone this repo:
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice -
Open the folder that was cloned via cmd/terminal.
-
run
docker-compose up -d --build -
open
http://localhost:3000
Build your own binary
-
Clone this repo
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice -
Open the folder that was cloned via cmd/terminal.
-
run
cd src -
run
-
Linux & MacOS:
go build -o whatsapp -
Windows (CMD / PowerShell):
go build -o whatsapp.exe -
run
-
Linux & MacOS:
./whatsapp rest(for REST API mode) -
run
./whatsapp --helpfor more detail flags -
Windows:
.\whatsapp.exe rest(for REST API mode) -
run
.\whatsapp.exe --helpfor more detail flags -
open
http://localhost:3000in browser
Cross-Compile for Raspberry Pi (ARM)
If you want to build for Raspberry Pi or other ARM devices without needing a C toolchain (CGO), you can use the purego build tag. This will use a pure-Go SQLite implementation.
-
Clone this repo
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice -
Open the folder that was cloned via cmd/terminal.
-
run
cd src -
Build for Raspberry Pi Zero / 1 (ARMv6): CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -tags purego -o whatsapp-armv6
-
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
-
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
MCP Server (Model Context Protocol)
This application can also run as an MCP server, allowing AI agents and tools to interact with WhatsApp through a standardized protocol.
-
Clone this repo
git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice -
Open the folder that was cloned via cmd/terminal.
-
run
cd src -
run
go run . mcpor build the binary and run./whatsapp mcp -
The MCP server will start on
http://localhost:8080by default
MCP Server Options
-
--host localhost- Set the host for MCP server (default: localhost) -
--port 8080- Set the port for MCP server (default: 8080)
Available MCP Tools
The WhatsApp MCP server provides comprehensive tools for AI agents to interact with WhatsApp through a standardized protocol. Below is the complete list of available tools:
π± Connection Management
-
whatsapp_connection_status- Check whether the WhatsApp client is connected and logged in -
whatsapp_login_qr- Initiate QR code based login flow with image output -
whatsapp_login_with_code- Generate pairing code for multi-device login using phone number -
whatsapp_logout- Sign out the current WhatsApp session -
whatsapp_reconnect- Attempt to reconnect to WhatsApp using stored session
π¬ Messaging & Communication
-
whatsapp_send_text- Send text messages with reply and forwarding support -
whatsapp_send_contact- Send contact cards with name and phone number -
whatsapp_send_link- Send links with custom captions -
whatsapp_send_location- Send location coordinates (latitude/longitude) -
whatsapp_send_image- Send images with captions, compression, and view-once options -
whatsapp_send_video- Send videos from URLs with captions, compression, view-once, and GIF playback options -
whatsapp_send_sticker- Send stickers with automatic WebP conversion (supports JPG/PNG/GIF) -
whatsapp_send_document- Send document/file messages from URLs -
whatsapp_send_audio- Send audio files from URLs, including voice-note mode -
whatsapp_send_poll- Send WhatsApp polls
π Chat & Contact Management
-
whatsapp_list_contacts- Retrieve all contacts in your WhatsApp account -
whatsapp_list_chats- Get recent chats with pagination and search filters -
whatsapp_get_chat_messages- Fetch messages from specific chats with time/media filtering -
whatsapp_download_message_media- Download images/videos from messages -
whatsapp_archive_chat- Archive or unarchive a chat conversation -
whatsapp_react_message- React to a WhatsApp message -
whatsapp_edit_message- Edit a previously sent WhatsApp message -
whatsapp_revoke_message- Delete a WhatsApp message for everyone -
whatsapp_delete_message- Delete a WhatsApp message for the current account only -
whatsapp_mark_as_read- Mark a WhatsApp message as read -
whatsapp_star_message- Star or unstar a WhatsApp message
π₯ Group Management
-
whatsapp_group_create- Create new groups with optional initial participants -
whatsapp_group_join_via_link- Join groups using invite links -
whatsapp_group_leave- Leave groups by group ID -
whatsapp_group_participants- List all participants in a group -
whatsapp_group_manage_participants- Add, remove, promote, or demote group members -
whatsapp_group_invite_link- Get or reset group invite links -
whatsapp_group_info- Get detailed group information -
whatsapp_group_set_name- Update group display name -
whatsapp_group_set_topic- Update group description/topic -
whatsapp_group_set_locked- Toggle admin-only group info editing -
whatsapp_group_set_announce- Toggle announcement-only mode -
whatsapp_group_join_requests- List pending join requests -
whatsapp_group_manage_join_requests- Approve or reject join requests
MCP Endpoints
-
SSE endpoint:
http://localhost:8080/sse -
Message endpoint:
http://localhost:8080/message
MCP Configuration
Make sure you have the MCP server running: ./whatsapp mcp
For AI tools that support MCP with SSE (like Cursor), add this configuration:
{ "mcpServers": { "whatsapp": { "url": "http://localhost:8080/sse" } } }
Production Mode REST (docker)
Using Docker Hub:
docker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):/app/storages aldinokemal2104/go-whatsapp-web-multidevice rest --autoreply="Dont't reply this message please"
Using GitHub Container Registry:
docker run --detach --publish=3000:3000 --name=whatsapp --restart=always --volume=$(docker volume create --name=whatsapp):/app/storages ghcr.io/aldinokemal/go-whatsapp-web-multidevice rest --autoreply="Dont't reply this message please"
Production Mode REST (docker compose)
create docker-compose.yml file with the following configuration:
services: whatsapp: image: aldinokemal2104/go-whatsapp-web-multidevice container_name: whatsapp restart: always ports:
- "3000:3000" volumes:
- whatsapp:/app/storages command:
- rest
- --basic-auth=admin:admin
- --port=3000
- --debug=true
- --os=Chrome
- --account-validation=false
volumes: whatsapp:
services: whatsapp: image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice container_name: whatsapp restart: always ports:
- "3000:3000" volumes:
- whatsapp:/app/storages command:
- rest
- --basic-auth=admin:admin
- --port=3000
- --debug=true
- --os=Chrome
- --account-validation=false
or with env file (Docker Hub):
services: whatsapp: image: aldinokemal2104/go-whatsapp-web-multidevice container_name: whatsapp restart: always ports:
- "3000:3000" volumes:
- whatsapp:/app/storages environment:
- APP_BASIC_AUTH=admin:admin
- APP_PORT=3000
- APP_DEBUG=true
- APP_OS=Chrome
- WHATSAPP_ACCOUNT_VALIDATION=false
or with env file (GitHub Container Registry):
services: whatsapp: image: ghcr.io/aldinokemal/go-whatsapp-web-multidevice container_name: whatsapp restart: always ports:
- "3000:3000" volumes:
- whatsapp:/app/storages environment:
- APP_BASIC_AUTH=admin:admin
- APP_PORT=3000
- APP_DEBUG=true
- APP_OS=Chrome
- WHATSAPP_ACCOUNT_VALIDATION=false
Production Mode (binary)
- download binary from release
You can fork or edit this source code !
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.