@botozap/mcp 0.1.0 → 0.2.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/README.md +111 -43
- package/dist/event-bus.d.ts +14 -0
- package/dist/event-bus.js +128 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/http.d.ts +31 -0
- package/dist/http.js +280 -0
- package/dist/http.js.map +1 -0
- package/dist/index.js +47 -4
- package/dist/index.js.map +1 -1
- package/dist/register.d.ts +18 -4
- package/dist/register.js +82 -17
- package/dist/register.js.map +1 -1
- package/dist/resources/events.d.ts +12 -0
- package/dist/resources/events.js +192 -0
- package/dist/resources/events.js.map +1 -0
- package/dist/schemas.d.ts +4405 -0
- package/dist/schemas.js +332 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.js +13 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/contacts.d.ts +1 -1
- package/dist/tools/contacts.js +8 -6
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/conversations.js +17 -3
- package/dist/tools/conversations.js.map +1 -1
- package/dist/tools/customers.d.ts +1 -1
- package/dist/tools/customers.js +11 -9
- package/dist/tools/customers.js.map +1 -1
- package/dist/tools/media.d.ts +94 -0
- package/dist/tools/media.js +90 -2
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/messages.js +5 -4
- package/dist/tools/messages.js.map +1 -1
- package/dist/tools/misc.js +3 -2
- package/dist/tools/misc.js.map +1 -1
- package/dist/tools/phone-numbers.js +4 -3
- package/dist/tools/phone-numbers.js.map +1 -1
- package/dist/tools/templates.js +4 -3
- package/dist/tools/templates.js.map +1 -1
- package/dist/tools/webhooks.d.ts +1 -1
- package/dist/tools/webhooks.js +10 -8
- package/dist/tools/webhooks.js.map +1 -1
- package/package.json +4 -2
package/dist/tools/media.d.ts
CHANGED
|
@@ -1,2 +1,96 @@
|
|
|
1
|
+
/** Ferramentas de envio e ingest de mídia a partir de uma URL. */
|
|
2
|
+
import { z } from "zod";
|
|
1
3
|
import type { Register } from "../register.js";
|
|
4
|
+
/**
|
|
5
|
+
* Union forte usada pelo handler: cada discriminante aceita somente seus
|
|
6
|
+
* campos. O MCP SDK 1.29 não anuncia union/effect na raiz (degrada para `{}`),
|
|
7
|
+
* então o raw shape documentado acima continua no registerTool e esta union
|
|
8
|
+
* valida as regras cruzadas antes de qualquer request, preservando isError
|
|
9
|
+
* estruturado.
|
|
10
|
+
*/
|
|
11
|
+
export declare const sendMediaSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
12
|
+
type: z.ZodLiteral<"image">;
|
|
13
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
14
|
+
filename: z.ZodOptional<z.ZodNever>;
|
|
15
|
+
to: z.ZodString;
|
|
16
|
+
from: z.ZodOptional<z.ZodString>;
|
|
17
|
+
link: z.ZodString;
|
|
18
|
+
}, "strip", z.ZodTypeAny, {
|
|
19
|
+
type: "image";
|
|
20
|
+
to: string;
|
|
21
|
+
link: string;
|
|
22
|
+
filename?: undefined;
|
|
23
|
+
from?: string | undefined;
|
|
24
|
+
caption?: string | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
type: "image";
|
|
27
|
+
to: string;
|
|
28
|
+
link: string;
|
|
29
|
+
filename?: undefined;
|
|
30
|
+
from?: string | undefined;
|
|
31
|
+
caption?: string | undefined;
|
|
32
|
+
}>, z.ZodObject<{
|
|
33
|
+
type: z.ZodLiteral<"video">;
|
|
34
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
35
|
+
filename: z.ZodOptional<z.ZodNever>;
|
|
36
|
+
to: z.ZodString;
|
|
37
|
+
from: z.ZodOptional<z.ZodString>;
|
|
38
|
+
link: z.ZodString;
|
|
39
|
+
}, "strip", z.ZodTypeAny, {
|
|
40
|
+
type: "video";
|
|
41
|
+
to: string;
|
|
42
|
+
link: string;
|
|
43
|
+
filename?: undefined;
|
|
44
|
+
from?: string | undefined;
|
|
45
|
+
caption?: string | undefined;
|
|
46
|
+
}, {
|
|
47
|
+
type: "video";
|
|
48
|
+
to: string;
|
|
49
|
+
link: string;
|
|
50
|
+
filename?: undefined;
|
|
51
|
+
from?: string | undefined;
|
|
52
|
+
caption?: string | undefined;
|
|
53
|
+
}>, z.ZodObject<{
|
|
54
|
+
type: z.ZodLiteral<"audio">;
|
|
55
|
+
caption: z.ZodOptional<z.ZodNever>;
|
|
56
|
+
filename: z.ZodOptional<z.ZodNever>;
|
|
57
|
+
to: z.ZodString;
|
|
58
|
+
from: z.ZodOptional<z.ZodString>;
|
|
59
|
+
link: z.ZodString;
|
|
60
|
+
}, "strip", z.ZodTypeAny, {
|
|
61
|
+
type: "audio";
|
|
62
|
+
to: string;
|
|
63
|
+
link: string;
|
|
64
|
+
filename?: undefined;
|
|
65
|
+
from?: string | undefined;
|
|
66
|
+
caption?: undefined;
|
|
67
|
+
}, {
|
|
68
|
+
type: "audio";
|
|
69
|
+
to: string;
|
|
70
|
+
link: string;
|
|
71
|
+
filename?: undefined;
|
|
72
|
+
from?: string | undefined;
|
|
73
|
+
caption?: undefined;
|
|
74
|
+
}>, z.ZodObject<{
|
|
75
|
+
type: z.ZodLiteral<"document">;
|
|
76
|
+
caption: z.ZodOptional<z.ZodString>;
|
|
77
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
78
|
+
to: z.ZodString;
|
|
79
|
+
from: z.ZodOptional<z.ZodString>;
|
|
80
|
+
link: z.ZodString;
|
|
81
|
+
}, "strip", z.ZodTypeAny, {
|
|
82
|
+
type: "document";
|
|
83
|
+
to: string;
|
|
84
|
+
link: string;
|
|
85
|
+
filename?: string | undefined;
|
|
86
|
+
from?: string | undefined;
|
|
87
|
+
caption?: string | undefined;
|
|
88
|
+
}, {
|
|
89
|
+
type: "document";
|
|
90
|
+
to: string;
|
|
91
|
+
link: string;
|
|
92
|
+
filename?: string | undefined;
|
|
93
|
+
from?: string | undefined;
|
|
94
|
+
caption?: string | undefined;
|
|
95
|
+
}>]>;
|
|
2
96
|
export declare function registerMediaTools(register: Register): void;
|
package/dist/tools/media.js
CHANGED
|
@@ -1,6 +1,94 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Ferramentas de envio e ingest de mídia a partir de uma URL. */
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { mediaUploadResultSchema, sendMessageResultSchema, } from "../schemas.js";
|
|
4
|
+
const MEDIA_LINK_MAX = 2048;
|
|
5
|
+
const MEDIA_CAPTION_MAX = 1024;
|
|
6
|
+
const MEDIA_FILENAME_MAX = 240;
|
|
7
|
+
const sendMediaShape = {
|
|
8
|
+
to: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("Destinatário: telefone E.164 (ex.: 5511999999999) ou wa_id."),
|
|
11
|
+
from: z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("ID Meta ou UUID interno do Número de origem (obrigatório se a conta tem >1 número)."),
|
|
15
|
+
type: z
|
|
16
|
+
.enum(["image", "video", "audio", "document"])
|
|
17
|
+
.describe("Tipo da mídia a enviar."),
|
|
18
|
+
link: z
|
|
19
|
+
.string()
|
|
20
|
+
.trim()
|
|
21
|
+
.max(MEDIA_LINK_MAX)
|
|
22
|
+
.url()
|
|
23
|
+
.regex(/^https:\/\//)
|
|
24
|
+
.describe("URL https pública do arquivo; o BotoZap delega o download à Meta."),
|
|
25
|
+
caption: z
|
|
26
|
+
.string()
|
|
27
|
+
.trim()
|
|
28
|
+
.min(1)
|
|
29
|
+
.max(MEDIA_CAPTION_MAX)
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Legenda para image, video ou document; audio não aceita."),
|
|
32
|
+
filename: z
|
|
33
|
+
.string()
|
|
34
|
+
.max(MEDIA_FILENAME_MAX)
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Nome do arquivo; aceito somente quando type='document'."),
|
|
37
|
+
};
|
|
38
|
+
const commonMediaShape = {
|
|
39
|
+
to: sendMediaShape.to,
|
|
40
|
+
from: sendMediaShape.from,
|
|
41
|
+
link: sendMediaShape.link,
|
|
42
|
+
};
|
|
43
|
+
const noCaption = z
|
|
44
|
+
.never({ invalid_type_error: "type='audio' não aceita caption." })
|
|
45
|
+
.optional();
|
|
46
|
+
const noFilename = z
|
|
47
|
+
.never({
|
|
48
|
+
invalid_type_error: "filename é aceito somente quando type='document'.",
|
|
49
|
+
})
|
|
50
|
+
.optional();
|
|
51
|
+
/**
|
|
52
|
+
* Union forte usada pelo handler: cada discriminante aceita somente seus
|
|
53
|
+
* campos. O MCP SDK 1.29 não anuncia union/effect na raiz (degrada para `{}`),
|
|
54
|
+
* então o raw shape documentado acima continua no registerTool e esta union
|
|
55
|
+
* valida as regras cruzadas antes de qualquer request, preservando isError
|
|
56
|
+
* estruturado.
|
|
57
|
+
*/
|
|
58
|
+
export const sendMediaSchema = z.discriminatedUnion("type", [
|
|
59
|
+
z.object({
|
|
60
|
+
...commonMediaShape,
|
|
61
|
+
type: z.literal("image"),
|
|
62
|
+
caption: sendMediaShape.caption,
|
|
63
|
+
filename: noFilename,
|
|
64
|
+
}),
|
|
65
|
+
z.object({
|
|
66
|
+
...commonMediaShape,
|
|
67
|
+
type: z.literal("video"),
|
|
68
|
+
caption: sendMediaShape.caption,
|
|
69
|
+
filename: noFilename,
|
|
70
|
+
}),
|
|
71
|
+
z.object({
|
|
72
|
+
...commonMediaShape,
|
|
73
|
+
type: z.literal("audio"),
|
|
74
|
+
caption: noCaption,
|
|
75
|
+
filename: noFilename,
|
|
76
|
+
}),
|
|
77
|
+
z.object({
|
|
78
|
+
...commonMediaShape,
|
|
79
|
+
type: z.literal("document"),
|
|
80
|
+
caption: sendMediaShape.caption,
|
|
81
|
+
filename: sendMediaShape.filename,
|
|
82
|
+
}),
|
|
83
|
+
]);
|
|
3
84
|
export function registerMediaTools(register) {
|
|
85
|
+
register("send_media_message", "Envia image, video, audio ou document por URL https pelo endpoint canônico de mensagens. image/video/document aceitam caption; audio não. filename é exclusivo de document. O processo MCP não baixa o arquivo. Retorna { id, wamid, to, status }.", sendMediaShape, sendMessageResultSchema, (client, args) => {
|
|
86
|
+
const parsed = sendMediaSchema.safeParse(args);
|
|
87
|
+
if (!parsed.success) {
|
|
88
|
+
throw new Error(parsed.error.issues.map((issue) => issue.message).join(" "));
|
|
89
|
+
}
|
|
90
|
+
return client.messages.sendMedia(parsed.data);
|
|
91
|
+
});
|
|
4
92
|
register("ingest_media", "Faz o ingest de uma mídia a partir de uma URL para a Meta. delivery='meta_media' (default) retorna um media_id usável em mensagens; delivery='meta_resumable_asset' retorna um handle reutilizável (ex.: header de template). Retorna { data }.", {
|
|
5
93
|
phone_number_id: z.string().describe("phone_number_id (Meta) dono da mídia."),
|
|
6
94
|
source: z.string().describe("URL de origem da mídia (https)."),
|
|
@@ -10,7 +98,7 @@ export function registerMediaTools(register) {
|
|
|
10
98
|
.enum(["meta_media", "meta_resumable_asset"])
|
|
11
99
|
.optional()
|
|
12
100
|
.describe("Forma de entrega à Meta (default meta_media)."),
|
|
13
|
-
}, async (client, args) => ({
|
|
101
|
+
}, mediaUploadResultSchema, async (client, args) => ({
|
|
14
102
|
data: await client.media.upload(args),
|
|
15
103
|
}));
|
|
16
104
|
}
|
package/dist/tools/media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/messages.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Ferramentas de mensagens: envio, listagem e leitura. */
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { getMessageResultSchema, listMessagesResultSchema, sendMessageResultSchema, } from "../schemas.js";
|
|
3
4
|
/**
|
|
4
5
|
* Shape (raw) de `send_message`. Fica como *raw shape* de propósito: é ele que
|
|
5
6
|
* vai pro `registerTool` do MCP SDK, que só gera JSON Schema (com as descrições
|
|
@@ -48,7 +49,7 @@ const sendMessageShape = {
|
|
|
48
49
|
from: z
|
|
49
50
|
.string()
|
|
50
51
|
.optional()
|
|
51
|
-
.describe("
|
|
52
|
+
.describe("ID Meta ou UUID interno do Número de origem (obrigatório se a conta tem >1 número)."),
|
|
52
53
|
};
|
|
53
54
|
/**
|
|
54
55
|
* Schema refinado que amarra `type` ao payload (o shape base sozinho aceitaria
|
|
@@ -93,7 +94,7 @@ export const sendMessageSchema = z
|
|
|
93
94
|
}
|
|
94
95
|
});
|
|
95
96
|
export function registerMessageTools(register) {
|
|
96
|
-
register("send_message", "Envia uma mensagem de WhatsApp (texto ou template) via API do BotoZap. `to` é o número E.164 ou wa_id do destinatário. Para texto: type='text' e text={ body }. Para template: type='template' e template={ name, language, components? }. `from`
|
|
97
|
+
register("send_message", "Envia uma mensagem de WhatsApp (texto ou template) via API do BotoZap. `to` é o número E.164 ou wa_id do destinatário. Para texto: type='text' e text={ body }. Para template: type='template' e template={ name, language, components? }. `from` aceita ID Meta ou UUID interno do Número e é obrigatório se a conta tem mais de um. Retorna { id, wamid, to, status }.", sendMessageShape, sendMessageResultSchema, (client, args) => {
|
|
97
98
|
// O SDK do MCP já validou `args` contra o shape base; aqui aplicamos a
|
|
98
99
|
// regra cruzada type ↔ payload (que o shape base não expressa) com mensagem
|
|
99
100
|
// PT-BR clara pro agente, ANTES de gastar um round-trip com a API.
|
|
@@ -119,7 +120,7 @@ export function registerMessageTools(register) {
|
|
|
119
120
|
limit: z.number().int().positive().optional().describe("Tamanho da página."),
|
|
120
121
|
after: z.string().optional().describe("Cursor: itens após este created_at."),
|
|
121
122
|
before: z.string().optional().describe("Cursor: itens antes deste created_at."),
|
|
122
|
-
}, (client, args) => client.messages.list(args));
|
|
123
|
-
register("get_message", "Busca uma mensagem específica pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID da mensagem (uuid interno).") }, async (client, args) => ({ data: await client.messages.get(String(args.id)) }));
|
|
123
|
+
}, listMessagesResultSchema, (client, args) => client.messages.list(args));
|
|
124
|
+
register("get_message", "Busca uma mensagem específica pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID da mensagem (uuid interno).") }, getMessageResultSchema, async (client, args) => ({ data: await client.messages.get(String(args.id)) }));
|
|
124
125
|
}
|
|
125
126
|
//# sourceMappingURL=messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/tools/messages.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/tools/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/misc.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Ferramentas diversas: logs de API e usuários da conta. */
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { listApiLogsResultSchema, listUsersResultSchema } from "../schemas.js";
|
|
3
4
|
export function registerMiscTools(register) {
|
|
4
5
|
register("list_api_logs", "Lista os logs de requisições à API pública da conta (auditoria). Paginação por cursor: { data, paging }.", {
|
|
5
6
|
// Filtros reais da rota (/v1/api_logs): source, method e status_code.
|
|
@@ -9,10 +10,10 @@ export function registerMiscTools(register) {
|
|
|
9
10
|
limit: z.number().int().positive().optional(),
|
|
10
11
|
after: z.string().optional(),
|
|
11
12
|
before: z.string().optional(),
|
|
12
|
-
}, (client, args) => client.apiLogs.list(args));
|
|
13
|
+
}, listApiLogsResultSchema, (client, args) => client.apiLogs.list(args));
|
|
13
14
|
register("list_users", "Lista os usuários (membros) da conta. Paginação offset: { data, meta }.", {
|
|
14
15
|
page: z.number().int().positive().optional().describe("Página (1-based)."),
|
|
15
16
|
per_page: z.number().int().positive().optional().describe("Itens por página (máx. 100)."),
|
|
16
|
-
}, (client, args) => client.users.list(args));
|
|
17
|
+
}, listUsersResultSchema, (client, args) => client.users.list(args));
|
|
17
18
|
}
|
|
18
19
|
//# sourceMappingURL=misc.js.map
|
package/dist/tools/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/tools/misc.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/tools/misc.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE/E,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,QAAQ,CACN,eAAe,EACf,0GAA0G,EAC1G;QACE,sEAAsE;QACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QAClF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,EACD,uBAAuB,EACvB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAyB,CAAC,CACjE,CAAC;IAEF,QAAQ,CACN,YAAY,EACZ,yEAAyE,EACzE;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC1F,EACD,qBAAqB,EACrB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAoB,CAAC,CAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/** Ferramentas de números de telefone (WABA): listar, ler e saúde. */
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { getPhoneNumberResultSchema, listPhoneNumbersResultSchema, phoneNumberHealthResultSchema, } from "../schemas.js";
|
|
3
4
|
export function registerPhoneNumberTools(register) {
|
|
4
5
|
register("list_phone_numbers", "Lista os números de telefone conectados da conta (paginação offset: { data, meta }). Filtro opcional por cliente.", {
|
|
5
6
|
customer_id: z.string().optional().describe("Filtra pelos números de um cliente."),
|
|
6
7
|
page: z.number().int().positive().optional().describe("Página (1-based)."),
|
|
7
8
|
per_page: z.number().int().positive().optional().describe("Itens por página (máx. 100)."),
|
|
8
|
-
}, (client, args) => client.phoneNumbers.list(args));
|
|
9
|
-
register("get_phone_number", "Busca um número pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do número (uuid interno).") }, async (client, args) => ({ data: await client.phoneNumbers.get(String(args.id)) }));
|
|
10
|
-
register("phone_number_health", "Retorna a saúde/qualidade de um número (quality rating, status de verificação, limites). Retorna { data }.", { id: z.string().describe("ID do número (uuid interno).") }, async (client, args) => ({ data: await client.phoneNumbers.health(String(args.id)) }));
|
|
9
|
+
}, listPhoneNumbersResultSchema, (client, args) => client.phoneNumbers.list(args));
|
|
10
|
+
register("get_phone_number", "Busca um número pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do número (uuid interno).") }, getPhoneNumberResultSchema, async (client, args) => ({ data: await client.phoneNumbers.get(String(args.id)) }));
|
|
11
|
+
register("phone_number_health", "Retorna a saúde/qualidade de um número (quality rating, status de verificação, limites). Retorna { data }.", { id: z.string().describe("ID do número (uuid interno).") }, phoneNumberHealthResultSchema, async (client, args) => ({ data: await client.phoneNumbers.health(String(args.id)) }));
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=phone-numbers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phone-numbers.js","sourceRoot":"","sources":["../../src/tools/phone-numbers.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"phone-numbers.js","sourceRoot":"","sources":["../../src/tools/phone-numbers.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,wBAAwB,CAAC,QAAkB;IACzD,QAAQ,CACN,oBAAoB,EACpB,mHAAmH,EACnH;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAClF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC1F,EACD,4BAA4B,EAC5B,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAA8B,CAAC,CAC3E,CAAC;IAEF,QAAQ,CACN,kBAAkB,EAClB,2DAA2D,EAC3D,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,EAC3D,0BAA0B,EAC1B,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CACnF,CAAC;IAEF,QAAQ,CACN,qBAAqB,EACrB,4GAA4G,EAC5G,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,EAC3D,6BAA6B,EAC7B,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CACtF,CAAC;AACJ,CAAC"}
|
package/dist/tools/templates.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Ferramentas de templates de mensagem. */
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { listTemplatesResultSchema, templateResultSchema, } from "../schemas.js";
|
|
3
4
|
export function registerTemplateTools(register) {
|
|
4
5
|
register("list_templates", "Lista templates da conta (paginação offset: { data, meta }). Filtros opcionais por status, categoria e conexão WABA.", {
|
|
5
6
|
status: z.string().optional().describe("Filtra por status (ex.: APPROVED, PENDING)."),
|
|
@@ -8,8 +9,8 @@ export function registerTemplateTools(register) {
|
|
|
8
9
|
phone_number_id: z.string().optional().describe("Resolve a conexão do número (Meta)."),
|
|
9
10
|
page: z.number().int().positive().optional().describe("Página (1-based)."),
|
|
10
11
|
per_page: z.number().int().positive().optional().describe("Itens por página (máx. 100)."),
|
|
11
|
-
}, (client, args) => client.templates.list(args));
|
|
12
|
-
register("get_template", "Busca um template pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do template (uuid interno).") }, async (client, args) => ({ data: await client.templates.get(String(args.id)) }));
|
|
12
|
+
}, listTemplatesResultSchema, (client, args) => client.templates.list(args));
|
|
13
|
+
register("get_template", "Busca um template pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do template (uuid interno).") }, templateResultSchema, async (client, args) => ({ data: await client.templates.get(String(args.id)) }));
|
|
13
14
|
register("create_template", "Cria um template e o submete à Meta. Informe name, language, category e components (array no formato da Cloud API). Aponte a conexão via waba_connection_id OU phone_number_id. Retorna { data }.", {
|
|
14
15
|
name: z.string().describe("Nome do template (snake_case)."),
|
|
15
16
|
language: z.string().describe("Código de idioma (ex.: pt_BR)."),
|
|
@@ -19,7 +20,7 @@ export function registerTemplateTools(register) {
|
|
|
19
20
|
.describe("Componentes do template (header/body/footer/buttons)."),
|
|
20
21
|
waba_connection_id: z.string().optional(),
|
|
21
22
|
phone_number_id: z.string().optional().describe("Resolve a conexão do número (Meta)."),
|
|
22
|
-
}, async (client, args) => ({
|
|
23
|
+
}, templateResultSchema, async (client, args) => ({
|
|
23
24
|
data: await client.templates.create(args),
|
|
24
25
|
}));
|
|
25
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACtD,QAAQ,CACN,gBAAgB,EAChB,sHAAsH,EACtH;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACrF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACpF,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACtF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAC1F,EACD,yBAAyB,EACzB,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAA2B,CAAC,CACrE,CAAC;IAEF,QAAQ,CACN,cAAc,EACd,6DAA6D,EAC7D,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,EAC7D,oBAAoB,EACpB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAChF,CAAC;IAEF,QAAQ,CACN,iBAAiB,EACjB,mMAAmM,EACnM;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC9E,UAAU,EAAE,CAAC;aACV,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACxC,QAAQ,CAAC,uDAAuD,CAAC;QACpE,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KACvF,EACD,oBAAoB,EACpB,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAuC,CAAC;KAC7E,CAAC,CACH,CAAC;AACJ,CAAC"}
|
package/dist/tools/webhooks.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Register } from "../register.js";
|
|
2
2
|
export declare function registerWebhookTools(register: Register): void;
|
package/dist/tools/webhooks.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
/** Ferramentas de webhooks (assinaturas de eventos de saída) e entregas. */
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { emptyOperationResult } from "../register.js";
|
|
4
|
+
import { emptyOperationResultSchema, listWebhookDeliveriesResultSchema, listWebhooksResultSchema, webhookResultSchema, webhookTestResultSchema, } from "../schemas.js";
|
|
3
5
|
export function registerWebhookTools(register) {
|
|
4
6
|
register("list_webhooks", "Lista os endpoints de webhook da conta (paginação por cursor: { data, paging }).", {
|
|
5
7
|
limit: z.number().int().positive().optional(),
|
|
6
8
|
after: z.string().optional(),
|
|
7
9
|
before: z.string().optional(),
|
|
8
|
-
}, (client, args) => client.webhooks.list(args));
|
|
9
|
-
register("get_webhook", "Busca um webhook pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do webhook (uuid interno).") }, async (client, args) => ({ data: await client.webhooks.get(String(args.id)) }));
|
|
10
|
+
}, listWebhooksResultSchema, (client, args) => client.webhooks.list(args));
|
|
11
|
+
register("get_webhook", "Busca um webhook pelo id (uuid interno). Retorna { data }.", { id: z.string().describe("ID do webhook (uuid interno).") }, webhookResultSchema, async (client, args) => ({ data: await client.webhooks.get(String(args.id)) }));
|
|
10
12
|
register("create_webhook", "Cria um endpoint de webhook. `url` precisa ser https. `events` é a lista de tipos de evento assinados (ao menos um). Retorna { data }.", {
|
|
11
13
|
url: z.string().describe("URL https do endpoint."),
|
|
12
14
|
events: z.array(z.string()).describe("Tipos de evento assinados."),
|
|
13
15
|
active: z.boolean().optional().describe("Ativo (default true)."),
|
|
14
|
-
}, async (client, args) => ({
|
|
16
|
+
}, webhookResultSchema, async (client, args) => ({
|
|
15
17
|
data: await client.webhooks.create(args),
|
|
16
18
|
}));
|
|
17
19
|
register("update_webhook", "Atualiza um webhook (url, events, active). Retorna { data }.", {
|
|
@@ -19,15 +21,15 @@ export function registerWebhookTools(register) {
|
|
|
19
21
|
url: z.string().optional(),
|
|
20
22
|
events: z.array(z.string()).optional(),
|
|
21
23
|
active: z.boolean().optional(),
|
|
22
|
-
}, async (client, args) => {
|
|
24
|
+
}, webhookResultSchema, async (client, args) => {
|
|
23
25
|
const { id, ...body } = args;
|
|
24
26
|
return { data: await client.webhooks.update(String(id), body) };
|
|
25
27
|
});
|
|
26
|
-
register("delete_webhook", "Exclui um webhook pelo id (uuid interno).", { id: z.string().describe("ID do webhook (uuid interno).") }, async (client, args) => {
|
|
28
|
+
register("delete_webhook", "Exclui um webhook pelo id (uuid interno).", { id: z.string().describe("ID do webhook (uuid interno).") }, emptyOperationResultSchema, async (client, args) => {
|
|
27
29
|
await client.webhooks.delete(String(args.id));
|
|
28
|
-
return
|
|
30
|
+
return emptyOperationResult();
|
|
29
31
|
});
|
|
30
|
-
register("test_webhook", "Dispara um evento de teste assinado para o endpoint de webhook informado. Retorna { data }.", { id: z.string().describe("ID do webhook (uuid interno).") }, async (client, args) => ({ data: await client.webhooks.test(String(args.id)) }));
|
|
32
|
+
register("test_webhook", "Dispara um evento de teste assinado para o endpoint de webhook informado. Retorna { data }.", { id: z.string().describe("ID do webhook (uuid interno).") }, webhookTestResultSchema, async (client, args) => ({ data: await client.webhooks.test(String(args.id)) }));
|
|
31
33
|
register("list_webhook_deliveries", "Lista as entregas de webhook (tentativas de POST aos endpoints), com status e resposta. Paginação por cursor: { data, paging }.", {
|
|
32
34
|
webhook_id: z.string().optional().describe("Filtra por endpoint (alias de endpoint_id na rota)."),
|
|
33
35
|
status: z.string().optional().describe("Filtra por status da entrega (pending|success|failed|exhausted)."),
|
|
@@ -35,6 +37,6 @@ export function registerWebhookTools(register) {
|
|
|
35
37
|
limit: z.number().int().positive().optional(),
|
|
36
38
|
after: z.string().optional(),
|
|
37
39
|
before: z.string().optional(),
|
|
38
|
-
}, (client, args) => client.webhookDeliveries.list(args));
|
|
40
|
+
}, listWebhookDeliveriesResultSchema, (client, args) => client.webhookDeliveries.list(args));
|
|
39
41
|
}
|
|
40
42
|
//# sourceMappingURL=webhooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botozap/mcp",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Servidor MCP (Model Context Protocol) para a API pública do BotoZap — expõe as operações da plataforma WhatsApp Cloud API como ferramentas MCP para Claude Code, Cursor e Codex.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -29,11 +29,13 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
32
|
+
"pg": "^8.23.0",
|
|
32
33
|
"zod": "^3.25.76",
|
|
33
|
-
"@botozap/sdk": "0.1
|
|
34
|
+
"@botozap/sdk": "0.3.1"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@types/node": "^20.19.0",
|
|
38
|
+
"@types/pg": "^8.23.1",
|
|
37
39
|
"typescript": "^5.6.0",
|
|
38
40
|
"vitest": "^3.0.0"
|
|
39
41
|
},
|