mcp-evolution 0.0.0-stage → 0.8.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 (211) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/LICENSE +21 -0
  3. package/README.md +377 -2
  4. package/dist/config.d.ts +23 -0
  5. package/dist/config.js +113 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/errors.d.ts +8 -0
  8. package/dist/errors.js +15 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/evolution-client.d.ts +34 -0
  11. package/dist/evolution-client.js +84 -0
  12. package/dist/evolution-client.js.map +1 -0
  13. package/dist/guards/recipients.d.ts +40 -0
  14. package/dist/guards/recipients.js +135 -0
  15. package/dist/guards/recipients.js.map +1 -0
  16. package/dist/guards/tools.d.ts +16 -0
  17. package/dist/guards/tools.js +154 -0
  18. package/dist/guards/tools.js.map +1 -0
  19. package/dist/http.d.ts +19 -0
  20. package/dist/http.js +103 -0
  21. package/dist/http.js.map +1 -0
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.js +7 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/registry.d.ts +36 -0
  26. package/dist/registry.js +68 -0
  27. package/dist/registry.js.map +1 -0
  28. package/dist/schemas.d.ts +4 -0
  29. package/dist/schemas.js +16 -0
  30. package/dist/schemas.js.map +1 -0
  31. package/dist/server.d.ts +5 -0
  32. package/dist/server.js +74 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/tools/accept-invite.d.ts +2 -0
  35. package/dist/tools/accept-invite.js +23 -0
  36. package/dist/tools/accept-invite.js.map +1 -0
  37. package/dist/tools/archive-chat.d.ts +2 -0
  38. package/dist/tools/archive-chat.js +35 -0
  39. package/dist/tools/archive-chat.js.map +1 -0
  40. package/dist/tools/check-number.d.ts +2 -0
  41. package/dist/tools/check-number.js +25 -0
  42. package/dist/tools/check-number.js.map +1 -0
  43. package/dist/tools/connection-state.d.ts +2 -0
  44. package/dist/tools/connection-state.js +19 -0
  45. package/dist/tools/connection-state.js.map +1 -0
  46. package/dist/tools/create-group.d.ts +2 -0
  47. package/dist/tools/create-group.js +31 -0
  48. package/dist/tools/create-group.js.map +1 -0
  49. package/dist/tools/delete-message.d.ts +2 -0
  50. package/dist/tools/delete-message.js +33 -0
  51. package/dist/tools/delete-message.js.map +1 -0
  52. package/dist/tools/download-media.d.ts +2 -0
  53. package/dist/tools/download-media.js +59 -0
  54. package/dist/tools/download-media.js.map +1 -0
  55. package/dist/tools/fetch-business-profile.d.ts +2 -0
  56. package/dist/tools/fetch-business-profile.js +25 -0
  57. package/dist/tools/fetch-business-profile.js.map +1 -0
  58. package/dist/tools/fetch-invite-code.d.ts +2 -0
  59. package/dist/tools/fetch-invite-code.js +23 -0
  60. package/dist/tools/fetch-invite-code.js.map +1 -0
  61. package/dist/tools/fetch-privacy.d.ts +2 -0
  62. package/dist/tools/fetch-privacy.js +19 -0
  63. package/dist/tools/fetch-privacy.js.map +1 -0
  64. package/dist/tools/fetch-profile-picture.d.ts +2 -0
  65. package/dist/tools/fetch-profile-picture.js +25 -0
  66. package/dist/tools/fetch-profile-picture.js.map +1 -0
  67. package/dist/tools/find-chats.d.ts +2 -0
  68. package/dist/tools/find-chats.js +74 -0
  69. package/dist/tools/find-chats.js.map +1 -0
  70. package/dist/tools/find-contacts.d.ts +2 -0
  71. package/dist/tools/find-contacts.js +74 -0
  72. package/dist/tools/find-contacts.js.map +1 -0
  73. package/dist/tools/find-group-by-invite.d.ts +2 -0
  74. package/dist/tools/find-group-by-invite.js +56 -0
  75. package/dist/tools/find-group-by-invite.js.map +1 -0
  76. package/dist/tools/find-labels.d.ts +2 -0
  77. package/dist/tools/find-labels.js +22 -0
  78. package/dist/tools/find-labels.js.map +1 -0
  79. package/dist/tools/find-messages.d.ts +2 -0
  80. package/dist/tools/find-messages.js +55 -0
  81. package/dist/tools/find-messages.js.map +1 -0
  82. package/dist/tools/find-webhook.d.ts +2 -0
  83. package/dist/tools/find-webhook.js +19 -0
  84. package/dist/tools/find-webhook.js.map +1 -0
  85. package/dist/tools/get-chat-history.d.ts +2 -0
  86. package/dist/tools/get-chat-history.js +55 -0
  87. package/dist/tools/get-chat-history.js.map +1 -0
  88. package/dist/tools/get-group-info.d.ts +2 -0
  89. package/dist/tools/get-group-info.js +58 -0
  90. package/dist/tools/get-group-info.js.map +1 -0
  91. package/dist/tools/get-group-resolved-participants.d.ts +2 -0
  92. package/dist/tools/get-group-resolved-participants.js +170 -0
  93. package/dist/tools/get-group-resolved-participants.js.map +1 -0
  94. package/dist/tools/get-settings.d.ts +2 -0
  95. package/dist/tools/get-settings.js +19 -0
  96. package/dist/tools/get-settings.js.map +1 -0
  97. package/dist/tools/handle-label.d.ts +2 -0
  98. package/dist/tools/handle-label.js +30 -0
  99. package/dist/tools/handle-label.js.map +1 -0
  100. package/dist/tools/index.d.ts +2 -0
  101. package/dist/tools/index.js +131 -0
  102. package/dist/tools/index.js.map +1 -0
  103. package/dist/tools/leave-group.d.ts +2 -0
  104. package/dist/tools/leave-group.js +23 -0
  105. package/dist/tools/leave-group.js.map +1 -0
  106. package/dist/tools/list-groups.d.ts +2 -0
  107. package/dist/tools/list-groups.js +53 -0
  108. package/dist/tools/list-groups.js.map +1 -0
  109. package/dist/tools/list-instances.d.ts +2 -0
  110. package/dist/tools/list-instances.js +37 -0
  111. package/dist/tools/list-instances.js.map +1 -0
  112. package/dist/tools/logout-instance.d.ts +2 -0
  113. package/dist/tools/logout-instance.js +19 -0
  114. package/dist/tools/logout-instance.js.map +1 -0
  115. package/dist/tools/mark-as-read.d.ts +2 -0
  116. package/dist/tools/mark-as-read.js +30 -0
  117. package/dist/tools/mark-as-read.js.map +1 -0
  118. package/dist/tools/remove-profile-picture.d.ts +2 -0
  119. package/dist/tools/remove-profile-picture.js +19 -0
  120. package/dist/tools/remove-profile-picture.js.map +1 -0
  121. package/dist/tools/restart-instance.d.ts +2 -0
  122. package/dist/tools/restart-instance.js +19 -0
  123. package/dist/tools/restart-instance.js.map +1 -0
  124. package/dist/tools/revoke-invite-code.d.ts +2 -0
  125. package/dist/tools/revoke-invite-code.js +23 -0
  126. package/dist/tools/revoke-invite-code.js.map +1 -0
  127. package/dist/tools/send-audio.d.ts +2 -0
  128. package/dist/tools/send-audio.js +32 -0
  129. package/dist/tools/send-audio.js.map +1 -0
  130. package/dist/tools/send-button.d.ts +2 -0
  131. package/dist/tools/send-button.js +43 -0
  132. package/dist/tools/send-button.js.map +1 -0
  133. package/dist/tools/send-contact.d.ts +2 -0
  134. package/dist/tools/send-contact.js +36 -0
  135. package/dist/tools/send-contact.js.map +1 -0
  136. package/dist/tools/send-group-invite.d.ts +2 -0
  137. package/dist/tools/send-group-invite.js +29 -0
  138. package/dist/tools/send-group-invite.js.map +1 -0
  139. package/dist/tools/send-list.d.ts +2 -0
  140. package/dist/tools/send-list.js +47 -0
  141. package/dist/tools/send-list.js.map +1 -0
  142. package/dist/tools/send-location.d.ts +2 -0
  143. package/dist/tools/send-location.js +37 -0
  144. package/dist/tools/send-location.js.map +1 -0
  145. package/dist/tools/send-media.d.ts +2 -0
  146. package/dist/tools/send-media.js +45 -0
  147. package/dist/tools/send-media.js.map +1 -0
  148. package/dist/tools/send-poll.d.ts +2 -0
  149. package/dist/tools/send-poll.js +32 -0
  150. package/dist/tools/send-poll.js.map +1 -0
  151. package/dist/tools/send-presence.d.ts +2 -0
  152. package/dist/tools/send-presence.js +33 -0
  153. package/dist/tools/send-presence.js.map +1 -0
  154. package/dist/tools/send-reaction.d.ts +2 -0
  155. package/dist/tools/send-reaction.js +31 -0
  156. package/dist/tools/send-reaction.js.map +1 -0
  157. package/dist/tools/send-status.d.ts +2 -0
  158. package/dist/tools/send-status.js +40 -0
  159. package/dist/tools/send-status.js.map +1 -0
  160. package/dist/tools/send-sticker.d.ts +2 -0
  161. package/dist/tools/send-sticker.js +28 -0
  162. package/dist/tools/send-sticker.js.map +1 -0
  163. package/dist/tools/send-text.d.ts +2 -0
  164. package/dist/tools/send-text.js +31 -0
  165. package/dist/tools/send-text.js.map +1 -0
  166. package/dist/tools/set-settings.d.ts +2 -0
  167. package/dist/tools/set-settings.js +44 -0
  168. package/dist/tools/set-settings.js.map +1 -0
  169. package/dist/tools/set-webhook.d.ts +2 -0
  170. package/dist/tools/set-webhook.js +39 -0
  171. package/dist/tools/set-webhook.js.map +1 -0
  172. package/dist/tools/update-block-status.d.ts +2 -0
  173. package/dist/tools/update-block-status.js +28 -0
  174. package/dist/tools/update-block-status.js.map +1 -0
  175. package/dist/tools/update-group-description.d.ts +2 -0
  176. package/dist/tools/update-group-description.js +24 -0
  177. package/dist/tools/update-group-description.js.map +1 -0
  178. package/dist/tools/update-group-picture.d.ts +2 -0
  179. package/dist/tools/update-group-picture.js +24 -0
  180. package/dist/tools/update-group-picture.js.map +1 -0
  181. package/dist/tools/update-group-setting.d.ts +2 -0
  182. package/dist/tools/update-group-setting.js +25 -0
  183. package/dist/tools/update-group-setting.js.map +1 -0
  184. package/dist/tools/update-group-subject.d.ts +2 -0
  185. package/dist/tools/update-group-subject.js +24 -0
  186. package/dist/tools/update-group-subject.js.map +1 -0
  187. package/dist/tools/update-participants.d.ts +2 -0
  188. package/dist/tools/update-participants.js +26 -0
  189. package/dist/tools/update-participants.js.map +1 -0
  190. package/dist/tools/update-privacy.d.ts +2 -0
  191. package/dist/tools/update-privacy.js +45 -0
  192. package/dist/tools/update-privacy.js.map +1 -0
  193. package/dist/tools/update-profile-name.d.ts +2 -0
  194. package/dist/tools/update-profile-name.js +25 -0
  195. package/dist/tools/update-profile-name.js.map +1 -0
  196. package/dist/tools/update-profile-picture.d.ts +2 -0
  197. package/dist/tools/update-profile-picture.js +25 -0
  198. package/dist/tools/update-profile-picture.js.map +1 -0
  199. package/dist/tools/update-profile-status.d.ts +2 -0
  200. package/dist/tools/update-profile-status.js +25 -0
  201. package/dist/tools/update-profile-status.js.map +1 -0
  202. package/dist/util/db.d.ts +3 -0
  203. package/dist/util/db.js +23 -0
  204. package/dist/util/db.js.map +1 -0
  205. package/dist/util/normalize.d.ts +44 -0
  206. package/dist/util/normalize.js +68 -0
  207. package/dist/util/normalize.js.map +1 -0
  208. package/dist/util/redact.d.ts +11 -0
  209. package/dist/util/redact.js +54 -0
  210. package/dist/util/redact.js.map +1 -0
  211. package/package.json +53 -4
@@ -0,0 +1,170 @@
1
+ import { z } from "zod";
2
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
3
+ import { getPool, isDbConfigured } from "../util/db.js";
4
+ const schema = {
5
+ groupJid: z
6
+ .string()
7
+ .min(1)
8
+ .describe("Group JID (e.g. 120363xxxxxxxx@g.us)"),
9
+ sinceDays: z
10
+ .number()
11
+ .int()
12
+ .min(1)
13
+ .max(365)
14
+ .default(180)
15
+ .optional()
16
+ .describe("Lookback window in days for message history used to resolve LIDs. Default 180. " +
17
+ "Larger window = more LIDs resolved but slower query."),
18
+ onlyResolved: z
19
+ .boolean()
20
+ .default(false)
21
+ .optional()
22
+ .describe("When true, omits participants without phone or pushName from response. " +
23
+ "Useful when caller only wants actionable contacts."),
24
+ };
25
+ export function registerGetGroupResolvedParticipants(server) {
26
+ server.registerTool("get_group_resolved_participants", {
27
+ title: "Get Group Resolved Participants (LID → phone + name)",
28
+ description: "Resolve a group's LID participants to phone JID + pushName by cross-referencing " +
29
+ "the Evolution Postgres Message history (key->>'participantAlt' field). " +
30
+ "Returns: { groupJid, total, resolved, unresolved, participants: [{ lid, phone, name, isAdmin, lastSeen }] }. " +
31
+ "Coverage depends on how many participants sent messages in the lookback window — " +
32
+ "silent members stay unresolved. Phone field is ready to use with send_text. " +
33
+ "Requires EVOLUTION_DB_URL env var pointing to Evolution's Postgres.",
34
+ inputSchema: schema,
35
+ }, async (args, { client }) => {
36
+ try {
37
+ if (!isDbConfigured()) {
38
+ return {
39
+ isError: true,
40
+ content: [
41
+ {
42
+ type: "text",
43
+ text: "EVOLUTION_DB_URL not configured. Set it in the MCP env to enable DB-backed " +
44
+ "LID resolution (e.g. postgresql://user:pass@host:5432/evolution_api).",
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ const pool = getPool();
50
+ if (!pool) {
51
+ return {
52
+ isError: true,
53
+ content: [
54
+ { type: "text", text: "Postgres pool unavailable." },
55
+ ],
56
+ };
57
+ }
58
+ const groupJid = args.groupJid;
59
+ const sinceDays = args.sinceDays ?? 180;
60
+ const onlyResolved = args.onlyResolved === true;
61
+ const data = (await client.get(`/group/findGroupInfos/${client.instanceName}?groupJid=${encodeURIComponent(groupJid)}`));
62
+ const participants = Array.isArray(data.participants)
63
+ ? data.participants
64
+ : [];
65
+ if (participants.length === 0) {
66
+ return {
67
+ content: [
68
+ {
69
+ type: "text",
70
+ text: JSON.stringify({
71
+ groupJid,
72
+ subject: data.subject,
73
+ total: 0,
74
+ resolved: 0,
75
+ unresolved: 0,
76
+ participants: [],
77
+ }, null, 2),
78
+ },
79
+ ],
80
+ };
81
+ }
82
+ const lidIds = participants.map((p) => p.id ?? "").filter(Boolean);
83
+ let resolvedMap = new Map();
84
+ if (lidIds.length > 0) {
85
+ const sql = `
86
+ SELECT DISTINCT ON (participant)
87
+ participant,
88
+ participant_alt,
89
+ push_name,
90
+ last_seen
91
+ FROM (
92
+ SELECT
93
+ key->>'participant' AS participant,
94
+ key->>'participantAlt' AS participant_alt,
95
+ "pushName" AS push_name,
96
+ "messageTimestamp" AS last_seen
97
+ FROM "Message"
98
+ WHERE key->>'remoteJid' = $1
99
+ AND key->>'participant' = ANY($2::text[])
100
+ AND "messageTimestamp" > EXTRACT(EPOCH FROM (NOW() - ($3 || ' days')::interval))
101
+ AND (key->>'participantAlt' IS NOT NULL OR "pushName" IS NOT NULL)
102
+ AND "instanceId" = (SELECT id FROM "Instance" WHERE name = $4 LIMIT 1)
103
+ ORDER BY "messageTimestamp" DESC
104
+ ) t
105
+ ORDER BY participant, last_seen DESC NULLS LAST
106
+ `;
107
+ const params = [groupJid, lidIds, String(sinceDays), client.instanceName];
108
+ const res = await pool.query(sql, params);
109
+ for (const row of res.rows) {
110
+ resolvedMap.set(row.participant, row);
111
+ }
112
+ }
113
+ const enriched = participants
114
+ .map((p) => {
115
+ const id = p.id ?? "";
116
+ const r = resolvedMap.get(id);
117
+ const phoneJid = r?.participant_alt ?? null;
118
+ const phone = phoneJid && phoneJid.endsWith("@s.whatsapp.net")
119
+ ? phoneJid.split("@")[0]
120
+ : null;
121
+ const isLid = id.endsWith("@lid");
122
+ const fallbackPhone = !isLid && id.endsWith("@s.whatsapp.net") ? id.split("@")[0] : null;
123
+ const name = r?.push_name && !/^\d+$/.test(r.push_name) ? r.push_name : null;
124
+ return {
125
+ lid: id,
126
+ phone: phone ?? fallbackPhone,
127
+ name,
128
+ isAdmin: p.admin != null && p.admin !== "",
129
+ lastSeen: r?.last_seen ? Number(r.last_seen) : null,
130
+ };
131
+ })
132
+ .filter((p) => (onlyResolved ? p.phone || p.name : true));
133
+ const resolvedCount = enriched.filter((p) => p.phone).length;
134
+ const namedCount = enriched.filter((p) => p.name).length;
135
+ return {
136
+ content: [
137
+ {
138
+ type: "text",
139
+ text: JSON.stringify({
140
+ groupJid,
141
+ subject: data.subject,
142
+ total: participants.length,
143
+ resolvedPhone: resolvedCount,
144
+ resolvedName: namedCount,
145
+ unresolved: participants.length - resolvedCount,
146
+ sinceDays,
147
+ participants: enriched,
148
+ }, null, 2),
149
+ },
150
+ ],
151
+ };
152
+ }
153
+ catch (e) {
154
+ if (e instanceof McpError) {
155
+ return {
156
+ isError: true,
157
+ content: [{ type: "text", text: e.message }],
158
+ };
159
+ }
160
+ const msg = e instanceof Error ? e.message : String(e);
161
+ return {
162
+ isError: true,
163
+ content: [
164
+ { type: "text", text: `DB resolution failed: ${msg}` },
165
+ ],
166
+ };
167
+ }
168
+ });
169
+ }
170
+ //# sourceMappingURL=get-group-resolved-participants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-group-resolved-participants.js","sourceRoot":"","sources":["../../src/tools/get-group-resolved-participants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerGetSettings(server: ToolRegistry): void;
@@ -0,0 +1,19 @@
1
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
2
+ export function registerGetSettings(server) {
3
+ server.registerTool("get_settings", {
4
+ title: "Get Settings",
5
+ description: "Get the current settings of the selected WhatsApp instance.",
6
+ inputSchema: {},
7
+ }, async (_args, { client }) => {
8
+ try {
9
+ const data = await client.get(`/settings/find/${client.instanceName}`);
10
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
11
+ }
12
+ catch (e) {
13
+ if (e instanceof McpError)
14
+ return { isError: true, content: [{ type: "text", text: e.message }] };
15
+ throw e;
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=get-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-settings.js","sourceRoot":"","sources":["../../src/tools/get-settings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,6DAA6D;QAC1E,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACvE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3G,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerHandleLabel(server: ToolRegistry): void;
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
3
+ import { PhoneOrJidSchema } from "../schemas.js";
4
+ const schema = {
5
+ number: PhoneOrJidSchema,
6
+ labelId: z.string().min(1).describe("Label ID to add or remove (get IDs from find_labels)"),
7
+ action: z.enum(["add", "remove"]).describe("add: assign label to chat; remove: unassign label from chat"),
8
+ };
9
+ export function registerHandleLabel(server) {
10
+ server.registerTool("handle_label", {
11
+ title: "Handle Label",
12
+ description: "Add or remove a WhatsApp label from a chat via the selected instance (requires WhatsApp Business).",
13
+ inputSchema: schema,
14
+ }, async (args, { client }) => {
15
+ try {
16
+ const data = await client.post(`/label/handleLabel/${client.instanceName}`, {
17
+ number: args.number,
18
+ labelId: args.labelId,
19
+ action: args.action,
20
+ });
21
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
22
+ }
23
+ catch (e) {
24
+ if (e instanceof McpError)
25
+ return { isError: true, content: [{ type: "text", text: e.message }] };
26
+ throw e;
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=handle-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-label.js","sourceRoot":"","sources":["../../src/tools/handle-label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,MAAM,GAAG;IACb,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAC3F,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,6DAA6D,CAAC;CAC1G,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACtD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,oGAAoG;QACjH,WAAW,EAAE,MAAM;KACpB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,YAAY,EAAE,EAAE;gBAC1E,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3G,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerAllTools(server: ToolRegistry): void;
@@ -0,0 +1,131 @@
1
+ import { registerListInstances } from "./list-instances.js";
2
+ // Original tools
3
+ import { registerListGroups } from "./list-groups.js";
4
+ import { registerFindChats } from "./find-chats.js";
5
+ import { registerFindContacts } from "./find-contacts.js";
6
+ import { registerFindMessages } from "./find-messages.js";
7
+ import { registerGetChatHistory } from "./get-chat-history.js";
8
+ import { registerSendText } from "./send-text.js";
9
+ import { registerSendMedia } from "./send-media.js";
10
+ import { registerGetGroupInfo } from "./get-group-info.js";
11
+ import { registerGetGroupResolvedParticipants } from "./get-group-resolved-participants.js";
12
+ // Message
13
+ import { registerSendAudio } from "./send-audio.js";
14
+ import { registerSendSticker } from "./send-sticker.js";
15
+ import { registerSendLocation } from "./send-location.js";
16
+ import { registerSendContact } from "./send-contact.js";
17
+ import { registerSendReaction } from "./send-reaction.js";
18
+ import { registerSendPoll } from "./send-poll.js";
19
+ import { registerSendList } from "./send-list.js";
20
+ import { registerSendButton } from "./send-button.js";
21
+ import { registerSendStatus } from "./send-status.js";
22
+ // Chat
23
+ import { registerMarkAsRead } from "./mark-as-read.js";
24
+ import { registerArchiveChat } from "./archive-chat.js";
25
+ import { registerDeleteMessage } from "./delete-message.js";
26
+ import { registerFetchProfilePicture } from "./fetch-profile-picture.js";
27
+ import { registerDownloadMedia } from "./download-media.js";
28
+ import { registerSendPresence } from "./send-presence.js";
29
+ // Profile
30
+ import { registerFetchBusinessProfile } from "./fetch-business-profile.js";
31
+ import { registerUpdateProfileName } from "./update-profile-name.js";
32
+ import { registerUpdateProfileStatus } from "./update-profile-status.js";
33
+ import { registerUpdateProfilePicture } from "./update-profile-picture.js";
34
+ import { registerRemoveProfilePicture } from "./remove-profile-picture.js";
35
+ import { registerFetchPrivacy } from "./fetch-privacy.js";
36
+ import { registerUpdatePrivacy } from "./update-privacy.js";
37
+ // Group
38
+ import { registerCreateGroup } from "./create-group.js";
39
+ import { registerUpdateGroupSubject } from "./update-group-subject.js";
40
+ import { registerUpdateGroupDescription } from "./update-group-description.js";
41
+ import { registerUpdateGroupPicture } from "./update-group-picture.js";
42
+ import { registerFetchInviteCode } from "./fetch-invite-code.js";
43
+ import { registerRevokeInviteCode } from "./revoke-invite-code.js";
44
+ import { registerAcceptInvite } from "./accept-invite.js";
45
+ import { registerSendGroupInvite } from "./send-group-invite.js";
46
+ import { registerUpdateParticipants } from "./update-participants.js";
47
+ import { registerUpdateGroupSetting } from "./update-group-setting.js";
48
+ import { registerLeaveGroup } from "./leave-group.js";
49
+ import { registerFindGroupByInvite } from "./find-group-by-invite.js";
50
+ // Instance
51
+ import { registerConnectionState } from "./connection-state.js";
52
+ import { registerRestartInstance } from "./restart-instance.js";
53
+ import { registerLogoutInstance } from "./logout-instance.js";
54
+ import { registerGetSettings } from "./get-settings.js";
55
+ import { registerSetSettings } from "./set-settings.js";
56
+ // Webhook
57
+ import { registerFindWebhook } from "./find-webhook.js";
58
+ import { registerSetWebhook } from "./set-webhook.js";
59
+ // Label
60
+ import { registerFindLabels } from "./find-labels.js";
61
+ import { registerHandleLabel } from "./handle-label.js";
62
+ // Block & Misc
63
+ import { registerUpdateBlockStatus } from "./update-block-status.js";
64
+ import { registerCheckNumber } from "./check-number.js";
65
+ export function registerAllTools(server) {
66
+ registerListInstances(server);
67
+ // Original
68
+ registerListGroups(server);
69
+ registerFindChats(server);
70
+ registerFindContacts(server);
71
+ registerFindMessages(server);
72
+ registerGetChatHistory(server);
73
+ registerSendText(server);
74
+ registerSendMedia(server);
75
+ registerGetGroupInfo(server);
76
+ registerGetGroupResolvedParticipants(server);
77
+ // Message
78
+ registerSendAudio(server);
79
+ registerSendSticker(server);
80
+ registerSendLocation(server);
81
+ registerSendContact(server);
82
+ registerSendReaction(server);
83
+ registerSendPoll(server);
84
+ registerSendList(server);
85
+ registerSendButton(server);
86
+ registerSendStatus(server);
87
+ // Chat
88
+ registerMarkAsRead(server);
89
+ registerArchiveChat(server);
90
+ registerDeleteMessage(server);
91
+ registerFetchProfilePicture(server);
92
+ registerDownloadMedia(server);
93
+ registerSendPresence(server);
94
+ // Profile
95
+ registerFetchBusinessProfile(server);
96
+ registerUpdateProfileName(server);
97
+ registerUpdateProfileStatus(server);
98
+ registerUpdateProfilePicture(server);
99
+ registerRemoveProfilePicture(server);
100
+ registerFetchPrivacy(server);
101
+ registerUpdatePrivacy(server);
102
+ // Group
103
+ registerCreateGroup(server);
104
+ registerUpdateGroupSubject(server);
105
+ registerUpdateGroupDescription(server);
106
+ registerUpdateGroupPicture(server);
107
+ registerFetchInviteCode(server);
108
+ registerRevokeInviteCode(server);
109
+ registerAcceptInvite(server);
110
+ registerSendGroupInvite(server);
111
+ registerUpdateParticipants(server);
112
+ registerUpdateGroupSetting(server);
113
+ registerLeaveGroup(server);
114
+ registerFindGroupByInvite(server);
115
+ // Instance
116
+ registerConnectionState(server);
117
+ registerRestartInstance(server);
118
+ registerLogoutInstance(server);
119
+ registerGetSettings(server);
120
+ registerSetSettings(server);
121
+ // Webhook
122
+ registerFindWebhook(server);
123
+ registerSetWebhook(server);
124
+ // Label
125
+ registerFindLabels(server);
126
+ registerHandleLabel(server);
127
+ // Block & Misc
128
+ registerUpdateBlockStatus(server);
129
+ registerCheckNumber(server);
130
+ }
131
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerLeaveGroup(server: ToolRegistry): void;
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
3
+ const schema = {
4
+ groupJid: z.string().min(1).describe("Group JID to leave (e.g. 120363000000000000@g.us)"),
5
+ };
6
+ export function registerLeaveGroup(server) {
7
+ server.registerTool("leave_group", {
8
+ title: "Leave Group",
9
+ description: "Leave a WhatsApp group via the selected instance.",
10
+ inputSchema: schema,
11
+ }, async (args, { client }) => {
12
+ try {
13
+ const data = await client.delete(`/group/leaveGroup/${client.instanceName}?groupJid=${encodeURIComponent(args.groupJid)}`);
14
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
15
+ }
16
+ catch (e) {
17
+ if (e instanceof McpError)
18
+ return { isError: true, content: [{ type: "text", text: e.message }] };
19
+ throw e;
20
+ }
21
+ });
22
+ }
23
+ //# sourceMappingURL=leave-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leave-group.js","sourceRoot":"","sources":["../../src/tools/leave-group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,MAAM,MAAM,GAAG;IACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CAC1F,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE,MAAM;KACpB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAC9B,qBAAqB,MAAM,CAAC,YAAY,aAAa,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CACzF,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3G,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerListGroups(server: ToolRegistry): void;
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
3
+ const schema = {
4
+ search: z
5
+ .string()
6
+ .optional()
7
+ .describe("Case-insensitive substring match against group subject. Omit for no filter."),
8
+ limit: z
9
+ .number()
10
+ .int()
11
+ .min(1)
12
+ .max(500)
13
+ .default(50)
14
+ .optional()
15
+ .describe("Max results to return (default 50, max 500)."),
16
+ };
17
+ export function registerListGroups(server) {
18
+ server.registerTool("list_groups", {
19
+ title: "List Groups",
20
+ description: "List WhatsApp groups for the selected instance. Supports search and limit to prevent large payloads.",
21
+ inputSchema: schema,
22
+ }, async (args, { client, recipients }) => {
23
+ try {
24
+ const data = await client.get(`/group/fetchAllGroups/${client.instanceName}?getParticipants=false`);
25
+ let groups = Array.isArray(data) ? data : [];
26
+ // Recipient allowlist: never expose groups outside it
27
+ if (recipients.restricted)
28
+ groups = groups.filter((g) => recipients.isAllowed(g.id));
29
+ // Client-side search filter (Evolution API has no query filter)
30
+ if (args.search) {
31
+ const needle = args.search.toLowerCase();
32
+ groups = groups.filter((g) => g.subject?.toLowerCase().includes(needle));
33
+ }
34
+ // Sort by subject asc for stable results
35
+ groups.sort((a, b) => (a.subject ?? "").localeCompare(b.subject ?? ""));
36
+ // Cap results
37
+ const limit = args.limit ?? 50;
38
+ groups = groups.slice(0, limit);
39
+ // Normalize to compact shape — drop owner to shrink payload
40
+ const normalized = groups.map(({ id, subject, size }) => ({ id, subject, size }));
41
+ return {
42
+ content: [{ type: "text", text: JSON.stringify(normalized, null, 2) }],
43
+ };
44
+ }
45
+ catch (e) {
46
+ if (e instanceof McpError) {
47
+ return { isError: true, content: [{ type: "text", text: e.message }] };
48
+ }
49
+ throw e;
50
+ }
51
+ });
52
+ }
53
+ //# sourceMappingURL=list-groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-groups.js","sourceRoot":"","sources":["../../src/tools/list-groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerListInstances(server: ToolRegistry): void;
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ const schema = {
3
+ includeState: z
4
+ .boolean()
5
+ .optional()
6
+ .describe("When true, also fetch the connection state (open/close/connecting) of each instance."),
7
+ };
8
+ export function registerListInstances(server) {
9
+ server.registerTool("list_instances", {
10
+ title: "List Instances",
11
+ description: "List the WhatsApp instances this server is allowed to use (names only) and which one is the default. " +
12
+ "Pass one of these names as `instance` to other tools. Set includeState=true to also get each connection state.",
13
+ inputSchema: schema,
14
+ instanceScoped: false,
15
+ }, async (args, { http, config }) => {
16
+ const instances = await Promise.all(config.instances.map(async (name) => {
17
+ const item = {
18
+ name,
19
+ default: name === config.defaultInstance,
20
+ };
21
+ if (args.includeState) {
22
+ try {
23
+ const data = await http
24
+ .forInstance(name)
25
+ .get(`/instance/connectionState/${name}`);
26
+ item.state = data?.instance?.state ?? data?.state ?? "unknown";
27
+ }
28
+ catch (e) {
29
+ item.error = e instanceof Error ? e.message : String(e);
30
+ }
31
+ }
32
+ return item;
33
+ }));
34
+ return { content: [{ type: "text", text: JSON.stringify({ instances }, null, 2) }] };
35
+ });
36
+ }
37
+ //# sourceMappingURL=list-instances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-instances.js","sourceRoot":"","sources":["../../src/tools/list-instances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,GAAG;IACb,YAAY,EAAE,CAAC;SACZ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,sFAAsF,CAAC;CACpG,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,MAAoB;IACxD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,uGAAuG;YACvG,gHAAgH;QAClH,WAAW,EAAE,MAAM;QACnB,cAAc,EAAE,KAAK;KACtB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClC,MAAM,IAAI,GAAuE;gBAC/E,IAAI;gBACJ,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,eAAe;aACzC,CAAC;YACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,IAAI;yBACpB,WAAW,CAAC,IAAI,CAAC;yBACjB,GAAG,CAAoD,6BAA6B,IAAI,EAAE,CAAC,CAAC;oBAC/F,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC;gBACjE,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CACH,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChG,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerLogoutInstance(server: ToolRegistry): void;
@@ -0,0 +1,19 @@
1
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
2
+ export function registerLogoutInstance(server) {
3
+ server.registerTool("logout_instance", {
4
+ title: "Logout Instance",
5
+ description: "Logout the selected WhatsApp instance (disconnects and clears session — requires QR scan to reconnect).",
6
+ inputSchema: {},
7
+ }, async (_args, { client }) => {
8
+ try {
9
+ const data = await client.delete(`/instance/logout/${client.instanceName}`);
10
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
11
+ }
12
+ catch (e) {
13
+ if (e instanceof McpError)
14
+ return { isError: true, content: [{ type: "text", text: e.message }] };
15
+ throw e;
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=logout-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout-instance.js","sourceRoot":"","sources":["../../src/tools/logout-instance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,MAAM,UAAU,sBAAsB,CAAC,MAAoB;IACzD,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,yGAAyG;QACtH,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,oBAAoB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3G,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerMarkAsRead(server: ToolRegistry): void;
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
3
+ const MessageKeySchema = z.object({
4
+ remoteJid: z.string().min(1).describe("JID of the chat"),
5
+ fromMe: z.boolean().describe("Whether the message was sent by this instance"),
6
+ id: z.string().min(1).describe("Message ID"),
7
+ });
8
+ const schema = {
9
+ readMessages: z.array(MessageKeySchema).min(1).describe("Array of message keys to mark as read"),
10
+ };
11
+ export function registerMarkAsRead(server) {
12
+ server.registerTool("mark_as_read", {
13
+ title: "Mark as Read",
14
+ description: "Mark one or more messages as read via the selected WhatsApp instance.",
15
+ inputSchema: schema,
16
+ }, async (args, { client }) => {
17
+ try {
18
+ const data = await client.post(`/chat/markMessageAsRead/${client.instanceName}`, {
19
+ readMessages: args.readMessages,
20
+ });
21
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
22
+ }
23
+ catch (e) {
24
+ if (e instanceof McpError)
25
+ return { isError: true, content: [{ type: "text", text: e.message }] };
26
+ throw e;
27
+ }
28
+ });
29
+ }
30
+ //# sourceMappingURL=mark-as-read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mark-as-read.js","sourceRoot":"","sources":["../../src/tools/mark-as-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC7E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG;IACb,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACjG,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,uEAAuE;QACpF,WAAW,EAAE,MAAM;KACpB,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,YAAY,EAAE,EAAE;gBAC/E,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,QAAQ;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3G,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolRegistry } from "../registry.js";
2
+ export declare function registerRemoveProfilePicture(server: ToolRegistry): void;
@@ -0,0 +1,19 @@
1
+ import { McpError } from "@modelcontextprotocol/sdk/types.js";
2
+ export function registerRemoveProfilePicture(server) {
3
+ server.registerTool("remove_profile_picture", {
4
+ title: "Remove Profile Picture",
5
+ description: "Remove the profile picture of the selected WhatsApp instance.",
6
+ inputSchema: {},
7
+ }, async (_args, { client }) => {
8
+ try {
9
+ const data = await client.delete(`/chat/removeProfilePicture/${client.instanceName}`);
10
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
11
+ }
12
+ catch (e) {
13
+ if (e instanceof McpError)
14
+ return { isError: true, content: [{ type: "text", text: e.message }] };
15
+ throw e;
16
+ }
17
+ });
18
+ }
19
+ //# sourceMappingURL=remove-profile-picture.js.map