flowengine-mcp-app 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.
package/build/index.js ADDED
@@ -0,0 +1,650 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * FlowEngine MCP App
4
+ * Interactive UI for managing FlowEngine directly from Claude Code
5
+ */
6
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
9
+ import { FlowEngineClient } from './client.js';
10
+ import { renderPortalsDashboard, renderPortalDetails } from './ui/portals.js';
11
+ import { renderWorkflowsManager, renderWorkflowDetails } from './ui/workflows.js';
12
+ import { renderWidgetBuilder, renderWidgetDetails } from './ui/widgets.js';
13
+ import { renderInstancesManager, renderInstanceDetails } from './ui/instances.js';
14
+ import { renderDemoShowcase } from './ui/demo.js';
15
+ import { renderError } from './ui/base.js';
16
+ // Get configuration from environment variables
17
+ const API_KEY = process.env.FLOWENGINE_API_KEY;
18
+ const BASE_URL = process.env.FLOWENGINE_BASE_URL || 'https://flowengine.cloud';
19
+ // Initialize FlowEngine client (will be undefined if no API key)
20
+ const flowengine = API_KEY ? new FlowEngineClient({
21
+ apiKey: API_KEY,
22
+ baseUrl: BASE_URL,
23
+ }) : null;
24
+ // Helper to check if client is available
25
+ function ensureClient() {
26
+ if (!flowengine) {
27
+ throw new Error('FlowEngine API key not configured. Please set FLOWENGINE_API_KEY in your MCP server configuration.');
28
+ }
29
+ return flowengine;
30
+ }
31
+ const server = new Server({
32
+ name: 'flowengine-mcp',
33
+ version: '0.1.0',
34
+ }, {
35
+ capabilities: {
36
+ resources: {},
37
+ tools: {},
38
+ prompts: {},
39
+ },
40
+ });
41
+ /**
42
+ * List all available app resources
43
+ */
44
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
45
+ return {
46
+ resources: [
47
+ {
48
+ uri: 'app://flowengine/demo',
49
+ name: 'n8n Demo & Templates',
50
+ description: 'Explore pre-built workflows and automation templates',
51
+ mimeType: 'text/html',
52
+ },
53
+ {
54
+ uri: 'app://flowengine/portals',
55
+ name: 'Client Portals',
56
+ description: 'View and manage your client portals and instances',
57
+ mimeType: 'text/html',
58
+ },
59
+ {
60
+ uri: 'app://flowengine/workflows',
61
+ name: 'Workflows',
62
+ description: 'Manage automation workflows',
63
+ mimeType: 'text/html',
64
+ },
65
+ {
66
+ uri: 'app://flowengine/ui-builder',
67
+ name: 'UI Builder',
68
+ description: 'Create and manage forms, chatbots, and interactive components',
69
+ mimeType: 'text/html',
70
+ },
71
+ {
72
+ uri: 'app://flowengine/hosting',
73
+ name: 'Hosting',
74
+ description: 'Manage FlowEngine instances and hosting',
75
+ mimeType: 'text/html',
76
+ },
77
+ ],
78
+ };
79
+ });
80
+ /**
81
+ * Read and render app resources
82
+ */
83
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
84
+ const uri = request.params.uri;
85
+ try {
86
+ if (uri === 'app://flowengine/demo') {
87
+ const html = renderDemoShowcase();
88
+ return {
89
+ contents: [
90
+ {
91
+ uri,
92
+ mimeType: 'text/html',
93
+ text: html,
94
+ },
95
+ ],
96
+ };
97
+ }
98
+ if (uri === 'app://flowengine/portals') {
99
+ const instances = await ensureClient().getClientInstances();
100
+ const html = renderPortalsDashboard(instances);
101
+ return {
102
+ contents: [
103
+ {
104
+ uri,
105
+ mimeType: 'text/html',
106
+ text: html,
107
+ },
108
+ ],
109
+ };
110
+ }
111
+ if (uri === 'app://flowengine/workflows') {
112
+ const workflows = await ensureClient().getWorkflows();
113
+ const html = renderWorkflowsManager(workflows);
114
+ return {
115
+ contents: [
116
+ {
117
+ uri,
118
+ mimeType: 'text/html',
119
+ text: html,
120
+ },
121
+ ],
122
+ };
123
+ }
124
+ if (uri === 'app://flowengine/ui-builder') {
125
+ const widgets = await ensureClient().getWidgets();
126
+ const html = renderWidgetBuilder(widgets);
127
+ return {
128
+ contents: [
129
+ {
130
+ uri,
131
+ mimeType: 'text/html',
132
+ text: html,
133
+ },
134
+ ],
135
+ };
136
+ }
137
+ if (uri === 'app://flowengine/hosting') {
138
+ const instances = await ensureClient().getInstances();
139
+ const html = renderInstancesManager(instances);
140
+ return {
141
+ contents: [
142
+ {
143
+ uri,
144
+ mimeType: 'text/html',
145
+ text: html,
146
+ },
147
+ ],
148
+ };
149
+ }
150
+ // Handle detail views with query parameters
151
+ if (uri.startsWith('app://flowengine/portal/')) {
152
+ const instanceId = uri.split('/').pop() || '';
153
+ const client = ensureClient();
154
+ const [workflows, widgets] = await Promise.all([
155
+ client.getClientPanelWorkflows(instanceId),
156
+ client.getClientPanelWidgets(instanceId),
157
+ ]);
158
+ const html = renderPortalDetails(instanceId, workflows, widgets);
159
+ return {
160
+ contents: [
161
+ {
162
+ uri,
163
+ mimeType: 'text/html',
164
+ text: html,
165
+ },
166
+ ],
167
+ };
168
+ }
169
+ if (uri.startsWith('app://flowengine/workflow/')) {
170
+ const workflowId = uri.split('/').pop() || '';
171
+ const workflow = await ensureClient().getWorkflowParameters(workflowId);
172
+ const executions = await ensureClient().getWorkflowExecutions(workflowId);
173
+ const html = renderWorkflowDetails(workflow, executions);
174
+ return {
175
+ contents: [
176
+ {
177
+ uri,
178
+ mimeType: 'text/html',
179
+ text: html,
180
+ },
181
+ ],
182
+ };
183
+ }
184
+ if (uri.startsWith('app://flowengine/widget/')) {
185
+ const widgetId = uri.split('/').pop() || '';
186
+ const widget = await ensureClient().getWidget(widgetId);
187
+ const html = renderWidgetDetails(widget);
188
+ return {
189
+ contents: [
190
+ {
191
+ uri,
192
+ mimeType: 'text/html',
193
+ text: html,
194
+ },
195
+ ],
196
+ };
197
+ }
198
+ if (uri.startsWith('app://flowengine/instance/')) {
199
+ const instanceId = uri.split('/').pop() || '';
200
+ const instances = await ensureClient().getInstances();
201
+ const instance = instances.find((i) => i.id === instanceId);
202
+ if (!instance) {
203
+ throw new Error('Instance not found');
204
+ }
205
+ const status = await ensureClient().getInstanceStatus(instanceId);
206
+ const html = renderInstanceDetails(instance, status);
207
+ return {
208
+ contents: [
209
+ {
210
+ uri,
211
+ mimeType: 'text/html',
212
+ text: html,
213
+ },
214
+ ],
215
+ };
216
+ }
217
+ throw new Error(`Unknown resource URI: ${uri}`);
218
+ }
219
+ catch (error) {
220
+ const html = renderError(error.message || 'An error occurred');
221
+ return {
222
+ contents: [
223
+ {
224
+ uri,
225
+ mimeType: 'text/html',
226
+ text: html,
227
+ },
228
+ ],
229
+ };
230
+ }
231
+ });
232
+ /**
233
+ * List available tools
234
+ */
235
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
236
+ return {
237
+ tools: [
238
+ // Workflow tools
239
+ {
240
+ name: 'flowengine_toggle_workflow',
241
+ description: 'Enable or disable a workflow',
242
+ inputSchema: {
243
+ type: 'object',
244
+ properties: {
245
+ workflowId: {
246
+ type: 'string',
247
+ description: 'The workflow ID',
248
+ },
249
+ enabled: {
250
+ type: 'boolean',
251
+ description: 'Whether to enable (true) or disable (false) the workflow',
252
+ },
253
+ },
254
+ required: ['workflowId', 'enabled'],
255
+ },
256
+ },
257
+ {
258
+ name: 'flowengine_list_workflows',
259
+ description: 'List all workflows',
260
+ inputSchema: {
261
+ type: 'object',
262
+ properties: {
263
+ instanceId: {
264
+ type: 'string',
265
+ description: 'Optional instance ID to filter workflows',
266
+ },
267
+ },
268
+ },
269
+ },
270
+ {
271
+ name: 'flowengine_get_workflow_executions',
272
+ description: 'Get recent executions for a workflow',
273
+ inputSchema: {
274
+ type: 'object',
275
+ properties: {
276
+ workflowId: {
277
+ type: 'string',
278
+ description: 'The workflow ID',
279
+ },
280
+ },
281
+ required: ['workflowId'],
282
+ },
283
+ },
284
+ // Instance tools
285
+ {
286
+ name: 'flowengine_list_instances',
287
+ description: 'List all instances',
288
+ inputSchema: {
289
+ type: 'object',
290
+ properties: {},
291
+ },
292
+ },
293
+ {
294
+ name: 'flowengine_get_instance_status',
295
+ description: 'Get status and health information for an instance',
296
+ inputSchema: {
297
+ type: 'object',
298
+ properties: {
299
+ instanceId: {
300
+ type: 'string',
301
+ description: 'The instance ID',
302
+ },
303
+ },
304
+ required: ['instanceId'],
305
+ },
306
+ },
307
+ // UI Builder tools
308
+ {
309
+ name: 'flowengine_list_ui_components',
310
+ description: 'List all forms, chatbots, and UI components',
311
+ inputSchema: {
312
+ type: 'object',
313
+ properties: {
314
+ instanceId: {
315
+ type: 'string',
316
+ description: 'Optional instance ID to filter components',
317
+ },
318
+ },
319
+ },
320
+ },
321
+ {
322
+ name: 'flowengine_get_component',
323
+ description: 'Get details about a specific UI component',
324
+ inputSchema: {
325
+ type: 'object',
326
+ properties: {
327
+ componentId: {
328
+ type: 'string',
329
+ description: 'The component ID',
330
+ },
331
+ },
332
+ required: ['componentId'],
333
+ },
334
+ },
335
+ // Portal tools
336
+ {
337
+ name: 'flowengine_list_portals',
338
+ description: 'List all client portals',
339
+ inputSchema: {
340
+ type: 'object',
341
+ properties: {},
342
+ },
343
+ },
344
+ // Template tools
345
+ {
346
+ name: 'flowengine_list_templates',
347
+ description: 'List all available workflow templates',
348
+ inputSchema: {
349
+ type: 'object',
350
+ properties: {},
351
+ },
352
+ },
353
+ {
354
+ name: 'flowengine_import_template',
355
+ description: 'Import a workflow template to an instance',
356
+ inputSchema: {
357
+ type: 'object',
358
+ properties: {
359
+ templateId: {
360
+ type: 'string',
361
+ description: 'The template ID to import',
362
+ },
363
+ instanceId: {
364
+ type: 'string',
365
+ description: 'The instance ID to import to',
366
+ },
367
+ },
368
+ required: ['templateId', 'instanceId'],
369
+ },
370
+ },
371
+ {
372
+ name: 'flowengine_create_workflow',
373
+ description: 'Create a new workflow from JSON in an instance',
374
+ inputSchema: {
375
+ type: 'object',
376
+ properties: {
377
+ instanceId: {
378
+ type: 'string',
379
+ description: 'The instance ID to create the workflow in',
380
+ },
381
+ workflowJSON: {
382
+ type: 'object',
383
+ description: 'The workflow JSON definition',
384
+ },
385
+ workflowTitle: {
386
+ type: 'string',
387
+ description: 'Optional title for the workflow',
388
+ },
389
+ },
390
+ required: ['instanceId', 'workflowJSON'],
391
+ },
392
+ },
393
+ ],
394
+ };
395
+ });
396
+ /**
397
+ * Handle tool calls
398
+ */
399
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
400
+ const { name, arguments: args } = request.params;
401
+ try {
402
+ switch (name) {
403
+ case 'flowengine_toggle_workflow': {
404
+ if (!args)
405
+ throw new Error('Missing arguments');
406
+ const workflowId = args.workflowId;
407
+ const enabled = args.enabled;
408
+ const result = await ensureClient().toggleWorkflow(workflowId, enabled);
409
+ return {
410
+ content: [
411
+ {
412
+ type: 'text',
413
+ text: `Workflow ${enabled ? 'enabled' : 'disabled'} successfully`,
414
+ },
415
+ ],
416
+ };
417
+ }
418
+ case 'flowengine_list_workflows': {
419
+ const instanceId = args ? args.instanceId : undefined;
420
+ const workflows = await ensureClient().getWorkflows(instanceId);
421
+ return {
422
+ content: [
423
+ {
424
+ type: 'text',
425
+ text: JSON.stringify(workflows, null, 2),
426
+ },
427
+ ],
428
+ };
429
+ }
430
+ case 'flowengine_get_workflow_executions': {
431
+ if (!args)
432
+ throw new Error('Missing arguments');
433
+ const workflowId = args.workflowId;
434
+ const executions = await ensureClient().getWorkflowExecutions(workflowId);
435
+ return {
436
+ content: [
437
+ {
438
+ type: 'text',
439
+ text: JSON.stringify(executions, null, 2),
440
+ },
441
+ ],
442
+ };
443
+ }
444
+ case 'flowengine_list_instances': {
445
+ const instances = await ensureClient().getInstances();
446
+ return {
447
+ content: [
448
+ {
449
+ type: 'text',
450
+ text: JSON.stringify(instances, null, 2),
451
+ },
452
+ ],
453
+ };
454
+ }
455
+ case 'flowengine_get_instance_status': {
456
+ if (!args)
457
+ throw new Error('Missing arguments');
458
+ const instanceId = args.instanceId;
459
+ const status = await ensureClient().getInstanceStatus(instanceId);
460
+ return {
461
+ content: [
462
+ {
463
+ type: 'text',
464
+ text: JSON.stringify(status, null, 2),
465
+ },
466
+ ],
467
+ };
468
+ }
469
+ case 'flowengine_list_ui_components': {
470
+ const instanceId = args ? args.instanceId : undefined;
471
+ const widgets = await ensureClient().getWidgets(instanceId);
472
+ return {
473
+ content: [
474
+ {
475
+ type: 'text',
476
+ text: JSON.stringify(widgets, null, 2),
477
+ },
478
+ ],
479
+ };
480
+ }
481
+ case 'flowengine_get_component': {
482
+ if (!args)
483
+ throw new Error('Missing arguments');
484
+ const componentId = args.componentId;
485
+ const widget = await ensureClient().getWidget(componentId);
486
+ return {
487
+ content: [
488
+ {
489
+ type: 'text',
490
+ text: JSON.stringify(widget, null, 2),
491
+ },
492
+ ],
493
+ };
494
+ }
495
+ case 'flowengine_list_portals': {
496
+ const portals = await ensureClient().getClientInstances();
497
+ return {
498
+ content: [
499
+ {
500
+ type: 'text',
501
+ text: JSON.stringify(portals, null, 2),
502
+ },
503
+ ],
504
+ };
505
+ }
506
+ case 'flowengine_list_templates': {
507
+ const templates = await ensureClient().listTemplates();
508
+ return {
509
+ content: [
510
+ {
511
+ type: 'text',
512
+ text: JSON.stringify(templates, null, 2),
513
+ },
514
+ ],
515
+ };
516
+ }
517
+ case 'flowengine_import_template': {
518
+ if (!args)
519
+ throw new Error('Missing arguments');
520
+ const templateId = args.templateId;
521
+ const instanceId = args.instanceId;
522
+ const result = await ensureClient().importTemplate({ templateId, instanceId });
523
+ return {
524
+ content: [
525
+ {
526
+ type: 'text',
527
+ text: `Template imported successfully. Workflow ID: ${result.workflowId || 'N/A'}`,
528
+ },
529
+ ],
530
+ };
531
+ }
532
+ case 'flowengine_create_workflow': {
533
+ if (!args)
534
+ throw new Error('Missing arguments');
535
+ const instanceId = args.instanceId;
536
+ const workflowJSON = args.workflowJSON;
537
+ const workflowTitle = args.workflowTitle;
538
+ const result = await ensureClient().importWorkflowToInstance({
539
+ instanceId,
540
+ workflowJSON,
541
+ workflowTitle,
542
+ });
543
+ return {
544
+ content: [
545
+ {
546
+ type: 'text',
547
+ text: `Workflow created successfully. Workflow ID: ${result.workflowId || result.id || 'N/A'}`,
548
+ },
549
+ ],
550
+ };
551
+ }
552
+ default:
553
+ throw new Error(`Unknown tool: ${name}`);
554
+ }
555
+ }
556
+ catch (error) {
557
+ return {
558
+ content: [
559
+ {
560
+ type: 'text',
561
+ text: `Error: ${error.message}`,
562
+ },
563
+ ],
564
+ isError: true,
565
+ };
566
+ }
567
+ });
568
+ /**
569
+ * List available prompts
570
+ */
571
+ server.setRequestHandler(ListPromptsRequestSchema, async () => {
572
+ return {
573
+ prompts: [
574
+ {
575
+ name: 'check_workflow_status',
576
+ description: 'Check the status of your workflows',
577
+ },
578
+ {
579
+ name: 'view_recent_executions',
580
+ description: 'View recent workflow executions',
581
+ },
582
+ {
583
+ name: 'manage_portals',
584
+ description: 'Manage your client portals',
585
+ },
586
+ ],
587
+ };
588
+ });
589
+ /**
590
+ * Handle prompt requests
591
+ */
592
+ server.setRequestHandler(GetPromptRequestSchema, async (request) => {
593
+ const { name } = request.params;
594
+ switch (name) {
595
+ case 'check_workflow_status':
596
+ return {
597
+ description: 'Check the status of your workflows',
598
+ messages: [
599
+ {
600
+ role: 'user',
601
+ content: {
602
+ type: 'text',
603
+ text: 'Please show me the status of all my workflows and highlight any that are inactive or having issues.',
604
+ },
605
+ },
606
+ ],
607
+ };
608
+ case 'view_recent_executions':
609
+ return {
610
+ description: 'View recent workflow executions',
611
+ messages: [
612
+ {
613
+ role: 'user',
614
+ content: {
615
+ type: 'text',
616
+ text: 'Show me the most recent workflow executions and highlight any failures.',
617
+ },
618
+ },
619
+ ],
620
+ };
621
+ case 'manage_portals':
622
+ return {
623
+ description: 'Manage your client portals',
624
+ messages: [
625
+ {
626
+ role: 'user',
627
+ content: {
628
+ type: 'text',
629
+ text: 'Show me all my client portals and their current status.',
630
+ },
631
+ },
632
+ ],
633
+ };
634
+ default:
635
+ throw new Error(`Unknown prompt: ${name}`);
636
+ }
637
+ });
638
+ /**
639
+ * Start the server
640
+ */
641
+ async function main() {
642
+ const transport = new StdioServerTransport();
643
+ await server.connect(transport);
644
+ console.error('FlowEngine MCP App server started');
645
+ }
646
+ main().catch((error) => {
647
+ console.error('Fatal error:', error);
648
+ process.exit(1);
649
+ });
650
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Base UI layout and shared components for MCP App
3
+ */
4
+ export declare function baseLayout(title: string, content: string): string;
5
+ export declare function renderEmptyState(title: string, description: string, iconSvg?: string): string;
6
+ export declare function renderError(error: string): string;
7
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/ui/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAmRjE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ7F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWjD"}