TimelinesAI WhatsApp
README.md
# WhatsApp MCP by TimelinesAI
> **Run your team's WhatsApp inbox from Claude, ChatGPT, Cursor or any AI assistant.**
[](https://opensource.org/licenses/MIT)
[](https://modelcontextprotocol.io)
[](https://claude.ai)
[](https://chatgpt.com/plugins/plugin_asdk_app_6a26d97bd46081918642a70d07cf07d4)
[](https://cursor.com)
[](https://smithery.ai/servers/tools-3uci/timelinesai-whatsapp)
Connect your **TimelinesAI WhatsApp inbox** to Claude, ChatGPT, Cursor, Codex, Grok or any MCP client. Ask what needs a reply, then reply, react, label and assign chats from a prompt. 34 tools, all running as **you**, for both regular WhatsApp numbers and WhatsApp Business API (WABA) numbers.
**Included in every TimelinesAI plan at no extra charge.** [Website](https://timelines.ai/whatsapp-mcp?utm_source=github&utm_medium=mcp_directory&utm_campaign=mcp_launch&utm_content=readme_top) · [Setup guide](https://timelines.ai/whatsapp-mcp-guide) · [MCP Academy](https://timelines.ai/academy/mcp)
---
## What is this?
The TimelinesAI MCP server is a remote control for your real WhatsApp inbox inside [TimelinesAI](https://timelines.ai). Connect once with your TimelinesAI login, then your AI assistant gains 34 tools across **chat discovery**, **messaging**, **triage** (labels + assignments) and **workspace introspection**, for both regular WhatsApp numbers (connected by QR code) and **WhatsApp Business API (WABA)** numbers.
It's a hosted server: nothing to install, no API keys. Your assistant connects to `https://mcp.services.timelines.ai/mcp` and you sign in once.
No sandbox. Writes are real and visible to your contacts. Recipients cannot tell whether a message came from the UI or from an AI assistant: it's all just you.
## Requirements
- A **TimelinesAI account** with **at least one connected WhatsApp number** in your workspace. Without a connected number, most tools return empty results or errors. The MCP is a remote control for your real inbox, not a sandbox.
- An AI assistant that supports remote MCP servers (all the clients below do).
Don't have a TimelinesAI account yet? **[Start a 10-day free trial →](https://app.timelines.ai/register/?utm_source=github&utm_medium=mcp_directory&utm_campaign=mcp_launch&utm_content=readme_requirements)**
---
## Quick setup (~1 min)
Server URL for every client: `https://mcp.services.timelines.ai/mcp`
### ChatGPT
Open the **[TimelinesAI plugin in ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6a26d97bd46081918642a70d07cf07d4)**, click **Connect** and sign in with your TimelinesAI account. Then ask: *"@TimelinesAI what needs me today?"*
### Claude (claude.ai and Claude Desktop)
In Claude, open **Customize → Connectors → Add custom connector**, paste the server URL and sign in with your TimelinesAI account.
### Claude Code
```bash
claude mcp add --transport http timelinesai https://mcp.services.timelines.ai/mcp
```
Claude Code opens a browser tab the first time a tool is used. Sign in with your TimelinesAI account.
Prefer a plugin? `/plugin marketplace add InitechSoftware/whatsapp-mcp-by-timelinesai`, then `/plugin install timelinesai-whatsapp@timelinesai`. The plugin launches a local proxy, so it needs **Node.js 18+**; the command above doesn't.
### Cursor
**[Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=timelinesai&config=eyJ1cmwiOiJodHRwczovL21jcC5zZXJ2aWNlcy50aW1lbGluZXMuYWkvbWNwIn0%3D)** (one click), or add this to `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"timelinesai": {
"url": "https://mcp.services.timelines.ai/mcp"
}
}
}
```
The sign-in window opens on the first tool call.
### Codex
Add to `~/.codex/config.toml`:
```toml
[mcp_servers.timelinesai]
url = "https://mcp.services.timelines.ai/mcp"
```
Then run `codex mcp login timelinesai` once and approve in the browser. Codex doesn't start the sign-in on its own.
### Grok Build
```bash
grok mcp add timelinesai https://mcp.services.timelines.ai/mcp
```
Then type `/mcps`, select **timelinesai** and press **`i`** to sign in. Grok Build doesn't start the sign-in on its own.
### Any other MCP client
Add `https://mcp.services.timelines.ai/mcp` as a remote server (Streamable HTTP) and sign in when prompted.
> See [`examples/`](examples/) for ready-to-copy config files.
---
## First thing to try
After connecting, ask your assistant:
> *"What needs me today?"*
or, for a tour:
> *"What tools does the timelinesai MCP server expose? Group them by purpose and give me one example prompt per group."*
---
## Tool catalog (34 tools)
Two parallel sets of tools (one for **regular WhatsApp numbers** connected by QR code, one for **WhatsApp Business API (WABA)** numbers) plus three workspace tools shared by both. Use the set that matches the number: `workspace_whatsapp_accounts` lists QR numbers, `waba_accounts` lists WABA numbers.
| Group | Tools |
|---|---|
| Workspace (shared) | 3 |
| WhatsApp: QR-connected numbers | 14 |
| WhatsApp Business API (WABA) | 17 |
| **Total** | **34** |
### Workspace: 3 tools
Read-only introspection. Cheap to call. Shared by both sets.
| Tool | Purpose |
|---|---|
| `workspace_quotas` | Current plan, seats, messaging + API call quotas, billing period |
| `workspace_whatsapp_accounts` | Connected QR WhatsApp accounts (id, phone, owner, status) |
| `workspace_team` | Teammates, roles, invitation status, account bindings. Use for assign emails in both sets |
### WhatsApp (QR-connected numbers): 14 tools
#### Chat discovery + inspection: 4 tools
Browse and read. No writes.
| Tool | Purpose |
|---|---|
| `list_chats` | Filter chats by status, labels, assignee, group/direct, phone, name, dates, WA account. Paginated 50/page |
| `chat_details` | Full metadata for a single chat |
| `chat_history` | List messages in a chat. Filter by date and direction, page with message-UID cursors |
| `message_details` | Inspect a single message |
#### Messaging writes: 4 tools
**Quota-consuming.** Same monthly messaging budget as the TimelinesAI UI.
| Tool | Purpose |
|---|---|
| `chat_send_message` | Send a message (text, attachment, or reply) in an existing chat |
| `whatsapp_account_send_message` | Send a message to any phone via a specific WA account (creates the chat if none exists: a cold send) |
| `message_reply` | Threaded reply to a specific message |
| `message_react` | Set or clear an emoji reaction on a message |
#### Chat mutations: 6 tools
State + triage operations on chats. Idempotent label and assign ops.
| Tool | Purpose |
|---|---|
| `chat_open` | Reopen a closed chat |
| `chat_close` | Close a chat |
| `chat_assign` | Assign chat to a teammate by email (use `workspace_team` to discover emails) |
| `chat_unassign` | Unassign current responsible teammate |
| `chat_set_label` | Add a label to a chat |
| `chat_remove_label` | Remove a label from a chat |
### WhatsApp Business API (WABA): 17 tools
#### Accounts + chat discovery: 5 tools
Browse and read. No writes.
| Tool | Purpose |
|---|---|
| `waba_accounts` | WABA numbers you can send from. Use `id` as `waba_account_id` |
| `waba_list_chats` | WABA chats you can see. Filter by open/closed, assignee, WABA account, phone; 50/page. Check `service_window_is_open` before sending |
| `waba_chat_details` | One WABA chat: service window, assignment, labels, WABA account |
| `waba_chat_history` | Messages in a WABA chat, newest first. Filter by date and direction, page with message-UID cursors |
| `waba_message_details` | Inspect one WABA message; failed sends include `failure_reason` |
#### Templates: 2 tools
| Tool | Purpose |
|---|---|
| `waba_templates` | Message templates you can use, 50/page. Only `APPROVED` templates can be sent |
| `waba_template_details` | One template's components, status, and the WABA accounts it can be sent from. Call before any template send |
#### Messaging writes: 4 tools
**Template sends incur a Meta charge.** Free text only works while the chat's service window is open.
| Tool | Purpose |
|---|---|
| `waba_start_chat` | Start a new chat with a phone number using an approved template. Meta charge |
| `waba_chat_send_message` | Free-text message in an existing WABA chat, only while `service_window_is_open` is true |
| `waba_chat_send_template` | Send an approved template in an existing WABA chat: the way to message when the service window is closed. Meta charge |
| `waba_message_react` | Set or clear an emoji reaction on a WABA message |
#### Chat mutations: 6 tools
State + triage operations on WABA chats. After any mutation, `waba_chat_details` returns the authoritative state.
| Tool | Purpose |
|---|---|
| `waba_chat_open` | Reopen a closed WABA chat |
| `waba_chat_close` | Close a WABA chat |
| `waba_chat_assign` | Assign a WABA chat to a teammate by email (from `workspace_team`) |
| `waba_chat_unassign` | Clear the WABA chat's assignee |
| `waba_chat_set_label` | Add a label, keeping existing labels |
| `waba_chat_remove_label` | Remove one label, keeping the others; no-op if the label isn't on the chat |
→ Full schemas and example prompts: [`docs/tools.md`](docs/tools.md)
---
## How sign-in works
The server uses OAuth. The first time your assistant connects, a browser window opens on TimelinesAI. Sign in to your TimelinesAI account and approve access. Your assistant keeps the sign-in, so later sessions reconnect without asking.
If you're already signed in to TimelinesAI in your browser, approval can take a single click.
Every action runs **as you**: your role's permissions in TimelinesAI apply to MCP calls exactly as they apply to UI actions.
---
## Safety + production behavior
> ⚠️ **This MCP server controls a real WhatsApp inbox.** Read this section before sending writes.
- **Messages sent via MCP are indistinguishable from messages sent in the UI.** Recipients cannot tell.
- **Writes are real and immediate.** No undo. Confirm before bulk actions.
- **Quota is shared** with UI usage: MCP messages draw from the same monthly messaging budget. Call `workspace_quotas` to see headroom.
- **WABA template messages are charged by Meta.** `waba_start_chat` and `waba_chat_send_template` send approved templates, which Meta bills for. Free-text `waba_chat_send_message` only works while the chat's service window is open.
- **No sandbox mode.** Practice on your own number first if you're unsure.
- **Without a connected WhatsApp number**, most tools return empty results or errors. Connect a number in TimelinesAI first.
---
## Get started
1. **[Start a 10-day free trial of TimelinesAI →](https://app.timelines.ai/register/?utm_source=github&utm_medium=mcp_directory&utm_campaign=mcp_launch&utm_content=readme_cta)**
2. Connect a WhatsApp number in the TimelinesAI dashboard.
3. Pick your assistant above and connect it.
4. Sign in, then ask: *"What needs me today?"*
---
## Links
- **WhatsApp MCP page**: [timelines.ai/whatsapp-mcp](https://timelines.ai/whatsapp-mcp?utm_source=github&utm_medium=mcp_directory&utm_campaign=mcp_launch&utm_content=readme_links)
- **Setup guide**: [timelines.ai/whatsapp-mcp-guide](https://timelines.ai/whatsapp-mcp-guide)
- **MCP Academy** (short lessons, no signup): [timelines.ai/academy/mcp](https://timelines.ai/academy/mcp)
- **Sign up**: [app.timelines.ai/register](https://app.timelines.ai/register/?utm_source=github&utm_medium=mcp_directory&utm_campaign=mcp_launch&utm_content=readme_links)
- **MCP server endpoint**: `https://mcp.services.timelines.ai/mcp`
- **Model Context Protocol**: [modelcontextprotocol.io](https://modelcontextprotocol.io)
- **Issues / feedback**: [open an issue](../../issues) in this repo
---
## License
[MIT](LICENSE) © 2026 Initech Software / TimelinesAI
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues