@clickonsearch/whatsapp-agent 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,121 +1,132 @@
1
1
  # whatsapp-agent
2
2
 
3
- A personal WhatsApp assistant, usable two ways:
4
-
5
- - **Over WhatsApp itself** — message **yourself** ("Message yourself" —
6
- Settings → your own contact) to give it an instruction, and it replies in
7
- that same chat.
8
- - **From a browser chat UI** — an AG-UI protocol server (same pattern as
9
- [`github-agent`](../github-agent)) with a bundled chat page, for when
10
- typing in a web page is easier than typing on your phone, or you want to
11
- embed it in your own tooling.
12
-
13
- Both modes share the same underlying agent loop and the same WhatsApp MCP
14
- tools, so "send Alex a message asking if she's free tomorrow" works
15
- identically either way — it really sends it, through your linked account.
16
-
17
- Requires [`@clickonsearch/whatsapp-mcp-server`](../../mcp-servers/whatsapp-mcp-server)
18
- running first — that's the piece that actually holds your WhatsApp session.
19
- This package is just the agent loop(s) on top of it.
20
-
21
- ## How it works: WhatsApp mode
22
-
23
- Unlike `github-agent` (which only waits for an HTTP request), this mode is
24
- push-driven:
25
-
26
- 1. Connects to `whatsapp-mcp-server`'s `/events` SSE stream and watches for
27
- messages where `fromMe` is true and the chat is your own JID — i.e.
28
- messages you sent to yourself.
29
- 2. Each one becomes the prompt for the normal provider tool-calling loop
30
- (same `openai/claude/deepseek-remote-mcp-bridge` packages `github-agent`
31
- uses), with the WhatsApp MCP tools (`send_message`, `list_chats`,
32
- `get_recent_messages`, `search_contacts`) available — so "send Alex a
33
- message asking if she's free tomorrow" or "summarize my last 20 messages
34
- with Sam" both work as tool calls, not just chat.
35
- 3. The agent's final answer is sent back to you in the same self-chat via
36
- `send_message`.
3
+ A personal assistant for your WhatsApp account. Message yourself to give it
4
+ instructions ("summarize my last chat with Sam", "send Alex a message
5
+ saying I'm running late"), or talk to it from a browser instead. Pick which
6
+ AI model does the thinking — OpenAI, Claude, or DeepSeek.
37
7
 
38
8
  ```
39
- you: message yourself on WhatsApp
40
- │
41
- ▼
42
- whatsapp-mcp-server (Baileys) ──/events──▶ whatsapp-agent
43
- ▲ │
44
- │ ▼
45
- └──────── send_message ─────── model + WhatsApp tools
9
+ your WhatsApp message to yourself
10
+ │
11
+ ▼
12
+ ┌─────────────────────────────┐
13
+ │ whatsapp-agent │ reads the message
14
+ └──────────────┬──────────────┘
15
+ │
16
+ ▼
17
+ ┌─────────────────────────────┐
18
+ │ bridge │ openai / claude / deepseek — talks to the AI model
19
+ └──────────────┬──────────────┘
20
+ │
21
+ ▼
22
+ ┌─────────────────────────────┐
23
+ │ whatsapp-mcp-server │ acts on your account
24
+ └──────────────┬──────────────┘
25
+ │
26
+ ▼
27
+ reply sent back on WhatsApp
46
28
  ```
47
29
 
48
- ## Setup
30
+ ## What you need
31
+
32
+ - Node.js 18+
33
+ - A WhatsApp account you can scan a QR code with (this links the agent as
34
+ a device on your account, same as WhatsApp Web)
35
+ - An API key for at least one of: OpenAI, Anthropic (Claude), DeepSeek
36
+
37
+ ## Use it: over WhatsApp
38
+
39
+ **1. Start the WhatsApp connection** (own terminal, keep it running):
49
40
 
50
41
  ```bash
51
- # 1. start the MCP server first (separate terminal, separate package)
52
- cd mcp-servers/whatsapp-mcp-server
53
- npm install && cp .env.example .env
54
- npm run dev # scan the QR code it prints
42
+ npx @clickonsearch/whatsapp-mcp-server
43
+ ```
55
44
 
56
- # 2. then this agent
57
- cd agents/whatsapp-agent
58
- npm install
59
- cp .env.example .env
60
- # fill in WHATSAPP_MCP_URL (if not localhost:4100) and your provider's API key
45
+ Scan the QR code it prints with your phone (WhatsApp → Settings → Linked
46
+ devices → Link a device).
47
+
48
+ **2. Start the assistant** (second terminal):
49
+
50
+ ```bash
51
+ ANTHROPIC_API_KEY=<your-key> npx @clickonsearch/whatsapp-agent
61
52
  ```
62
53
 
63
- ## Run: WhatsApp mode
54
+ Now message **yourself** on WhatsApp ("Message yourself" in your contacts)
55
+ with something like "list my most recent chats" — the reply comes back in
56
+ that same conversation.
57
+
58
+ Swap in `OPENAI_API_KEY` + `PROVIDER=openai`, or `DEEPSEEK_API_KEY` +
59
+ `PROVIDER=deepseek`, to use a different model.
60
+
61
+ ## Use it: browser chat
64
62
 
65
63
  ```bash
66
- npm run dev
64
+ ANTHROPIC_API_KEY=<your-key> npx -p @clickonsearch/whatsapp-agent whatsapp-agent-serve
67
65
  ```
68
66
 
69
- Then open WhatsApp on your phone, message yourself something like "list my
70
- most recent chats" or "send a message to +1555... saying I'm running 10
71
- minutes late", and watch the reply come back in the same chat.
67
+ Then open `http://localhost:3100` and start chatting — pick your provider
68
+ from the dropdown. You can run this at the same time as WhatsApp mode; they
69
+ don't conflict.
70
+
71
+ ## Use it: embedded in another tool
72
72
 
73
- ## Run: browser chat UI (AG-UI server)
73
+ The browser chat server speaks the [AG-UI protocol](https://ag-ui.com)
74
+ (`POST /agent`, streaming SSE) — any AG-UI-compatible client can drive it
75
+ as a backend, not just the bundled page.
76
+
77
+ ## Config reference
78
+
79
+ | Env var | Required | Default |
80
+ | -------------------- | -------------------- | -------------------------- |
81
+ | `PROVIDER` | no | `openai` |
82
+ | `OPENAI_API_KEY` | if using OpenAI | |
83
+ | `OPENAI_MODEL` | no | `gpt-4.1` |
84
+ | `ANTHROPIC_API_KEY` | if using Claude | |
85
+ | `ANTHROPIC_MODEL` | no | `claude-sonnet-5` |
86
+ | `DEEPSEEK_API_KEY` | if using DeepSeek | |
87
+ | `DEEPSEEK_MODEL` | no | `deepseek-chat` |
88
+ | `WHATSAPP_MCP_URL` | no | `http://127.0.0.1:4100` |
89
+ | `WHATSAPP_MCP_TOKEN` | only if the server needs one | |
90
+ | `PORT` | no, browser chat only | `3100` |
91
+
92
+ ## Good to know
93
+
94
+ - Only messages in your own "Message yourself" chat trigger the assistant
95
+ — nobody else can trigger it by messaging you.
96
+ - Each WhatsApp message is its own fresh instruction with no memory of
97
+ earlier ones. The browser chat remembers the conversation; WhatsApp mode
98
+ doesn't (yet).
99
+ - Chat history is only kept in memory while `whatsapp-mcp-server` is
100
+ running (up to 200 messages per chat) — it's not saved anywhere
101
+ permanent.
102
+
103
+ ---
104
+
105
+ ## For developers
106
+
107
+ **Running from source:**
74
108
 
75
109
  ```bash
76
- npm run build
77
- npm run serve # or `npm run dev:serve` for tsx, no build step
110
+ # terminal 1
111
+ cd mcp-servers/whatsapp-mcp-server
112
+ npm install
113
+ cp .env.example .env
114
+ npm run dev
115
+
116
+ # terminal 2
117
+ cd agents/whatsapp-agent
118
+ npm install
119
+ cp .env.example .env # fill in a provider key
120
+ npm run dev # WhatsApp mode
121
+ npm run serve # or browser chat
78
122
  ```
79
123
 
80
- This starts an HTTP server (default `http://localhost:3100`) with:
81
-
82
- - `GET /` — a self-contained chat page (`public/index.html`) with a
83
- provider dropdown. Open it in a browser and talk to the assistant.
84
- - `POST /agent` — the AG-UI protocol endpoint (`RunAgentInput` in, AG-UI
85
- SSE events out) — the exact same shape as `github-agent`'s, so any
86
- AG-UI client can drive this one too, not just the bundled page.
87
- - `GET /health` — liveness check.
88
-
89
- You can run this alongside WhatsApp mode (`npm run dev` in one terminal,
90
- `npm run serve` in another) — they're independent processes hitting the
91
- same `whatsapp-mcp-server`, so either one can send/read messages at any
92
- time.
93
-
94
- ## Config
95
-
96
- | Env var | Required | Notes |
97
- | -------------------- | ----------------------- | --------------------------------------------------- |
98
- | `WHATSAPP_MCP_URL` | no (default `http://localhost:4100`) | where whatsapp-mcp-server is running |
99
- | `PORT` | no (default `3100`) | browser chat UI / AG-UI server only |
100
- | `PROVIDER` | no (default `openai`) | `openai`, `claude`, or `deepseek` |
101
- | `OPENAI_API_KEY` | when provider=openai | |
102
- | `OPENAI_MODEL` | no (default `gpt-4.1`) | |
103
- | `ANTHROPIC_API_KEY` | when provider=claude | |
104
- | `ANTHROPIC_MODEL` | no (default `claude-sonnet-5`) | |
105
- | `DEEPSEEK_API_KEY` | when provider=deepseek | |
106
- | `DEEPSEEK_MODEL` | no (default `deepseek-chat`) | |
107
-
108
- ## Known limitations (v1)
109
-
110
- - WhatsApp mode is single-turn per instruction: each self-message is its
111
- own fresh prompt, with no memory across separate instructions. The
112
- browser chat UI (AG-UI mode) doesn't have this limitation — like
113
- `github-agent`, it flattens prior turns in the conversation into a system
114
- preamble, so follow-up questions in the same chat session work.
115
- - Only your own "Message yourself" chat triggers the WhatsApp-mode
116
- assistant. Any other incoming message is ignored by design, so it can't
117
- be triggered by someone messaging you.
118
- - `whatsapp-mcp-server`'s chat/message recall is in-memory only (not
119
- persisted across restarts) and capped at the last 200 messages per chat —
120
- it does get real history via WhatsApp's own backfill-on-connect, just not
121
- unbounded history.
124
+ WhatsApp mode is push-driven, not request/response: it subscribes to
125
+ `whatsapp-mcp-server`'s `/events` stream, and any message you send yourself
126
+ becomes a prompt for the same provider tool-calling loop `github-agent`
127
+ uses, with WhatsApp's tools (`send_message`, `list_chats`,
128
+ `get_recent_messages`, `search_contacts`) available. The reply is sent back
129
+ via `send_message` once the model finishes.
130
+
131
+ The browser chat is an AG-UI protocol server, same shape as
132
+ `github-agent`'s (`POST /agent`, streaming SSE).
package/dist/cli.js CHANGED
@@ -21,7 +21,7 @@ async function main() {
21
21
  process.exitCode = 1;
22
22
  return;
23
23
  }
24
- const mcpServerUrl = process.env.WHATSAPP_MCP_URL ?? "http://localhost:4100";
24
+ const mcpServerUrl = process.env.WHATSAPP_MCP_URL ?? "http://127.0.0.1:4100";
25
25
  console.error(`whatsapp-agent starting (initial provider: ${provider}, whatsapp-mcp-server: ${mcpServerUrl})`);
26
26
  await startListener({
27
27
  mcpServerUrl,
package/dist/listener.js CHANGED
@@ -1,17 +1,26 @@
1
1
  import { setTimeout as sleep } from "node:timers/promises";
2
2
  import { McpManager } from "@clickonsearch/openai-remote-mcp-bridge";
3
- import { runAssistantAgent, whatsappServerConfig } from "./providers.js";
3
+ import { runAssistantAgent, whatsappAuthHeaders, whatsappServerConfig } from "./providers.js";
4
+ class UnauthorizedError extends Error {
5
+ constructor() {
6
+ super("whatsapp-mcp-server rejected our credentials (HTTP 401). Set WHATSAPP_MCP_TOKEN to the same value the server uses.");
7
+ }
8
+ }
4
9
  /** Polls the whatsapp-mcp-server's /health until it reports a connected session, returning the self JID. */
5
10
  async function waitForSelfId(mcpServerUrl, onLog) {
6
11
  const healthUrl = new URL("/health", mcpServerUrl).toString();
7
12
  for (;;) {
8
13
  try {
9
- const res = await fetch(healthUrl);
14
+ const res = await fetch(healthUrl, { headers: whatsappAuthHeaders() });
15
+ if (res.status === 401)
16
+ throw new UnauthorizedError();
10
17
  const body = (await res.json());
11
18
  if (body.connected && body.self)
12
19
  return body.self;
13
20
  }
14
- catch {
21
+ catch (error) {
22
+ if (error instanceof UnauthorizedError)
23
+ throw error;
15
24
  // whatsapp-mcp-server isn't up yet
16
25
  }
17
26
  onLog?.("Waiting for whatsapp-mcp-server to report a connected WhatsApp session...");
@@ -45,7 +54,9 @@ export async function startListener(options) {
45
54
  onLog?.(`Connected. Listening for instructions in your "Message yourself" chat (${selfId}). Provider: ${provider}.`);
46
55
  await replyToSelf(mcpServerUrl, selfId, `Assistant is online (provider: ${provider}).`);
47
56
  const eventsUrl = new URL("/events", mcpServerUrl).toString();
48
- const res = await fetch(eventsUrl);
57
+ const res = await fetch(eventsUrl, { headers: whatsappAuthHeaders() });
58
+ if (res.status === 401)
59
+ throw new UnauthorizedError();
49
60
  if (!res.ok || !res.body) {
50
61
  throw new Error(`Failed to connect to whatsapp-mcp-server's events stream: HTTP ${res.status}`);
51
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"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"}
package/dist/providers.js CHANGED
@@ -9,12 +9,23 @@ export function isProvider(value) {
9
9
  }
10
10
  export const WHATSAPP_SERVER_NAME = "whatsapp";
11
11
  /**
12
- * `baseUrl` is whatsapp-mcp-server's origin (e.g. "http://localhost:4100"),
12
+ * `baseUrl` is whatsapp-mcp-server's origin (e.g. "http://127.0.0.1:4100"),
13
13
  * the same value used for its /health and /events endpoints elsewhere in
14
14
  * this package — its actual MCP endpoint is at /mcp.
15
15
  */
16
16
  export function whatsappServerConfig(baseUrl) {
17
- return { name: WHATSAPP_SERVER_NAME, url: new URL("/mcp", baseUrl).toString(), transport: "http" };
17
+ const headers = whatsappAuthHeaders();
18
+ return {
19
+ name: WHATSAPP_SERVER_NAME,
20
+ url: new URL("/mcp", baseUrl).toString(),
21
+ transport: "http",
22
+ ...(Object.keys(headers).length > 0 ? { headers } : {}),
23
+ };
24
+ }
25
+ /** Same WHATSAPP_MCP_TOKEN whatsapp-mcp-server checks; empty when that server doesn't require one. */
26
+ export function whatsappAuthHeaders() {
27
+ const token = process.env.WHATSAPP_MCP_TOKEN;
28
+ return token ? { Authorization: `Bearer ${token}` } : {};
18
29
  }
19
30
  export const DEFAULT_SYSTEM_PROMPT = [
20
31
  "You are a personal WhatsApp assistant. The user just messaged themselves",
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ function main() {
21
21
  process.exitCode = 1;
22
22
  return;
23
23
  }
24
- const mcpServerUrl = process.env.WHATSAPP_MCP_URL ?? "http://localhost:4100";
24
+ const mcpServerUrl = process.env.WHATSAPP_MCP_URL ?? "http://127.0.0.1:4100";
25
25
  const port = Number(process.env.PORT ?? 3100);
26
26
  const app = createServer({ mcpServerUrl, defaultProvider });
27
27
  app.listen(port, () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickonsearch/whatsapp-agent",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Personal WhatsApp assistant, usable two ways: message yourself on WhatsApp to give it instructions, or drive it from a browser chat UI over the AG-UI protocol. Routed through OpenAI, Claude, or DeepSeek depending on preference.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,9 +29,9 @@
29
29
  "dev:serve": "tsx src/server-cli.ts"
30
30
  },
31
31
  "dependencies": {
32
- "@clickonsearch/openai-remote-mcp-bridge": "^0.1.0",
33
- "@clickonsearch/claude-remote-mcp-bridge": "^0.1.0",
34
- "@clickonsearch/deepseek-remote-mcp-bridge": "^0.1.0",
32
+ "@clickonsearch/openai-remote-mcp-bridge": "^0.2.0",
33
+ "@clickonsearch/claude-remote-mcp-bridge": "^0.2.0",
34
+ "@clickonsearch/deepseek-remote-mcp-bridge": "^0.2.0",
35
35
  "openai": "^4.68.0",
36
36
  "@anthropic-ai/sdk": "^0.32.1",
37
37
  "@ag-ui/core": "^1.0.0",