@launchpath-ai/mcp-server 1.0.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 (53) hide show
  1. package/README.md +94 -0
  2. package/build/client.d.ts +38 -0
  3. package/build/client.js +210 -0
  4. package/build/client.js.map +1 -0
  5. package/build/index.d.ts +12 -0
  6. package/build/index.js +374 -0
  7. package/build/index.js.map +1 -0
  8. package/build/tools/agents.d.ts +6 -0
  9. package/build/tools/agents.js +249 -0
  10. package/build/tools/agents.js.map +1 -0
  11. package/build/tools/analytics.d.ts +7 -0
  12. package/build/tools/analytics.js +282 -0
  13. package/build/tools/analytics.js.map +1 -0
  14. package/build/tools/campaigns.d.ts +6 -0
  15. package/build/tools/campaigns.js +158 -0
  16. package/build/tools/campaigns.js.map +1 -0
  17. package/build/tools/channels.d.ts +7 -0
  18. package/build/tools/channels.js +319 -0
  19. package/build/tools/channels.js.map +1 -0
  20. package/build/tools/clients.d.ts +6 -0
  21. package/build/tools/clients.js +138 -0
  22. package/build/tools/clients.js.map +1 -0
  23. package/build/tools/composio.d.ts +6 -0
  24. package/build/tools/composio.js +188 -0
  25. package/build/tools/composio.js.map +1 -0
  26. package/build/tools/core.d.ts +6 -0
  27. package/build/tools/core.js +130 -0
  28. package/build/tools/core.js.map +1 -0
  29. package/build/tools/integrations.d.ts +6 -0
  30. package/build/tools/integrations.js +188 -0
  31. package/build/tools/integrations.js.map +1 -0
  32. package/build/tools/knowledge.d.ts +7 -0
  33. package/build/tools/knowledge.js +274 -0
  34. package/build/tools/knowledge.js.map +1 -0
  35. package/build/tools/portal.d.ts +6 -0
  36. package/build/tools/portal.js +86 -0
  37. package/build/tools/portal.js.map +1 -0
  38. package/build/tools/tools-config.d.ts +6 -0
  39. package/build/tools/tools-config.js +213 -0
  40. package/build/tools/tools-config.js.map +1 -0
  41. package/build/tools/whatsapp.d.ts +7 -0
  42. package/build/tools/whatsapp.js +399 -0
  43. package/build/tools/whatsapp.js.map +1 -0
  44. package/build/types.d.ts +87 -0
  45. package/build/types.js +3 -0
  46. package/build/types.js.map +1 -0
  47. package/package.json +44 -0
  48. package/plugin.json +28 -0
  49. package/skills/agent-report/SKILL.md +44 -0
  50. package/skills/deploy-agent/SKILL.md +74 -0
  51. package/skills/launchpath-guide/SKILL.md +60 -0
  52. package/skills/setup-client/SKILL.md +44 -0
  53. package/skills/whatsapp-campaign/SKILL.md +72 -0
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Deployment toolset (default) — list_channels, deploy_channel, update_channel,
3
+ * set_widget_appearance, set_widget_content, get_embed_code
4
+ */
5
+ import { z } from "zod";
6
+ import { formatError } from "../client.js";
7
+ export function registerDeploymentTools(server, client) {
8
+ // --- list_channels ---
9
+ server.registerTool("list_channels", {
10
+ title: "List Channels",
11
+ description: "List all deployment channels for an agent (widget, API, WhatsApp, etc.).",
12
+ inputSchema: {
13
+ agent_id: z.string().describe("The agent's UUID"),
14
+ },
15
+ annotations: {
16
+ readOnlyHint: true,
17
+ openWorldHint: false,
18
+ },
19
+ }, async ({ agent_id }) => {
20
+ const res = await client.get(`/api/agents/${agent_id}/channels`);
21
+ if (res.error) {
22
+ return {
23
+ isError: true,
24
+ content: [{ type: "text", text: formatError(res.error, res.status) }],
25
+ };
26
+ }
27
+ return {
28
+ content: [{ type: "text", text: JSON.stringify(res.data, null, 2) }],
29
+ };
30
+ });
31
+ // --- deploy_channel ---
32
+ server.registerTool("deploy_channel", {
33
+ title: "Deploy Channel",
34
+ description: 'Deploy an agent to a channel. Returns embed code for widgets, or connection details for other types. Example: deploy_channel(agent_id, channel_type: "widget") creates a website chat widget.',
35
+ inputSchema: {
36
+ agent_id: z.string().describe("The agent's UUID"),
37
+ channel_type: z
38
+ .enum(["widget", "api", "whatsapp"])
39
+ .describe('Channel type: "widget" for website chat, "api" for API access, "whatsapp" for WhatsApp Business'),
40
+ name: z.string().optional().describe("Channel display name"),
41
+ allowed_origins: z
42
+ .array(z.string())
43
+ .optional()
44
+ .describe('Allowed CORS origins for widget (e.g., ["https://example.com"])'),
45
+ rate_limit_rpm: z
46
+ .number()
47
+ .optional()
48
+ .describe("Rate limit in requests per minute"),
49
+ },
50
+ annotations: {
51
+ destructiveHint: false,
52
+ idempotentHint: false,
53
+ },
54
+ }, async ({ agent_id, channel_type, name, allowed_origins, rate_limit_rpm }) => {
55
+ const body = { channel_type };
56
+ if (name)
57
+ body.name = name;
58
+ if (allowed_origins)
59
+ body.allowed_origins = allowed_origins;
60
+ if (rate_limit_rpm)
61
+ body.rate_limit_rpm = rate_limit_rpm;
62
+ const res = await client.post(`/api/agents/${agent_id}/channels`, body);
63
+ if (res.error) {
64
+ return {
65
+ isError: true,
66
+ content: [{ type: "text", text: formatError(res.error, res.status) }],
67
+ };
68
+ }
69
+ let text = `Channel deployed successfully.\n\n${JSON.stringify(res.data, null, 2)}`;
70
+ if (channel_type === "widget") {
71
+ text += `\n\n## Next Steps for Widget`;
72
+ text += `\n1. Use get_embed_code to get the HTML snippet to paste on a website`;
73
+ text += `\n2. Use set_widget_appearance to customize colors, theme, and position`;
74
+ text += `\n3. Use set_widget_content to set the welcome message and conversation starters`;
75
+ text += `\n4. Use chat_with_agent to test the agent before going live`;
76
+ }
77
+ else if (channel_type === "whatsapp") {
78
+ text += `\n\n## Next Steps for WhatsApp`;
79
+ text += `\n1. Enable the WhatsApp toolset: enable_toolset("whatsapp")`;
80
+ text += `\n2. Create message templates with create_wa_template (Meta approval required)`;
81
+ text += `\n3. Import contacts with import_wa_contacts`;
82
+ text += `\n4. Send broadcasts with send_wa_broadcast`;
83
+ }
84
+ else if (channel_type === "api") {
85
+ text += `\n\n## API Channel Details`;
86
+ text += `\nPublic chat endpoint: POST ${client.dashboardUrl}/api/channels/${agent_id}/chat`;
87
+ text += `\nAuthorization: Bearer <token from response above>`;
88
+ text += `\nBody: { "message": "...", "session_id": "unique-user-id" }`;
89
+ text += `\n\nUse this endpoint to build custom chat UIs, integrate with other apps, or connect to any platform.`;
90
+ }
91
+ text += `\n\nManage this channel in the dashboard: ${client.dashboardUrl}/dashboard/agents/${agent_id}`;
92
+ return {
93
+ content: [{ type: "text", text }],
94
+ };
95
+ });
96
+ // --- update_channel ---
97
+ server.registerTool("update_channel", {
98
+ title: "Update Channel",
99
+ description: "Toggle a channel on/off, change allowed origins, or update rate limit.",
100
+ inputSchema: {
101
+ agent_id: z.string().describe("The agent's UUID"),
102
+ channel_id: z.string().describe("The channel's UUID"),
103
+ is_enabled: z.boolean().optional().describe("Enable or disable the channel"),
104
+ allowed_origins: z
105
+ .array(z.string())
106
+ .optional()
107
+ .describe("Updated allowed CORS origins"),
108
+ rate_limit_rpm: z
109
+ .number()
110
+ .optional()
111
+ .describe("Updated rate limit in requests per minute"),
112
+ },
113
+ annotations: {
114
+ destructiveHint: false,
115
+ idempotentHint: true,
116
+ },
117
+ }, async ({ agent_id, channel_id, is_enabled, allowed_origins, rate_limit_rpm }) => {
118
+ const body = {};
119
+ if (is_enabled !== undefined)
120
+ body.is_enabled = is_enabled;
121
+ if (allowed_origins)
122
+ body.allowed_origins = allowed_origins;
123
+ if (rate_limit_rpm !== undefined)
124
+ body.rate_limit_rpm = rate_limit_rpm;
125
+ const res = await client.patch(`/api/agents/${agent_id}/channels/${channel_id}`, body);
126
+ if (res.error) {
127
+ return {
128
+ isError: true,
129
+ content: [{ type: "text", text: formatError(res.error, res.status) }],
130
+ };
131
+ }
132
+ return {
133
+ content: [
134
+ {
135
+ type: "text",
136
+ text: `Channel updated successfully.\n\n${JSON.stringify(res.data, null, 2)}`,
137
+ },
138
+ ],
139
+ };
140
+ });
141
+ // --- delete_channel ---
142
+ server.registerTool("delete_channel", {
143
+ title: "Delete Channel",
144
+ description: "Permanently delete a deployment channel. This removes the channel and stops all traffic through it. Cannot be undone.",
145
+ inputSchema: {
146
+ agent_id: z.string().describe("The agent's UUID"),
147
+ channel_id: z.string().describe("The channel's UUID"),
148
+ },
149
+ annotations: {
150
+ destructiveHint: true,
151
+ idempotentHint: true,
152
+ },
153
+ }, async ({ agent_id, channel_id }) => {
154
+ const res = await client.del(`/api/agents/${agent_id}/channels/${channel_id}`);
155
+ if (res.error) {
156
+ return {
157
+ isError: true,
158
+ content: [
159
+ {
160
+ type: "text",
161
+ text: formatError(res.error, res.status, "Use list_channels to verify the channel_id."),
162
+ },
163
+ ],
164
+ };
165
+ }
166
+ return {
167
+ content: [
168
+ { type: "text", text: `Channel ${channel_id} deleted successfully.` },
169
+ ],
170
+ };
171
+ });
172
+ // --- configure_widget ---
173
+ server.registerTool("configure_widget", {
174
+ title: "Configure Widget",
175
+ description: "Configure a widget channel's appearance and content in one call: colors, theme, position, avatar, welcome message, conversation starters, pre-chat form, and file upload. All fields are optional — only set what you want to change.",
176
+ inputSchema: {
177
+ agent_id: z.string().describe("The agent's UUID"),
178
+ channel_id: z.string().describe("The widget channel's UUID"),
179
+ // Appearance
180
+ primary_color: z.string().optional().describe("Hex color for the widget (e.g., '#FF8C00')"),
181
+ theme: z.enum(["light", "dark"]).optional().describe("Widget color theme"),
182
+ border_radius: z
183
+ .enum(["rounded", "square"])
184
+ .optional()
185
+ .describe("Widget corner style"),
186
+ show_branding: z.boolean().optional().describe("Show 'Powered by LaunchPath' badge"),
187
+ position: z.enum(["right", "left"]).optional().describe("Widget position on the page"),
188
+ widget_size: z
189
+ .enum(["default", "compact", "large"])
190
+ .optional()
191
+ .describe("Widget size variant"),
192
+ agent_avatar: z
193
+ .string()
194
+ .optional()
195
+ .describe("Avatar emoji or image URL for the widget header (e.g., '🤖')"),
196
+ greeting_delay: z
197
+ .number()
198
+ .optional()
199
+ .describe("Seconds before the greeting bubble appears (default: 3)"),
200
+ // Content
201
+ agent_name: z.string().optional().describe("Display name shown in the widget header"),
202
+ welcome_message: z.string().optional().describe("Welcome message shown when widget opens"),
203
+ greeting_message: z.string().optional().describe("Greeting text in the chat bubble before opening"),
204
+ conversation_starters: z
205
+ .array(z.string())
206
+ .optional()
207
+ .describe("Up to 4 clickable starter messages (e.g., ['What services do you offer?', 'Book an appointment'])"),
208
+ pre_chat_form: z
209
+ .object({
210
+ enabled: z.boolean().describe("Enable or disable the pre-chat form"),
211
+ fields: z.array(z.enum(["name", "email"])).describe('Fields to collect (e.g., ["name", "email"])'),
212
+ })
213
+ .optional()
214
+ .describe("Collect user info (name, email) before chat starts"),
215
+ file_upload: z
216
+ .boolean()
217
+ .optional()
218
+ .describe("Allow users to upload images and PDFs in the chat"),
219
+ },
220
+ annotations: {
221
+ destructiveHint: false,
222
+ idempotentHint: true,
223
+ },
224
+ }, async ({ agent_id, channel_id, primary_color, theme, border_radius, show_branding, position, widget_size, agent_avatar, greeting_delay, agent_name, welcome_message, greeting_message, conversation_starters, pre_chat_form, file_upload, }) => {
225
+ const widget_config = {};
226
+ // Appearance
227
+ if (primary_color !== undefined)
228
+ widget_config.primaryColor = primary_color;
229
+ if (theme !== undefined)
230
+ widget_config.theme = theme;
231
+ if (border_radius !== undefined)
232
+ widget_config.borderRadius = border_radius;
233
+ if (show_branding !== undefined)
234
+ widget_config.showBranding = show_branding;
235
+ if (position !== undefined)
236
+ widget_config.position = position;
237
+ if (widget_size !== undefined)
238
+ widget_config.widgetSize = widget_size;
239
+ if (agent_avatar !== undefined)
240
+ widget_config.agentAvatar = agent_avatar;
241
+ if (greeting_delay !== undefined)
242
+ widget_config.greetingDelay = greeting_delay;
243
+ // Content
244
+ if (agent_name !== undefined)
245
+ widget_config.agentName = agent_name;
246
+ if (welcome_message !== undefined)
247
+ widget_config.welcomeMessage = welcome_message;
248
+ if (greeting_message !== undefined)
249
+ widget_config.greetingMessage = greeting_message;
250
+ if (conversation_starters !== undefined)
251
+ widget_config.conversationStarters = conversation_starters;
252
+ if (pre_chat_form !== undefined)
253
+ widget_config.preChatForm = pre_chat_form;
254
+ if (file_upload !== undefined)
255
+ widget_config.fileUpload = { enabled: file_upload };
256
+ const res = await client.patch(`/api/agents/${agent_id}/channels/${channel_id}`, { widget_config });
257
+ if (res.error) {
258
+ return {
259
+ isError: true,
260
+ content: [{ type: "text", text: formatError(res.error, res.status) }],
261
+ };
262
+ }
263
+ return {
264
+ content: [
265
+ { type: "text", text: `Widget configured successfully.\n\n${JSON.stringify(res.data, null, 2)}` },
266
+ ],
267
+ };
268
+ });
269
+ // --- get_embed_code ---
270
+ server.registerTool("get_embed_code", {
271
+ title: "Get Embed Code",
272
+ description: "Get a ready-to-paste embed snippet for a widget channel. Returns HTML script tag that can be added to any website.",
273
+ inputSchema: {
274
+ agent_id: z.string().describe("The agent's UUID"),
275
+ channel_id: z.string().describe("The widget channel's UUID"),
276
+ },
277
+ annotations: {
278
+ readOnlyHint: true,
279
+ openWorldHint: false,
280
+ },
281
+ }, async ({ agent_id, channel_id }) => {
282
+ // Fetch the channel to get its token for embed code generation
283
+ const res = await client.get(`/api/agents/${agent_id}/channels`);
284
+ if (res.error) {
285
+ return {
286
+ isError: true,
287
+ content: [{ type: "text", text: formatError(res.error, res.status) }],
288
+ };
289
+ }
290
+ const channels = res.data?.channels ?? (Array.isArray(res.data) ? res.data : []);
291
+ const channel = channels.find((c) => c.id === channel_id);
292
+ if (!channel) {
293
+ return {
294
+ isError: true,
295
+ content: [
296
+ {
297
+ type: "text",
298
+ text: `Channel ${channel_id} not found. Use list_channels to see available channels for this agent.`,
299
+ },
300
+ ],
301
+ };
302
+ }
303
+ const embedCode = `<script
304
+ src="https://app.launchpath.ai/widget.js"
305
+ data-channel-id="${channel_id}"
306
+ data-token="${channel.token}"
307
+ async
308
+ ></script>`;
309
+ return {
310
+ content: [
311
+ {
312
+ type: "text",
313
+ text: `Embed this HTML snippet in your website:\n\n\`\`\`html\n${embedCode}\n\`\`\`\n\nPaste it just before the closing </body> tag on any page where you want the chat widget to appear.`,
314
+ },
315
+ ],
316
+ };
317
+ });
318
+ }
319
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/tools/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Clients toolset (default) — list, get, create, update
3
+ */
4
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import type { LaunchPathClient } from "../client.js";
6
+ export declare function registerClientTools(server: McpServer, client: LaunchPathClient): void;
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Clients toolset (default) — list, get, create, update
3
+ */
4
+ import { z } from "zod";
5
+ import { formatError } from "../client.js";
6
+ export function registerClientTools(server, client) {
7
+ // --- list_clients ---
8
+ server.registerTool("list_clients", {
9
+ title: "List Clients",
10
+ description: "List all your client accounts. Clients represent businesses you manage agents for.",
11
+ inputSchema: {},
12
+ annotations: {
13
+ readOnlyHint: true,
14
+ openWorldHint: false,
15
+ },
16
+ }, async () => {
17
+ const res = await client.get("/api/clients");
18
+ if (res.error) {
19
+ return {
20
+ isError: true,
21
+ content: [{ type: "text", text: formatError(res.error, res.status) }],
22
+ };
23
+ }
24
+ return {
25
+ content: [{ type: "text", text: JSON.stringify(res.data, null, 2) }],
26
+ };
27
+ });
28
+ // --- get_client ---
29
+ server.registerTool("get_client", {
30
+ title: "Get Client",
31
+ description: "Get full details for a specific client account.",
32
+ inputSchema: {
33
+ client_id: z.string().describe("The client's UUID"),
34
+ },
35
+ annotations: {
36
+ readOnlyHint: true,
37
+ openWorldHint: false,
38
+ },
39
+ }, async ({ client_id }) => {
40
+ const res = await client.get(`/api/clients/${client_id}`);
41
+ if (res.error) {
42
+ return {
43
+ isError: true,
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: formatError(res.error, res.status, "Use list_clients to find valid client IDs."),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ return {
53
+ content: [{ type: "text", text: JSON.stringify(res.data, null, 2) }],
54
+ };
55
+ });
56
+ // --- create_client ---
57
+ server.registerTool("create_client", {
58
+ title: "Create Client",
59
+ description: "Create a new client account. After creating, use create_campaign to link an agent to this client.",
60
+ inputSchema: {
61
+ name: z.string().describe("Client/business name"),
62
+ email: z.string().optional().describe("Client contact email"),
63
+ website: z.string().optional().describe("Client website URL"),
64
+ logo_url: z.string().optional().describe("Client logo URL"),
65
+ },
66
+ annotations: {
67
+ destructiveHint: false,
68
+ idempotentHint: false,
69
+ },
70
+ }, async ({ name, email, website, logo_url }) => {
71
+ const body = { name };
72
+ if (email)
73
+ body.email = email;
74
+ if (website)
75
+ body.website = website;
76
+ if (logo_url)
77
+ body.logo_url = logo_url;
78
+ const res = await client.post("/api/clients", body);
79
+ if (res.error) {
80
+ return {
81
+ isError: true,
82
+ content: [{ type: "text", text: formatError(res.error, res.status) }],
83
+ };
84
+ }
85
+ return {
86
+ content: [
87
+ {
88
+ type: "text",
89
+ text: `Client created successfully.\n\n${JSON.stringify(res.data, null, 2)}`,
90
+ },
91
+ ],
92
+ };
93
+ });
94
+ // --- update_client ---
95
+ server.registerTool("update_client", {
96
+ title: "Update Client",
97
+ description: "Update a client account's details.",
98
+ inputSchema: {
99
+ client_id: z.string().describe("The client's UUID"),
100
+ name: z.string().optional().describe("Updated client name"),
101
+ email: z.string().optional().describe("Updated contact email"),
102
+ website: z.string().optional().describe("Updated website URL"),
103
+ },
104
+ annotations: {
105
+ destructiveHint: false,
106
+ idempotentHint: true,
107
+ },
108
+ }, async ({ client_id, name, email, website }) => {
109
+ const body = {};
110
+ if (name !== undefined)
111
+ body.name = name;
112
+ if (email !== undefined)
113
+ body.email = email;
114
+ if (website !== undefined)
115
+ body.website = website;
116
+ const res = await client.patch(`/api/clients/${client_id}`, body);
117
+ if (res.error) {
118
+ return {
119
+ isError: true,
120
+ content: [
121
+ {
122
+ type: "text",
123
+ text: formatError(res.error, res.status, "Use list_clients to verify the client_id."),
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ return {
129
+ content: [
130
+ {
131
+ type: "text",
132
+ text: `Client updated successfully.\n\n${JSON.stringify(res.data, null, 2)}`,
133
+ },
134
+ ],
135
+ };
136
+ });
137
+ }
138
+ //# sourceMappingURL=clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/tools/clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Composio toolset (on-demand) — browse integrations, list actions, check connections
3
+ */
4
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import type { LaunchPathClient } from "../client.js";
6
+ export declare function registerComposioTools(server: McpServer, client: LaunchPathClient): void;