@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.
Files changed (78) hide show
  1. package/README.md +69 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +104 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/api-client.d.ts +6 -0
  7. package/dist/lib/api-client.d.ts.map +1 -0
  8. package/dist/lib/api-client.js +64 -0
  9. package/dist/lib/api-client.js.map +1 -0
  10. package/dist/lib/auth.d.ts +10 -0
  11. package/dist/lib/auth.d.ts.map +1 -0
  12. package/dist/lib/auth.js +43 -0
  13. package/dist/lib/auth.js.map +1 -0
  14. package/dist/lib/errors.d.ts +3 -0
  15. package/dist/lib/errors.d.ts.map +1 -0
  16. package/dist/lib/errors.js +14 -0
  17. package/dist/lib/errors.js.map +1 -0
  18. package/dist/tools/ab-tests.d.ts +4 -0
  19. package/dist/tools/ab-tests.d.ts.map +1 -0
  20. package/dist/tools/ab-tests.js +81 -0
  21. package/dist/tools/ab-tests.js.map +1 -0
  22. package/dist/tools/ai.d.ts +4 -0
  23. package/dist/tools/ai.d.ts.map +1 -0
  24. package/dist/tools/ai.js +45 -0
  25. package/dist/tools/ai.js.map +1 -0
  26. package/dist/tools/analytics.d.ts +4 -0
  27. package/dist/tools/analytics.d.ts.map +1 -0
  28. package/dist/tools/analytics.js +46 -0
  29. package/dist/tools/analytics.js.map +1 -0
  30. package/dist/tools/automations.d.ts +4 -0
  31. package/dist/tools/automations.d.ts.map +1 -0
  32. package/dist/tools/automations.js +62 -0
  33. package/dist/tools/automations.js.map +1 -0
  34. package/dist/tools/campaigns.d.ts +4 -0
  35. package/dist/tools/campaigns.d.ts.map +1 -0
  36. package/dist/tools/campaigns.js +88 -0
  37. package/dist/tools/campaigns.js.map +1 -0
  38. package/dist/tools/contacts.d.ts +4 -0
  39. package/dist/tools/contacts.d.ts.map +1 -0
  40. package/dist/tools/contacts.js +98 -0
  41. package/dist/tools/contacts.js.map +1 -0
  42. package/dist/tools/domains.d.ts +4 -0
  43. package/dist/tools/domains.d.ts.map +1 -0
  44. package/dist/tools/domains.js +57 -0
  45. package/dist/tools/domains.js.map +1 -0
  46. package/dist/tools/forms.d.ts +4 -0
  47. package/dist/tools/forms.d.ts.map +1 -0
  48. package/dist/tools/forms.js +59 -0
  49. package/dist/tools/forms.js.map +1 -0
  50. package/dist/tools/inbox.d.ts +4 -0
  51. package/dist/tools/inbox.d.ts.map +1 -0
  52. package/dist/tools/inbox.js +69 -0
  53. package/dist/tools/inbox.js.map +1 -0
  54. package/dist/tools/integrations.d.ts +4 -0
  55. package/dist/tools/integrations.d.ts.map +1 -0
  56. package/dist/tools/integrations.js +58 -0
  57. package/dist/tools/integrations.js.map +1 -0
  58. package/dist/tools/marketplace.d.ts +4 -0
  59. package/dist/tools/marketplace.d.ts.map +1 -0
  60. package/dist/tools/marketplace.js +41 -0
  61. package/dist/tools/marketplace.js.map +1 -0
  62. package/dist/tools/sandbox.d.ts +4 -0
  63. package/dist/tools/sandbox.d.ts.map +1 -0
  64. package/dist/tools/sandbox.js +34 -0
  65. package/dist/tools/sandbox.js.map +1 -0
  66. package/dist/tools/send.d.ts +4 -0
  67. package/dist/tools/send.d.ts.map +1 -0
  68. package/dist/tools/send.js +85 -0
  69. package/dist/tools/send.js.map +1 -0
  70. package/dist/tools/templates.d.ts +4 -0
  71. package/dist/tools/templates.d.ts.map +1 -0
  72. package/dist/tools/templates.js +82 -0
  73. package/dist/tools/templates.js.map +1 -0
  74. package/dist/tools/validate.d.ts +4 -0
  75. package/dist/tools/validate.d.ts.map +1 -0
  76. package/dist/tools/validate.js +41 -0
  77. package/dist/tools/validate.js.map +1 -0
  78. package/package.json +47 -0
@@ -0,0 +1,62 @@
1
+ import { apiFetchRoot, buildQuery } from "../lib/api-client.js";
2
+ export const automationTools = [
3
+ {
4
+ name: "list_automations",
5
+ description: "List email automation workflows.",
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
+ status: {
12
+ type: "string",
13
+ enum: ["active", "paused", "draft"],
14
+ description: "Filter by automation status",
15
+ },
16
+ },
17
+ },
18
+ },
19
+ {
20
+ name: "get_automation",
21
+ description: "Get a single automation workflow by ID including its trigger and steps.",
22
+ inputSchema: {
23
+ type: "object",
24
+ required: ["automation_id"],
25
+ properties: {
26
+ automation_id: { type: "string", description: "Automation UUID" },
27
+ },
28
+ },
29
+ },
30
+ {
31
+ name: "toggle_automation",
32
+ description: "Activate or pause an automation workflow.",
33
+ inputSchema: {
34
+ type: "object",
35
+ required: ["automation_id", "active"],
36
+ properties: {
37
+ automation_id: { type: "string", description: "Automation UUID" },
38
+ active: { type: "boolean", description: "true to activate, false to pause" },
39
+ },
40
+ },
41
+ },
42
+ ];
43
+ export async function handleAutomationTool(name, args) {
44
+ if (name === "list_automations") {
45
+ const q = buildQuery({ page: args.page, limit: args.limit, status: args.status });
46
+ const data = await apiFetchRoot(`/automations${q}`);
47
+ return JSON.stringify(data, null, 2);
48
+ }
49
+ if (name === "get_automation") {
50
+ const data = await apiFetchRoot(`/automations/${args.automation_id}`);
51
+ return JSON.stringify(data, null, 2);
52
+ }
53
+ if (name === "toggle_automation") {
54
+ const data = await apiFetchRoot(`/automations/${args.automation_id}`, {
55
+ method: "PATCH",
56
+ body: JSON.stringify({ active: args.active }),
57
+ });
58
+ return JSON.stringify(data, null, 2);
59
+ }
60
+ throw new Error(`Unknown automation tool: ${name}`);
61
+ }
62
+ //# sourceMappingURL=automations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automations.js","sourceRoot":"","sources":["../../src/tools/automations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,eAAe,GAAW;IACrC;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBACjE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;gBAChF,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC;oBACnC,WAAW,EAAE,6BAA6B;iBAC3C;aACF;SACF;KACF;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,yEAAyE;QACtF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,eAAe,CAAC;YAC3B,UAAU,EAAE;gBACV,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;aAClE;SACF;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,2CAA2C;QACxD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC;YACrC,UAAU,EAAE;gBACV,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;gBACjE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kCAAkC,EAAE;aAC7E;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAA6B;IACpF,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAClF,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,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,gBAAgB,IAAI,CAAC,aAAa,EAAE,EAAE;YACpE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const campaignTools: Tool[];
3
+ export declare function handleCampaignTool(name: string, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=campaigns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaigns.d.ts","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,aAAa,EAAE,IAAI,EA8D/B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
@@ -0,0 +1,88 @@
1
+ import { apiFetch, buildQuery } from "../lib/api-client.js";
2
+ export const campaignTools = [
3
+ {
4
+ name: "list_campaigns",
5
+ description: "List email campaigns with optional status 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
+ status: {
12
+ type: "string",
13
+ enum: ["draft", "scheduled", "sending", "sent", "paused", "cancelled"],
14
+ description: "Filter by campaign status",
15
+ },
16
+ },
17
+ },
18
+ },
19
+ {
20
+ name: "get_campaign",
21
+ description: "Get a single campaign by ID.",
22
+ inputSchema: {
23
+ type: "object",
24
+ required: ["campaign_id"],
25
+ properties: {
26
+ campaign_id: { type: "string", description: "Campaign UUID" },
27
+ },
28
+ },
29
+ },
30
+ {
31
+ name: "create_campaign",
32
+ description: "Create a new email campaign.",
33
+ inputSchema: {
34
+ type: "object",
35
+ required: ["name", "subject", "fromName", "fromEmail"],
36
+ properties: {
37
+ name: { type: "string", description: "Campaign name (max 100 chars)" },
38
+ subject: { type: "string", description: "Email subject line (max 255 chars)" },
39
+ fromName: { type: "string", description: "Sender display name" },
40
+ fromEmail: { type: "string", description: "Sender email address" },
41
+ replyTo: { type: "string", description: "Reply-to email address" },
42
+ bodyHtml: { type: "string", description: "HTML email body (max 500KB)" },
43
+ bodyText: { type: "string", description: "Plain text email body" },
44
+ templateId: { type: "string", description: "Template UUID to use" },
45
+ segmentId: { type: "string", description: "Contact segment UUID to target" },
46
+ scheduledAt: {
47
+ type: "string",
48
+ description: "ISO 8601 datetime to schedule send (must be in future)",
49
+ },
50
+ },
51
+ },
52
+ },
53
+ {
54
+ name: "send_campaign",
55
+ description: "Immediately send a draft campaign to its target segment.",
56
+ inputSchema: {
57
+ type: "object",
58
+ required: ["campaign_id"],
59
+ properties: {
60
+ campaign_id: { type: "string", description: "Campaign UUID to send" },
61
+ },
62
+ },
63
+ },
64
+ ];
65
+ export async function handleCampaignTool(name, args) {
66
+ switch (name) {
67
+ case "list_campaigns": {
68
+ const qs = buildQuery({ page: args.page, limit: args.limit, status: args.status });
69
+ const data = await apiFetch(`/campaigns${qs}`);
70
+ return JSON.stringify(data, null, 2);
71
+ }
72
+ case "get_campaign": {
73
+ const data = await apiFetch(`/campaigns/${String(args.campaign_id)}`);
74
+ return JSON.stringify(data, null, 2);
75
+ }
76
+ case "create_campaign": {
77
+ const data = await apiFetch("/campaigns", { method: "POST", body: JSON.stringify(args) });
78
+ return JSON.stringify(data, null, 2);
79
+ }
80
+ case "send_campaign": {
81
+ const data = await apiFetch(`/campaigns/${String(args.campaign_id)}/send`, { method: "POST" });
82
+ return JSON.stringify(data, null, 2);
83
+ }
84
+ default:
85
+ throw new Error(`Unknown campaign tool: ${name}`);
86
+ }
87
+ }
88
+ //# sourceMappingURL=campaigns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/tools/campaigns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const contactTools: Tool[];
3
+ export declare function handleContactTool(name: string, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=contacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,YAAY,EAAE,IAAI,EAuE9B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
@@ -0,0 +1,98 @@
1
+ import { apiFetch, buildQuery } from "../lib/api-client.js";
2
+ export const contactTools = [
3
+ {
4
+ name: "list_contacts",
5
+ description: "List contacts with optional status filter and search.",
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 100 (default: 20)" },
11
+ status: {
12
+ type: "string",
13
+ enum: ["subscribed", "unsubscribed", "bounced", "complained"],
14
+ description: "Filter by contact status",
15
+ },
16
+ search: { type: "string", description: "Search by email, first name, or last name" },
17
+ },
18
+ },
19
+ },
20
+ {
21
+ name: "create_contact",
22
+ description: "Create a new contact.",
23
+ inputSchema: {
24
+ type: "object",
25
+ required: ["email"],
26
+ properties: {
27
+ email: { type: "string", description: "Contact email address" },
28
+ firstName: { type: "string", description: "First name" },
29
+ lastName: { type: "string", description: "Last name" },
30
+ status: {
31
+ type: "string",
32
+ enum: ["subscribed", "unsubscribed", "bounced", "complained"],
33
+ description: "Contact status (default: subscribed)",
34
+ },
35
+ source: { type: "string", description: "Source identifier (max 255 chars)" },
36
+ tags: {
37
+ type: "array",
38
+ items: { type: "string" },
39
+ description: "Tags to assign (max 50)",
40
+ },
41
+ customFields: {
42
+ type: "object",
43
+ description: "Custom field key-value pairs (max 50 keys, 50KB)",
44
+ },
45
+ },
46
+ },
47
+ },
48
+ {
49
+ name: "import_contacts",
50
+ description: "Bulk import contacts from a CSV string or array of contact objects.",
51
+ inputSchema: {
52
+ type: "object",
53
+ required: ["contacts"],
54
+ properties: {
55
+ contacts: {
56
+ type: "array",
57
+ description: "Array of contact objects with at minimum an email field",
58
+ items: {
59
+ type: "object",
60
+ required: ["email"],
61
+ properties: {
62
+ email: { type: "string" },
63
+ firstName: { type: "string" },
64
+ lastName: { type: "string" },
65
+ status: { type: "string" },
66
+ tags: { type: "array", items: { type: "string" } },
67
+ },
68
+ },
69
+ },
70
+ },
71
+ },
72
+ },
73
+ ];
74
+ export async function handleContactTool(name, args) {
75
+ switch (name) {
76
+ case "list_contacts": {
77
+ const qs = buildQuery({
78
+ page: args.page,
79
+ limit: args.limit,
80
+ status: args.status,
81
+ search: args.search,
82
+ });
83
+ const data = await apiFetch(`/contacts${qs}`);
84
+ return JSON.stringify(data, null, 2);
85
+ }
86
+ case "create_contact": {
87
+ const data = await apiFetch("/contacts", { method: "POST", body: JSON.stringify(args) });
88
+ return JSON.stringify(data, null, 2);
89
+ }
90
+ case "import_contacts": {
91
+ const data = await apiFetch("/contacts/import", { method: "POST", body: JSON.stringify(args) });
92
+ return JSON.stringify(data, null, 2);
93
+ }
94
+ default:
95
+ throw new Error(`Unknown contact tool: ${name}`);
96
+ }
97
+ }
98
+ //# sourceMappingURL=contacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/tools/contacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const domainTools: Tool[];
3
+ export declare function handleDomainTool(name: string, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,WAAW,EAAE,IAAI,EAkC7B,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBnG"}
@@ -0,0 +1,57 @@
1
+ import { apiFetchRoot, buildQuery } from "../lib/api-client.js";
2
+ export const domainTools = [
3
+ {
4
+ name: "list_domains",
5
+ description: "List sending domains and their DNS verification status.",
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
+ },
12
+ },
13
+ },
14
+ {
15
+ name: "add_domain",
16
+ description: "Add a new sending domain to verify.",
17
+ inputSchema: {
18
+ type: "object",
19
+ required: ["domain"],
20
+ properties: {
21
+ domain: { type: "string", description: "Domain name (e.g. mail.example.com)" },
22
+ },
23
+ },
24
+ },
25
+ {
26
+ name: "verify_domain",
27
+ description: "Trigger DNS verification for a sending domain.",
28
+ inputSchema: {
29
+ type: "object",
30
+ required: ["domain_id"],
31
+ properties: {
32
+ domain_id: { type: "string", description: "Domain UUID" },
33
+ },
34
+ },
35
+ },
36
+ ];
37
+ export async function handleDomainTool(name, args) {
38
+ if (name === "list_domains") {
39
+ const { page, limit } = args;
40
+ const q = buildQuery({ page, limit });
41
+ const data = await apiFetchRoot(`/domains${q}`);
42
+ return JSON.stringify(data, null, 2);
43
+ }
44
+ if (name === "add_domain") {
45
+ const data = await apiFetchRoot("/domains", {
46
+ method: "POST",
47
+ body: JSON.stringify({ domain: args.domain }),
48
+ });
49
+ return JSON.stringify(data, null, 2);
50
+ }
51
+ if (name === "verify_domain") {
52
+ const data = await apiFetchRoot(`/domains/${args.domain_id}/verify`, { method: "POST" });
53
+ return JSON.stringify(data, null, 2);
54
+ }
55
+ throw new Error(`Unknown domain tool: ${name}`);
56
+ }
57
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/tools/domains.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,WAAW,GAAW;IACjC;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,yDAAyD;QACtE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,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,YAAY;QAClB,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,QAAQ,CAAC;YACpB,UAAU,EAAE;gBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;aAC/E;SACF;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,WAAW,CAAC;YACvB,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;aAC1D;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAA6B;IAChF,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,YAAY,IAAI,CAAC,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const formTools: Tool[];
3
+ export declare function handleFormTool(name: string, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=forms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../src/tools/forms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,SAAS,EAAE,IAAI,EAqC3B,CAAC;AAEF,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBjG"}
@@ -0,0 +1,59 @@
1
+ import { apiFetchRoot, buildQuery } from "../lib/api-client.js";
2
+ export const formTools = [
3
+ {
4
+ name: "list_forms",
5
+ description: "List all signup forms with optional status 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
+ status: { type: "string", enum: ["active", "inactive"], description: "Filter by status" },
12
+ },
13
+ },
14
+ },
15
+ {
16
+ name: "get_form",
17
+ description: "Get a signup form by ID including embed code.",
18
+ inputSchema: {
19
+ type: "object",
20
+ required: ["form_id"],
21
+ properties: {
22
+ form_id: { type: "string", description: "Form UUID" },
23
+ },
24
+ },
25
+ },
26
+ {
27
+ name: "get_form_submissions",
28
+ description: "Get submissions for a form with optional date range.",
29
+ inputSchema: {
30
+ type: "object",
31
+ required: ["form_id"],
32
+ properties: {
33
+ form_id: { type: "string", description: "Form UUID" },
34
+ page: { type: "number", description: "Page number (default: 1)" },
35
+ limit: { type: "number", description: "Results per page, max 50 (default: 20)" },
36
+ },
37
+ },
38
+ },
39
+ ];
40
+ export async function handleFormTool(name, args) {
41
+ if (name === "list_forms") {
42
+ const { page, limit, status } = args;
43
+ const q = buildQuery({ page, limit, status });
44
+ const data = await apiFetchRoot(`/forms${q}`);
45
+ return JSON.stringify(data, null, 2);
46
+ }
47
+ if (name === "get_form") {
48
+ const data = await apiFetchRoot(`/forms/${args.form_id}`);
49
+ return JSON.stringify(data, null, 2);
50
+ }
51
+ if (name === "get_form_submissions") {
52
+ const { page, limit } = args;
53
+ const q = buildQuery({ page, limit });
54
+ const data = await apiFetchRoot(`/forms/${args.form_id}/submissions${q}`);
55
+ return JSON.stringify(data, null, 2);
56
+ }
57
+ throw new Error(`Unknown form tool: ${name}`);
58
+ }
59
+ //# sourceMappingURL=forms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/tools/forms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,SAAS,GAAW;IAC/B;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBACjE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;gBAChF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE;aAC1F;SACF;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,+CAA+C;QAC5D,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,WAAW,EAAE;aACtD;SACF;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,sDAAsD;QACnE,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,WAAW,EAAE;gBACrD,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;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,IAA6B;IAC9E,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACrC,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,UAAU,IAAI,CAAC,OAAO,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const inboxTools: Tool[];
3
+ export declare function handleInboxTool(name: string, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/tools/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,UAAU,EAAE,IAAI,EAiD5B,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBlG"}
@@ -0,0 +1,69 @@
1
+ import { apiFetchRoot, buildQuery } from "../lib/api-client.js";
2
+ export const inboxTools = [
3
+ {
4
+ name: "list_inbox_conversations",
5
+ description: "List unified-inbox conversations for the authenticated user, ordered by last activity.",
6
+ inputSchema: {
7
+ type: "object",
8
+ properties: {
9
+ status: {
10
+ type: "string",
11
+ enum: ["active", "closed", "snoozed"],
12
+ description: "Filter by conversation status (default: active)",
13
+ },
14
+ intent: { type: "string", description: "Filter by detected intent" },
15
+ channel: { type: "string", description: "Filter by channel (e.g. email)" },
16
+ q: { type: "string", description: "Search by lead email or name" },
17
+ limit: { type: "number", description: "Results per page, max 100 (default: 50)" },
18
+ offset: { type: "number", description: "Pagination offset (default: 0)" },
19
+ },
20
+ },
21
+ },
22
+ {
23
+ name: "get_inbox_conversation_messages",
24
+ description: "Fetch all messages for a single inbox conversation in chronological order.",
25
+ inputSchema: {
26
+ type: "object",
27
+ required: ["conversation_id"],
28
+ properties: {
29
+ conversation_id: { type: "string", description: "Conversation UUID" },
30
+ },
31
+ },
32
+ },
33
+ {
34
+ name: "categorize_inbox_emails",
35
+ description: "Categorize one or more inbox emails using AI (intent + category detection).",
36
+ inputSchema: {
37
+ type: "object",
38
+ required: ["email_ids"],
39
+ properties: {
40
+ email_ids: {
41
+ type: "array",
42
+ items: { type: "string" },
43
+ description: "Array of email UUIDs (1–100)",
44
+ },
45
+ },
46
+ },
47
+ },
48
+ ];
49
+ export async function handleInboxTool(name, args) {
50
+ if (name === "list_inbox_conversations") {
51
+ const { status, intent, channel, q, limit, offset } = args;
52
+ const query = buildQuery({ status, intent, channel, q, limit, offset });
53
+ const data = await apiFetchRoot(`/inbox/conversations${query}`);
54
+ return JSON.stringify(data, null, 2);
55
+ }
56
+ if (name === "get_inbox_conversation_messages") {
57
+ const data = await apiFetchRoot(`/inbox/conversations/${args.conversation_id}/messages`);
58
+ return JSON.stringify(data, null, 2);
59
+ }
60
+ if (name === "categorize_inbox_emails") {
61
+ const data = await apiFetchRoot("/inbox/categorize", {
62
+ method: "POST",
63
+ body: JSON.stringify({ emailIds: args.email_ids }),
64
+ });
65
+ return JSON.stringify(data, null, 2);
66
+ }
67
+ throw new Error(`Unknown inbox tool: ${name}`);
68
+ }
69
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/tools/inbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const integrationTools: Tool[];
3
+ export declare function handleIntegrationTool(name: string, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../../src/tools/integrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAmClC,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBxG"}
@@ -0,0 +1,58 @@
1
+ import { apiFetchRoot, buildQuery } from "../lib/api-client.js";
2
+ export const integrationTools = [
3
+ {
4
+ name: "list_integrations",
5
+ description: "List all connected integrations and their status.",
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
+ },
12
+ },
13
+ },
14
+ {
15
+ name: "get_integration",
16
+ description: "Get details and connection status for a specific integration.",
17
+ inputSchema: {
18
+ type: "object",
19
+ required: ["integration_id"],
20
+ properties: {
21
+ integration_id: { type: "string", description: "Integration UUID" },
22
+ },
23
+ },
24
+ },
25
+ {
26
+ name: "toggle_integration",
27
+ description: "Enable or disable an integration.",
28
+ inputSchema: {
29
+ type: "object",
30
+ required: ["integration_id", "enabled"],
31
+ properties: {
32
+ integration_id: { type: "string", description: "Integration UUID" },
33
+ enabled: { type: "boolean", description: "true to enable, false to disable" },
34
+ },
35
+ },
36
+ },
37
+ ];
38
+ export async function handleIntegrationTool(name, args) {
39
+ if (name === "list_integrations") {
40
+ const { page, limit } = args;
41
+ const q = buildQuery({ page, limit });
42
+ const data = await apiFetchRoot(`/integrations${q}`);
43
+ return JSON.stringify(data, null, 2);
44
+ }
45
+ if (name === "get_integration") {
46
+ const data = await apiFetchRoot(`/integrations/${args.integration_id}`);
47
+ return JSON.stringify(data, null, 2);
48
+ }
49
+ if (name === "toggle_integration") {
50
+ const data = await apiFetchRoot(`/integrations/${args.integration_id}/toggle`, {
51
+ method: "PATCH",
52
+ body: JSON.stringify({ enabled: args.enabled }),
53
+ });
54
+ return JSON.stringify(data, null, 2);
55
+ }
56
+ throw new Error(`Unknown integration tool: ${name}`);
57
+ }
58
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/tools/integrations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,gBAAgB,GAAW;IACtC;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,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,iBAAiB;QACvB,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,gBAAgB,CAAC;YAC5B,UAAU,EAAE;gBACV,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;aACpE;SACF;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,mCAAmC;QAChD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC;YACvC,UAAU,EAAE;gBACV,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;gBACnE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kCAAkC,EAAE;aAC9E;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY,EAAE,IAA6B;IACrF,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,iBAAiB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,iBAAiB,IAAI,CAAC,cAAc,SAAS,EAAE;YAC7E,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;SAChD,CAAC,CAAC;QACH,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,4 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const marketplaceTools: Tool[];
3
+ export declare function handleMarketplaceTool(name: string, args: Record<string, unknown>): Promise<string>;
4
+ //# sourceMappingURL=marketplace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/tools/marketplace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,eAAO,MAAM,gBAAgB,EAAE,IAAI,EAyBlC,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAYxG"}