Releases: Tauri-EPO/whatsapp-mcp
Releases · Tauri-EPO/whatsapp-mcp
Release list
v2.0.0
2.0.0 (2026-09-12)
⚠ BREAKING CHANGES
- docker: the
whispercompose profile is gone. A stack with COMPOSE_PROFILES=whisper fails its nextupwith an unknown service. Migration: remove COMPOSE_PROFILES from the environment, run whisper.cpp's image yourself (docs/DOCKER.md "Voice-note transcription" has a compose that attaches it to the stack's network; the old<project>_whisper-modelsvolume still holds the downloaded model and can be reused), and set WHISPER_URL=http://whisper:8178/inference. WHISPER_MODEL_NAME, WHISPER_THREADS, WHISPER_MEM_LIMIT and WHISPER_CPUS belong to that project now, not to this stack.
Features
v1.6.0
1.6.0 (2026-09-12)
Features
- docker: one whisper shared by every stack on the host (#427) (f26a203), closes #424
- mcp: send_file / send_audio_message accept the bytes inline (media_base64) (#433) (4511689), closes #423
Bug fixes
- scripts: smoke.sh probes the whisper at WHISPER_URL, not a fixed 127.0.0.1:8178 (#429) (c92dcc0), closes #425
Dependencies
v1.5.1
v1.5.0
1.5.0 (2026-09-08)
Features
Bug fixes
- a media row with no key is a permanent miss, not a retry (#401) (e3b27ba), closes #392
- audio the sender's phone no longer has is recorded, not re-fetched (#391) (18ff6bc), closes #378
- bridge: gofmt group_members_test.go so the lint gate is green on main (#405) (0097a14)
- bridge: record which namespace a stored sender belongs to (#383) (aac47c2), closes #375
- bridge: the group owner comes back dual-addressed, like a participant (#400) (f1c589e), closes #396
- gofmt -s on that one file (two lines of alignment), nothing else. (0097a14)
- mcp: "ok @you" is a closing message for the ordinary rule too (#414) (ef40edf), closes #411
- mcp: a mention that only says "ok" no longer counts as waiting (#404) (b198e70), closes #395
- mcp: a third party's "ok" no longer hides a pending mention (#410) (40f0ef3)
- mcp: a whisper outage no longer parks a voice note for ever (#386) (bc0a10d), closes #377
- mcp: py-modules lists every module, and the tree test keeps it that way (#403) (fdfd952), closes #398
- mcp: status@broadcast is the status feed, not a conversation (#387) (b68c447)
- mcp: the sender's namespace comes from the store, not from its length (#389) (a48e857), closes #375
Refactoring
v1.4.0
1.4.0 (2026-09-08)
Features
- mcp: every attachment is an MCP resource, and list_media links to it (#372) (2b8bd89), closes #367
- mcp: read_media downscales images for the model (#374) (3ab583d)
- mcp: read_media renders PDF pages as images (#376) (118113f), closes #368
- mcp: read_media returns non-image media as typed content blocks (#370) (9306b96)
Bug fixes
v1.3.0
1.3.0 (2026-09-08)
Features
- bridge: bound and cancel automatic media downloads (#348) (4c5ed3b), closes #320
- bridge: cache group rosters in a group_members table (#327) (3f51ce6)
- bridge: mark a whole chat read without listing message IDs (#304) (ff2745f), closes #291
- bridge: store mentions and expose the owner identity (#326) (952afc8)
- mcp: a per-tool latency histogram on /metrics (#359) (0bbb1eb), closes #322
- mcp: bridge_status reports the published endpoint certificate expiry (#300) (a2e54d7), closes #277
- mcp: bridge_status reports whether whisper is available (#295) (1a99299), closes #284
- mcp: chat_jid takes a list, exclude_chat_jid mirrors it, message_stats counts a query (#303) (40320d4), closes #289
- mcp: coverage reports the voice-note transcription backlog (#363) (42141f4), closes #334
- mcp: coverage takes a window and lists which chats to backfill (#311) (56c900c)
- mcp: get_contact_chats includes the groups a contact belongs to (#340) (8aad048), closes #288
- mcp: mark a chat handled or snoozed so list_unanswered stops repeating it (#328) (52d1213), closes #287
- mcp: mentions_me filter and group mentions in triage (#330) (d763f48)
- mcp: notes for chats, contacts and messages (#306) (58319eb)
- mcp: notes inline in listings, compact for append keys (#308) (b473bf5), closes #286
- mcp: rank audio hits with an FTS5 index over transcripts (#299) (85b5a73), closes #275
- mcp: read_media returns the file's bytes, not a server path (#325) (217365f)
- mcp: read_media(as_text=True) reads PDF, DOCX and XLSX as text (#329) (6f6863c)
- mcp: return the name a contact gave themselves beside the one you saved (#310) (9ac3ffa), closes #280
- mcp: sanitise name fields instead of wrapping them (#302) (4cf4c12), closes #273
- mcp: TRANSCRIBE_ON_INGEST can fetch uncached voice notes (#296) (3f52ae0), closes #276
- mcp: triage filters on list_unread, min_messages on list_unanswered (#358) (4fb46cc)
Bug fixes
- bridge: one canonical UTC spelling for every stored timestamp (#297) (2e525da)
- bridge: one media transfer per destination file (#345) (b9a1a35), closes #319
- bridge: repair timestamps an older bridge wrote after the migration (#352) (9a651ab), closes #335
- bridge: the StreamReplaced delay is a Bridge field, and CI runs -race (#365) (a2669e4)
- mcp: a page size below 1 is refused instead of paging forever (#356) (da8d2e6), closes #309
- mcp: denying download_media stops the implicit fetches too (#362) (97a9e7e), closes #350
- mcp: every matching transcript is a candidate, so a scoped count is exact (#343) (ba90a03), closes #316
- mcp: keep LIDs out of the phone-number fields (#305) (34401ab), closes #281
- mcp: note searches walk their matches in bounded batches (#353) (5887c24), closes #315
- mcp: one listing row for a contact known under both spellings (#364) (f056003)
- mcp: page messages on the full store key so forwarded copies are not skipped (#342) (c0d5c7a), closes #313
- mcp: sanitise and wrap the group topic and the poll question (#360) (a1540f6), closes #332
- mcp: shape list_chats, and refuse arguments no tool declares (#307) (15acb59), closes #282
- mcp: the ingest walk advances past audio it cannot read ([#347](https:/...
v1.2.0
1.2.0 (2026-09-07)
Features
- bridge: enforce WHATSAPP_ALLOW_TOOLS / _DENY_TOOLS on the REST endpoints (#264) (8c829b9), closes #255
- exclude_groups keeps direct conversations only (#263) (c1e2336), closes #256
- mcp: list_messages(query=...) also matches stored voice-note transcripts (#267) (3ffa34e), closes #254
- mcp: transcribe inbound voice notes in the background (TRANSCRIBE_ON_INGEST) (#265) (21f7d9d)
Bug fixes
- compare after/before against a normalised timestamp in every message query (#266) (14841c2), closes #253
Refactoring
Dependencies
v1.1.0
1.1.0 (2026-09-07)
Features
- cache voice-note transcripts in notes.db and expose them in list_messages (#246) (4511df7), closes #221
- compact responses for bulk reads (fields, omit_nulls, max_content_chars, count_only) (#252) (159de8e), closes #223
- coverage tool reporting archive extent and sync gaps (#244) (fec27af), closes #229
- dry_run on send_message, send_file, edit_message (#250) (3c43cda), closes #232
- export_messages streams the archive to NDJSON on disk (#249) (372c649), closes #227
- list_messages filters from_me, has_media, media_type, exclude_groups (#235) (602628d), closes #224
- list_unanswered — chats where the other side spoke last (#248) (9bd28e8), closes #219
- list_unread exclude_groups and max_age_days (#241) (82f3aa7), closes #225
- mark message content as untrusted in tool descriptions and responses (#251) (54edbf1), closes #231
- message_stats tool for counts by chat, day, month or sender (#243) (1cd6972), closes #228
- paginate list_group_members (#236) (284bddb), closes #226
- request_history tool for on-demand history sync (#239) (f1f6797), closes #220
- return media notes wherever media is surfaced, and prompt the agent to annotate (#238) (1d7abf6), closes #222
- WHATSAPP_ALLOW_TOOLS / WHATSAPP_DENY_TOOLS per-tool allow/deny (#247) (4109b6e)
- WHATSAPP_READ_ONLY hides and refuses mutating tools (server + bridge) (#242) (23176b7)
Bug fixes
v1.0.0
1.0.0 (2026-09-05)
⚠ BREAKING CHANGES
- mcp: the three tools return the page envelope instead of a bare list.
- mcp: failed tool calls return {"error": {...}} instead of {"success": false} / [] / None. Successful shapes are unchanged.
- mcp: tool parameter names and order changed; clients calling by name must update (see docs/TOOLS.md conventions).
- mcp: requires mcp>=2.1.1 and cryptography>=50; Intel macOS is no longer a supported install target for this fork.
release
Features
- /api/version and build identity for both images (#86) (52f6644), closes #56
- add explicit message read receipts (#201) (e35224e)
- add image media support in webhook forwarding (#45) (43d7794)
- bridge: --full-history-pair flag to request full history at pair time (#37) (59b834f)
- bridge: add macOS launchd installer (#116) (dbc63ae)
- bridge: add on-demand history sync for a single chat (#168) (f44440b)
- bridge: add outbound webhook opt-out (#204) (6c3f3fe)
- bridge: add support for stickers (#110) (5d98686)
- bridge: capture incoming WhatsApp call events (#39) (4f1664a)
- bridge: configurable linked-device name via WHATSAPP_DEVICE_NAME (#157) (1a71032), closes #156
- bridge: decode poll votes from history sync; report undecodable votes (#92) (67d0ed7), closes #59
- bridge: forward reaction webhook events (#129) (2c8062f)
- bridge: media auto-download switch, retention sweep, store size in health (#91) (cf19f6b), closes #60
- bridge: persist chat read state from read receipts + history-sync backfill (#155) (6c6ec00)
- bridge: recover expired media via WhatsApp media-retry (#21) (e9a307c), closes #6
- bridge: refuse to start when another bridge holds the same store (#24) (3f27cd1), closes #11
- bridge: REST starts before pairing; /api/health is liveness, /api/ready readiness (#85) (5a2e090), closes #55
- bridge: WHATSAPP_BRIDGE_BIND and WHATSAPP_BRIDGE_ALLOWED_HOSTS (#90) (716a87a), closes #58
- capture inbound reactions and add /api/react endpoint (#108) (58645d5), closes #106
- conversation allow-list (WHATSAPP_ALLOWED_CHATS) for least-privilege agents (#39) (043dbfd), closes #15
- delete_message tool (revoke for everyone / local delete) + /api/delete (#41) (69b0bde), closes #16
- Docker Compose stack for bridge + MCP over streamable HTTP (#22) (a340663), closes #7
- edit and forward messages (#162) (99d2115), closes #121
- FTS5 full-text message search (accent-insensitive, whole words, operators) (#38) (495588e), closes #10
- group management endpoints and tools, send_typing tool (#161) (4c835b8), closes #120
- handle incoming media (images, audio, videos, documents) and show names in group messages (#34) (141b9a1)
- list_group_members tool + /api/group/members endpoint (#40) (af4a299), closes #17
- mcp: add @-mention support to send_message (#190) (b86a57d)
- mcp: agent notes on media in notes.db (annotate/get/search_media_notes) (#185) (7e8fc13), closes #97
- mcp: bearer-token auth for the http/sse transports (WHATSAPP_MCP_TOKEN) (#33) (d869efb), closes #26
- mcp: bridge_status tool (#159) (69f65f0), closes #118
- mcp: cursor pagination with has_more on the list tools (#157) (0ed507a), closes #110
- mcp: expose deleted_at on revoked messages, optional include_deleted filter (#69) (1b4fef9), closes #44
- mcp: expose filename on list_messages / get_message_context (#23) (a1fb223), closes [#9](https://github.com/Tauri-EPO/whatsapp-...