mcp-evolution 0.0.0-stage → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +68 -0
- package/LICENSE +21 -0
- package/README.md +379 -2
- package/dist/config.d.ts +23 -0
- package/dist/config.js +113 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -0
- package/dist/evolution-client.d.ts +34 -0
- package/dist/evolution-client.js +84 -0
- package/dist/evolution-client.js.map +1 -0
- package/dist/guards/recipients.d.ts +40 -0
- package/dist/guards/recipients.js +135 -0
- package/dist/guards/recipients.js.map +1 -0
- package/dist/guards/tools.d.ts +16 -0
- package/dist/guards/tools.js +154 -0
- package/dist/guards/tools.js.map +1 -0
- package/dist/http.d.ts +19 -0
- package/dist/http.js +103 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +36 -0
- package/dist/registry.js +68 -0
- package/dist/registry.js.map +1 -0
- package/dist/schemas.d.ts +4 -0
- package/dist/schemas.js +16 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.js +74 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/accept-invite.d.ts +2 -0
- package/dist/tools/accept-invite.js +23 -0
- package/dist/tools/accept-invite.js.map +1 -0
- package/dist/tools/archive-chat.d.ts +2 -0
- package/dist/tools/archive-chat.js +35 -0
- package/dist/tools/archive-chat.js.map +1 -0
- package/dist/tools/check-number.d.ts +2 -0
- package/dist/tools/check-number.js +25 -0
- package/dist/tools/check-number.js.map +1 -0
- package/dist/tools/connection-state.d.ts +2 -0
- package/dist/tools/connection-state.js +19 -0
- package/dist/tools/connection-state.js.map +1 -0
- package/dist/tools/create-group.d.ts +2 -0
- package/dist/tools/create-group.js +31 -0
- package/dist/tools/create-group.js.map +1 -0
- package/dist/tools/delete-message.d.ts +2 -0
- package/dist/tools/delete-message.js +33 -0
- package/dist/tools/delete-message.js.map +1 -0
- package/dist/tools/download-media.d.ts +2 -0
- package/dist/tools/download-media.js +59 -0
- package/dist/tools/download-media.js.map +1 -0
- package/dist/tools/fetch-business-profile.d.ts +2 -0
- package/dist/tools/fetch-business-profile.js +25 -0
- package/dist/tools/fetch-business-profile.js.map +1 -0
- package/dist/tools/fetch-invite-code.d.ts +2 -0
- package/dist/tools/fetch-invite-code.js +23 -0
- package/dist/tools/fetch-invite-code.js.map +1 -0
- package/dist/tools/fetch-privacy.d.ts +2 -0
- package/dist/tools/fetch-privacy.js +19 -0
- package/dist/tools/fetch-privacy.js.map +1 -0
- package/dist/tools/fetch-profile-picture.d.ts +2 -0
- package/dist/tools/fetch-profile-picture.js +25 -0
- package/dist/tools/fetch-profile-picture.js.map +1 -0
- package/dist/tools/find-chats.d.ts +2 -0
- package/dist/tools/find-chats.js +74 -0
- package/dist/tools/find-chats.js.map +1 -0
- package/dist/tools/find-contacts.d.ts +2 -0
- package/dist/tools/find-contacts.js +74 -0
- package/dist/tools/find-contacts.js.map +1 -0
- package/dist/tools/find-group-by-invite.d.ts +2 -0
- package/dist/tools/find-group-by-invite.js +56 -0
- package/dist/tools/find-group-by-invite.js.map +1 -0
- package/dist/tools/find-labels.d.ts +2 -0
- package/dist/tools/find-labels.js +22 -0
- package/dist/tools/find-labels.js.map +1 -0
- package/dist/tools/find-messages.d.ts +2 -0
- package/dist/tools/find-messages.js +55 -0
- package/dist/tools/find-messages.js.map +1 -0
- package/dist/tools/find-webhook.d.ts +2 -0
- package/dist/tools/find-webhook.js +19 -0
- package/dist/tools/find-webhook.js.map +1 -0
- package/dist/tools/get-chat-history.d.ts +2 -0
- package/dist/tools/get-chat-history.js +55 -0
- package/dist/tools/get-chat-history.js.map +1 -0
- package/dist/tools/get-group-info.d.ts +2 -0
- package/dist/tools/get-group-info.js +58 -0
- package/dist/tools/get-group-info.js.map +1 -0
- package/dist/tools/get-group-resolved-participants.d.ts +2 -0
- package/dist/tools/get-group-resolved-participants.js +170 -0
- package/dist/tools/get-group-resolved-participants.js.map +1 -0
- package/dist/tools/get-settings.d.ts +2 -0
- package/dist/tools/get-settings.js +19 -0
- package/dist/tools/get-settings.js.map +1 -0
- package/dist/tools/handle-label.d.ts +2 -0
- package/dist/tools/handle-label.js +30 -0
- package/dist/tools/handle-label.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +131 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/leave-group.d.ts +2 -0
- package/dist/tools/leave-group.js +23 -0
- package/dist/tools/leave-group.js.map +1 -0
- package/dist/tools/list-groups.d.ts +2 -0
- package/dist/tools/list-groups.js +53 -0
- package/dist/tools/list-groups.js.map +1 -0
- package/dist/tools/list-instances.d.ts +2 -0
- package/dist/tools/list-instances.js +37 -0
- package/dist/tools/list-instances.js.map +1 -0
- package/dist/tools/logout-instance.d.ts +2 -0
- package/dist/tools/logout-instance.js +19 -0
- package/dist/tools/logout-instance.js.map +1 -0
- package/dist/tools/mark-as-read.d.ts +2 -0
- package/dist/tools/mark-as-read.js +30 -0
- package/dist/tools/mark-as-read.js.map +1 -0
- package/dist/tools/remove-profile-picture.d.ts +2 -0
- package/dist/tools/remove-profile-picture.js +19 -0
- package/dist/tools/remove-profile-picture.js.map +1 -0
- package/dist/tools/restart-instance.d.ts +2 -0
- package/dist/tools/restart-instance.js +19 -0
- package/dist/tools/restart-instance.js.map +1 -0
- package/dist/tools/revoke-invite-code.d.ts +2 -0
- package/dist/tools/revoke-invite-code.js +23 -0
- package/dist/tools/revoke-invite-code.js.map +1 -0
- package/dist/tools/send-audio.d.ts +2 -0
- package/dist/tools/send-audio.js +32 -0
- package/dist/tools/send-audio.js.map +1 -0
- package/dist/tools/send-button.d.ts +2 -0
- package/dist/tools/send-button.js +43 -0
- package/dist/tools/send-button.js.map +1 -0
- package/dist/tools/send-contact.d.ts +2 -0
- package/dist/tools/send-contact.js +36 -0
- package/dist/tools/send-contact.js.map +1 -0
- package/dist/tools/send-group-invite.d.ts +2 -0
- package/dist/tools/send-group-invite.js +29 -0
- package/dist/tools/send-group-invite.js.map +1 -0
- package/dist/tools/send-list.d.ts +2 -0
- package/dist/tools/send-list.js +47 -0
- package/dist/tools/send-list.js.map +1 -0
- package/dist/tools/send-location.d.ts +2 -0
- package/dist/tools/send-location.js +37 -0
- package/dist/tools/send-location.js.map +1 -0
- package/dist/tools/send-media.d.ts +2 -0
- package/dist/tools/send-media.js +45 -0
- package/dist/tools/send-media.js.map +1 -0
- package/dist/tools/send-poll.d.ts +2 -0
- package/dist/tools/send-poll.js +32 -0
- package/dist/tools/send-poll.js.map +1 -0
- package/dist/tools/send-presence.d.ts +2 -0
- package/dist/tools/send-presence.js +33 -0
- package/dist/tools/send-presence.js.map +1 -0
- package/dist/tools/send-reaction.d.ts +2 -0
- package/dist/tools/send-reaction.js +31 -0
- package/dist/tools/send-reaction.js.map +1 -0
- package/dist/tools/send-status.d.ts +2 -0
- package/dist/tools/send-status.js +40 -0
- package/dist/tools/send-status.js.map +1 -0
- package/dist/tools/send-sticker.d.ts +2 -0
- package/dist/tools/send-sticker.js +28 -0
- package/dist/tools/send-sticker.js.map +1 -0
- package/dist/tools/send-text.d.ts +2 -0
- package/dist/tools/send-text.js +31 -0
- package/dist/tools/send-text.js.map +1 -0
- package/dist/tools/set-settings.d.ts +2 -0
- package/dist/tools/set-settings.js +44 -0
- package/dist/tools/set-settings.js.map +1 -0
- package/dist/tools/set-webhook.d.ts +2 -0
- package/dist/tools/set-webhook.js +39 -0
- package/dist/tools/set-webhook.js.map +1 -0
- package/dist/tools/update-block-status.d.ts +2 -0
- package/dist/tools/update-block-status.js +28 -0
- package/dist/tools/update-block-status.js.map +1 -0
- package/dist/tools/update-group-description.d.ts +2 -0
- package/dist/tools/update-group-description.js +24 -0
- package/dist/tools/update-group-description.js.map +1 -0
- package/dist/tools/update-group-picture.d.ts +2 -0
- package/dist/tools/update-group-picture.js +24 -0
- package/dist/tools/update-group-picture.js.map +1 -0
- package/dist/tools/update-group-setting.d.ts +2 -0
- package/dist/tools/update-group-setting.js +25 -0
- package/dist/tools/update-group-setting.js.map +1 -0
- package/dist/tools/update-group-subject.d.ts +2 -0
- package/dist/tools/update-group-subject.js +24 -0
- package/dist/tools/update-group-subject.js.map +1 -0
- package/dist/tools/update-participants.d.ts +2 -0
- package/dist/tools/update-participants.js +26 -0
- package/dist/tools/update-participants.js.map +1 -0
- package/dist/tools/update-privacy.d.ts +2 -0
- package/dist/tools/update-privacy.js +45 -0
- package/dist/tools/update-privacy.js.map +1 -0
- package/dist/tools/update-profile-name.d.ts +2 -0
- package/dist/tools/update-profile-name.js +25 -0
- package/dist/tools/update-profile-name.js.map +1 -0
- package/dist/tools/update-profile-picture.d.ts +2 -0
- package/dist/tools/update-profile-picture.js +25 -0
- package/dist/tools/update-profile-picture.js.map +1 -0
- package/dist/tools/update-profile-status.d.ts +2 -0
- package/dist/tools/update-profile-status.js +25 -0
- package/dist/tools/update-profile-status.js.map +1 -0
- package/dist/util/db.d.ts +3 -0
- package/dist/util/db.js +23 -0
- package/dist/util/db.js.map +1 -0
- package/dist/util/normalize.d.ts +44 -0
- package/dist/util/normalize.js +68 -0
- package/dist/util/normalize.js.map +1 -0
- package/dist/util/redact.d.ts +11 -0
- package/dist/util/redact.js +54 -0
- package/dist/util/redact.js.map +1 -0
- package/package.json +59 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** Shared message normalizer — prevents payload overflow from raw Evolution responses. */
|
|
2
|
+
interface RawMessage {
|
|
3
|
+
key?: {
|
|
4
|
+
id?: string;
|
|
5
|
+
fromMe?: boolean;
|
|
6
|
+
remoteJid?: string;
|
|
7
|
+
};
|
|
8
|
+
messageTimestamp?: number;
|
|
9
|
+
message?: {
|
|
10
|
+
conversation?: string;
|
|
11
|
+
extendedTextMessage?: {
|
|
12
|
+
text?: string;
|
|
13
|
+
};
|
|
14
|
+
imageMessage?: {
|
|
15
|
+
caption?: string;
|
|
16
|
+
};
|
|
17
|
+
videoMessage?: {
|
|
18
|
+
caption?: string;
|
|
19
|
+
};
|
|
20
|
+
quotedMessage?: unknown;
|
|
21
|
+
contextInfo?: {
|
|
22
|
+
stanzaId?: string;
|
|
23
|
+
};
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
};
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface NormalizedMessage {
|
|
29
|
+
id: string;
|
|
30
|
+
fromMe: boolean;
|
|
31
|
+
remoteJid: string;
|
|
32
|
+
timestamp: number;
|
|
33
|
+
type: string;
|
|
34
|
+
text: string | null;
|
|
35
|
+
mediaKey?: string;
|
|
36
|
+
quotedMessageId?: string;
|
|
37
|
+
}
|
|
38
|
+
/** Infer MIME extension — returns e.g. "jpg", "mp4", "ogg". Falls back to "bin". */
|
|
39
|
+
export declare function mimeToExt(mime: string): string;
|
|
40
|
+
/** Normalize a raw Evolution message object to the compact, bounded shape. */
|
|
41
|
+
export declare function normalizeMessage(raw: RawMessage): NormalizedMessage;
|
|
42
|
+
/** Evolution v2 paginates messages under messages.records. */
|
|
43
|
+
export declare function extractMessages(data: unknown): unknown[];
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** Shared message normalizer — prevents payload overflow from raw Evolution responses. */
|
|
2
|
+
/** Infer MIME extension — returns e.g. "jpg", "mp4", "ogg". Falls back to "bin". */
|
|
3
|
+
export function mimeToExt(mime) {
|
|
4
|
+
const map = {
|
|
5
|
+
"image/jpeg": "jpg",
|
|
6
|
+
"image/png": "png",
|
|
7
|
+
"image/gif": "gif",
|
|
8
|
+
"image/webp": "webp",
|
|
9
|
+
"video/mp4": "mp4",
|
|
10
|
+
"video/webm": "webm",
|
|
11
|
+
"audio/ogg": "ogg",
|
|
12
|
+
"audio/mpeg": "mp3",
|
|
13
|
+
"audio/mp4": "m4a",
|
|
14
|
+
"audio/wav": "wav",
|
|
15
|
+
"application/pdf": "pdf",
|
|
16
|
+
"application/zip": "zip",
|
|
17
|
+
};
|
|
18
|
+
const sub = mime.split("/")[1]?.replace(/[^a-z0-9]/gi, "");
|
|
19
|
+
return map[mime] ?? (sub !== undefined && sub.length > 0 ? sub : "bin");
|
|
20
|
+
}
|
|
21
|
+
/** Normalize a raw Evolution message object to the compact, bounded shape. */
|
|
22
|
+
export function normalizeMessage(raw) {
|
|
23
|
+
const key = raw.key ?? {};
|
|
24
|
+
const msg = raw.message ?? {};
|
|
25
|
+
// Detect media types by checking which message type key exists
|
|
26
|
+
const MEDIA_TYPES = new Set(["imageMessage", "videoMessage", "audioMessage", "documentMessage", "stickerMessage"]);
|
|
27
|
+
const type = Object.keys(msg).find((k) => k !== "contextInfo") ?? "unknown";
|
|
28
|
+
const isMedia = MEDIA_TYPES.has(type);
|
|
29
|
+
// Extract text from whichever message field is present
|
|
30
|
+
const msgObj = msg[type];
|
|
31
|
+
const text = msg.conversation ??
|
|
32
|
+
msg.extendedTextMessage?.text ??
|
|
33
|
+
(msgObj?.caption) ??
|
|
34
|
+
null;
|
|
35
|
+
// Quoted message ID lives in contextInfo.stanzaId
|
|
36
|
+
const contextInfo = msgObj?.contextInfo
|
|
37
|
+
?? msg.contextInfo;
|
|
38
|
+
const quotedMessageId = contextInfo?.stanzaId;
|
|
39
|
+
const result = {
|
|
40
|
+
id: key.id ?? "",
|
|
41
|
+
fromMe: key.fromMe ?? false,
|
|
42
|
+
remoteJid: key.remoteJid ?? "",
|
|
43
|
+
timestamp: raw.messageTimestamp ?? 0,
|
|
44
|
+
type,
|
|
45
|
+
text,
|
|
46
|
+
};
|
|
47
|
+
// Only attach mediaKey when this is a media message — id doubles as download handle
|
|
48
|
+
if (isMedia && key.id)
|
|
49
|
+
result.mediaKey = key.id;
|
|
50
|
+
if (quotedMessageId)
|
|
51
|
+
result.quotedMessageId = quotedMessageId;
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
/** Evolution v2 paginates messages under messages.records. */
|
|
55
|
+
export function extractMessages(data) {
|
|
56
|
+
if (Array.isArray(data))
|
|
57
|
+
return data;
|
|
58
|
+
if (data && typeof data === "object" && "messages" in data) {
|
|
59
|
+
const messages = data.messages;
|
|
60
|
+
if (Array.isArray(messages))
|
|
61
|
+
return messages;
|
|
62
|
+
if (messages && typeof messages === "object" && "records" in messages && Array.isArray(messages.records)) {
|
|
63
|
+
return messages.records;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
throw new Error("Unsupported Evolution messages response shape");
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/util/normalize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Secret redaction for anything that may be returned to the MCP client or logged. */
|
|
2
|
+
export declare const REDACTED = "[REDACTED]";
|
|
3
|
+
export type Redactor = (text: string) => string;
|
|
4
|
+
export interface SecretSources {
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
basicAuth?: string;
|
|
7
|
+
dbUrl?: string;
|
|
8
|
+
apiUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Build a redactor that masks the API key, Basic Auth (raw and decoded) and URL passwords. */
|
|
11
|
+
export declare function createRedactor(src: SecretSources): Redactor;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Secret redaction for anything that may be returned to the MCP client or logged. */
|
|
2
|
+
export const REDACTED = "[REDACTED]";
|
|
3
|
+
function urlSecrets(raw) {
|
|
4
|
+
if (!raw)
|
|
5
|
+
return [];
|
|
6
|
+
try {
|
|
7
|
+
const u = new URL(raw);
|
|
8
|
+
const out = [];
|
|
9
|
+
if (u.password)
|
|
10
|
+
out.push(u.password, decodeURIComponent(u.password));
|
|
11
|
+
if (u.password || u.username)
|
|
12
|
+
out.push(`${u.username}:${u.password}@`);
|
|
13
|
+
return out;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Build a redactor that masks the API key, Basic Auth (raw and decoded) and URL passwords. */
|
|
20
|
+
export function createRedactor(src) {
|
|
21
|
+
const secrets = new Set();
|
|
22
|
+
const add = (s) => {
|
|
23
|
+
if (!s || s.length < 4)
|
|
24
|
+
return;
|
|
25
|
+
secrets.add(s);
|
|
26
|
+
secrets.add(encodeURIComponent(s));
|
|
27
|
+
};
|
|
28
|
+
add(src.apiKey);
|
|
29
|
+
if (src.basicAuth) {
|
|
30
|
+
add(src.basicAuth);
|
|
31
|
+
try {
|
|
32
|
+
const decoded = Buffer.from(src.basicAuth, "base64").toString("utf8");
|
|
33
|
+
// Only treat it as credentials if it looks like "user:pass"
|
|
34
|
+
if (/^[^:\s]+:\S+$/.test(decoded)) {
|
|
35
|
+
add(decoded);
|
|
36
|
+
add(decoded.slice(decoded.indexOf(":") + 1));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
/* not base64 — raw value already covered */
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
urlSecrets(src.dbUrl).forEach(add);
|
|
44
|
+
urlSecrets(src.apiUrl).forEach(add);
|
|
45
|
+
add(src.dbUrl);
|
|
46
|
+
const ordered = [...secrets].sort((a, b) => b.length - a.length);
|
|
47
|
+
return (text) => {
|
|
48
|
+
let out = text;
|
|
49
|
+
for (const s of ordered)
|
|
50
|
+
out = out.split(s).join(REDACTED);
|
|
51
|
+
return out;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/util/redact.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;AAWrC,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvE,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,cAAc,CAAC,GAAkB;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAQ,EAAE;QAC1C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtE,4DAA4D;YAC5D,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACb,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEf,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,CAAC,IAAY,EAAU,EAAE;QAC9B,IAAI,GAAG,GAAG,IAAI,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,61 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-evolution",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.8.1",
|
|
4
|
+
"description": "MCP server for Evolution API (WhatsApp) with instance allowlist, tool and recipient guards",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mcp-evolution": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"CHANGELOG.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"start": "node dist/index.js",
|
|
19
|
+
"dev": "tsx src/index.ts",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"prepublishOnly": "npm run build",
|
|
22
|
+
"prepare": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=18"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"mcp",
|
|
29
|
+
"model-context-protocol",
|
|
30
|
+
"evolution-api",
|
|
31
|
+
"whatsapp"
|
|
32
|
+
],
|
|
33
|
+
"author": "Francione Matias Carvalho",
|
|
34
|
+
"contributors": [
|
|
35
|
+
{
|
|
36
|
+
"name": "Billy Franklim",
|
|
37
|
+
"url": "https://github.com/billyfranklim1"
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/santificado13/mcp-evolution.git"
|
|
44
|
+
},
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/santificado13/mcp-evolution/issues"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/santificado13/mcp-evolution#readme",
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
51
|
+
"pg": "^8.20.0",
|
|
52
|
+
"zod": "^3.24.0"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@types/node": "^22.0.0",
|
|
56
|
+
"@types/pg": "^8.20.0",
|
|
57
|
+
"tsx": "^4.19.0",
|
|
58
|
+
"typescript": "^5.7.0",
|
|
59
|
+
"vitest": "^2.1.0"
|
|
60
|
+
}
|
|
61
|
+
}
|