Semantically search WhatsApp history
recallSearch whole WhatsApp history by meaning and exact words at once. Ask in your own words or another language, and get the message you're looking for, even if you forget the exact phrasing.
Instructions
Search by meaning and by words at once over the whole WhatsApp history — answers "the invoice Dan mentioned", "the address Ana sent", "what did they say about the trip". A paraphrase or another language still hits through its meaning, and a short or foreign-language question still hits through its words; the two rankings are fused. A match found by meaning weighs a little less with age (85% a month on, never under 70%), so the fresher of two close matches comes first but a clearly closer old one still does; one chat takes at most three leading places before other chats' hits, and a near-duplicate trails the list. For an exact string — an id, a phone number, a URL — search_messages is the better tool.
Each result carries its date, a fused score, matched ("words", "meaning" or
"both") and the cosine similarity when its meaning ranked it. chat_id, since,
until and from narrow the search exactly like search_messages — including a
name that resolves to exactly one person. A hit marked "index only" is a
message wazap holds only as text: quote its words; get_message returns them, but
download_media has nothing to open and it cannot be replied to or forwarded.
A hit found only by meaning must clear the similarity floor, so a question with
no answer comes back empty; when only weak meaning matches survive, the output
says so — do not present them as found facts.
When semantic recall is off or its embedding setup is missing, the tool does
not dead-end: it falls back to a keyword search over the local history, marked
mode: "keyword_fallback", and recall_unavailable.fix names the command
that turns semantic recall on. An error remains only when even the fallback
cannot run.
Each hit's sender carries the same identity fields as search_messages, and
freshness says whether the local history may be partial or stale. Every
answer also declares its window: the semantic path reports how many messages
the index covers, and a keyword fallback carries the same coverage block
search_messages does.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Only messages this person sent: "me", a phone number, a contact/chat id, or a name that resolves to exactly one person (the error names the candidates when it does not) | |
| limit | No | Maximum number of results (1-50) | |
| query | Yes | What to find, said any way — the meaning is what matches | |
| since | No | Only messages from this moment on: a date ("2026-09-01") or an ISO timestamp | |
| until | No | Only messages up to this moment: a date or an ISO timestamp | |
| chat_id | No | Restrict the search to this chat | |
| account_id | No | Registry account id (default, work, …). Omit to resolve from chat_id or message_id, or the default account. |