@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.
- package/README.md +312 -0
- package/bin/kelpi-mcp +3 -0
- package/dist/__tests__/integration-api/fixtures.d.ts +382 -0
- package/dist/__tests__/integration-api/fixtures.d.ts.map +1 -0
- package/dist/__tests__/integration-api/fixtures.js +478 -0
- package/dist/__tests__/integration-api/fixtures.js.map +1 -0
- package/dist/__tests__/integration-api/index.d.ts +19 -0
- package/dist/__tests__/integration-api/index.d.ts.map +1 -0
- package/dist/__tests__/integration-api/index.js +33 -0
- package/dist/__tests__/integration-api/index.js.map +1 -0
- package/dist/__tests__/integration-api/setup.d.ts +176 -0
- package/dist/__tests__/integration-api/setup.d.ts.map +1 -0
- package/dist/__tests__/integration-api/setup.js +329 -0
- package/dist/__tests__/integration-api/setup.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +11 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/unit/test-utils.d.ts +46 -0
- package/dist/__tests__/unit/test-utils.d.ts.map +1 -0
- package/dist/__tests__/unit/test-utils.js +50 -0
- package/dist/__tests__/unit/test-utils.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +17 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +169 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth-state.d.ts +54 -0
- package/dist/lib/auth-state.d.ts.map +1 -0
- package/dist/lib/auth-state.js +131 -0
- package/dist/lib/auth-state.js.map +1 -0
- package/dist/lib/config.d.ts +39 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +170 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/error-formatter.d.ts +40 -0
- package/dist/lib/error-formatter.d.ts.map +1 -0
- package/dist/lib/error-formatter.js +149 -0
- package/dist/lib/error-formatter.js.map +1 -0
- package/dist/lib/errors.d.ts +44 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +56 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/tool-helpers.d.ts +49 -0
- package/dist/lib/tool-helpers.d.ts.map +1 -0
- package/dist/lib/tool-helpers.js +101 -0
- package/dist/lib/tool-helpers.js.map +1 -0
- package/dist/lib/tool-registry.d.ts +111 -0
- package/dist/lib/tool-registry.d.ts.map +1 -0
- package/dist/lib/tool-registry.js +112 -0
- package/dist/lib/tool-registry.js.map +1 -0
- package/dist/lib/version.d.ts +13 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +13 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/prompts/flow-generator.d.ts +45 -0
- package/dist/prompts/flow-generator.d.ts.map +1 -0
- package/dist/prompts/flow-generator.js +177 -0
- package/dist/prompts/flow-generator.js.map +1 -0
- package/dist/prompts/index.d.ts +7 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/server.d.ts +66 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +140 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/auth/index.d.ts +18 -0
- package/dist/tools/auth/index.d.ts.map +1 -0
- package/dist/tools/auth/index.js +50 -0
- package/dist/tools/auth/index.js.map +1 -0
- package/dist/tools/auth/login.d.ts +37 -0
- package/dist/tools/auth/login.d.ts.map +1 -0
- package/dist/tools/auth/login.js +257 -0
- package/dist/tools/auth/login.js.map +1 -0
- package/dist/tools/auth/schemas.d.ts +69 -0
- package/dist/tools/auth/schemas.d.ts.map +1 -0
- package/dist/tools/auth/schemas.js +36 -0
- package/dist/tools/auth/schemas.js.map +1 -0
- package/dist/tools/auth/status.d.ts +11 -0
- package/dist/tools/auth/status.d.ts.map +1 -0
- package/dist/tools/auth/status.js +50 -0
- package/dist/tools/auth/status.js.map +1 -0
- package/dist/tools/contacts/create.d.ts +11 -0
- package/dist/tools/contacts/create.d.ts.map +1 -0
- package/dist/tools/contacts/create.js +47 -0
- package/dist/tools/contacts/create.js.map +1 -0
- package/dist/tools/contacts/index.d.ts +10 -0
- package/dist/tools/contacts/index.d.ts.map +1 -0
- package/dist/tools/contacts/index.js +40 -0
- package/dist/tools/contacts/index.js.map +1 -0
- package/dist/tools/contacts/schemas.d.ts +37 -0
- package/dist/tools/contacts/schemas.d.ts.map +1 -0
- package/dist/tools/contacts/schemas.js +15 -0
- package/dist/tools/contacts/schemas.js.map +1 -0
- package/dist/tools/events/index.d.ts +10 -0
- package/dist/tools/events/index.d.ts.map +1 -0
- package/dist/tools/events/index.js +42 -0
- package/dist/tools/events/index.js.map +1 -0
- package/dist/tools/events/schemas.d.ts +37 -0
- package/dist/tools/events/schemas.d.ts.map +1 -0
- package/dist/tools/events/schemas.js +17 -0
- package/dist/tools/events/schemas.js.map +1 -0
- package/dist/tools/events/track.d.ts +11 -0
- package/dist/tools/events/track.d.ts.map +1 -0
- package/dist/tools/events/track.js +41 -0
- package/dist/tools/events/track.js.map +1 -0
- package/dist/tools/flows/activate.d.ts +11 -0
- package/dist/tools/flows/activate.d.ts.map +1 -0
- package/dist/tools/flows/activate.js +46 -0
- package/dist/tools/flows/activate.js.map +1 -0
- package/dist/tools/flows/create.d.ts +11 -0
- package/dist/tools/flows/create.d.ts.map +1 -0
- package/dist/tools/flows/create.js +72 -0
- package/dist/tools/flows/create.js.map +1 -0
- package/dist/tools/flows/index.d.ts +24 -0
- package/dist/tools/flows/index.d.ts.map +1 -0
- package/dist/tools/flows/index.js +183 -0
- package/dist/tools/flows/index.js.map +1 -0
- package/dist/tools/flows/list.d.ts +11 -0
- package/dist/tools/flows/list.d.ts.map +1 -0
- package/dist/tools/flows/list.js +34 -0
- package/dist/tools/flows/list.js.map +1 -0
- package/dist/tools/flows/schemas.d.ts +621 -0
- package/dist/tools/flows/schemas.d.ts.map +1 -0
- package/dist/tools/flows/schemas.js +135 -0
- package/dist/tools/flows/schemas.js.map +1 -0
- package/dist/tools/flows/transform.d.ts +39 -0
- package/dist/tools/flows/transform.d.ts.map +1 -0
- package/dist/tools/flows/transform.js +139 -0
- package/dist/tools/flows/transform.js.map +1 -0
- package/dist/tools/index.d.ts +34 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +46 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/sdk/index.d.ts +18 -0
- package/dist/tools/sdk/index.d.ts.map +1 -0
- package/dist/tools/sdk/index.js +69 -0
- package/dist/tools/sdk/index.js.map +1 -0
- package/dist/tools/sdk/public-key.d.ts +11 -0
- package/dist/tools/sdk/public-key.d.ts.map +1 -0
- package/dist/tools/sdk/public-key.js +24 -0
- package/dist/tools/sdk/public-key.js.map +1 -0
- package/dist/tools/sdk/schemas.d.ts +48 -0
- package/dist/tools/sdk/schemas.d.ts.map +1 -0
- package/dist/tools/sdk/schemas.js +35 -0
- package/dist/tools/sdk/schemas.js.map +1 -0
- package/dist/tools/sdk/snippet.d.ts +11 -0
- package/dist/tools/sdk/snippet.d.ts.map +1 -0
- package/dist/tools/sdk/snippet.js +50 -0
- package/dist/tools/sdk/snippet.js.map +1 -0
- package/dist/tools/sdk/templates/index.d.ts +5 -0
- package/dist/tools/sdk/templates/index.d.ts.map +1 -0
- package/dist/tools/sdk/templates/index.js +5 -0
- package/dist/tools/sdk/templates/index.js.map +1 -0
- package/dist/tools/sdk/templates/nextjs.d.ts +5 -0
- package/dist/tools/sdk/templates/nextjs.d.ts.map +1 -0
- package/dist/tools/sdk/templates/nextjs.js +71 -0
- package/dist/tools/sdk/templates/nextjs.js.map +1 -0
- package/dist/tools/sdk/templates/node.d.ts +9 -0
- package/dist/tools/sdk/templates/node.d.ts.map +1 -0
- package/dist/tools/sdk/templates/node.js +170 -0
- package/dist/tools/sdk/templates/node.js.map +1 -0
- package/dist/tools/sdk/templates/react.d.ts +5 -0
- package/dist/tools/sdk/templates/react.d.ts.map +1 -0
- package/dist/tools/sdk/templates/react.js +54 -0
- package/dist/tools/sdk/templates/react.js.map +1 -0
- package/dist/tools/sdk/templates/vanilla.d.ts +5 -0
- package/dist/tools/sdk/templates/vanilla.d.ts.map +1 -0
- package/dist/tools/sdk/templates/vanilla.js +61 -0
- package/dist/tools/sdk/templates/vanilla.js.map +1 -0
- package/dist/tools/templates/create.d.ts +11 -0
- package/dist/tools/templates/create.d.ts.map +1 -0
- package/dist/tools/templates/create.js +39 -0
- package/dist/tools/templates/create.js.map +1 -0
- package/dist/tools/templates/index.d.ts +17 -0
- package/dist/tools/templates/index.d.ts.map +1 -0
- package/dist/tools/templates/index.js +68 -0
- package/dist/tools/templates/index.js.map +1 -0
- package/dist/tools/templates/list.d.ts +11 -0
- package/dist/tools/templates/list.d.ts.map +1 -0
- package/dist/tools/templates/list.js +31 -0
- package/dist/tools/templates/list.js.map +1 -0
- package/dist/tools/templates/schemas.d.ts +90 -0
- package/dist/tools/templates/schemas.d.ts.map +1 -0
- package/dist/tools/templates/schemas.js +37 -0
- package/dist/tools/templates/schemas.js.map +1 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|