Skip to content

Releases: Tauri-EPO/whatsapp-mcp

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 12 Sep 15:40
575ee0b

2.0.0 (2026-09-12)

⚠ BREAKING CHANGES

  • docker: the whisper compose profile is gone. A stack with COMPOSE_PROFILES=whisper fails its next up with 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-models volume 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

  • docker: take whisper out of the compose files; the server only knows WHISPER_URL (#435) (154b960), closes #434

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 12 Sep 14:03
9a00f59

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

Choose a tag to compare

@github-actions github-actions released this 09 Sep 10:54
3f03974

1.5.1 (2026-09-09)

Bug fixes

  • bridge: the store is opened through os.Root, so a symlink cannot lead a delete or a read outside it (#419) (42bbd43)
  • scripts: smoke.sh catches a whisper container orphaned by a redeploy (#416) (18e6d83), closes #415

v1.5.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 20:47
5bd64fb

1.5.0 (2026-09-08)

Features

  • scripts: smoke.sh works against manager-owned stacks (#384) (cc2337a), closes #380

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

  • bridge: timing knobs live on Bridge, testBridge drains its own pool (#390) (971ce81), closes #382

v1.4.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 15:24
1a5ae1c

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

  • mcp: one triage row for a contact known under both spellings (#373) (9ffe1fa), closes #366
  • mcp: the group-mention stream obeys the triage notes too (#369) (ded3696), closes #361

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 10:47
dbb5f1e

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:/...
Read more

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 18:58
73d2b1b

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

  • one phone-book lookup, one age clock, one message-field list (#269) (bf17757), closes #257

Dependencies

  • bump ggml-org/whisper.cpp from main to main (#262) (ed4ce35)

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 17:32
a09f46a

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

  • fall back to the phone book for chats stored without a name (#245) (a185f63), closes #230
  • resolve list_chats' last message by ordering, not timestamp equality (#237) (b2b813d), closes #218

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 05 Sep 01:55
6dabe79

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

  • adopt Release Please for automated versioning/changelog (#15) (bef1a96)

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-...
Read more