@kelpi/mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +312 -0
  2. package/bin/kelpi-mcp +3 -0
  3. package/dist/__tests__/integration-api/fixtures.d.ts +382 -0
  4. package/dist/__tests__/integration-api/fixtures.d.ts.map +1 -0
  5. package/dist/__tests__/integration-api/fixtures.js +478 -0
  6. package/dist/__tests__/integration-api/fixtures.js.map +1 -0
  7. package/dist/__tests__/integration-api/index.d.ts +19 -0
  8. package/dist/__tests__/integration-api/index.d.ts.map +1 -0
  9. package/dist/__tests__/integration-api/index.js +33 -0
  10. package/dist/__tests__/integration-api/index.js.map +1 -0
  11. package/dist/__tests__/integration-api/setup.d.ts +176 -0
  12. package/dist/__tests__/integration-api/setup.d.ts.map +1 -0
  13. package/dist/__tests__/integration-api/setup.js +329 -0
  14. package/dist/__tests__/integration-api/setup.js.map +1 -0
  15. package/dist/__tests__/setup.d.ts +2 -0
  16. package/dist/__tests__/setup.d.ts.map +1 -0
  17. package/dist/__tests__/setup.js +11 -0
  18. package/dist/__tests__/setup.js.map +1 -0
  19. package/dist/__tests__/unit/test-utils.d.ts +46 -0
  20. package/dist/__tests__/unit/test-utils.d.ts.map +1 -0
  21. package/dist/__tests__/unit/test-utils.js +50 -0
  22. package/dist/__tests__/unit/test-utils.js.map +1 -0
  23. package/dist/index.d.ts +6 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +34 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/api-client.d.ts +17 -0
  28. package/dist/lib/api-client.d.ts.map +1 -0
  29. package/dist/lib/api-client.js +169 -0
  30. package/dist/lib/api-client.js.map +1 -0
  31. package/dist/lib/auth-state.d.ts +54 -0
  32. package/dist/lib/auth-state.d.ts.map +1 -0
  33. package/dist/lib/auth-state.js +131 -0
  34. package/dist/lib/auth-state.js.map +1 -0
  35. package/dist/lib/config.d.ts +39 -0
  36. package/dist/lib/config.d.ts.map +1 -0
  37. package/dist/lib/config.js +170 -0
  38. package/dist/lib/config.js.map +1 -0
  39. package/dist/lib/error-formatter.d.ts +40 -0
  40. package/dist/lib/error-formatter.d.ts.map +1 -0
  41. package/dist/lib/error-formatter.js +149 -0
  42. package/dist/lib/error-formatter.js.map +1 -0
  43. package/dist/lib/errors.d.ts +44 -0
  44. package/dist/lib/errors.d.ts.map +1 -0
  45. package/dist/lib/errors.js +56 -0
  46. package/dist/lib/errors.js.map +1 -0
  47. package/dist/lib/tool-helpers.d.ts +49 -0
  48. package/dist/lib/tool-helpers.d.ts.map +1 -0
  49. package/dist/lib/tool-helpers.js +101 -0
  50. package/dist/lib/tool-helpers.js.map +1 -0
  51. package/dist/lib/tool-registry.d.ts +111 -0
  52. package/dist/lib/tool-registry.d.ts.map +1 -0
  53. package/dist/lib/tool-registry.js +112 -0
  54. package/dist/lib/tool-registry.js.map +1 -0
  55. package/dist/lib/version.d.ts +13 -0
  56. package/dist/lib/version.d.ts.map +1 -0
  57. package/dist/lib/version.js +13 -0
  58. package/dist/lib/version.js.map +1 -0
  59. package/dist/prompts/flow-generator.d.ts +45 -0
  60. package/dist/prompts/flow-generator.d.ts.map +1 -0
  61. package/dist/prompts/flow-generator.js +177 -0
  62. package/dist/prompts/flow-generator.js.map +1 -0
  63. package/dist/prompts/index.d.ts +7 -0
  64. package/dist/prompts/index.d.ts.map +1 -0
  65. package/dist/prompts/index.js +7 -0
  66. package/dist/prompts/index.js.map +1 -0
  67. package/dist/server.d.ts +66 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +140 -0
  70. package/dist/server.js.map +1 -0
  71. package/dist/tools/auth/index.d.ts +18 -0
  72. package/dist/tools/auth/index.d.ts.map +1 -0
  73. package/dist/tools/auth/index.js +50 -0
  74. package/dist/tools/auth/index.js.map +1 -0
  75. package/dist/tools/auth/login.d.ts +37 -0
  76. package/dist/tools/auth/login.d.ts.map +1 -0
  77. package/dist/tools/auth/login.js +257 -0
  78. package/dist/tools/auth/login.js.map +1 -0
  79. package/dist/tools/auth/schemas.d.ts +69 -0
  80. package/dist/tools/auth/schemas.d.ts.map +1 -0
  81. package/dist/tools/auth/schemas.js +36 -0
  82. package/dist/tools/auth/schemas.js.map +1 -0
  83. package/dist/tools/auth/status.d.ts +11 -0
  84. package/dist/tools/auth/status.d.ts.map +1 -0
  85. package/dist/tools/auth/status.js +50 -0
  86. package/dist/tools/auth/status.js.map +1 -0
  87. package/dist/tools/contacts/create.d.ts +11 -0
  88. package/dist/tools/contacts/create.d.ts.map +1 -0
  89. package/dist/tools/contacts/create.js +47 -0
  90. package/dist/tools/contacts/create.js.map +1 -0
  91. package/dist/tools/contacts/index.d.ts +10 -0
  92. package/dist/tools/contacts/index.d.ts.map +1 -0
  93. package/dist/tools/contacts/index.js +40 -0
  94. package/dist/tools/contacts/index.js.map +1 -0
  95. package/dist/tools/contacts/schemas.d.ts +37 -0
  96. package/dist/tools/contacts/schemas.d.ts.map +1 -0
  97. package/dist/tools/contacts/schemas.js +15 -0
  98. package/dist/tools/contacts/schemas.js.map +1 -0
  99. package/dist/tools/events/index.d.ts +10 -0
  100. package/dist/tools/events/index.d.ts.map +1 -0
  101. package/dist/tools/events/index.js +42 -0
  102. package/dist/tools/events/index.js.map +1 -0
  103. package/dist/tools/events/schemas.d.ts +37 -0
  104. package/dist/tools/events/schemas.d.ts.map +1 -0
  105. package/dist/tools/events/schemas.js +17 -0
  106. package/dist/tools/events/schemas.js.map +1 -0
  107. package/dist/tools/events/track.d.ts +11 -0
  108. package/dist/tools/events/track.d.ts.map +1 -0
  109. package/dist/tools/events/track.js +41 -0
  110. package/dist/tools/events/track.js.map +1 -0
  111. package/dist/tools/flows/activate.d.ts +11 -0
  112. package/dist/tools/flows/activate.d.ts.map +1 -0
  113. package/dist/tools/flows/activate.js +46 -0
  114. package/dist/tools/flows/activate.js.map +1 -0
  115. package/dist/tools/flows/create.d.ts +11 -0
  116. package/dist/tools/flows/create.d.ts.map +1 -0
  117. package/dist/tools/flows/create.js +72 -0
  118. package/dist/tools/flows/create.js.map +1 -0
  119. package/dist/tools/flows/index.d.ts +24 -0
  120. package/dist/tools/flows/index.d.ts.map +1 -0
  121. package/dist/tools/flows/index.js +183 -0
  122. package/dist/tools/flows/index.js.map +1 -0
  123. package/dist/tools/flows/list.d.ts +11 -0
  124. package/dist/tools/flows/list.d.ts.map +1 -0
  125. package/dist/tools/flows/list.js +34 -0
  126. package/dist/tools/flows/list.js.map +1 -0
  127. package/dist/tools/flows/schemas.d.ts +621 -0
  128. package/dist/tools/flows/schemas.d.ts.map +1 -0
  129. package/dist/tools/flows/schemas.js +135 -0
  130. package/dist/tools/flows/schemas.js.map +1 -0
  131. package/dist/tools/flows/transform.d.ts +39 -0
  132. package/dist/tools/flows/transform.d.ts.map +1 -0
  133. package/dist/tools/flows/transform.js +139 -0
  134. package/dist/tools/flows/transform.js.map +1 -0
  135. package/dist/tools/index.d.ts +34 -0
  136. package/dist/tools/index.d.ts.map +1 -0
  137. package/dist/tools/index.js +46 -0
  138. package/dist/tools/index.js.map +1 -0
  139. package/dist/tools/sdk/index.d.ts +18 -0
  140. package/dist/tools/sdk/index.d.ts.map +1 -0
  141. package/dist/tools/sdk/index.js +69 -0
  142. package/dist/tools/sdk/index.js.map +1 -0
  143. package/dist/tools/sdk/public-key.d.ts +11 -0
  144. package/dist/tools/sdk/public-key.d.ts.map +1 -0
  145. package/dist/tools/sdk/public-key.js +24 -0
  146. package/dist/tools/sdk/public-key.js.map +1 -0
  147. package/dist/tools/sdk/schemas.d.ts +48 -0
  148. package/dist/tools/sdk/schemas.d.ts.map +1 -0
  149. package/dist/tools/sdk/schemas.js +35 -0
  150. package/dist/tools/sdk/schemas.js.map +1 -0
  151. package/dist/tools/sdk/snippet.d.ts +11 -0
  152. package/dist/tools/sdk/snippet.d.ts.map +1 -0
  153. package/dist/tools/sdk/snippet.js +50 -0
  154. package/dist/tools/sdk/snippet.js.map +1 -0
  155. package/dist/tools/sdk/templates/index.d.ts +5 -0
  156. package/dist/tools/sdk/templates/index.d.ts.map +1 -0
  157. package/dist/tools/sdk/templates/index.js +5 -0
  158. package/dist/tools/sdk/templates/index.js.map +1 -0
  159. package/dist/tools/sdk/templates/nextjs.d.ts +5 -0
  160. package/dist/tools/sdk/templates/nextjs.d.ts.map +1 -0
  161. package/dist/tools/sdk/templates/nextjs.js +71 -0
  162. package/dist/tools/sdk/templates/nextjs.js.map +1 -0
  163. package/dist/tools/sdk/templates/node.d.ts +9 -0
  164. package/dist/tools/sdk/templates/node.d.ts.map +1 -0
  165. package/dist/tools/sdk/templates/node.js +170 -0
  166. package/dist/tools/sdk/templates/node.js.map +1 -0
  167. package/dist/tools/sdk/templates/react.d.ts +5 -0
  168. package/dist/tools/sdk/templates/react.d.ts.map +1 -0
  169. package/dist/tools/sdk/templates/react.js +54 -0
  170. package/dist/tools/sdk/templates/react.js.map +1 -0
  171. package/dist/tools/sdk/templates/vanilla.d.ts +5 -0
  172. package/dist/tools/sdk/templates/vanilla.d.ts.map +1 -0
  173. package/dist/tools/sdk/templates/vanilla.js +61 -0
  174. package/dist/tools/sdk/templates/vanilla.js.map +1 -0
  175. package/dist/tools/templates/create.d.ts +11 -0
  176. package/dist/tools/templates/create.d.ts.map +1 -0
  177. package/dist/tools/templates/create.js +39 -0
  178. package/dist/tools/templates/create.js.map +1 -0
  179. package/dist/tools/templates/index.d.ts +17 -0
  180. package/dist/tools/templates/index.d.ts.map +1 -0
  181. package/dist/tools/templates/index.js +68 -0
  182. package/dist/tools/templates/index.js.map +1 -0
  183. package/dist/tools/templates/list.d.ts +11 -0
  184. package/dist/tools/templates/list.d.ts.map +1 -0
  185. package/dist/tools/templates/list.js +31 -0
  186. package/dist/tools/templates/list.js.map +1 -0
  187. package/dist/tools/templates/schemas.d.ts +90 -0
  188. package/dist/tools/templates/schemas.d.ts.map +1 -0
  189. package/dist/tools/templates/schemas.js +37 -0
  190. package/dist/tools/templates/schemas.js.map +1 -0
  191. package/dist/types.d.ts +55 -0
  192. package/dist/types.d.ts.map +1 -0
  193. package/dist/types.js +2 -0
  194. package/dist/types.js.map +1 -0
  195. package/package.json +76 -0
@@ -0,0 +1,68 @@
1
+ import { createTemplateInputSchema, listTemplatesInputSchema } from './schemas.js';
2
+ import { createTemplateHandler } from './create.js';
3
+ import { listTemplatesHandler } from './list.js';
4
+ /**
5
+ * kelpi_create_template tool definition and handler
6
+ *
7
+ * Creates a new email template with variables support.
8
+ */
9
+ export const kelpiCreateTemplate = {
10
+ definition: {
11
+ name: 'kelpi_create_template',
12
+ description: `Create a new email template for use in flows.
13
+
14
+ Templates support:
15
+ - Handlebars-style variables: {{variable_name}}
16
+ - HTML content for rich email formatting
17
+ - Variable definitions with optional default values
18
+
19
+ Required fields:
20
+ - slug: Unique identifier (lowercase, hyphens only, e.g., "welcome-email")
21
+ - name: Display name for the template
22
+ - subject: Email subject line (can include variables)
23
+ - body_html: HTML content of the email
24
+
25
+ Example:
26
+ {
27
+ "slug": "welcome-email",
28
+ "name": "Welcome Email",
29
+ "subject": "Welcome to {{company_name}}!",
30
+ "body_html": "<h1>Welcome, {{first_name}}!</h1><p>Thanks for joining.</p>",
31
+ "variables": [
32
+ { "name": "first_name", "default_value": "there" },
33
+ { "name": "company_name" }
34
+ ]
35
+ }`,
36
+ inputSchema: createTemplateInputSchema,
37
+ },
38
+ handler: createTemplateHandler,
39
+ };
40
+ /**
41
+ * kelpi_list_templates tool definition and handler
42
+ *
43
+ * Lists all templates in the workspace.
44
+ */
45
+ export const kelpiListTemplates = {
46
+ definition: {
47
+ name: 'kelpi_list_templates',
48
+ description: `List all email templates in the workspace.
49
+
50
+ Returns a paginated list of templates with:
51
+ - ID and slug
52
+ - Name and subject
53
+ - Creation timestamp
54
+ - Variable definitions
55
+
56
+ Use pagination parameters for large template libraries:
57
+ - limit: Maximum number of templates to return (1-100)
58
+ - offset: Number of templates to skip`,
59
+ inputSchema: listTemplatesInputSchema,
60
+ },
61
+ handler: listTemplatesHandler,
62
+ };
63
+ // Re-export schemas
64
+ export * from './schemas.js';
65
+ // Re-export handler factories for testing
66
+ export { createCreateTemplateHandler } from './create.js';
67
+ export { createListTemplatesHandler } from './list.js';
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/templates/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAoB;IAClD,UAAU,EAAE;QACV,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;EAuBf;QACE,WAAW,EAAE,yBAAyB;KACvC;IACD,OAAO,EAAE,qBAAqB;CAC/B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,UAAU,EAAE;QACV,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE;;;;;;;;;;sCAUqB;QAClC,WAAW,EAAE,wBAAwB;KACtC;IACD,OAAO,EAAE,oBAAoB;CAC9B,CAAC;AAEF,oBAAoB;AACpB,cAAc,cAAc,CAAC;AAE7B,0CAA0C;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ToolHandler } from '../../lib/tool-registry.js';
2
+ /**
3
+ * Creates a list templates handler.
4
+ * This factory function allows for dependency injection in tests.
5
+ */
6
+ export declare function createListTemplatesHandler(): ToolHandler;
7
+ /**
8
+ * Default list templates handler
9
+ */
10
+ export declare const listTemplatesHandler: ToolHandler;
11
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/tools/templates/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,4BAA4B,CAAC;AAI1E;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,WAAW,CAwBxD;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,aAA+B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { withAuth, successResponse, handleApiError } from '../../lib/tool-helpers.js';
2
+ /**
3
+ * Creates a list templates handler.
4
+ * This factory function allows for dependency injection in tests.
5
+ */
6
+ export function createListTemplatesHandler() {
7
+ return async (input) => {
8
+ return withAuth('listing templates', async ({ client }) => {
9
+ // Build query parameters
10
+ const queryParams = {};
11
+ if (input.limit !== undefined && typeof input.limit === 'number') {
12
+ queryParams.limit = String(input.limit);
13
+ }
14
+ if (input.offset !== undefined && typeof input.offset === 'number') {
15
+ queryParams.offset = String(input.offset);
16
+ }
17
+ try {
18
+ const response = await client.get('/api/v1/templates', Object.keys(queryParams).length > 0 ? queryParams : undefined);
19
+ return successResponse(response.data);
20
+ }
21
+ catch (err) {
22
+ return handleApiError(err, 'list templates');
23
+ }
24
+ });
25
+ };
26
+ }
27
+ /**
28
+ * Default list templates handler
29
+ */
30
+ export const listTemplatesHandler = createListTemplatesHandler();
31
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/templates/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGtF;;;GAGG;AACH,MAAM,UAAU,0BAA0B;IACxC,OAAO,KAAK,EAAE,KAA8B,EAAuB,EAAE;QACnE,OAAO,QAAQ,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACxD,yBAAyB;YACzB,MAAM,WAAW,GAA2B,EAAE,CAAC;YAE/C,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACjE,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACnE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,mBAAmB,EACnB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAC9D,CAAC;gBACF,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,cAAc,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,EAAE,CAAC"}
@@ -0,0 +1,90 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Schema for kelpi_create_template input
4
+ */
5
+ export declare const createTemplateInputSchema: z.ZodObject<{
6
+ slug: z.ZodString;
7
+ name: z.ZodString;
8
+ subject: z.ZodString;
9
+ body_html: z.ZodString;
10
+ variables: z.ZodOptional<z.ZodArray<z.ZodObject<{
11
+ name: z.ZodString;
12
+ default_value: z.ZodOptional<z.ZodString>;
13
+ required: z.ZodOptional<z.ZodBoolean>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ name: string;
16
+ default_value?: string | undefined;
17
+ required?: boolean | undefined;
18
+ }, {
19
+ name: string;
20
+ default_value?: string | undefined;
21
+ required?: boolean | undefined;
22
+ }>, "many">>;
23
+ }, "strip", z.ZodTypeAny, {
24
+ name: string;
25
+ slug: string;
26
+ subject: string;
27
+ body_html: string;
28
+ variables?: {
29
+ name: string;
30
+ default_value?: string | undefined;
31
+ required?: boolean | undefined;
32
+ }[] | undefined;
33
+ }, {
34
+ name: string;
35
+ slug: string;
36
+ subject: string;
37
+ body_html: string;
38
+ variables?: {
39
+ name: string;
40
+ default_value?: string | undefined;
41
+ required?: boolean | undefined;
42
+ }[] | undefined;
43
+ }>;
44
+ /**
45
+ * Schema for kelpi_list_templates input
46
+ */
47
+ export declare const listTemplatesInputSchema: z.ZodObject<{
48
+ limit: z.ZodOptional<z.ZodNumber>;
49
+ offset: z.ZodOptional<z.ZodNumber>;
50
+ }, "strip", z.ZodTypeAny, {
51
+ limit?: number | undefined;
52
+ offset?: number | undefined;
53
+ }, {
54
+ limit?: number | undefined;
55
+ offset?: number | undefined;
56
+ }>;
57
+ /**
58
+ * Template response from API
59
+ */
60
+ export interface TemplateResponse {
61
+ id: string;
62
+ slug: string;
63
+ name: string;
64
+ subject: string;
65
+ body_html: string;
66
+ variables?: Array<{
67
+ name: string;
68
+ default_value?: string;
69
+ required?: boolean;
70
+ }>;
71
+ created_at: string;
72
+ }
73
+ /**
74
+ * List templates response from API
75
+ */
76
+ export interface ListTemplatesResponse {
77
+ data: TemplateResponse[];
78
+ pagination: {
79
+ total: number;
80
+ limit: number;
81
+ offset: number;
82
+ has_more: boolean;
83
+ };
84
+ }
85
+ /**
86
+ * Type exports
87
+ */
88
+ export type CreateTemplateInput = z.infer<typeof createTemplateInputSchema>;
89
+ export type ListTemplatesInput = z.infer<typeof listTemplatesInputSchema>;
90
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/tools/templates/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmBxB;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASpC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;EAGnC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Slug validation regex
4
+ * Must be lowercase letters, numbers, and hyphens only
5
+ * Cannot start or end with hyphen
6
+ * Cannot have consecutive hyphens
7
+ */
8
+ const SLUG_REGEX = /^[a-z0-9]+(-[a-z0-9]+)*$/;
9
+ /**
10
+ * Schema for template variable
11
+ */
12
+ const templateVariableSchema = z.object({
13
+ name: z.string().min(1),
14
+ default_value: z.string().optional(),
15
+ required: z.boolean().optional(),
16
+ });
17
+ /**
18
+ * Schema for kelpi_create_template input
19
+ */
20
+ export const createTemplateInputSchema = z.object({
21
+ slug: z
22
+ .string()
23
+ .min(1, 'Slug is required')
24
+ .regex(SLUG_REGEX, 'Slug must be lowercase with hyphens only (e.g., "welcome-email")'),
25
+ name: z.string().min(1, 'Name is required'),
26
+ subject: z.string().min(1, 'Subject is required'),
27
+ body_html: z.string().min(1, 'Body HTML is required'),
28
+ variables: z.array(templateVariableSchema).optional(),
29
+ });
30
+ /**
31
+ * Schema for kelpi_list_templates input
32
+ */
33
+ export const listTemplatesInputSchema = z.object({
34
+ limit: z.number().min(1).max(100).optional(),
35
+ offset: z.number().min(0).optional(),
36
+ });
37
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/tools/templates/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;SAC1B,KAAK,CAAC,UAAU,EAAE,kEAAkE,CAAC;IACxF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACrD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * MCP Configuration stored at ~/.kelpi/config.json
3
+ */
4
+ export interface KelpiConfig {
5
+ api_key?: string;
6
+ api_url?: string;
7
+ workspace_id?: string;
8
+ }
9
+ /**
10
+ * Authentication state for the MCP server
11
+ */
12
+ export interface AuthState {
13
+ authenticated: boolean;
14
+ workspace_id?: string;
15
+ workspace_name?: string;
16
+ key_type?: 'public' | 'secret';
17
+ }
18
+ /**
19
+ * Options for saving configuration
20
+ */
21
+ export interface SaveConfigOptions {
22
+ merge?: boolean;
23
+ }
24
+ /**
25
+ * API Client options
26
+ */
27
+ export interface ApiClientOptions {
28
+ apiKey: string;
29
+ apiUrl?: string;
30
+ timeout?: number;
31
+ maxRetries?: number;
32
+ retryDelay?: number;
33
+ }
34
+ /**
35
+ * API response structure
36
+ */
37
+ export interface ApiResponse<T = unknown> {
38
+ data: T;
39
+ status: number;
40
+ }
41
+ /**
42
+ * Validation error from API
43
+ */
44
+ export interface ValidationError {
45
+ field: string;
46
+ message: string;
47
+ }
48
+ /**
49
+ * Config validation result
50
+ */
51
+ export interface ConfigValidationResult {
52
+ valid: boolean;
53
+ errors: string[];
54
+ }
55
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@kelpi/mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Kelpi customer engagement automation. Enables AI assistants to manage email templates, automation flows, contacts, and events.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "kelpi-mcp": "./bin/kelpi-mcp"
10
+ },
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsc --watch",
14
+ "test": "vitest run",
15
+ "test:run": "vitest run",
16
+ "test:watch": "vitest",
17
+ "test:coverage": "vitest run --coverage",
18
+ "test:unit": "vitest run --exclude 'src/__tests__/integration*/**'",
19
+ "test:integration": "vitest run src/__tests__/integration --pool=forks",
20
+ "test:integration:api": "vitest run --config vitest.config.integration-api.ts --pool=forks",
21
+ "test:integration:api:watch": "vitest --config vitest.config.integration-api.ts --pool=forks",
22
+ "test:all": "pnpm test:run && pnpm test:integration:api",
23
+ "lint": "eslint src --ext .ts",
24
+ "clean": "rm -rf dist",
25
+ "prepublishOnly": "pnpm run build && pnpm run test"
26
+ },
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.0.0",
29
+ "zod": "^3.22.0",
30
+ "zod-to-json-schema": "^3.22.0"
31
+ },
32
+ "devDependencies": {
33
+ "@supabase/supabase-js": "^2.89.0",
34
+ "@types/node": "^22.0.0",
35
+ "@vitest/coverage-v8": "^3.0.0",
36
+ "dotenv": "^17.2.3",
37
+ "memfs": "^4.17.0",
38
+ "typescript": "^5.7.0",
39
+ "vitest": "^3.0.0"
40
+ },
41
+ "engines": {
42
+ "node": ">=18.0.0"
43
+ },
44
+ "files": [
45
+ "dist",
46
+ "bin",
47
+ "README.md"
48
+ ],
49
+ "keywords": [
50
+ "kelpi",
51
+ "mcp",
52
+ "model-context-protocol",
53
+ "customer-engagement",
54
+ "email-automation",
55
+ "marketing-automation",
56
+ "claude",
57
+ "ai-assistant",
58
+ "sdk",
59
+ "api"
60
+ ],
61
+ "license": "MIT",
62
+ "repository": {
63
+ "type": "git",
64
+ "url": "git+https://github.com/kelpi-ai/kelpi.git",
65
+ "directory": "packages/mcp"
66
+ },
67
+ "homepage": "https://github.com/kelpi-ai/kelpi/tree/main/packages/mcp#readme",
68
+ "bugs": {
69
+ "url": "https://github.com/kelpi-ai/kelpi/issues"
70
+ },
71
+ "author": "Kelpi AI <support@kelpi.io>",
72
+ "publishConfig": {
73
+ "access": "public",
74
+ "registry": "https://registry.npmjs.org/"
75
+ }
76
+ }