go-whatsapp-web-multidevice

GOWA - WhatsApp REST API with support for UI, Webhooks, and MCP. Built with Golang for efficient memory use.

1,813
459
<!-- markdownlint-disable MD041 --> <!-- markdownlint-disable-next-line MD033 --> <div align="center"> <!-- markdownlint-disable-next-line MD033 --> <img src="src/views/assets/gowa.svg" alt="GoWA Logo" width="200" height="200">

Golang WhatsApp - Built with Go for efficient memory use

</div>

Patreon
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!


release version
Build Image
Binary Release

Support for ARM & AMD Architecture along with MCP Support

Download:

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> rest instead of <binary>
  • for example: ./whatsapp rest instead 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

Feature

  • Send WhatsApp message via http API, docs/openapi.yml 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
  • Post Whatsapp Status
  • Compress image before send
  • Compress video before send
  • Change OS name become your app (it's the device name when connect via mobile)
  • --os=Chrome or --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
  • Customizable port and debug mode
  • --port 8000
  • --debug true
  • Auto reply message
  • --autoreply="Don't reply this message"
  • Webhook for received message
  • --webhook="http://yourwebhook.site/handler", or you can simplify
  • -w="http://yourwebhook.site/handler"
  • 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"

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):

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

Environment Variables

You can configure the application using environment variables. Configuration can be set in three ways (in order of
priority):

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

To use environment variables:

  1. Copy .env.example to .env in your project root (cp src/.env.example src/.env)
  2. Modify the values in .env according to your needs
  3. Or set the same variables as system environment variables

Available Environment Variables

VariableDescriptionDefaultExample
APP_PORTApplication port3000APP_PORT=8080
APP_DEBUGEnable debug loggingfalseAPP_DEBUG=true
APP_OSOS name (device name in WhatsApp)ChromeAPP_OS=MyApp
APP_BASIC_AUTHBasic authentication credentials-APP_BASIC_AUTH=user1:pass1,user2:pass2
APP_CHAT_FLUSH_INTERVALChat flush interval in days7APP_CHAT_FLUSH_INTERVAL=30
DB_URIDatabase connection URIfile:storages/whatsapp.db?_foreign_keys=onDB_URI=postgres://user:pass@host/db
WHATSAPP_AUTO_REPLYAuto-reply message-WHATSAPP_AUTO_REPLY="Auto reply message"
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_ACCOUNT_VALIDATIONEnable account validationtrueWHATSAPP_ACCOUNT_VALIDATION=false
WHATSAPP_CHAT_STORAGEEnable chat storagetrueWHATSAPP_CHAT_STORAGE=false

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.24.0 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
  • export CGO_CFLAGS_ALLOW="-Xpreprocessor"
  • Linux:
  • sudo apt update
  • sudo apt install ffmpeg
  • Windows (not recomended, prefer using WSL):
  • install ffmpeg, download here
  • add to ffmpeg to environment variable

How to use

Basic

  1. Clone this repo: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice
  2. Open the folder that was cloned via cmd/terminal.
  3. run cd src
  4. run go run . rest (for REST API mode)
  5. Open http://localhost:3000

Docker (you don't need to install in required)

  1. Clone this repo: git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice
  2. Open the folder that was cloned via cmd/terminal.
  3. run docker-compose up -d --build
  4. open http://localhost:3000

Build your own binary

  1. Clone this repo git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice
  2. Open the folder that was cloned via cmd/terminal.
  3. run cd src
  4. run
  5. Linux & MacOS: go build -o whatsapp
  6. Windows (CMD / PowerShell): go build -o whatsapp.exe
  7. run
  8. Linux & MacOS: ./whatsapp rest (for REST API mode)
  9. run ./whatsapp --help for more detail flags
  10. Windows: .\whatsapp.exe rest (for REST API mode)
  11. run .\whatsapp.exe --help for more detail flags
  12. open http://localhost:3000 in browser

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.

  1. Clone this repo git clone https://github.com/aldinokemal/go-whatsapp-web-multidevice
  2. Open the folder that was cloned via cmd/terminal.
  3. run cd src
  4. run go run . mcp or build the binary and run ./whatsapp mcp
  5. The MCP server will start on http://localhost:8080 by 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

  • whatsapp_send_text - Send text messages
  • whatsapp_send_contact - Send contact cards
  • whatsapp_send_link - Send links with captions
  • whatsapp_send_location - Send location coordinates

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)

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"

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:

or with env file

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
 - APP_ACCOUNT_VALIDATION=false

volumes:
 whatsapp:

Production Mode (binary)

You can fork or edit this source code !

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: whatsapp_send_text, whatsapp_send_contact, whatsapp_send_link, whatsapp_send_location
  • Compatible with MCP-enabled AI tools and agents

HTTP REST API

FeatureMenuMethodURL
Login with Scan QRGET/app/login
Login With Pair CodeGET/app/login-with-code
LogoutGET/app/logout
ReconnectGET/app/reconnect
DevicesGET/app/devices
User InfoGET/user/info
User AvatarGET/user/avatar
User Change AvatarPOST/user/avatar
User Change PushNamePOST/user/pushname
User My GroupsGET/user/my/groups
User My NewsletterGET/user/my/newsletters
User My Privacy SettingGET/user/my/privacy
User My ContactsGET/user/my/contacts
Send MessagePOST/send/message
Send ImagePOST/send/image
Send AudioPOST/send/audio
Send FilePOST/send/file
Send VideoPOST/send/video
Send ContactPOST/send/contact
Send LinkPOST/send/link
Send LocationPOST/send/location
Send Poll / VotePOST/send/poll
Send PresencePOST/send/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
Read Message (DM)POST/message/:message_id/read
Star MessagePOST/message/:message_id/star
Unstar MessagePOST/message/:message_id/unstar
Join Group With LinkPOST/group/join-with-link
Leave GroupPOST/group/leave
Create GroupPOST/group
Add Participants in GroupPOST/group/participants
Remove Participant in GroupPOST/group/participants/remove
Promote Participant in GroupPOST/group/participants/promote
Demote Participant in GroupPOST/group/participants/demote
List Requested Participants in GroupGET/group/participant-requests
Approve Requested Participant in GroupPOST/group/participant-requests/approve
Reject Requested Participant in GroupPOST/group/participant-requests/reject
Unfollow NewsletterPOST/newsletter/unfollow
✅ = Available
❌ = Not Available Yet

User Interface

MCP UI

  • Setup MCP (tested in cursor)
    Setup MCP
  • Test MCP
    Test MCP
  • Successfully setup MCP
    Success MCP

HTTP REST API UI

DescriptionImage
HomepageHomepage
LoginLogin
Login With CodeLogin With Code
Send MessageSend Message
Send ImageSend Image
Send FileSend File
Send VideoSend Video
Send ContactSend Contact
Send LocationSend Location
Send AudioSend Audio
Send PollSend Poll
Send PresenceSend Presence
Send LinkSend Link
My GroupMy Group
Create GroupCreate Group
Join Group with LInkJoin Group with Link
Manage ParticipantManage Participant
My NewsletterMy Newsletter
My ContactsMy Contacts

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.

Repository

AL
aldinokemal

aldinokemal/go-whatsapp-web-multidevice

Created

February 9, 2022

Updated

July 7, 2025

Language

Go

Category

Communication