OpenWA MCP Server
Bridges AI agents to the OpenWA WhatsApp API, providing 40 tools for managing sessions, sending messages (text, images, video, documents, audio, stickers, location, contacts, polls), message actions (reply, forward, react, edit, delete), reading chat history and messages, managing contacts and groups, and configuring webhooks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenWA MCP Serversend a WhatsApp message to mom saying I'll be home by 8pm"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenWA MCP Server
Model Context Protocol (MCP) server that bridges AI agents to the OpenWA WhatsApp API. Built with Bun + Hono and the official @hono/mcp transport.
Exposes 22 tools covering messaging, chat/contact reads, and read-only session status — so an agent (MaxKB, Claude, Cursor, any MCP client) can read and send WhatsApp messages through your self-hosted OpenWA gateway. Session start/stop, webhook admin, group admin, and block/unblock are implemented in the OpenWA REST API but intentionally not registered as MCP tools (see Tool allowlist below).
Features
22 curated tools, allowlisted from the full OpenWA REST API spec — no infra/admin surface exposed to the agent
Streamable HTTP transport at
/mcp(single port, no extra process)Zod-validated inputs on every tool
Optional bearer-token auth on the MCP endpoint (
MCP_TOKEN)Zero config — one env var (API key), works with the default OpenWA setup
Docker-ready multi-stage build (oven/bun)
Related MCP server: wa-bridge
Requirements
Node 22+ (or just use the included Dockerfile)
A running OpenWA instance
An OpenWA API key (
owa_k1_...) — create one in the dashboard under API Keys (OPERATOR role for send tools)
Quick Start
cp .env.example .env # set OPENWA_URL + OPENWA_API_KEY
bun install
bun run dev # → http://localhost:3000/mcpDocker
cp .env.example .env
docker compose up -d --buildConfiguration
Env var | Default | Description |
|
| Base URL of your OpenWA instance |
| — | OpenWA API key (required) |
| (empty) | Bearer token MCP clients must send. If set, requests without |
|
| Port the MCP server listens on |
Connecting a client
Point any MCP client at the Streamable HTTP endpoint. If MCP_TOKEN is set, include it in headers:
{
"mcpServers": {
"openwa": {
"type": "http",
"url": "http://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer <MCP_TOKEN>"
}
}
}
}Verify the handshake (include the token if MCP_TOKEN is set):
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer <MCP_TOKEN>" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'Tools (22)
Sessions (read-only) — list_sessions · session_status
Send — send_text · send_menu · send_image · send_video · send_document · send_audio · send_location · send_contact · send_poll
Message actions — reply_message · forward_message · react_message · edit_message · delete_message
Read — chat_history (live from WhatsApp) · list_messages (from local DB) · list_chats
Contacts — contact_check · list_contacts · get_contact
Tool allowlist
The full OpenWA REST API surface is implemented in src/mcp.ts's openwa() client, but only the tools listed above are registered on the MCP server — everything else (session_qr, session_start, session_stop, send_sticker, block_contact, unblock_contact, all group_* tools, and all webhook_* tools) is intentionally left unregistered, not just hidden. See the ENABLED_TOOLS allowlist and tool() wrapper near the top of src/mcp.ts.
Rationale: this server is meant to back a chat agent (see the Vivita-style system prompt pattern) that reads/sends messages and looks up chats/contacts — it has no legitimate reason to start/stop WhatsApp sessions, manage webhooks, or administer groups. Keeping those out of the registered tool set means a leaked MCP_TOKEN or a prompt-injected tool call can't touch infra state, even though the underlying OpenWA API key could technically do more. To re-enable a tool, add its name to ENABLED_TOOLS in src/mcp.ts.
Project Structure
openwa-mcp/
├── src/
│ ├── index.ts # Hono app + StreamableHTTP transport at /mcp
│ └── mcp.ts # MCP server definition + tool allowlist + tools (Zod schemas)
├── Dockerfile # multi-stage oven/bun build
├── docker-compose.yml
├── package.json
├── .env.example
└── README.mdNotes
Two auth layers: the optional
MCP_TOKENgates the MCP endpoint itself (clients sendAuthorization: Bearer <token>); theOPENWA_API_KEYis held server-side and forwarded as theX-API-Keyheader to OpenWA on every call. Clients never see the OpenWA key.Send tools return
201= accepted by the gateway, not delivered. Checkcontacts/checkfirst for new numbers.chat_historyrequires the Baileys engine on OpenWA (whatsapp-web.js does not support it — returns 501).Media sends accept either
urlorbase64(+mimetype); decoded size capped at 50 MiB by OpenWA.No quick-reply buttons — unofficial engines (whatsapp-web.js/Baileys) can't render interactive buttons; that's an official-Cloud-API-only feature. Use
send_menu(numbered text menu) instead.If you expose the server publicly: set
MCP_TOKEN, and use a dedicated session-scoped OpenWA key (OPERATOR at most) rather than a master key.
License
MIT
This server cannot be installed
Maintenance
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
- FlicenseNot gradedqualityCmaintenanceWhatsApp MCP server that exposes messaging, groups, contacts, and profile management as tools and resources for AI agents, supporting Baileys and Meta Cloud API.19
- AlicenseNot gradedqualityAmaintenanceA self-hosted WhatsApp bridge that exposes a stdio MCP server with ~20 tools for reading conversations, sending messages, managing groups, contacts, and aliases, enabling AI agents to operate WhatsApp directly.2MIT
- AlicenseNot gradedqualityBmaintenanceMCP server exposing WhatsApp Cloud API operations as tools for AI agents like Claude Code, Cursor, and Codex.MIT
- FlicenseCqualityBmaintenanceMCP server exposing WhatsApp Web REST API (wwebjs-api) as ~149 automated tools, enabling AI agents to send messages, manage sessions, and interact with WhatsApp through natural language.100
Related MCP Connectors
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/LoopyOratory/openwa-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server