@misarmail/mcp 2.0.5
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 +69 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +104 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +6 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +64 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +10 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +43 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/errors.d.ts +3 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +14 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/tools/ab-tests.d.ts +4 -0
- package/dist/tools/ab-tests.d.ts.map +1 -0
- package/dist/tools/ab-tests.js +81 -0
- package/dist/tools/ab-tests.js.map +1 -0
- package/dist/tools/ai.d.ts +4 -0
- package/dist/tools/ai.d.ts.map +1 -0
- package/dist/tools/ai.js +45 -0
- package/dist/tools/ai.js.map +1 -0
- package/dist/tools/analytics.d.ts +4 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +46 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/automations.d.ts +4 -0
- package/dist/tools/automations.d.ts.map +1 -0
- package/dist/tools/automations.js +62 -0
- package/dist/tools/automations.js.map +1 -0
- package/dist/tools/campaigns.d.ts +4 -0
- package/dist/tools/campaigns.d.ts.map +1 -0
- package/dist/tools/campaigns.js +88 -0
- package/dist/tools/campaigns.js.map +1 -0
- package/dist/tools/contacts.d.ts +4 -0
- package/dist/tools/contacts.d.ts.map +1 -0
- package/dist/tools/contacts.js +98 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/domains.d.ts +4 -0
- package/dist/tools/domains.d.ts.map +1 -0
- package/dist/tools/domains.js +57 -0
- package/dist/tools/domains.js.map +1 -0
- package/dist/tools/forms.d.ts +4 -0
- package/dist/tools/forms.d.ts.map +1 -0
- package/dist/tools/forms.js +59 -0
- package/dist/tools/forms.js.map +1 -0
- package/dist/tools/inbox.d.ts +4 -0
- package/dist/tools/inbox.d.ts.map +1 -0
- package/dist/tools/inbox.js +69 -0
- package/dist/tools/inbox.js.map +1 -0
- package/dist/tools/integrations.d.ts +4 -0
- package/dist/tools/integrations.d.ts.map +1 -0
- package/dist/tools/integrations.js +58 -0
- package/dist/tools/integrations.js.map +1 -0
- package/dist/tools/marketplace.d.ts +4 -0
- package/dist/tools/marketplace.d.ts.map +1 -0
- package/dist/tools/marketplace.js +41 -0
- package/dist/tools/marketplace.js.map +1 -0
- package/dist/tools/sandbox.d.ts +4 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +34 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/send.d.ts +4 -0
- package/dist/tools/send.d.ts.map +1 -0
- package/dist/tools/send.js +85 -0
- package/dist/tools/send.js.map +1 -0
- package/dist/tools/templates.d.ts +4 -0
- package/dist/tools/templates.d.ts.map +1 -0
- package/dist/tools/templates.js +82 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/validate.d.ts +4 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +41 -0
- package/dist/tools/validate.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { apiFetchRoot, buildQuery } from "../lib/api-client.js";
|
|
2
|
+
export const marketplaceTools = [
|
|
3
|
+
{
|
|
4
|
+
name: "list_marketplace_items",
|
|
5
|
+
description: "Browse marketplace items (templates, integrations, add-ons) with optional category filter.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
category: { type: "string", description: "Filter by category (e.g. template, integration, addon)" },
|
|
10
|
+
search: { type: "string", description: "Search query" },
|
|
11
|
+
page: { type: "number", description: "Page number (default: 1)" },
|
|
12
|
+
limit: { type: "number", description: "Results per page, max 50 (default: 20)" },
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
name: "get_marketplace_item",
|
|
18
|
+
description: "Get details and pricing for a marketplace item.",
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: "object",
|
|
21
|
+
required: ["item_id"],
|
|
22
|
+
properties: {
|
|
23
|
+
item_id: { type: "string", description: "Marketplace item ID" },
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
export async function handleMarketplaceTool(name, args) {
|
|
29
|
+
if (name === "list_marketplace_items") {
|
|
30
|
+
const { category, search, page, limit } = args;
|
|
31
|
+
const q = buildQuery({ category, search, page, limit });
|
|
32
|
+
const data = await apiFetchRoot(`/marketplace${q}`);
|
|
33
|
+
return JSON.stringify(data, null, 2);
|
|
34
|
+
}
|
|
35
|
+
if (name === "get_marketplace_item") {
|
|
36
|
+
const data = await apiFetchRoot(`/marketplace/${args.item_id}`);
|
|
37
|
+
return JSON.stringify(data, null, 2);
|
|
38
|
+
}
|
|
39
|
+
throw new Error(`Unknown marketplace tool: ${name}`);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/tools/marketplace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,gBAAgB,GAAW;IACtC;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,4FAA4F;QACzG,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wDAAwD,EAAE;gBACnG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACvD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBACjE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;aACjF;SACF;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,iDAAiD;QAC9D,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,SAAS,CAAC;YACrB,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;aAChE;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAA6B;IACrF,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACtC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,YAAY,EAAE,IAAI,EAkB9B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC,CAajB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { apiFetch } from "../lib/api-client.js";
|
|
2
|
+
export const sandboxTools = [
|
|
3
|
+
{
|
|
4
|
+
name: "list_sandbox_sends",
|
|
5
|
+
description: "List the most recent sends captured in sandbox mode. Sandbox sends do not deliver real email — use for testing. Returns up to 50 most recent entries.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {},
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: "clear_sandbox",
|
|
13
|
+
description: "Clear all sandbox send records for the authenticated user.",
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
];
|
|
20
|
+
export async function handleSandboxTool(name, _args) {
|
|
21
|
+
switch (name) {
|
|
22
|
+
case "list_sandbox_sends": {
|
|
23
|
+
const data = await apiFetch("/sandbox");
|
|
24
|
+
return JSON.stringify(data, null, 2);
|
|
25
|
+
}
|
|
26
|
+
case "clear_sandbox": {
|
|
27
|
+
const data = await apiFetch("/sandbox", { method: "DELETE" });
|
|
28
|
+
return JSON.stringify(data, null, 2);
|
|
29
|
+
}
|
|
30
|
+
default:
|
|
31
|
+
throw new Error(`Unknown sandbox tool: ${name}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,uJAAuJ;QACzJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,4DAA4D;QACzE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,KAA8B;IAE9B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/tools/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,SAAS,EAAE,IAAI,EAyE3B,CAAC;AAEF,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CASjB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { apiFetch } from "../lib/api-client.js";
|
|
2
|
+
export const sendTools = [
|
|
3
|
+
{
|
|
4
|
+
name: "send_email",
|
|
5
|
+
description: "Send a transactional email from one of your MisarMail email accounts. The from.email must match a verified email account.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
required: ["from", "to", "subject"],
|
|
9
|
+
properties: {
|
|
10
|
+
from: {
|
|
11
|
+
type: "object",
|
|
12
|
+
required: ["email"],
|
|
13
|
+
description: "Sender address (must match a verified MisarMail account)",
|
|
14
|
+
properties: {
|
|
15
|
+
email: { type: "string", description: "Sender email address" },
|
|
16
|
+
name: { type: "string", description: "Sender display name" },
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
to: {
|
|
20
|
+
type: "array",
|
|
21
|
+
description: "Recipient list (1–100 addresses)",
|
|
22
|
+
items: {
|
|
23
|
+
type: "object",
|
|
24
|
+
required: ["email"],
|
|
25
|
+
properties: {
|
|
26
|
+
email: { type: "string" },
|
|
27
|
+
name: { type: "string" },
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
cc: {
|
|
32
|
+
type: "array",
|
|
33
|
+
description: "CC recipients (max 50)",
|
|
34
|
+
items: {
|
|
35
|
+
type: "object",
|
|
36
|
+
required: ["email"],
|
|
37
|
+
properties: { email: { type: "string" }, name: { type: "string" } },
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
bcc: {
|
|
41
|
+
type: "array",
|
|
42
|
+
description: "BCC recipients (max 50)",
|
|
43
|
+
items: {
|
|
44
|
+
type: "object",
|
|
45
|
+
required: ["email"],
|
|
46
|
+
properties: { email: { type: "string" }, name: { type: "string" } },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
reply_to: {
|
|
50
|
+
type: "object",
|
|
51
|
+
description: "Reply-to address",
|
|
52
|
+
properties: { email: { type: "string" }, name: { type: "string" } },
|
|
53
|
+
},
|
|
54
|
+
subject: { type: "string", description: "Email subject (max 998 chars)" },
|
|
55
|
+
html: { type: "string", description: "HTML body (max 500KB)" },
|
|
56
|
+
text: { type: "string", description: "Plain text body (max 500KB)" },
|
|
57
|
+
alias_id: { type: "string", description: "Route via a specific alias SMTP pool" },
|
|
58
|
+
idempotency_key: {
|
|
59
|
+
type: "string",
|
|
60
|
+
description: "Unique key to prevent duplicate sends (max 128 chars)",
|
|
61
|
+
},
|
|
62
|
+
tags: {
|
|
63
|
+
type: "array",
|
|
64
|
+
items: { type: "string" },
|
|
65
|
+
description: "Tags for tracking (max 10, each max 64 chars)",
|
|
66
|
+
},
|
|
67
|
+
metadata: {
|
|
68
|
+
type: "object",
|
|
69
|
+
description: "Custom metadata key-value pairs (max 20 pairs)",
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
export async function handleSendTool(name, args) {
|
|
76
|
+
switch (name) {
|
|
77
|
+
case "send_email": {
|
|
78
|
+
const data = await apiFetch("/send", { method: "POST", body: JSON.stringify(args) });
|
|
79
|
+
return JSON.stringify(data, null, 2);
|
|
80
|
+
}
|
|
81
|
+
default:
|
|
82
|
+
throw new Error(`Unknown send tool: ${name}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/tools/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,aAAa,EAAE,IAAI,EAyD/B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { apiFetch, buildQuery } from "../lib/api-client.js";
|
|
2
|
+
export const templateTools = [
|
|
3
|
+
{
|
|
4
|
+
name: "list_templates",
|
|
5
|
+
description: "List email templates with optional type filter and pagination.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
page: { type: "number", description: "Page number (default: 1)" },
|
|
10
|
+
limit: { type: "number", description: "Results per page, max 50 (default: 20)" },
|
|
11
|
+
type: {
|
|
12
|
+
type: "string",
|
|
13
|
+
enum: ["marketing", "transactional", "automation"],
|
|
14
|
+
description: "Filter by template type",
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "create_template",
|
|
21
|
+
description: "Create a new email template. HTML is sanitized server-side.",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
type: "object",
|
|
24
|
+
required: ["name", "subject", "bodyHtml"],
|
|
25
|
+
properties: {
|
|
26
|
+
name: { type: "string", description: "Template name (max 100 chars)" },
|
|
27
|
+
description: { type: "string", description: "Optional description (max 1000 chars)" },
|
|
28
|
+
subject: { type: "string", description: "Email subject line (max 255 chars)" },
|
|
29
|
+
bodyHtml: { type: "string", description: "HTML email body (max 500KB)" },
|
|
30
|
+
bodyText: { type: "string", description: "Plain text fallback body (max 500KB)" },
|
|
31
|
+
templateType: {
|
|
32
|
+
type: "string",
|
|
33
|
+
enum: ["marketing", "transactional", "automation"],
|
|
34
|
+
description: "Template type (default: marketing)",
|
|
35
|
+
},
|
|
36
|
+
variables: {
|
|
37
|
+
type: "array",
|
|
38
|
+
items: { type: "string" },
|
|
39
|
+
description: "Variable names used in the template (max 100)",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: "render_template",
|
|
46
|
+
description: "Render a template with variable substitutions. Returns final html, text, and subject.",
|
|
47
|
+
inputSchema: {
|
|
48
|
+
type: "object",
|
|
49
|
+
required: ["template_id"],
|
|
50
|
+
properties: {
|
|
51
|
+
template_id: { type: "string", description: "Template UUID" },
|
|
52
|
+
variables: {
|
|
53
|
+
type: "object",
|
|
54
|
+
description: "Key-value pairs to substitute in {{variable}} placeholders",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
export async function handleTemplateTool(name, args) {
|
|
61
|
+
switch (name) {
|
|
62
|
+
case "list_templates": {
|
|
63
|
+
const qs = buildQuery({ page: args.page, limit: args.limit, type: args.type });
|
|
64
|
+
const data = await apiFetch(`/templates${qs}`);
|
|
65
|
+
return JSON.stringify(data, null, 2);
|
|
66
|
+
}
|
|
67
|
+
case "create_template": {
|
|
68
|
+
const data = await apiFetch("/templates", { method: "POST", body: JSON.stringify(args) });
|
|
69
|
+
return JSON.stringify(data, null, 2);
|
|
70
|
+
}
|
|
71
|
+
case "render_template": {
|
|
72
|
+
const data = await apiFetch("/templates/render", {
|
|
73
|
+
method: "POST",
|
|
74
|
+
body: JSON.stringify({ template_id: args.template_id, variables: args.variables ?? {} }),
|
|
75
|
+
});
|
|
76
|
+
return JSON.stringify(data, null, 2);
|
|
77
|
+
}
|
|
78
|
+
default:
|
|
79
|
+
throw new Error(`Unknown template tool: ${name}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,aAAa,EAAE,IAAI,EA6B/B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CASjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { apiFetch } from "../lib/api-client.js";
|
|
2
|
+
export const validateTools = [
|
|
3
|
+
{
|
|
4
|
+
name: "validate_email",
|
|
5
|
+
description: "Validate one or multiple email addresses. Checks syntax, MX records, SMTP reachability, and flags disposable/role/catch-all addresses. Single email or batch of up to 500. Deducts credits per verification.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
email: {
|
|
10
|
+
type: "string",
|
|
11
|
+
description: "Single email address to validate (use this OR emails, not both)",
|
|
12
|
+
},
|
|
13
|
+
emails: {
|
|
14
|
+
type: "array",
|
|
15
|
+
items: { type: "string" },
|
|
16
|
+
description: "Batch of email addresses to validate (max 500)",
|
|
17
|
+
},
|
|
18
|
+
options: {
|
|
19
|
+
type: "object",
|
|
20
|
+
properties: {
|
|
21
|
+
skip_smtp: {
|
|
22
|
+
type: "boolean",
|
|
23
|
+
description: "Skip SMTP verification (faster but less accurate)",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
export async function handleValidateTool(name, args) {
|
|
32
|
+
switch (name) {
|
|
33
|
+
case "validate_email": {
|
|
34
|
+
const data = await apiFetch("/validate", { method: "POST", body: JSON.stringify(args) });
|
|
35
|
+
return JSON.stringify(data, null, 2);
|
|
36
|
+
}
|
|
37
|
+
default:
|
|
38
|
+
throw new Error(`Unknown validate tool: ${name}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/tools/validate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,8MAA8M;QAChN,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iEAAiE;iBAC/E;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,WAAW,EAAE,gDAAgD;iBAC9D;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,SAAS,EAAE;4BACT,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,mDAAmD;yBACjE;qBACF;iBACF;aACF;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,IAA6B;IAE7B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@misarmail/mcp",
|
|
3
|
+
"version": "2.0.5",
|
|
4
|
+
"description": "MisarMail MCP server — send emails, manage campaigns, contacts, templates, automations, A/B tests, and deliverability analytics from AI assistants.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"misarmail-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"keywords": [
|
|
14
|
+
"mcp",
|
|
15
|
+
"model-context-protocol",
|
|
16
|
+
"email",
|
|
17
|
+
"email-marketing",
|
|
18
|
+
"campaigns",
|
|
19
|
+
"contacts",
|
|
20
|
+
"automation",
|
|
21
|
+
"deliverability",
|
|
22
|
+
"ai",
|
|
23
|
+
"misarmail"
|
|
24
|
+
],
|
|
25
|
+
"homepage": "https://mail.misar.io",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "https://git.misar.io/misaradmin/MisarMail"
|
|
29
|
+
},
|
|
30
|
+
"author": "Misar AI <support@misar.io>",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc",
|
|
37
|
+
"start": "node dist/index.js",
|
|
38
|
+
"typecheck": "tsc --noEmit",
|
|
39
|
+
"prepublishOnly": "npm run build"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"typescript": "^5.4.0"
|
|
46
|
+
}
|
|
47
|
+
}
|