@mario.andreschak/mcp-flujo 3.39.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.
@@ -0,0 +1,12 @@
1
+ export type FlujoOperation = 'listTools' | 'callTool' | 'listResources' | 'listResourceTemplates' | 'readResource';
2
+ type FlujoPayload = {
3
+ name?: string;
4
+ args?: Record<string, unknown>;
5
+ uri?: string;
6
+ cursor?: string;
7
+ };
8
+ export declare function flujoBaseUrl(env?: NodeJS.ProcessEnv): string;
9
+ export declare function toolRoute(name: string): string;
10
+ /** Typed HTTP transport for the stateless standalone mcp-flujo process. */
11
+ export declare function flujoRequest<T>(operation: FlujoOperation, payload?: FlujoPayload): Promise<T>;
12
+ export {};
package/dist/client.js ADDED
@@ -0,0 +1,144 @@
1
+ const AUTHORING_TOOLS = new Set([
2
+ 'list_flow_building_blocks',
3
+ 'get_flow_authoring_guide',
4
+ 'validate_flow_spec',
5
+ 'draft_flow',
6
+ 'create_flow',
7
+ 'suggest_tools_for_flow_step',
8
+ 'apply_tools_to_flow_step',
9
+ 'check_flow_plausibility',
10
+ 'search_mcp_marketplace',
11
+ 'install_mcp_server',
12
+ 'install_best_mcp_server',
13
+ ]);
14
+ const FLOW_TOOLS = new Set([
15
+ 'list_flows',
16
+ 'discover_capabilities',
17
+ 'execute_flow',
18
+ 'explain_flow',
19
+ 'read_flow',
20
+ 'update_flow',
21
+ 'list_flow_versions',
22
+ 'read_flow_version',
23
+ 'revert_flow',
24
+ 'delete_flow',
25
+ ]);
26
+ const SERVER_TOOLS = new Set([
27
+ 'list_mcp_servers',
28
+ 'list_mcp_server_tools',
29
+ 'call_mcp_tool',
30
+ 'restart_mcp_server',
31
+ 'set_mcp_server_enabled',
32
+ ]);
33
+ const AUTOMATION_TOOLS = new Set([
34
+ 'list_models',
35
+ 'list_planned_executions',
36
+ 'run_planned_execution',
37
+ 'update_planned_execution',
38
+ 'create_planned_execution',
39
+ 'delete_planned_execution',
40
+ ]);
41
+ const STATE_TOOLS = new Set([
42
+ 'list_conversations',
43
+ 'read_conversation',
44
+ 'kv_get',
45
+ 'kv_set',
46
+ ]);
47
+ export function flujoBaseUrl(env = process.env) {
48
+ const configured = env.FLUJO_BASE_URL?.trim();
49
+ return (configured || 'http://127.0.0.1:4200').replace(/\/+$/, '');
50
+ }
51
+ export function toolRoute(name) {
52
+ if (AUTHORING_TOOLS.has(name))
53
+ return '/api/mcp/flujo/authoring';
54
+ if (FLOW_TOOLS.has(name))
55
+ return '/api/mcp/flujo/flows';
56
+ if (SERVER_TOOLS.has(name))
57
+ return '/api/mcp/flujo/servers';
58
+ if (AUTOMATION_TOOLS.has(name))
59
+ return '/api/mcp/flujo/automation';
60
+ if (STATE_TOOLS.has(name))
61
+ return '/api/mcp/flujo/state';
62
+ throw new Error(`Unknown FLUJO tool: ${name}`);
63
+ }
64
+ async function requestJson(path, init = {}, timeoutMs = 30_000) {
65
+ const controller = new AbortController();
66
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
67
+ timeout.unref?.();
68
+ try {
69
+ const response = await fetch(`${flujoBaseUrl()}${path}`, {
70
+ ...init,
71
+ cache: 'no-store',
72
+ signal: controller.signal,
73
+ headers: {
74
+ accept: 'application/json',
75
+ ...(init.body ? { 'content-type': 'application/json' } : {}),
76
+ ...init.headers,
77
+ },
78
+ });
79
+ const text = await response.text();
80
+ let body = {};
81
+ if (text) {
82
+ try {
83
+ body = JSON.parse(text);
84
+ }
85
+ catch {
86
+ throw new Error(`FLUJO returned a non-JSON response (${response.status}).`);
87
+ }
88
+ }
89
+ if (!response.ok) {
90
+ const message = body && typeof body === 'object' && 'error' in body && typeof body.error === 'string'
91
+ ? body.error
92
+ : `FLUJO request failed (${response.status}).`;
93
+ throw new Error(message);
94
+ }
95
+ return body;
96
+ }
97
+ catch (error) {
98
+ if (controller.signal.aborted) {
99
+ throw new Error(`FLUJO request timed out after ${timeoutMs}ms.`);
100
+ }
101
+ throw error;
102
+ }
103
+ finally {
104
+ clearTimeout(timeout);
105
+ }
106
+ }
107
+ /** Typed HTTP transport for the stateless standalone mcp-flujo process. */
108
+ export async function flujoRequest(operation, payload = {}) {
109
+ if (operation === 'listTools') {
110
+ return requestJson('/api/mcp/flujo/tools');
111
+ }
112
+ if (operation === 'listResources' || operation === 'listResourceTemplates') {
113
+ const result = await requestJson(`/api/mcp/flujo/resources${payload.cursor ? `?cursor=${encodeURIComponent(payload.cursor)}` : ''}`);
114
+ if (operation === 'listResources') {
115
+ return {
116
+ resources: result.resources,
117
+ ...(result.nextCursor ? { nextCursor: result.nextCursor } : {}),
118
+ ...(result.error ? { error: result.error } : {}),
119
+ };
120
+ }
121
+ return {
122
+ resourceTemplates: result.resourceTemplates,
123
+ ...(result.error ? { error: result.error } : {}),
124
+ };
125
+ }
126
+ if (operation === 'readResource') {
127
+ return requestJson('/api/mcp/flujo/resources/read', {
128
+ method: 'POST',
129
+ body: JSON.stringify({ uri: payload.uri }),
130
+ });
131
+ }
132
+ const name = payload.name?.trim() ?? '';
133
+ if (!name)
134
+ throw new Error('A FLUJO tool name is required.');
135
+ const requestedTimeout = Number(payload.args?.timeout);
136
+ const timeoutMs = Number.isFinite(requestedTimeout) && requestedTimeout > 0
137
+ ? Math.max(30_000, Math.ceil(requestedTimeout * 1000) + 5_000)
138
+ : 30_000;
139
+ return requestJson(toolRoute(name), {
140
+ method: 'POST',
141
+ body: JSON.stringify({ name, args: payload.args ?? {} }),
142
+ }, timeoutMs);
143
+ }
144
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export * from './client.js';
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListResourceTemplatesRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { flujoRequest } from './client.js';
6
+ export * from './client.js';
7
+ const server = new Server({ name: '@mario.andreschak/mcp-flujo', version: '0.1.0' }, { capabilities: { tools: {}, resources: {} } });
8
+ server.setRequestHandler(ListToolsRequestSchema, async () => flujoRequest('listTools'));
9
+ server.setRequestHandler(CallToolRequestSchema, async (request) => flujoRequest('callTool', {
10
+ name: request.params.name,
11
+ args: request.params.arguments ?? {},
12
+ }));
13
+ server.setRequestHandler(ListResourcesRequestSchema, async (request) => flujoRequest('listResources', { cursor: request.params?.cursor }));
14
+ server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => flujoRequest('listResourceTemplates'));
15
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => flujoRequest('readResource', { uri: request.params.uri }));
16
+ const transport = new StdioServerTransport();
17
+ let closing = false;
18
+ async function shutdown() {
19
+ if (closing)
20
+ return;
21
+ closing = true;
22
+ await server.close().catch(() => undefined);
23
+ }
24
+ process.once('SIGINT', () => void shutdown());
25
+ process.once('SIGTERM', () => void shutdown());
26
+ process.once('SIGHUP', () => void shutdown());
27
+ server.connect(transport).catch((error) => {
28
+ process.stderr.write(`@mario.andreschak/mcp-flujo failed: ${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
29
+ process.exitCode = 1;
30
+ });
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,kCAAkC,EAClC,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,GAM1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,cAAc,aAAa,CAAC;AAE5B,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,OAAO,EAAE,EACzD,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,CAC/C,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,YAAY,CAAkB,WAAW,CAAC,CAAC,CAAC;AACzG,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAChE,YAAY,CAAiB,UAAU,EAAE;IACvC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;IACzB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE;CACrC,CAAC,CACH,CAAC;AACF,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACrE,YAAY,CAAsB,eAAe,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CACvF,CAAC;AACF,MAAM,CAAC,iBAAiB,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE,CACtE,YAAY,CAA8B,uBAAuB,CAAC,CACnE,CAAC;AACF,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACpE,YAAY,CAAqB,cAAc,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAC9E,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,KAAK,UAAU,QAAQ;IACrB,IAAI,OAAO;QAAE,OAAO;IACpB,OAAO,GAAG,IAAI,CAAC;IACf,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AACD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;AAC9C,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;AAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;AAE9C,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@mario.andreschak/mcp-flujo",
3
+ "version": "3.39.0",
4
+ "description": "FLUJO's standalone application MCP server",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "flujo-mcp-flujo": "dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist/**/*"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.json",
16
+ "typecheck": "tsc -p tsconfig.json --noEmit",
17
+ "test": "node --test"
18
+ },
19
+ "engines": {
20
+ "node": ">=20"
21
+ },
22
+ "dependencies": {
23
+ "@modelcontextprotocol/sdk": "^1.29.0"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^20.17.30",
27
+ "typescript": "5.8.3"
28
+ }
29
+ }