@lizzythelizard/whatsapp-mcp 0.3.0 → 0.5.0

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.
Files changed (51) hide show
  1. package/README.md +157 -33
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +78 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/dataDir.d.ts +4 -0
  7. package/dist/dataDir.d.ts.map +1 -0
  8. package/dist/dataDir.js +20 -0
  9. package/dist/dataDir.js.map +1 -0
  10. package/dist/extTypes.d.ts +41 -0
  11. package/dist/extTypes.d.ts.map +1 -0
  12. package/dist/extTypes.js +222 -0
  13. package/dist/extTypes.js.map +1 -0
  14. package/dist/index.d.ts +3 -3
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +2 -90
  17. package/dist/index.js.map +1 -1
  18. package/dist/logger.d.ts +10 -0
  19. package/dist/logger.d.ts.map +1 -0
  20. package/dist/logger.js +15 -0
  21. package/dist/logger.js.map +1 -0
  22. package/dist/mcp.d.ts +4 -0
  23. package/dist/mcp.d.ts.map +1 -0
  24. package/dist/mcp.js +75 -0
  25. package/dist/mcp.js.map +1 -0
  26. package/dist/store.d.ts +17 -20
  27. package/dist/store.d.ts.map +1 -1
  28. package/dist/store.js +44 -32
  29. package/dist/store.js.map +1 -1
  30. package/dist/sync.d.ts +9 -4
  31. package/dist/sync.d.ts.map +1 -1
  32. package/dist/sync.js +51 -17
  33. package/dist/sync.js.map +1 -1
  34. package/dist/tools/authTools.d.ts.map +1 -1
  35. package/dist/tools/authTools.js +31 -23
  36. package/dist/tools/authTools.js.map +1 -1
  37. package/dist/tools/chatTools.d.ts.map +1 -1
  38. package/dist/tools/chatTools.js +15 -6
  39. package/dist/tools/chatTools.js.map +1 -1
  40. package/dist/tools/common.d.ts +7 -49
  41. package/dist/tools/common.d.ts.map +1 -1
  42. package/dist/tools/common.js +18 -32
  43. package/dist/tools/common.js.map +1 -1
  44. package/dist/tools/contactTools.d.ts.map +1 -1
  45. package/dist/tools/contactTools.js +8 -2
  46. package/dist/tools/contactTools.js.map +1 -1
  47. package/dist/tools/messageTools.d.ts +1 -1
  48. package/dist/tools/messageTools.d.ts.map +1 -1
  49. package/dist/tools/messageTools.js +18 -4
  50. package/dist/tools/messageTools.js.map +1 -1
  51. package/package.json +11 -16
package/dist/sync.js CHANGED
@@ -1,14 +1,19 @@
1
1
  import makeWASocket from '@whiskeysockets/baileys';
2
- export function createHandler(store) {
2
+ import { consoleLog } from './logger.js';
3
+ export function createHandler(store, options) {
4
+ const name = options?.name ?? 'Whatsapp MCP';
5
+ const logger = options?.logger ?? consoleLog;
3
6
  let state = { type: 'connecting' };
4
7
  let sock;
5
- const browser = ['Gutschi.site', 'Desktop', '1.0.0'];
8
+ const browser = [name, 'Desktop', '1.0.0'];
6
9
  function onError(error) {
7
10
  const arg = error instanceof Error ? error : new Error(String(error));
8
- console.error(`Closing WhatsApp sync due to error ${arg}`);
11
+ logger.error(`Closing WhatsApp sync due to error ${arg}`);
9
12
  close(arg);
10
13
  }
11
14
  function close(error) {
15
+ if (!error)
16
+ logger.debug(`Closing WhatsApp sync from caller`);
12
17
  if (sock) {
13
18
  const sockCpy = sock;
14
19
  sock = undefined;
@@ -18,22 +23,23 @@ export function createHandler(store) {
18
23
  }
19
24
  function onClosed(error) {
20
25
  if (!error) {
21
- console.log(`WhatsApp sync connection closed without error`);
26
+ logger.debug(`WhatsApp sync connection closed without error`);
22
27
  state = { type: 'closed' };
23
28
  return;
24
29
  }
25
30
  if (isInvalidAuthError(error)) {
26
- console.warn(`WhatsApp sync requires re-authentication due to invalid auth state`);
27
- store.reset();
28
- start();
31
+ logger.warn(`WhatsApp sync requires re-authentication due to invalid auth state`);
32
+ store.reset(true);
33
+ start().catch((err) => { close(err instanceof Error ? err : new Error(String(err))); });
29
34
  return;
30
35
  }
31
36
  if (isRequiredReconnectError(error)) {
32
- console.log(`WhatsApp sync connection closed due to required reconnect`);
33
- store.reset();
37
+ logger.debug(`WhatsApp sync connection closed due to required reconnect after successful login, restarting connection`);
38
+ store.reset(false);
34
39
  startAgainAfterLogin();
35
40
  return;
36
41
  }
42
+ logger.error(`WhatsApp sync connection closed due to error ${error}`);
37
43
  state = { type: 'closed', error };
38
44
  }
39
45
  function start() {
@@ -42,6 +48,24 @@ export function createHandler(store) {
42
48
  connectionUpdate(update, onClosed, qr => state = { type: 'needAuth', qr }, () => state = { type: 'ready' });
43
49
  });
44
50
  store.bind(sock.ev);
51
+ logger.debug(`Started WhatsApp sync}`);
52
+ // wait for timeout or non 'connecting' state
53
+ return new Promise((resolve, reject) => {
54
+ // Ceheck evey 1s if status is still connecting, if not resolve, if timeout reject
55
+ const start = Date.now();
56
+ const timeoutMs = 120000;
57
+ const poll = () => {
58
+ const status = state;
59
+ if (status.type !== 'connecting')
60
+ resolve();
61
+ else if (Date.now() - start < timeoutMs)
62
+ setTimeout(poll, 100);
63
+ else
64
+ reject(new Error(`Timed out waiting for ready, got ${status.type}`));
65
+ setTimeout(poll, 1000);
66
+ };
67
+ poll();
68
+ });
45
69
  }
46
70
  function startAgainAfterLogin() {
47
71
  sock = makeWASocket({ auth: store.getAuth(), browser, logger: baileysLogger, markOnlineOnConnect: false, syncFullHistory: true, emitOwnEvents: true });
@@ -53,6 +77,7 @@ export function createHandler(store) {
53
77
  timeout = setTimeout(() => state = { type: 'ready' }, 2000);
54
78
  });
55
79
  store.bind(sock.ev);
80
+ logger.debug(`Restarted WhatsApp after login}`);
56
81
  }
57
82
  async function sendMessage(jid, message) {
58
83
  if (state.type === 'connecting')
@@ -63,10 +88,11 @@ export function createHandler(store) {
63
88
  throw new Error('Authentication needed, please authenticate yourself first');
64
89
  if (sock === undefined)
65
90
  throw new Error(`No Socket defined but state is ${state.type}. This is invalid, please restart server`);
91
+ logger.debug(`Sending message to ${jid}: ${message}`);
66
92
  const result = await sock.sendMessage(jid, { text: message });
67
93
  if (!result)
68
94
  throw new Error(`Failed to send message to ${jid}`);
69
- return result;
95
+ logger.info(`Sent message to ${jid}: ${message}`);
70
96
  }
71
97
  async function setArchived(jid, archived) {
72
98
  if (state.type === 'connecting')
@@ -77,17 +103,21 @@ export function createHandler(store) {
77
103
  throw new Error('Authentication needed, please authenticate yourself first');
78
104
  if (sock === undefined)
79
105
  throw new Error(`No Socket defined but state is ${state.type}. This is invalid, please restart server`);
80
- const chat = store.getChat(jid);
106
+ const chat = store.getRawChat(jid);
81
107
  if (!chat)
82
108
  throw new Error(`No chat found for ${jid}`);
83
109
  const lastMessage = chat.messages?.[0].message;
84
110
  if (!lastMessage) {
111
+ logger.debug(`Archiving chat ${jid} with no last message`);
85
112
  await sock.chatModify({ archive: archived, lastMessages: [] }, jid);
113
+ logger.info(`Archived chat ${jid} with no last message`);
86
114
  return;
87
115
  }
88
116
  if (!lastMessage.key)
89
117
  throw new Error(`Last message for ${jid} has no key, cannot archive chat`);
118
+ logger.debug(`Archiving chat ${jid}}`);
90
119
  await sock.chatModify({ archive: archived, lastMessages: [lastMessage] }, jid);
120
+ logger.info(`Archived chat ${jid}}`);
91
121
  }
92
122
  async function setRead(jid, read) {
93
123
  if (state.type === 'connecting')
@@ -98,25 +128,29 @@ export function createHandler(store) {
98
128
  throw new Error('Authentication needed, please authenticate yourself first');
99
129
  if (sock === undefined)
100
130
  throw new Error(`No Socket defined but state is ${state.type}. This is invalid, please restart server`);
101
- const chat = store.getChat(jid);
131
+ const chat = store.getRawChat(jid);
102
132
  if (!chat)
103
133
  throw new Error(`No chat found for ${jid}`);
104
134
  const lastMessage = chat.messages?.[0].message;
105
135
  if (!lastMessage) {
136
+ logger.debug(`Marking chat ${jid} as ${read ? 'read' : 'unread'} with no last message`);
106
137
  await sock.chatModify({ markRead: read, lastMessages: [] }, jid);
138
+ logger.info(`Marked chat ${jid} as ${read ? 'read' : 'unread'} with no last message`);
107
139
  return;
108
140
  }
109
141
  if (!lastMessage.key)
110
142
  throw new Error(`Last message for ${jid} has no key, cannot mark chat as unread`);
143
+ logger.debug(`Marking chat ${jid} as ${read ? 'read' : 'unread'}`);
111
144
  await sock.chatModify({ markRead: read, lastMessages: [lastMessage] }, jid);
145
+ logger.info(`Marked chat ${jid} as ${read ? 'read' : 'unread'}`);
112
146
  }
113
- start();
114
147
  return {
115
148
  getStatus: () => state,
116
- sendMessage: sendMessage,
117
- setArchived: setArchived,
118
- setRead: setRead,
119
- close: close,
149
+ sendMessage,
150
+ setArchived,
151
+ setRead,
152
+ close,
153
+ start,
120
154
  };
121
155
  }
122
156
  const baileysLogger = {
package/dist/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA,OAAO,YAA8D,MAAM,yBAAyB,CAAA;AAEpG,OAAO,EAAE,UAAU,EAAW,MAAM,aAAa,CAAA;AAkBjD,MAAM,UAAU,aAAa,CAAC,KAAoB,EAAE,OAAgC;IAClF,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,cAAc,CAAA;IAC5C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,UAAU,CAAA;IAC5C,IAAI,KAAK,GAAe,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;IAC9C,IAAI,IAAiD,CAAA;IACrD,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAyB,CAAA;IAElE,SAAS,OAAO,CAAC,KAAc;QAC7B,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACrE,MAAM,CAAC,KAAK,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAA;QACzD,KAAK,CAAC,GAAG,CAAC,CAAA;IACZ,CAAC;IAED,SAAS,KAAK,CAAC,KAAa;QAC1B,IAAI,CAAC,KAAK;YAAE,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAC7D,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,IAAI,CAAA;YACpB,IAAI,GAAG,SAAS,CAAA;YAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACpC,CAAC;QACD,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;IAED,SAAS,QAAQ,CAAC,KAAa;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;YAC7D,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;YAC1B,OAAM;QACR,CAAC;QACD,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;YACjF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACjB,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;YAC/F,OAAM;QACR,CAAC;QACD,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,yGAAyG,CAAC,CAAA;YACvH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAClB,oBAAoB,EAAE,CAAA;YACtB,OAAM;QACR,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,gDAAgD,KAAK,EAAE,CAAC,CAAA;QACrE,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QACtJ,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE;YACzC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAC/B,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EACtC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAEtC,6CAA6C;QAC7C,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,kFAAkF;YAClF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACxB,MAAM,SAAS,GAAG,MAAM,CAAA;YACxB,MAAM,IAAI,GAAG,GAAG,EAAE;gBAChB,MAAM,MAAM,GAAG,KAAK,CAAA;gBACpB,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;oBAAE,OAAO,EAAE,CAAA;qBACtC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS;oBAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;;oBACzD,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;gBACzE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACxB,CAAC,CAAA;YACD,IAAI,EAAE,CAAA;QACR,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,oBAAoB;QAC3B,IAAI,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QACtJ,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,0BAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACtG,kFAAkF;QAClF,IAAI,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAA;QAC/D,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACnB,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnB,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACjD,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAe;QACrD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACxF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACxF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC3G,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,CAAC,IAAI,0CAA0C,CAAC,CAAA;QAC/H,MAAM,CAAC,KAAK,CAAC,sBAAsB,GAAG,KAAK,OAAO,EAAE,CAAC,CAAA;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC7D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAA;QAChE,MAAM,CAAC,IAAI,CAAC,mBAAmB,GAAG,KAAK,OAAO,EAAE,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,QAAiB;QACvD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACxF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACxF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC3G,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,CAAC,IAAI,0CAA0C,CAAC,CAAA;QAC/H,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,CAAA;YAC1D,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YACnE,MAAM,CAAC,IAAI,CAAC,iBAAiB,GAAG,uBAAuB,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,kCAAkC,CAAC,CAAA;QAChG,MAAM,CAAC,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAA;QACtC,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,WAAsE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACzI,MAAM,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,IAAa;QAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACxF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACxF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC3G,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,CAAC,IAAI,0CAA0C,CAAC,CAAA;QAC/H,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QAC9C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,uBAAuB,CAAC,CAAA;YACvF,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAChE,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,uBAAuB,CAAC,CAAA;YACrF,OAAM;QACR,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,yCAAyC,CAAC,CAAA;QACvG,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;QAClE,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,WAAsE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACtI,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;IAClE,CAAC;IAED,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK;QACtB,WAAW;QACX,WAAW;QACX,OAAO;QACP,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,GAAG,EAAE,CAAC,aAAa;IAC1B,KAAK,EAAE,GAAG,EAAE,GAAe,CAAC;IAC5B,KAAK,EAAE,GAAG,EAAE,GAAe,CAAC;IAC5B,IAAI,EAAE,GAAG,EAAE,GAAe,CAAC;IAC3B,IAAI,EAAE,GAAG,EAAE,GAAe,CAAC;IAC3B,KAAK,EAAE,GAAG,EAAE,GAAe,CAAC;CAC7B,CAAA;AAED,SAAS,gBAAgB,CAAC,MAAgC,EAAE,OAAgC,EAAE,IAA2B,EAAE,OAAoB;IAC7I,IAAI,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;SAC3B,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM;QAAE,OAAO,EAAE,EAAE,CAAA;SAC7C,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC,sCAAsC,CAAC,CAAC;;QAC7E,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3E,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,GAAG;QAAE,OAAO,KAAK,CAAA;IACjD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACtC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC3E,IAAI,CAAC,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,GAAG;QAAE,OAAO,KAAK,CAAA;IACjD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAgC,EAAE,OAAgC,EAAE,KAA6B;IACnI,IAAI,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAA;SACtF,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC,sCAAsC,CAAC,CAAC;SAC5E,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC,sCAAsC,CAAC,CAAC;;QAC7E,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"authTools.d.ts","sourceRoot":"","sources":["../../src/tools/authTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QAqC/F"}
1
+ {"version":3,"file":"authTools.d.ts","sourceRoot":"","sources":["../../src/tools/authTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAG5C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QA8C/F"}
@@ -1,44 +1,52 @@
1
1
  import { toCallError } from './common.js';
2
- import QRCode from 'qrcode';
2
+ import z from 'zod';
3
3
  export function registerAuthTools(server, store, sync) {
4
- server.registerTool('get_auth_qr', { description: 'Get a QR code for WhatsApp authentication.' }, async () => {
4
+ server.registerTool('get_auth_qr', { description: 'Get a QR code to authenticate with WhatsApp. Call this tool when authentication is required.', outputSchema: QrCodeResultSchema }, async () => {
5
5
  try {
6
- const status = sync.getStatus();
6
+ let status = sync.getStatus();
7
+ if (status.type === 'closed')
8
+ await sync.start();
9
+ status = sync.getStatus();
10
+ if (status.type === 'closed')
11
+ throw new Error('WhatsApp sync is closed. Please restart the server.');
7
12
  if (status.type !== 'needAuth')
8
13
  throw new Error('Authentication is not required at this time.');
9
- const pngBuffer = await QRCode.toBuffer(status.qr, { type: 'png', width: 400, margin: 2 });
10
14
  return {
11
- content: [
12
- { type: 'text', text: qrExplanation },
13
- { type: 'image', data: pngBuffer.toString('base64'), mimeType: 'image/png' },
14
- { type: 'text', text: status.qr },
15
- ],
15
+ structuredContent: {
16
+ url: `https://public-api.qr-code-generator.com/v1/create/extended?image_format=PNG&image_width=300&qr_code_text=${encodeURIComponent(status.qr)}&foreground_color=%23000000&background_color=%23FFFFFF&frame_name=no-frame`,
17
+ code: status.qr,
18
+ },
19
+ content: [],
16
20
  isError: false,
17
21
  };
18
22
  }
19
23
  catch (e) {
20
- return toCallError(e);
24
+ return toCallError(e instanceof Error ? e.message : String(e));
21
25
  }
22
26
  });
23
27
  server.registerTool('get_status', { description: 'Get the current server status.' }, () => {
24
28
  try {
25
29
  const status = sync.getStatus();
26
- return { content: [{ type: 'text', text: status.type }], isError: false };
30
+ switch (status.type) {
31
+ case 'needAuth':
32
+ return { content: [{ type: 'text', text: 'Authentication is required. Please call get_auth_qr to retrieve a QR code for authentication.' }], isError: false };
33
+ case 'connecting':
34
+ return { content: [{ type: 'text', text: 'Server is still connecting to WhatsApp, please wait...' }], isError: false };
35
+ case 'closed':
36
+ return { content: [{ type: 'text', text: `Server connection closed. Error: ${status.error?.message ?? 'Unknown error'}` }], isError: false };
37
+ case 'ready':
38
+ return { content: [{ type: 'text', text: 'Server is ready and authenticated.' }], isError: false };
39
+ default:
40
+ return { content: [{ type: 'text', text: 'Unknown server status.' }], isError: false };
41
+ }
27
42
  }
28
43
  catch (e) {
29
- return toCallError(e);
44
+ return toCallError(e instanceof Error ? e.message : String(e));
30
45
  }
31
46
  });
32
47
  }
33
- const qrExplanation = `⚠️ Authentication Required
34
-
35
- To use this WhatsApp MCP server, you need to link it to your WhatsApp account.
36
-
37
- 1. Open WhatsApp on your phone
38
- 2. Tap the three dots menu (⋮) or Settings
39
- 3. Select "Linked Devices"
40
- 4. Tap "Link a Device"
41
- 5. Scan the QR code below with your phone
42
-
43
- The raw QR code string is also provided below for clients that render QR codes themselves.`;
48
+ const QrCodeResultSchema = z.object({
49
+ url: z.string().describe('URL to a PNG image of the QR code. Download and show this image to the user to scan with their WhatsApp mobile app.'),
50
+ code: z.string().describe('Text representation of the QR code. If you cannot show the user the QR code image or url, you can generate a QR code from this text using any QR code generator.'),
51
+ });
44
52
  //# sourceMappingURL=authTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authTools.js","sourceRoot":"","sources":["../../src/tools/authTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGzC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAG3B,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAAoB,EAAE,IAAqB;IAC9F,MAAM,CAAC,YAAY,CACjB,aAAa,EACb,EAAE,WAAW,EAAE,4CAA4C,EAAE,EAC7D,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC/B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;YAC/F,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;YAC1F,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;oBACrC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE;oBAC5E,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE;iBAClC;gBACD,OAAO,EAAE,KAAK;aACf,CAAA;QACH,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,WAAW,CAAC,CAAU,CAAC,CAAA;QAChC,CAAC;IACH,CAAC,CACF,CAAA;IAED,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ,EAAE,WAAW,EAAE,gCAAgC,EAAE,EACjD,GAAG,EAAE;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;YAC/B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QAC3E,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,WAAW,CAAC,CAAU,CAAC,CAAA;QAChC,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;;;;2FAUqE,CAAA"}
1
+ {"version":3,"file":"authTools.js","sourceRoot":"","sources":["../../src/tools/authTools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chatTools.d.ts","sourceRoot":"","sources":["../../src/tools/chatTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QA2B/F"}
1
+ {"version":3,"file":"chatTools.d.ts","sourceRoot":"","sources":["../../src/tools/chatTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QAY/F"}
@@ -1,18 +1,27 @@
1
1
  import z from 'zod';
2
- import { JidSchema, registerEntityResources, registerTool } from './common.js';
2
+ import { JidSchema, withErrorHandling } from './common.js';
3
3
  export function registerChatTools(server, store, sync) {
4
- registerEntityResources(server, 'chats', 'chat', () => store.getChats(), id => store.getChat(id), c => `chats://app/${c.id}`, c => c.name ?? c.id, () => sync.getStatus());
5
- registerTool(server, 'set_chat_archived', ArchiveChatSchema, 'Set a WhatsApp chat as archived or unarchived.', async (args) => { await sync.setArchived(args.jid, args.archived); return `Chat ${args.jid} archived status set to ${String(args.archived)}`; }, () => sync.getStatus());
6
- registerTool(server, 'set_chat_read', ReadChatSchema, 'Set a WhatsApp chat as read or unread.', async (args) => { await sync.setRead(args.jid, args.read); return `Chat ${args.jid} read status set to ${String(args.read)}`; }, () => sync.getStatus());
4
+ server.registerTool('get_all_chats', { description: 'Retrieve all WhatsApp chats with their metadata', outputSchema: AllChatsSchema }, () => withErrorHandling(sync, () => store.getChats()));
5
+ server.registerTool('set_chat_archived', { description: 'Set a WhatsApp chat as archived or unarchived', inputSchema: ArchiveChatSchema }, args => withErrorHandling(sync, () => sync.setArchived(args.jid, args.archived).then(() => `Chat ${args.jid}: archived status set to ${String(args.archived)}`)));
6
+ server.registerTool('set_chat_read', { description: 'Set a WhatsApp chat as read or unread', inputSchema: ReadChatSchema }, args => withErrorHandling(sync, () => sync.setRead(args.jid, args.read).then(() => `Chat ${args.jid}: read status set to ${String(args.read)}`)));
7
7
  }
8
8
  const ArchiveChatSchema = z.object({
9
- jid: JidSchema,
9
+ jid: JidSchema.describe('The unique identifier (JID) of the chat'),
10
10
  archived: z.boolean()
11
11
  .describe('Whether the chat should be archived (true) or unarchived (false).'),
12
12
  });
13
13
  const ReadChatSchema = z.object({
14
- jid: JidSchema,
14
+ jid: JidSchema.describe('The unique identifier (JID) of the chat'),
15
15
  read: z.boolean()
16
16
  .describe('Whether the chat should be marked as read (true) or unread (false).'),
17
17
  });
18
+ const AllChatsSchema = z.array(z.object({
19
+ jid: JidSchema.describe('The unique identifier (JID) of the chat'),
20
+ unreadCount: z.number().describe('Number of unread messages in this chat'),
21
+ readOnly: z.boolean().describe('Whether the chat is read-only'),
22
+ name: z.string().describe('Display name of the chat'),
23
+ archived: z.boolean().describe('Whether the chat is archived'),
24
+ lastMessageTimestamp: z.number().describe('Unix timestamp of the last message'),
25
+ isGroup: z.boolean().describe('Whether this is a group chat'),
26
+ })).describe('List of all WhatsApp chats');
18
27
  //# sourceMappingURL=chatTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chatTools.js","sourceRoot":"","sources":["../../src/tools/chatTools.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE9E,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAAoB,EAAE,IAAqB;IAC9F,uBAAuB,CACrB,MAAM,EAAE,OAAO,EAAE,MAAM,EACvB,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EACtB,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EACvB,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,EAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EACnB,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAA;IAED,YAAY,CACV,MAAM,EACN,mBAAmB,EACnB,iBAAiB,EACjB,gDAAgD,EAChD,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,IAAI,CAAC,GAAG,2BAA2B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA,CAAC,CAAC,EAC9I,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAA;IAED,YAAY,CACV,MAAM,EACN,eAAe,EACf,cAAc,EACd,wCAAwC,EACxC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,QAAQ,IAAI,CAAC,GAAG,uBAAuB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA,CAAC,CAAC,EAC9H,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAA;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;SAClB,QAAQ,CAAC,mEAAmE,CAAC;CACjF,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;SACd,QAAQ,CAAC,qEAAqE,CAAC;CACnF,CAAC,CAAA"}
1
+ {"version":3,"file":"chatTools.js","sourceRoot":"","sources":["../../src/tools/chatTools.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE1D,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,KAAoB,EAAE,IAAqB;IAC9F,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,iDAAiD,EAAE,YAAY,EAAE,cAAc,EAAE,EACnI,GAAG,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CACtD,CAAA;IAED,MAAM,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE,WAAW,EAAE,+CAA+C,EAAE,WAAW,EAAE,iBAAiB,EAAE,EACvI,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,IAAI,CAAC,GAAG,4BAA4B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACjK,CAAA;IAED,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,uCAAuC,EAAE,WAAW,EAAE,cAAc,EAAE,EACxH,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,IAAI,CAAC,GAAG,wBAAwB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CACjJ,CAAA;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAClE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;SAClB,QAAQ,CAAC,mEAAmE,CAAC;CACjF,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAClE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;SACd,QAAQ,CAAC,qEAAqE,CAAC;CACnF,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC1E,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC9D,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC/E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC9D,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAA"}
@@ -1,51 +1,9 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { type CallToolResult, type ListResourcesResult, type ReadResourceResult } from '@modelcontextprotocol/sdk/types.js';
3
- import { type SyncStatus } from '../sync.js';
4
- import z, { ZodType } from 'zod';
1
+ import { type CallToolResult } from '@modelcontextprotocol/sdk/types.js';
2
+ import { WhatsAppHandler } from '../sync.js';
3
+ import z from 'zod';
5
4
  export declare const JidSchema: z.ZodUnion<readonly [z.ZodString, z.ZodString]>;
6
- export declare function registerEntityResources<T>(server: McpServer, pluralType: string, singularType: string, getAll: () => T[], get: (id: string) => T | undefined, toUri: (entity: T) => string, toName: (entity: T) => string, getStatus: () => SyncStatus): void;
7
- export declare function registerTool<I>(server: McpServer, name: string, inputSchema: ZodType<I>, description: string, action: (args: I) => Promise<string>, getStatus: () => SyncStatus): void;
8
- export declare const toCallError: (error: Error) => CallToolResult;
9
- export declare const toReadResource: (contents: ReadResourceResult["contents"]) => {
10
- contents: ({
11
- uri: string;
12
- text: string;
13
- mimeType?: string | undefined;
14
- _meta?: {
15
- [x: string]: unknown;
16
- } | undefined;
17
- } | {
18
- uri: string;
19
- blob: string;
20
- mimeType?: string | undefined;
21
- _meta?: {
22
- [x: string]: unknown;
23
- } | undefined;
24
- })[];
25
- };
26
- export declare const toListResource: (resources: ListResourcesResult["resources"]) => {
27
- resources: {
28
- uri: string;
29
- name: string;
30
- description?: string | undefined;
31
- mimeType?: string | undefined;
32
- size?: number | undefined;
33
- annotations?: {
34
- audience?: ("user" | "assistant")[] | undefined;
35
- priority?: number | undefined;
36
- lastModified?: string | undefined;
37
- } | undefined;
38
- _meta?: {
39
- [x: string]: unknown;
40
- } | undefined;
41
- icons?: {
42
- src: string;
43
- mimeType?: string | undefined;
44
- sizes?: string[] | undefined;
45
- theme?: "light" | "dark" | undefined;
46
- }[] | undefined;
47
- title?: string | undefined;
48
- }[];
49
- };
50
- export declare const toCallResult: (text: string) => CallToolResult;
5
+ export declare function withErrorHandling<R = string | Record<string, unknown>>(sync: WhatsAppHandler, action: () => R | Promise<R>): Promise<CallToolResult>;
6
+ export declare const toCallError: (errorMessage: string) => CallToolResult;
7
+ export declare const toTextResult: (text: string) => CallToolResult;
8
+ export declare const toStructuredOutput: (structuredContent: Record<string, unknown>) => CallToolResult;
51
9
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAA;AACrF,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAC3H,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAGhC,eAAO,MAAM,SAAS,iDAG6H,CAAA;AAEnJ,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,CAAC,EAAE,EACjB,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,EAClC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,EAC5B,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,EAC7B,SAAS,EAAE,MAAM,UAAU,QAqC5B;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,EACvB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,EACpC,SAAS,EAAE,MAAM,UAAU,QAW5B;AAmBD,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,KAAG,cAAmG,CAAA;AAC9I,eAAO,MAAM,cAAc,GAAI,UAAU,kBAAkB,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;CAAmB,CAAA;AAC1F,eAAO,MAAM,cAAc,GAAI,WAAW,mBAAmB,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAAoB,CAAA;AAC9F,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,cAAyE,CAAA"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,eAAO,MAAM,SAAS,iDAGpB,CAAA;AAEF,wBAAsB,iBAAiB,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAkB1J;AAED,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,KAAG,cAAkG,CAAA;AACrJ,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,cAAyE,CAAA;AACrH,eAAO,MAAM,kBAAkB,GAAI,mBAAmB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,cAAsE,CAAA"}
@@ -1,46 +1,32 @@
1
- import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
2
1
  import z from 'zod';
3
2
  export const JidSchema = z.union([
4
3
  z.string().min(1, 'JID is required').endsWith('@s.whatsapp.net', 'JID not a valid WhatsApp JID)'),
5
4
  z.string().min(1, 'JID is required').endsWith('@g.us', 'JID not a valid WhatsApp JID)'),
6
- ]).describe('The JID of the recipient or chat. For example 41791234567@s.whatsapp.net for an individual or 1234567890-1234567890@g.us for a group');
7
- export function registerEntityResources(server, pluralType, singularType, getAll, get, toUri, toName, getStatus) {
8
- const toResource = (entity) => entity ? [{ uri: toUri(entity), mimeType: 'application/json', text: JSON.stringify(entity) }] : [];
9
- server.registerResource(pluralType, `${pluralType}://app`, { title: `All WhatsApp ${pluralType}`, description: `List WhatsApp ${pluralType}`, mimeType: 'application/json' }, async () => withErrorHandling(getStatus, () => toReadResource(getAll().flatMap(e => toResource(e))), (error) => { throw error; }));
10
- const resourceTemplate = new ResourceTemplate(`${pluralType}://app/{${singularType}Id}`, {
11
- list: () => {
12
- const status = getStatus();
13
- if (status.type === 'needAuth')
14
- return toListResource([]);
15
- if (status.type === 'connecting')
16
- throw new Error('Server still connecting, please wait');
17
- if (status.type === 'closed')
18
- throw new Error('Connection closed, please restart server');
19
- return toListResource(getAll().map(e => ({ uri: toUri(e), name: toName(e) })));
20
- },
21
- });
22
- server.registerResource(singularType, resourceTemplate, { title: `A single WhatsApp ${singularType}`, description: `Details of a single WhatsApp ${singularType}`, mimeType: 'application/json' }, async (_, params) => withErrorHandling(getStatus, () => toReadResource(toResource(get(params[`${singularType}Id`]))), (error) => { throw error; }));
23
- }
24
- export function registerTool(server, name, inputSchema, description, action, getStatus) {
25
- server.registerTool(name, { description, inputSchema }, async (args) => withErrorHandling(() => getStatus(), () => action(args).then(toCallResult), e => toCallError(e)));
26
- }
27
- async function withErrorHandling(getStatus, action, onError) {
5
+ ]);
6
+ export async function withErrorHandling(sync, action) {
28
7
  try {
29
- const status = getStatus();
8
+ let status = sync.getStatus();
9
+ if (status.type === 'closed')
10
+ await sync.start();
11
+ status = sync.getStatus();
12
+ if (status.type === 'closed')
13
+ throw new Error('Connection closed, please restart server');
30
14
  if (status.type === 'needAuth')
31
15
  throw new Error('Authentication required, please call the "get_auth_qr" tool to get a QR code for authentication');
32
16
  if (status.type === 'connecting')
33
17
  throw new Error('Server still connecting, please wait');
34
- if (status.type === 'closed')
35
- throw new Error('Connection closed, please restart server');
36
- return await action();
18
+ const result = await action();
19
+ if (typeof result === 'string') {
20
+ return toTextResult(result);
21
+ }
22
+ return toStructuredOutput(result);
37
23
  }
38
24
  catch (error) {
39
- return await onError(error);
25
+ const message = error instanceof Error ? error.message : String(error);
26
+ return toCallError(message);
40
27
  }
41
28
  }
42
- export const toCallError = (error) => ({ content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true });
43
- export const toReadResource = (contents) => ({ contents });
44
- export const toListResource = (resources) => ({ resources });
45
- export const toCallResult = (text) => ({ content: [{ type: 'text', text }], isError: false });
29
+ export const toCallError = (errorMessage) => ({ content: [{ type: 'text', text: `Error: ${errorMessage}` }], isError: true });
30
+ export const toTextResult = (text) => ({ content: [{ type: 'text', text }], isError: false });
31
+ export const toStructuredOutput = (structuredContent) => ({ content: [], structuredContent, isError: false });
46
32
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,MAAM,yCAAyC,CAAA;AAGrF,OAAO,CAAc,MAAM,KAAK,CAAA;AAGhC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;IACjG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;CACxF,CAAC,CAAC,QAAQ,CAAC,sIAAsI,CAAC,CAAA;AAEnJ,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,UAAkB,EAClB,YAAoB,EACpB,MAAiB,EACjB,GAAkC,EAClC,KAA4B,EAC5B,MAA6B,EAC7B,SAA2B;IAE3B,MAAM,UAAU,GAAG,CAAC,MAAqB,EAAE,EAAE,CAC3C,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,kBAA2B,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAE7G,MAAM,CAAC,gBAAgB,CACrB,UAAU,EACV,GAAG,UAAU,QAAQ,EACrB,EAAE,KAAK,EAAE,gBAAgB,UAAU,EAAE,EAAE,WAAW,EAAE,iBAAiB,UAAU,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACjH,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAC3B,SAAS,EACT,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,KAAK,CAAA,CAAC,CAAC,CAC3B,CACF,CAAA;IAED,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAC3C,GAAG,UAAU,WAAW,YAAY,KAAK,EAAE;QACzC,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;YAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,cAAc,CAAC,EAAE,CAAC,CAAA;YACzD,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACzF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;YACzF,OAAO,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAChF,CAAC;KACF,CAAC,CAAA;IAEJ,MAAM,CAAC,gBAAgB,CACrB,YAAY,EACZ,gBAAgB,EAChB,EAAE,KAAK,EAAE,qBAAqB,YAAY,EAAE,EAAE,WAAW,EAAE,gCAAgC,YAAY,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACzI,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,CACpC,SAAS,EACT,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,YAAY,IAAI,CAAW,CAAC,CAAC,CAAC,EAC5E,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,KAAK,CAAA,CAAC,CAAC,CAC3B,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAiB,EACjB,IAAY,EACZ,WAAuB,EACvB,WAAmB,EACnB,MAAoC,EACpC,SAA2B;IAE3B,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ,EAAE,WAAW,EAAE,WAAW,EAAE,EAC5B,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,iBAAiB,CAC7B,GAAG,EAAE,CAAC,SAAS,EAAE,EACjB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EACrC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CACpB,CACF,CAAA;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,SAA2B,EAC3B,MAA4B,EAC5B,OAAyC;IAEzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAA;QAClJ,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACzF,OAAO,MAAM,MAAM,EAAE,CAAA;IACvB,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,MAAM,OAAO,CAAC,KAAc,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9I,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAwC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC1F,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAA2C,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;AAC9F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/tools/common.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;IAC/B,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,iBAAiB,EAAE,+BAA+B,CAAC;IACjG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;CACxF,CAAC,CAAA;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAuC,IAAqB,EAAE,MAA4B;IAC/H,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAChD,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QACzB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACzF,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAA;QAClJ,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACzF,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAA;QAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,kBAAkB,CAAC,MAAiC,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO,KAAc,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACtE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,YAAY,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACrJ,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;AACrH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,iBAA0C,EAAkB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"contactTools.d.ts","sourceRoot":"","sources":["../../src/tools/contactTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAGjD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QAOtG"}
1
+ {"version":3,"file":"contactTools.d.ts","sourceRoot":"","sources":["../../src/tools/contactTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAIjD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QAItG"}
@@ -1,5 +1,11 @@
1
- import { registerEntityResources } from './common.js';
1
+ import z from 'zod';
2
+ import { JidSchema, withErrorHandling } from './common.js';
2
3
  export function registerContactResources(server, store, sync) {
3
- registerEntityResources(server, 'contacts', 'contact', () => store.getContacts(), id => store.getContact(id), c => `contacts://app/${c.id}`, c => c.name ?? c.id, () => sync.getStatus());
4
+ server.registerTool('get_all_contacts', { description: 'Retrieve all WhatsApp contacts', outputSchema: AllContactsSchema }, async () => withErrorHandling(sync, () => store.getContacts()));
4
5
  }
6
+ const AllContactsSchema = z.array(z.object({
7
+ jid: JidSchema.describe('The unique identifier (JID) of the contact'),
8
+ name: z.string().describe('Display name of the contact'),
9
+ phone: z.string().describe('Phone number in international format'),
10
+ })).describe('List of all WhatsApp contacts');
5
11
  //# sourceMappingURL=contactTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contactTools.js","sourceRoot":"","sources":["../../src/tools/contactTools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAErD,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,KAAoB,EAAE,IAAqB;IACrG,uBAAuB,CACrB,MAAM,EAAE,UAAU,EAAE,SAAS,EAC7B,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EACrD,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,EAClD,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"contactTools.js","sourceRoot":"","sources":["../../src/tools/contactTools.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE1D,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,KAAoB,EAAE,IAAqB;IACrG,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,YAAY,EAAE,iBAAiB,EAAE,EACxH,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAC/D,CAAA;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACzC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACrE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CACnE,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import { type WhatsAppStore } from '../store.js';
2
+ import { WhatsAppStore } from '../store.js';
3
3
  import { WhatsAppHandler } from '../sync.js';
4
4
  export declare function registerMessageTools(server: McpServer, store: WhatsAppStore, sync: WhatsAppHandler): void;
5
5
  //# sourceMappingURL=messageTools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"messageTools.d.ts","sourceRoot":"","sources":["../../src/tools/messageTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QAgBlG"}
1
+ {"version":3,"file":"messageTools.d.ts","sourceRoot":"","sources":["../../src/tools/messageTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAI5C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,QAYlG"}
@@ -1,13 +1,27 @@
1
1
  import z from 'zod';
2
- import { JidSchema, registerEntityResources, registerTool } from './common.js';
2
+ import { JidSchema, withErrorHandling } from './common.js';
3
3
  export function registerMessageTools(server, store, sync) {
4
- registerEntityResources(server, 'messages', 'message', () => store.getMessages(), id => store.getMessage(id), m => `messages://app/${m.key.id}`, m => m.key.id, () => sync.getStatus());
5
- registerTool(server, 'send_message', SendMessageSchema, 'Send a WhatsApp-Message to a given JID.', async (args) => { await sync.sendMessage(args.jid, args.message); return `Message sent to ${args.jid}: "${args.message}"`; }, () => sync.getStatus());
4
+ server.registerTool('send_message', { description: 'Send a WhatsApp-Message to a given JID', inputSchema: SendMessageSchema }, async (args) => withErrorHandling(sync, () => sync.sendMessage(args.jid, args.message).then(() => `Message sent to ${args.jid}: "${args.message}"`)));
5
+ server.registerTool('get_all_messages', { description: 'Retrieve all WhatsApp messages across all chats. This can return a large amount of data.', outputSchema: AllMessagesSchema }, async () => withErrorHandling(sync, () => store.getMessages()));
6
+ server.registerTool('get_all_messages_for_chat', { description: 'Retrieve all WhatsApp messages for a specific chat.', inputSchema: GetChatMessagesSchema, outputSchema: AllMessagesSchema }, async (args) => withErrorHandling(sync, () => store.getMessagesForChat(args.jid)));
6
7
  }
7
8
  const SendMessageSchema = z.object({
8
- jid: JidSchema,
9
+ jid: JidSchema.describe('The JID of the recipient. For example 41791234567@s.whatsapp.net for an individual or 1234567890-1234567890@g.us for a group'),
9
10
  message: z.string()
10
11
  .min(1, 'Message body is required')
11
12
  .describe('The body of the message to be sent. Can contain unicode characters like emojis.'),
12
13
  });
14
+ const GetChatMessagesSchema = z.object({
15
+ jid: JidSchema.describe('The JID of the chat. For example 41791234567@s.whatsapp.net for an individual or 1234567890-1234567890@g.us for a group'),
16
+ });
17
+ const AllMessagesSchema = z.array(z.object({
18
+ id: z.string().describe('Unique identifier of the message'),
19
+ from: z.object({
20
+ jid: JidSchema.describe('The JID of the sender'),
21
+ name: z.string().describe('Display name of the sender'),
22
+ phone: z.string().optional().describe('Phone number of the sender in international format'),
23
+ }).describe('Sender information (undefined if the message was sent by you)').optional(),
24
+ message: z.string().describe('Text content of the message'),
25
+ messageTimestamp: z.number().describe('Unix timestamp of when the message was sent'),
26
+ })).describe('List of all WhatsApp messages across all chats');
13
27
  //# sourceMappingURL=messageTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messageTools.js","sourceRoot":"","sources":["../../src/tools/messageTools.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE9E,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAAoB,EAAE,IAAqB;IACjG,uBAAuB,CACrB,MAAM,EAAE,UAAU,EAAE,SAAS,EAC7B,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EACrD,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAChD,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAA;IAED,YAAY,CACV,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,yCAAyC,EACzC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,mBAAmB,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,GAAG,CAAA,CAAC,CAAC,EAC3H,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CACvB,CAAA;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SAChB,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAClC,QAAQ,CAAC,iFAAiF,CAAC;CAC/F,CAAC,CAAA"}
1
+ {"version":3,"file":"messageTools.js","sourceRoot":"","sources":["../../src/tools/messageTools.ts"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE1D,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,KAAoB,EAAE,IAAqB;IACjG,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,wCAAwC,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAC3H,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CACnJ,CAAA;IAED,MAAM,CAAC,YAAY,CAAC,kBAAkB,EAAE,EAAE,WAAW,EAAE,0FAA0F,EAAE,YAAY,EAAE,iBAAiB,EAAE,EAClL,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAC/D,CAAA;IAED,MAAM,CAAC,YAAY,CAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,qDAAqD,EAAE,WAAW,EAAE,qBAAqB,EAAE,YAAY,EAAE,iBAAiB,EAAE,EAC1L,KAAK,EAAC,IAAI,EAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAChF,CAAA;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,8HAA8H,CAAC;IACvJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SAChB,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;SAClC,QAAQ,CAAC,iFAAiF,CAAC;CAC/F,CAAC,CAAA;AAEF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,yHAAyH,CAAC;CACnJ,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC3D,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KAC5F,CAAC,CAAC,QAAQ,CAAC,+DAA+D,CAAC,CAAC,QAAQ,EAAE;IACvF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC3D,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACrF,CAAC,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAA"}