Give your AI agent a WhatsApp account — an MCP server with 87 tools for reading, sending, groups, status, scheduling & more. Works with Claude, Codex, Cursor, OpenCode & any MCP client.
This MCP server gives AI agents full control over a WhatsApp account, enabling reading, searching, sending, scheduling, and managing messages, groups,...
54const statusJidList = recipients.map((r) => (r.includes("@") ? r : phoneToJid(r)));// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/write.ts
// Finding inferred from import chain: src/server.ts:38
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/read.ts
// Finding inferred from import chain: src/server.ts:37
// Local-only MCP, requires compromised LLM to exploit
49async ({ recipients, text }) => {
50 const restricted = sendBlocked();
51 if (restricted) return errorResult(restricted);
52 const blocked = notReady();
53 if (blocked) return errorResult(blocked);
54 const statusJidList = recipients.map((r) => (r.includes("@") ? r : phoneToJid(r)));
55 try {
56 const sent: any = await getSock().sendMessage(
57 "status@broadcast",
58 { text } as any,
59 { statusJidList, broadcast: true } as any,
60 );
61 return textResult(
62 { messageId: sent?.key?.id ?? null, recipients: statusJidList.length },
63 `Broadcast sent to ${statusJidList.length} recipient(s).`,
64 );
65 } catch (e: any) {
66 return errorResult(`broadcast send failed: ${e?.message ?? e}`);
67 }
68 },// Local-only MCP, requires compromised LLM to exploit
48async (args) => {
49 if (!args.keywords && !args.pattern && !args.exactMatch)
50 return errorResult("provide one matcher: keywords, pattern, or exactMatch");
51 try {
52 const rule = addRule(args);
53 return textResult({ rule, enabled: isEnabled() }, "Rule added.");
54 } catch (e: any) {
55 return errorResult(`could not add rule: ${e?.message ?? e}`);
56 }
57 },// Local-only MCP, requires compromised LLM to exploit
29const info = await sock.getBroadcastListInfo(broadcastJid);// Local-only MCP, requires compromised LLM to exploit
22async ({ broadcastJid }) => {
23 const blocked = notReady();
24 if (blocked) return errorResult(blocked);
25 const sock: any = getSock();
26 if (typeof sock.getBroadcastListInfo !== "function")
27 return errorResult("getBroadcastListInfo not available in this Baileys version");
28 try {
29 const info = await sock.getBroadcastListInfo(broadcastJid);
30 return textResult(info);
31 } catch (e: any) {
32 return errorResult(`broadcast info failed: ${e?.message ?? e}`);
33 }
34 },// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/groups.ts
// Finding inferred from import chain: src/server.ts:44
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/privacy.ts
// Finding inferred from import chain: src/server.ts:47
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/commerce.ts
// Finding inferred from import chain: src/server.ts:51
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/calls.ts
// Finding inferred from import chain: src/server.ts:50
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/users.ts
// Finding inferred from import chain: src/server.ts:48
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/richmsg.ts
// Finding inferred from import chain: src/server.ts:49
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/status_post.ts
// Finding inferred from import chain: src/server.ts:43
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/templates.ts
// Finding inferred from import chain: src/server.ts:40
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/buttons.ts
// Finding inferred from import chain: src/server.ts:41
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/chatmgmt.ts
// Finding inferred from import chain: src/server.ts:45
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/contacts.ts
// Finding inferred from import chain: src/server.ts:35
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/chats.ts
// Finding inferred from import chain: src/server.ts:36
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/groups.ts
// Finding inferred from import chain: src/server.ts:44
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/status.ts
// Finding inferred from import chain: src/server.ts:34
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/schedule.ts
// Finding inferred from import chain: src/server.ts:39
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/groups.ts
// Finding inferred from import chain: src/server.ts:44
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/schedule.ts
// Finding inferred from import chain: src/server.ts:39
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/read.ts
// Finding inferred from import chain: src/server.ts:37
// Local-only MCP, requires compromised LLM to exploit
81async ({ id, active, clearAll }) => {
82 if (clearAll) {
83 clearRules();
84 return noteResult("Cleared all rules.");
85 }
86 if (!id) return errorResult("provide id (or clearAll)");
87 if (active != null) {
88 setRuleActive(id, active);
89 return noteResult(`Rule ${id} ${active ? "activated" : "paused"}.`);
90 }
91 const ok = removeRule(id);
92 return ok ? noteResult(`Removed ${id}.`) : errorResult(`no rule ${id}`);
93 },// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/profile.ts
// Finding inferred from import chain: src/server.ts:46
// Local-only MCP, requires compromised LLM to exploit
// Source file not analyzed: src/tools/privacy.ts
// Finding inferred from import chain: src/server.ts:47
// Local-only MCP, requires compromised LLM to exploit