@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,112 @@
|
|
|
1
|
+
import { zodToJsonSchema } from 'zod-to-json-schema';
|
|
2
|
+
/**
|
|
3
|
+
* Custom error class for tool registry operations
|
|
4
|
+
*/
|
|
5
|
+
export class ToolRegistryError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
constructor(message, code) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'ToolRegistryError';
|
|
10
|
+
this.code = code;
|
|
11
|
+
// Maintains proper stack trace for where our error was thrown (only available on V8)
|
|
12
|
+
if (Error.captureStackTrace) {
|
|
13
|
+
Error.captureStackTrace(this, ToolRegistryError);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Registry for managing MCP tools with Zod validation
|
|
19
|
+
*/
|
|
20
|
+
export class ToolRegistry {
|
|
21
|
+
tools = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* Register a tool with its definition and handler
|
|
24
|
+
*/
|
|
25
|
+
register(definition, handler) {
|
|
26
|
+
if (this.tools.has(definition.name)) {
|
|
27
|
+
throw new ToolRegistryError(`Tool already registered: ${definition.name}`, 'DUPLICATE_TOOL');
|
|
28
|
+
}
|
|
29
|
+
this.tools.set(definition.name, { definition, handler });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get a registered tool by name
|
|
33
|
+
*/
|
|
34
|
+
get(name) {
|
|
35
|
+
return this.tools.get(name);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* List all registered tools in MCP-compatible format
|
|
39
|
+
*/
|
|
40
|
+
list() {
|
|
41
|
+
return Array.from(this.tools.values()).map(({ definition }) => {
|
|
42
|
+
// Convert Zod schema to JSON Schema
|
|
43
|
+
// Use jsonSchema7 target which produces JSON Schema draft-07 format
|
|
44
|
+
// This is compatible with JSON Schema draft 2020-12 that Claude expects
|
|
45
|
+
// Note: 'openApi3' produces boolean exclusiveMinimum/exclusiveMaximum which is invalid
|
|
46
|
+
const jsonSchema = zodToJsonSchema(definition.inputSchema, {
|
|
47
|
+
$refStrategy: 'none',
|
|
48
|
+
target: 'jsonSchema7',
|
|
49
|
+
});
|
|
50
|
+
// Extract just the schema properties we need
|
|
51
|
+
const schemaObj = jsonSchema;
|
|
52
|
+
return {
|
|
53
|
+
name: definition.name,
|
|
54
|
+
description: definition.description,
|
|
55
|
+
inputSchema: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
properties: schemaObj.properties || {},
|
|
58
|
+
...(schemaObj.required && { required: schemaObj.required }),
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate input against a tool's schema
|
|
65
|
+
*/
|
|
66
|
+
validateInput(toolName, input) {
|
|
67
|
+
const tool = this.tools.get(toolName);
|
|
68
|
+
if (!tool) {
|
|
69
|
+
throw new ToolRegistryError(`Tool not found: ${toolName}`, 'TOOL_NOT_FOUND');
|
|
70
|
+
}
|
|
71
|
+
const result = tool.definition.inputSchema.safeParse(input);
|
|
72
|
+
if (result.success) {
|
|
73
|
+
return { success: true, data: result.data };
|
|
74
|
+
}
|
|
75
|
+
return { success: false, error: result.error };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute a tool with validated input
|
|
79
|
+
*/
|
|
80
|
+
async execute(toolName, input) {
|
|
81
|
+
const tool = this.tools.get(toolName);
|
|
82
|
+
if (!tool) {
|
|
83
|
+
throw new ToolRegistryError(`Tool not found: ${toolName}`, 'TOOL_NOT_FOUND');
|
|
84
|
+
}
|
|
85
|
+
// Validate input
|
|
86
|
+
const validation = this.validateInput(toolName, input);
|
|
87
|
+
if (!validation.success) {
|
|
88
|
+
throw new ToolRegistryError(`Invalid input for tool ${toolName}: ${validation.error.message}`, 'INVALID_INPUT');
|
|
89
|
+
}
|
|
90
|
+
// Execute handler with validated input
|
|
91
|
+
return tool.handler(validation.data);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if a tool is registered
|
|
95
|
+
*/
|
|
96
|
+
has(name) {
|
|
97
|
+
return this.tools.has(name);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get the number of registered tools
|
|
101
|
+
*/
|
|
102
|
+
get size() {
|
|
103
|
+
return this.tools.size;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Clear all registered tools
|
|
107
|
+
*/
|
|
108
|
+
clear() {
|
|
109
|
+
this.tools.clear();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=tool-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/lib/tool-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared version constant for the MCP package.
|
|
3
|
+
*
|
|
4
|
+
* This constant is used in User-Agent headers across the package.
|
|
5
|
+
* Update this when releasing a new version to ensure consistent
|
|
6
|
+
* version reporting in API requests.
|
|
7
|
+
*
|
|
8
|
+
* Note: Reading from package.json at runtime is intentionally avoided
|
|
9
|
+
* to prevent file system dependencies that could cause issues in
|
|
10
|
+
* bundled environments.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MCP_VERSION = "0.1.0";
|
|
13
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,UAAU,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared version constant for the MCP package.
|
|
3
|
+
*
|
|
4
|
+
* This constant is used in User-Agent headers across the package.
|
|
5
|
+
* Update this when releasing a new version to ensure consistent
|
|
6
|
+
* version reporting in API requests.
|
|
7
|
+
*
|
|
8
|
+
* Note: Reading from package.json at runtime is intentionally avoided
|
|
9
|
+
* to prevent file system dependencies that could cause issues in
|
|
10
|
+
* bundled environments.
|
|
11
|
+
*/
|
|
12
|
+
export const MCP_VERSION = '0.1.0';
|
|
13
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow Generator Prompt
|
|
3
|
+
*
|
|
4
|
+
* A system prompt that helps users create automation flows conversationally.
|
|
5
|
+
* This can be used to guide AI assistants in creating well-structured flows.
|
|
6
|
+
*/
|
|
7
|
+
export declare const FLOW_GENERATOR_SYSTEM_PROMPT = "You are a Kelpi Flow Generator assistant. Your role is to help users create automation flows for customer engagement.\n\n## Understanding Flows\n\nA Kelpi flow is an automated sequence of actions triggered by an event. Flows consist of:\n\n1. **Trigger**: What starts the flow\n - event: Triggered by a specific event (e.g., \"user.signup\", \"purchase.completed\")\n - segment: Triggered when a contact enters a segment\n - manual: Triggered manually via API\n\n2. **Steps**: Actions to perform in sequence\n - delay: Wait for a specified time before continuing\n - email: Send an email using a template\n - condition: Branch based on contact properties\n - webhook: Call an external API\n\n## Flow Definition Structure\n\n{\n \"name\": \"Flow Name\",\n \"trigger_type\": \"event\",\n \"trigger_event\": \"user.signup\",\n \"steps\": [\n {\n \"step_order\": 0,\n \"action_type\": \"delay\",\n \"delay_seconds\": 3600\n },\n {\n \"step_order\": 1,\n \"action_type\": \"email\",\n \"template_id\": \"template-uuid\"\n }\n ]\n}\n\n## Common Patterns\n\n### Welcome Series\n- Trigger: user.signup\n- Step 1: Immediate welcome email\n- Step 2: 24-hour delay\n- Step 3: Getting started email\n- Step 4: 3-day delay\n- Step 5: Feature highlight email\n\n### Abandoned Cart\n- Trigger: cart.abandoned\n- Step 1: 1-hour delay\n- Step 2: Reminder email\n- Step 3: 24-hour delay\n- Step 4: Discount offer email\n\n### Re-engagement\n- Trigger: segment (inactive users)\n- Step 1: \"We miss you\" email\n- Step 2: 3-day delay\n- Step 3: Special offer email\n\n## Guidelines\n\n1. Ask clarifying questions to understand the user's goals\n2. Suggest best practices for email timing\n3. Create templates first if needed using kelpi_create_template\n4. Validate before creating and confirm with user\n\n## Time Conversion Reference\n\nCommon delays in seconds:\n- 1 hour = 3600 seconds\n- 24 hours = 86400 seconds\n- 3 days = 259200 seconds\n- 7 days = 604800 seconds\n- 30 days = 2592000 seconds\n";
|
|
8
|
+
/**
|
|
9
|
+
* Template suggestions for common use cases
|
|
10
|
+
*/
|
|
11
|
+
export declare const TEMPLATE_SUGGESTIONS: {
|
|
12
|
+
readonly welcome: {
|
|
13
|
+
readonly slug: "welcome-email";
|
|
14
|
+
readonly name: "Welcome Email";
|
|
15
|
+
readonly subject: "Welcome to {{company_name}}!";
|
|
16
|
+
readonly body_html: "<h1>Welcome, {{name}}!</h1>\n<p>We're thrilled to have you join us.</p>\n<p>Here's what you can do next:</p>\n<ul>\n <li>Complete your profile</li>\n <li>Explore our features</li>\n <li>Join our community</li>\n</ul>\n<p>Best regards,<br>The {{company_name}} Team</p>";
|
|
17
|
+
};
|
|
18
|
+
readonly gettingStarted: {
|
|
19
|
+
readonly slug: "getting-started-email";
|
|
20
|
+
readonly name: "Getting Started Guide";
|
|
21
|
+
readonly subject: "Getting started with {{company_name}}";
|
|
22
|
+
readonly body_html: "<h1>Let's get you started, {{name}}</h1>\n<p>Here are some tips to help you get the most out of {{company_name}}:</p>\n<ol>\n <li><strong>Set up your workspace</strong> - Customize your settings</li>\n <li><strong>Invite your team</strong> - Collaborate with others</li>\n <li><strong>Try key features</strong> - Explore what we offer</li>\n</ol>\n<p>Need help? <a href=\"{{support_url}}\">Contact our support team</a></p>";
|
|
23
|
+
};
|
|
24
|
+
readonly abandoned: {
|
|
25
|
+
readonly slug: "cart-reminder-email";
|
|
26
|
+
readonly name: "Cart Reminder";
|
|
27
|
+
readonly subject: "You left something behind!";
|
|
28
|
+
readonly body_html: "<h1>Hi {{name}},</h1>\n<p>Looks like you left some items in your cart.</p>\n<p>Don't worry, we saved them for you!</p>\n<p><a href=\"{{cart_url}}\">Complete your purchase</a></p>\n<p>Questions? Reply to this email and we'll help.</p>";
|
|
29
|
+
};
|
|
30
|
+
readonly reengagement: {
|
|
31
|
+
readonly slug: "we-miss-you-email";
|
|
32
|
+
readonly name: "Re-engagement Email";
|
|
33
|
+
readonly subject: "We miss you, {{name}}!";
|
|
34
|
+
readonly body_html: "<h1>It's been a while!</h1>\n<p>Hi {{name}},</p>\n<p>We noticed you haven't logged in recently. Here's what's new:</p>\n<ul>\n <li>New features you might love</li>\n <li>Improvements based on feedback</li>\n <li>Special offer just for you</li>\n</ul>\n<p><a href=\"{{login_url}}\">Come back and explore</a></p>";
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Get a template suggestion by use case
|
|
39
|
+
*/
|
|
40
|
+
export declare function getTemplateSuggestion(useCase: keyof typeof TEMPLATE_SUGGESTIONS): (typeof TEMPLATE_SUGGESTIONS)[typeof useCase];
|
|
41
|
+
/**
|
|
42
|
+
* Convert human-readable duration to seconds
|
|
43
|
+
*/
|
|
44
|
+
export declare function durationToSeconds(duration: string): number;
|
|
45
|
+
//# sourceMappingURL=flow-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-generator.d.ts","sourceRoot":"","sources":["../../src/prompts/flow-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,4BAA4B,igEA2ExC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;CAoDvB,CAAC;AAEX;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,OAAO,oBAAoB,GACzC,CAAC,OAAO,oBAAoB,CAAC,CAAC,OAAO,OAAO,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8B1D"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow Generator Prompt
|
|
3
|
+
*
|
|
4
|
+
* A system prompt that helps users create automation flows conversationally.
|
|
5
|
+
* This can be used to guide AI assistants in creating well-structured flows.
|
|
6
|
+
*/
|
|
7
|
+
export const FLOW_GENERATOR_SYSTEM_PROMPT = `You are a Kelpi Flow Generator assistant. Your role is to help users create automation flows for customer engagement.
|
|
8
|
+
|
|
9
|
+
## Understanding Flows
|
|
10
|
+
|
|
11
|
+
A Kelpi flow is an automated sequence of actions triggered by an event. Flows consist of:
|
|
12
|
+
|
|
13
|
+
1. **Trigger**: What starts the flow
|
|
14
|
+
- event: Triggered by a specific event (e.g., "user.signup", "purchase.completed")
|
|
15
|
+
- segment: Triggered when a contact enters a segment
|
|
16
|
+
- manual: Triggered manually via API
|
|
17
|
+
|
|
18
|
+
2. **Steps**: Actions to perform in sequence
|
|
19
|
+
- delay: Wait for a specified time before continuing
|
|
20
|
+
- email: Send an email using a template
|
|
21
|
+
- condition: Branch based on contact properties
|
|
22
|
+
- webhook: Call an external API
|
|
23
|
+
|
|
24
|
+
## Flow Definition Structure
|
|
25
|
+
|
|
26
|
+
{
|
|
27
|
+
"name": "Flow Name",
|
|
28
|
+
"trigger_type": "event",
|
|
29
|
+
"trigger_event": "user.signup",
|
|
30
|
+
"steps": [
|
|
31
|
+
{
|
|
32
|
+
"step_order": 0,
|
|
33
|
+
"action_type": "delay",
|
|
34
|
+
"delay_seconds": 3600
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"step_order": 1,
|
|
38
|
+
"action_type": "email",
|
|
39
|
+
"template_id": "template-uuid"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
## Common Patterns
|
|
45
|
+
|
|
46
|
+
### Welcome Series
|
|
47
|
+
- Trigger: user.signup
|
|
48
|
+
- Step 1: Immediate welcome email
|
|
49
|
+
- Step 2: 24-hour delay
|
|
50
|
+
- Step 3: Getting started email
|
|
51
|
+
- Step 4: 3-day delay
|
|
52
|
+
- Step 5: Feature highlight email
|
|
53
|
+
|
|
54
|
+
### Abandoned Cart
|
|
55
|
+
- Trigger: cart.abandoned
|
|
56
|
+
- Step 1: 1-hour delay
|
|
57
|
+
- Step 2: Reminder email
|
|
58
|
+
- Step 3: 24-hour delay
|
|
59
|
+
- Step 4: Discount offer email
|
|
60
|
+
|
|
61
|
+
### Re-engagement
|
|
62
|
+
- Trigger: segment (inactive users)
|
|
63
|
+
- Step 1: "We miss you" email
|
|
64
|
+
- Step 2: 3-day delay
|
|
65
|
+
- Step 3: Special offer email
|
|
66
|
+
|
|
67
|
+
## Guidelines
|
|
68
|
+
|
|
69
|
+
1. Ask clarifying questions to understand the user's goals
|
|
70
|
+
2. Suggest best practices for email timing
|
|
71
|
+
3. Create templates first if needed using kelpi_create_template
|
|
72
|
+
4. Validate before creating and confirm with user
|
|
73
|
+
|
|
74
|
+
## Time Conversion Reference
|
|
75
|
+
|
|
76
|
+
Common delays in seconds:
|
|
77
|
+
- 1 hour = 3600 seconds
|
|
78
|
+
- 24 hours = 86400 seconds
|
|
79
|
+
- 3 days = 259200 seconds
|
|
80
|
+
- 7 days = 604800 seconds
|
|
81
|
+
- 30 days = 2592000 seconds
|
|
82
|
+
`;
|
|
83
|
+
/**
|
|
84
|
+
* Template suggestions for common use cases
|
|
85
|
+
*/
|
|
86
|
+
export const TEMPLATE_SUGGESTIONS = {
|
|
87
|
+
welcome: {
|
|
88
|
+
slug: 'welcome-email',
|
|
89
|
+
name: 'Welcome Email',
|
|
90
|
+
subject: 'Welcome to {{company_name}}!',
|
|
91
|
+
body_html: `<h1>Welcome, {{name}}!</h1>
|
|
92
|
+
<p>We're thrilled to have you join us.</p>
|
|
93
|
+
<p>Here's what you can do next:</p>
|
|
94
|
+
<ul>
|
|
95
|
+
<li>Complete your profile</li>
|
|
96
|
+
<li>Explore our features</li>
|
|
97
|
+
<li>Join our community</li>
|
|
98
|
+
</ul>
|
|
99
|
+
<p>Best regards,<br>The {{company_name}} Team</p>`,
|
|
100
|
+
},
|
|
101
|
+
gettingStarted: {
|
|
102
|
+
slug: 'getting-started-email',
|
|
103
|
+
name: 'Getting Started Guide',
|
|
104
|
+
subject: 'Getting started with {{company_name}}',
|
|
105
|
+
body_html: `<h1>Let's get you started, {{name}}</h1>
|
|
106
|
+
<p>Here are some tips to help you get the most out of {{company_name}}:</p>
|
|
107
|
+
<ol>
|
|
108
|
+
<li><strong>Set up your workspace</strong> - Customize your settings</li>
|
|
109
|
+
<li><strong>Invite your team</strong> - Collaborate with others</li>
|
|
110
|
+
<li><strong>Try key features</strong> - Explore what we offer</li>
|
|
111
|
+
</ol>
|
|
112
|
+
<p>Need help? <a href="{{support_url}}">Contact our support team</a></p>`,
|
|
113
|
+
},
|
|
114
|
+
abandoned: {
|
|
115
|
+
slug: 'cart-reminder-email',
|
|
116
|
+
name: 'Cart Reminder',
|
|
117
|
+
subject: 'You left something behind!',
|
|
118
|
+
body_html: `<h1>Hi {{name}},</h1>
|
|
119
|
+
<p>Looks like you left some items in your cart.</p>
|
|
120
|
+
<p>Don't worry, we saved them for you!</p>
|
|
121
|
+
<p><a href="{{cart_url}}">Complete your purchase</a></p>
|
|
122
|
+
<p>Questions? Reply to this email and we'll help.</p>`,
|
|
123
|
+
},
|
|
124
|
+
reengagement: {
|
|
125
|
+
slug: 'we-miss-you-email',
|
|
126
|
+
name: 'Re-engagement Email',
|
|
127
|
+
subject: 'We miss you, {{name}}!',
|
|
128
|
+
body_html: `<h1>It's been a while!</h1>
|
|
129
|
+
<p>Hi {{name}},</p>
|
|
130
|
+
<p>We noticed you haven't logged in recently. Here's what's new:</p>
|
|
131
|
+
<ul>
|
|
132
|
+
<li>New features you might love</li>
|
|
133
|
+
<li>Improvements based on feedback</li>
|
|
134
|
+
<li>Special offer just for you</li>
|
|
135
|
+
</ul>
|
|
136
|
+
<p><a href="{{login_url}}">Come back and explore</a></p>`,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Get a template suggestion by use case
|
|
141
|
+
*/
|
|
142
|
+
export function getTemplateSuggestion(useCase) {
|
|
143
|
+
return TEMPLATE_SUGGESTIONS[useCase];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Convert human-readable duration to seconds
|
|
147
|
+
*/
|
|
148
|
+
export function durationToSeconds(duration) {
|
|
149
|
+
const match = duration.match(/^(\d+)\s*(h|hour|hours|d|day|days|m|min|minute|minutes|w|week|weeks)$/i);
|
|
150
|
+
if (!match) {
|
|
151
|
+
throw new Error(`Invalid duration format: ${duration}. Use format like "1h", "24 hours", "3 days", "1 week"`);
|
|
152
|
+
}
|
|
153
|
+
const value = parseInt(match[1], 10);
|
|
154
|
+
const unit = match[2].toLowerCase();
|
|
155
|
+
switch (unit) {
|
|
156
|
+
case 'm':
|
|
157
|
+
case 'min':
|
|
158
|
+
case 'minute':
|
|
159
|
+
case 'minutes':
|
|
160
|
+
return value * 60;
|
|
161
|
+
case 'h':
|
|
162
|
+
case 'hour':
|
|
163
|
+
case 'hours':
|
|
164
|
+
return value * 3600;
|
|
165
|
+
case 'd':
|
|
166
|
+
case 'day':
|
|
167
|
+
case 'days':
|
|
168
|
+
return value * 86400;
|
|
169
|
+
case 'w':
|
|
170
|
+
case 'week':
|
|
171
|
+
case 'weeks':
|
|
172
|
+
return value * 604800;
|
|
173
|
+
default:
|
|
174
|
+
throw new Error(`Unknown time unit: ${unit}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=flow-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-generator.js","sourceRoot":"","sources":["../../src/prompts/flow-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,4BAA4B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E3C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE;QACP,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,8BAA8B;QACvC,SAAS,EAAE;;;;;;;;kDAQmC;KAC/C;IACD,cAAc,EAAE;QACd,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,uCAAuC;QAChD,SAAS,EAAE;;;;;;;yEAO0D;KACtE;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,4BAA4B;QACrC,SAAS,EAAE;;;;sDAIuC;KACnD;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,wBAAwB;QACjC,SAAS,EAAE;;;;;;;;yDAQ0C;KACtD;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA0C;IAE1C,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IACvG,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,wDAAwD,CAAC,CAAC;IAChH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG,CAAC;QACT,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,KAAK,GAAG,CAAC;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,GAAG,IAAI,CAAC;QACtB,KAAK,GAAG,CAAC;QACT,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,KAAK,GAAG,KAAK,CAAC;QACvB,KAAK,GAAG,CAAC;QACT,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,GAAG,MAAM,CAAC;QACxB;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompts module
|
|
3
|
+
*
|
|
4
|
+
* Exports system prompts and utilities for AI-assisted flow creation
|
|
5
|
+
*/
|
|
6
|
+
export { FLOW_GENERATOR_SYSTEM_PROMPT, TEMPLATE_SUGGESTIONS, getTemplateSuggestion, durationToSeconds, } from './flow-generator.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompts module
|
|
3
|
+
*
|
|
4
|
+
* Exports system prompts and utilities for AI-assisted flow creation
|
|
5
|
+
*/
|
|
6
|
+
export { FLOW_GENERATOR_SYSTEM_PROMPT, TEMPLATE_SUGGESTIONS, getTemplateSuggestion, durationToSeconds, } from './flow-generator.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type McpTool, type ToolResult } from './lib/tool-registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Server configuration options
|
|
4
|
+
*/
|
|
5
|
+
export interface ServerOptions {
|
|
6
|
+
name?: string;
|
|
7
|
+
version?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Server capabilities returned during initialization
|
|
11
|
+
*/
|
|
12
|
+
export interface ServerCapabilities {
|
|
13
|
+
tools: Record<string, never>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Kelpi MCP Server
|
|
17
|
+
*
|
|
18
|
+
* Provides MCP-compatible tools for managing Kelpi customer engagement automation
|
|
19
|
+
*/
|
|
20
|
+
export declare class KelpiMcpServer {
|
|
21
|
+
private readonly name;
|
|
22
|
+
private readonly version;
|
|
23
|
+
private readonly registry;
|
|
24
|
+
private server;
|
|
25
|
+
private transport;
|
|
26
|
+
private isShuttingDown;
|
|
27
|
+
constructor(options?: ServerOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Register all Kelpi tools with the registry
|
|
30
|
+
*/
|
|
31
|
+
private registerTools;
|
|
32
|
+
/**
|
|
33
|
+
* Get the server name
|
|
34
|
+
*/
|
|
35
|
+
getName(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get the server version
|
|
38
|
+
*/
|
|
39
|
+
getVersion(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Get server capabilities for MCP initialization
|
|
42
|
+
*/
|
|
43
|
+
getCapabilities(): ServerCapabilities;
|
|
44
|
+
/**
|
|
45
|
+
* List all available tools in MCP format
|
|
46
|
+
*/
|
|
47
|
+
listTools(): McpTool[];
|
|
48
|
+
/**
|
|
49
|
+
* Call a tool by name with given arguments
|
|
50
|
+
*/
|
|
51
|
+
callTool(name: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Start the MCP server with stdio transport
|
|
54
|
+
*/
|
|
55
|
+
start(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Gracefully shutdown the server
|
|
58
|
+
*/
|
|
59
|
+
shutdown(): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create and export a default server instance factory
|
|
63
|
+
*/
|
|
64
|
+
export declare function createServer(options?: ServerOptions): KelpiMcpServer;
|
|
65
|
+
export { TOOL_DEFINITIONS } from './tools/index.js';
|
|
66
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGrF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,GAAE,aAAkB;IASvC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,eAAe,IAAI,kBAAkB;IAMrC;;OAEG;IACH,SAAS,IAAI,OAAO,EAAE;IAItB;;OAEG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,UAAU,CAAC;IAQtB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+C5B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBhC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAEpE;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { ToolRegistry } from './lib/tool-registry.js';
|
|
5
|
+
import { ALL_TOOLS } from './tools/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Kelpi MCP Server
|
|
8
|
+
*
|
|
9
|
+
* Provides MCP-compatible tools for managing Kelpi customer engagement automation
|
|
10
|
+
*/
|
|
11
|
+
export class KelpiMcpServer {
|
|
12
|
+
name;
|
|
13
|
+
version;
|
|
14
|
+
registry;
|
|
15
|
+
server = null;
|
|
16
|
+
transport = null;
|
|
17
|
+
isShuttingDown = false;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.name = options.name ?? 'kelpi-mcp';
|
|
20
|
+
this.version = options.version ?? '0.1.0';
|
|
21
|
+
this.registry = new ToolRegistry();
|
|
22
|
+
// Register all tools
|
|
23
|
+
this.registerTools();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Register all Kelpi tools with the registry
|
|
27
|
+
*/
|
|
28
|
+
registerTools() {
|
|
29
|
+
for (const tool of ALL_TOOLS) {
|
|
30
|
+
this.registry.register(tool.definition, tool.handler);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the server name
|
|
35
|
+
*/
|
|
36
|
+
getName() {
|
|
37
|
+
return this.name;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get the server version
|
|
41
|
+
*/
|
|
42
|
+
getVersion() {
|
|
43
|
+
return this.version;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get server capabilities for MCP initialization
|
|
47
|
+
*/
|
|
48
|
+
getCapabilities() {
|
|
49
|
+
return {
|
|
50
|
+
tools: {},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* List all available tools in MCP format
|
|
55
|
+
*/
|
|
56
|
+
listTools() {
|
|
57
|
+
return this.registry.list();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Call a tool by name with given arguments
|
|
61
|
+
*/
|
|
62
|
+
async callTool(name, args) {
|
|
63
|
+
if (!this.registry.has(name)) {
|
|
64
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
65
|
+
}
|
|
66
|
+
return this.registry.execute(name, args);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Start the MCP server with stdio transport
|
|
70
|
+
*/
|
|
71
|
+
async start() {
|
|
72
|
+
this.server = new Server({
|
|
73
|
+
name: this.name,
|
|
74
|
+
version: this.version,
|
|
75
|
+
}, {
|
|
76
|
+
capabilities: {
|
|
77
|
+
tools: {},
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
// Handle tools/list request
|
|
81
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
82
|
+
const tools = this.listTools();
|
|
83
|
+
return {
|
|
84
|
+
tools: tools,
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
// Handle tools/call request
|
|
88
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
89
|
+
const { name, arguments: args } = request.params;
|
|
90
|
+
try {
|
|
91
|
+
const result = await this.callTool(name, args ?? {});
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
96
|
+
return {
|
|
97
|
+
content: [
|
|
98
|
+
{
|
|
99
|
+
type: 'text',
|
|
100
|
+
text: `Error: ${message}`,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
isError: true,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
// Create and connect transport
|
|
108
|
+
this.transport = new StdioServerTransport();
|
|
109
|
+
await this.server.connect(this.transport);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Gracefully shutdown the server
|
|
113
|
+
*/
|
|
114
|
+
async shutdown() {
|
|
115
|
+
if (this.isShuttingDown) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
this.isShuttingDown = true;
|
|
119
|
+
if (this.server) {
|
|
120
|
+
try {
|
|
121
|
+
await this.server.close();
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Ignore errors during shutdown
|
|
125
|
+
}
|
|
126
|
+
this.server = null;
|
|
127
|
+
}
|
|
128
|
+
this.transport = null;
|
|
129
|
+
this.isShuttingDown = false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create and export a default server instance factory
|
|
134
|
+
*/
|
|
135
|
+
export function createServer(options) {
|
|
136
|
+
return new KelpiMcpServer(options);
|
|
137
|
+
}
|
|
138
|
+
// Re-export tool definitions for external use
|
|
139
|
+
export { TOOL_DEFINITIONS } from './tools/index.js';
|
|
140
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ToolWithHandler } from '../../lib/tool-registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* kelpi_login tool definition and handler
|
|
4
|
+
*
|
|
5
|
+
* Initiates browser-based authentication using device code flow.
|
|
6
|
+
* Returns verification URL and user code for the user to complete authentication.
|
|
7
|
+
*/
|
|
8
|
+
export declare const kelpiLogin: ToolWithHandler;
|
|
9
|
+
/**
|
|
10
|
+
* kelpi_status tool definition and handler
|
|
11
|
+
*
|
|
12
|
+
* Checks current authentication status and returns workspace information.
|
|
13
|
+
*/
|
|
14
|
+
export declare const kelpiStatus: ToolWithHandler;
|
|
15
|
+
export * from './schemas.js';
|
|
16
|
+
export { createLoginHandler, validateVerificationUrl } from './login.js';
|
|
17
|
+
export { createStatusHandler } from './status.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAKlE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,eAexB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,eAazB,CAAC;AAGF,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|