What's New in v9.1.0
🤖 Unified MCP, Reliable Multi-Device Chatwoot & Interactive Messages
Version 9.1.0 brings MCP into the REST server, so API consumers and AI agents share one process, one WhatsApp session/device registry, one port, and one authentication boundary. It also fixes per-device Chatwoot forwarding and makes native WhatsApp interactive messages readable in Chatwoot.
⚠️ Breaking Changes
MCP Runs Through rest
- The standalone
mcpcommand is no longer available - Start both REST API and MCP with
./whatsapp rest - Connect MCP clients to
http://<host>:<port>/mcp(default:http://localhost:3000/mcp) - Existing REST basic authentication also protects the MCP endpoint
- The previous granular MCP surface is consolidated into five tools:
whatsapp_send,whatsapp_message,whatsapp_chat,whatsapp_group, andwhatsapp_app
Migration
./whatsapp mcp→./whatsapp resthttp://localhost:8080/sse→http://localhost:3000/mcp- MCP uses streamable HTTP transport at
/mcp - Provide
device_idper MCP call when needed, or select a device for the connection withX-Device-Id
✨ New Features
Unified MCP Endpoint & Consolidated Tools (#788)
- Serves MCP from the existing REST process at
/mcp, sharing the same WhatsApp lifecycle and device state - Consolidates the public MCP surface into five action-based tools
- Supports explicit
device_id,X-Device-Id, and default-device resolution for MCP calls - Validates action-specific MCP input schemas before handlers execute
- Restricts MCP routing to supported POST/DELETE operations, avoiding unsupported GET streaming requests
Chatwoot Supports WhatsApp Interactive Messages (#794)
- Renders native WhatsApp CTA buttons and interactive messages as useful plain text in Chatwoot
- Includes labels and the URL, phone number, or copy code for supported button types
- Preserves a readable fallback for interactive button types that cannot be reduced to one line
🐛 Bug Fixes
Per-Device Chatwoot Forwarding Keeps Device Context (#793)
- Preserves the WhatsApp device context in asynchronous webhook and Chatwoot forwarding work
- Fixes live events silently skipping the configured per-device Chatwoot inbox
- Covers messages, receipts, deletes, groups, presence, calls, newsletters, and label app-state events
Cleaner Chatwoot Reaction Notes (#795)
- Removes redundant raw WhatsApp message IDs from reaction notes
- Keeps replies threaded to the reacted-to Chatwoot message as before
Unstar Handles Explicit false
- Accepts
is_starred: falsecorrectly through both REST and MCP message actions
🔧 Technical Improvements
Release Safety & Metadata
- Adds a guarded release workflow skill that checks the exact app version, clean/synced
main, tag/release availability, and tests before a tag push - Updates the application version to
v9.1.0so runtime metadata matches this release
Dependencies & Documentation
- Refreshes
go.mau.fi/whatsmeowthrough the three dependency updates included in this release - Adds an explicit v9 Breaking Changes entry to the README
- Clarifies that MCP is an endpoint of the REST server, not a separate process
What's Changed
- feat: unify MCP endpoint and consolidate tools (#788) by @aldinokemal
- feat(chatwoot): render InteractiveMessage (native CTA buttons) as text (#794) by @Claudi0-Oliveira
- fix(webhook): propagate device context to async forward goroutines (#793) by @Claudi0-Oliveira
- fix(chatwoot): drop redundant WhatsApp message ID from reaction notes (#795) by @Claudi0-Oliveira
- chore: update
go.mau.fi/whatsmeowto latest snapshots by @aldinokemal - feat: add guarded new release skill by @aldinokemal
- feat: increase version to
v9.1.0by @aldinokemal - docs: clarify v9 MCP REST unification by @aldinokemal
Contributors
New Contributors
- @Claudi0-Oliveira made their first contribution in #793
Full Changelog: v9.0.1...v9.1.0