Bring your own source
Push messages from anything you can script into your own private index.
Zipppo pulls email itself (Gmail, Outlook, IMAP). For everything else —
WhatsApp, Signal, Discord, SMS, exported chat archives, anything — Zipppo's
MCP server has a write side: the index_message
tool. You run a reader on your own machine (a community bridge, a
ten-line script, an export parser), and it pushes each message into your
index with your personal zpo_ token. Pushed messages are
encrypted at rest, entity-extracted, embedded, and show up on your board,
in search, and in chat exactly like indexed email.
Quickest: one-liner from the app
If you're using a source tool that follows the connect convention (the community wa-archive tool does), go to Integrations → Add a source → Generate my connect command in the app. It gives you a copy-paste one-liner with your token baked in — run it in the tool's folder and it hooks up forwarding. Everything below is the manual version of that.
Push a message with one HTTP call
Mint a token on the MCP page, then:
curl -s https://mcp.zipppo.com/v1/ingest \
-H "Authorization: Bearer zpo_YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"source": "whatsapp",
"sender": "Ana <+5511999990000@s.whatsapp.net>",
"text": "See you at 7!",
"timestamp": "2026-07-08T14:03:00Z",
"thread_id": "family-chat"
}'
Or, from any MCP-capable agent, call the index_message tool
on https://mcp.zipppo.com/mcp — same fields, same token.
Fields
| Field | Meaning |
|---|---|
source (required) |
A short slug naming the kind of source: whatsapp,
discord, sms-archive… lowercase letters,
digits, ._-. |
sender (required) |
Who sent it — "Name <address>" or a bare
name. |
text (required) |
The message text (up to 50,000 characters). |
timestamp (required) |
When it was sent — ISO 8601 (2026-07-08T14:03:00Z) or
unix epoch seconds. |
thread_id |
The conversation it belongs to, so the board can group a chat's messages together. |
subject |
A title, if the source has one (chat name, topic). |
account |
Which of your source accounts it came from (e.g. your own
number or handle) — a display label, defaults to
source. |
external_id |
The source's own id for this message. Pass it so re-runs of your script dedupe cleanly; without it one is derived from sender + timestamp + text. |
Semantics & safety
- Your index only. A token can only ever write to the account that minted it. There is no way to name a different target.
- Idempotent. Pushing the same message twice returns
status: "duplicate"and stores nothing new — safe to re-run imports. - Encrypted like everything else. Pushed content is AES-256-GCM encrypted at rest with your per-user key, exactly like indexed email. See the privacy policy.
- Rate-limited. Per-user request ceilings and a daily push allowance per plan protect against runaway scripts.
- Write-only into the index.
index_messagecannot send, modify, or delete anything, anywhere — it only adds to your own searchable index.
Community readers
Zipppo doesn't build or bundle readers for closed messaging platforms — see the notice above for why. The community has built open-source bridges you can run yourself; for WhatsApp, search GitHub for “whatsapp mcp” (local Baileys-based readers that keep your session on your machine). Anything that can make an HTTP request — Python, a shell script, Zapier, an old laptop cron job — can be a Zipppo source.
Questions? Email schwartzidavid@gmail.com.