mcpgraph 0.1.2 → 0.1.3
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 +4 -4
- package/dist/config/schema.d.ts +19 -19
- package/dist/config/schema.js +5 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/execution/executor.d.ts.map +1 -1
- package/dist/execution/executor.js +17 -7
- package/dist/execution/executor.js.map +1 -1
- package/dist/execution/nodes/mcp-tool-executor.d.ts +2 -2
- package/dist/execution/nodes/mcp-tool-executor.d.ts.map +1 -1
- package/dist/execution/nodes/mcp-tool-executor.js.map +1 -1
- package/dist/graph/validator.d.ts.map +1 -1
- package/dist/graph/validator.js +45 -20
- package/dist/graph/validator.js.map +1 -1
- package/dist/types/config.d.ts +5 -5
- package/dist/types/config.d.ts.map +1 -1
- package/examples/count_files.yaml +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,16 +42,15 @@ tools:
|
|
|
42
42
|
count:
|
|
43
43
|
type: "number"
|
|
44
44
|
description: "The number of files in the directory"
|
|
45
|
-
entryNode: "entry_count_files"
|
|
46
|
-
exitNode: "exit_count_files"
|
|
47
45
|
|
|
48
46
|
nodes:
|
|
49
47
|
- id: "entry_count_files"
|
|
50
48
|
type: "entry"
|
|
49
|
+
tool: "count_files"
|
|
51
50
|
next: "list_directory_node"
|
|
52
51
|
|
|
53
52
|
- id: "list_directory_node"
|
|
54
|
-
type: "
|
|
53
|
+
type: "mcp"
|
|
55
54
|
server: "filesystem"
|
|
56
55
|
tool: "list_directory"
|
|
57
56
|
args:
|
|
@@ -67,6 +66,7 @@ nodes:
|
|
|
67
66
|
|
|
68
67
|
- id: "exit_count_files"
|
|
69
68
|
type: "exit"
|
|
69
|
+
tool: "count_files"
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
This graph:
|
|
@@ -78,7 +78,7 @@ This graph:
|
|
|
78
78
|
## Node Types
|
|
79
79
|
|
|
80
80
|
- **`entry`**: Entry point for a tool's graph execution. Receives tool arguments.
|
|
81
|
-
- **`
|
|
81
|
+
- **`mcp`**: Calls an MCP tool on an internal or external MCP server.
|
|
82
82
|
- **`transform`**: Applies [JSONata](https://jsonata.org/) expressions to transform data between nodes.
|
|
83
83
|
- **`switch`**: Uses [JSON Logic](https://jsonlogic.com/) to conditionally route to different nodes.
|
|
84
84
|
- **`exit`**: Exit point that returns the final result to the MCP tool caller.
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -82,8 +82,6 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
|
|
|
82
82
|
}> | undefined;
|
|
83
83
|
required?: string[] | undefined;
|
|
84
84
|
}>;
|
|
85
|
-
entryNode: z.ZodString;
|
|
86
|
-
exitNode: z.ZodString;
|
|
87
85
|
}, "strip", z.ZodTypeAny, {
|
|
88
86
|
description: string;
|
|
89
87
|
name: string;
|
|
@@ -105,8 +103,6 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
|
|
|
105
103
|
}> | undefined;
|
|
106
104
|
required?: string[] | undefined;
|
|
107
105
|
};
|
|
108
|
-
entryNode: string;
|
|
109
|
-
exitNode: string;
|
|
110
106
|
}, {
|
|
111
107
|
description: string;
|
|
112
108
|
name: string;
|
|
@@ -128,56 +124,60 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
|
|
|
128
124
|
}> | undefined;
|
|
129
125
|
required?: string[] | undefined;
|
|
130
126
|
};
|
|
131
|
-
entryNode: string;
|
|
132
|
-
exitNode: string;
|
|
133
127
|
}>, "many">;
|
|
134
128
|
nodes: z.ZodArray<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
|
|
135
129
|
id: z.ZodString;
|
|
136
130
|
} & {
|
|
137
131
|
type: z.ZodLiteral<"entry">;
|
|
132
|
+
tool: z.ZodString;
|
|
138
133
|
next: z.ZodString;
|
|
139
134
|
}, "strip", z.ZodTypeAny, {
|
|
140
135
|
type: "entry";
|
|
141
136
|
id: string;
|
|
142
137
|
next: string;
|
|
138
|
+
tool: string;
|
|
143
139
|
}, {
|
|
144
140
|
type: "entry";
|
|
145
141
|
id: string;
|
|
146
142
|
next: string;
|
|
143
|
+
tool: string;
|
|
147
144
|
}>, z.ZodObject<{
|
|
148
145
|
id: z.ZodString;
|
|
149
146
|
next: z.ZodOptional<z.ZodString>;
|
|
150
147
|
} & {
|
|
151
148
|
type: z.ZodLiteral<"exit">;
|
|
149
|
+
tool: z.ZodString;
|
|
152
150
|
}, "strip", z.ZodTypeAny, {
|
|
153
151
|
type: "exit";
|
|
154
152
|
id: string;
|
|
153
|
+
tool: string;
|
|
155
154
|
next?: string | undefined;
|
|
156
155
|
}, {
|
|
157
156
|
type: "exit";
|
|
158
157
|
id: string;
|
|
158
|
+
tool: string;
|
|
159
159
|
next?: string | undefined;
|
|
160
160
|
}>, z.ZodObject<{
|
|
161
161
|
id: z.ZodString;
|
|
162
162
|
} & {
|
|
163
|
-
type: z.ZodLiteral<"
|
|
163
|
+
type: z.ZodLiteral<"mcp">;
|
|
164
164
|
server: z.ZodString;
|
|
165
165
|
tool: z.ZodString;
|
|
166
166
|
args: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
167
167
|
next: z.ZodString;
|
|
168
168
|
}, "strip", z.ZodTypeAny, {
|
|
169
|
-
type: "
|
|
169
|
+
type: "mcp";
|
|
170
170
|
id: string;
|
|
171
171
|
next: string;
|
|
172
|
-
server: string;
|
|
173
172
|
tool: string;
|
|
173
|
+
server: string;
|
|
174
174
|
args: Record<string, unknown>;
|
|
175
175
|
}, {
|
|
176
|
-
type: "
|
|
176
|
+
type: "mcp";
|
|
177
177
|
id: string;
|
|
178
178
|
next: string;
|
|
179
|
-
server: string;
|
|
180
179
|
tool: string;
|
|
180
|
+
server: string;
|
|
181
181
|
args: Record<string, unknown>;
|
|
182
182
|
}>, z.ZodObject<{
|
|
183
183
|
id: z.ZodString;
|
|
@@ -265,23 +265,23 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
|
|
|
265
265
|
}> | undefined;
|
|
266
266
|
required?: string[] | undefined;
|
|
267
267
|
};
|
|
268
|
-
entryNode: string;
|
|
269
|
-
exitNode: string;
|
|
270
268
|
}[];
|
|
271
269
|
nodes: ({
|
|
272
270
|
type: "entry";
|
|
273
271
|
id: string;
|
|
274
272
|
next: string;
|
|
273
|
+
tool: string;
|
|
275
274
|
} | {
|
|
276
275
|
type: "exit";
|
|
277
276
|
id: string;
|
|
277
|
+
tool: string;
|
|
278
278
|
next?: string | undefined;
|
|
279
279
|
} | {
|
|
280
|
-
type: "
|
|
280
|
+
type: "mcp";
|
|
281
281
|
id: string;
|
|
282
282
|
next: string;
|
|
283
|
-
server: string;
|
|
284
283
|
tool: string;
|
|
284
|
+
server: string;
|
|
285
285
|
args: Record<string, unknown>;
|
|
286
286
|
} | {
|
|
287
287
|
type: "transform";
|
|
@@ -327,23 +327,23 @@ export declare const mcpGraphConfigSchema: z.ZodObject<{
|
|
|
327
327
|
}> | undefined;
|
|
328
328
|
required?: string[] | undefined;
|
|
329
329
|
};
|
|
330
|
-
entryNode: string;
|
|
331
|
-
exitNode: string;
|
|
332
330
|
}[];
|
|
333
331
|
nodes: ({
|
|
334
332
|
type: "entry";
|
|
335
333
|
id: string;
|
|
336
334
|
next: string;
|
|
335
|
+
tool: string;
|
|
337
336
|
} | {
|
|
338
337
|
type: "exit";
|
|
339
338
|
id: string;
|
|
339
|
+
tool: string;
|
|
340
340
|
next?: string | undefined;
|
|
341
341
|
} | {
|
|
342
|
-
type: "
|
|
342
|
+
type: "mcp";
|
|
343
343
|
id: string;
|
|
344
344
|
next: string;
|
|
345
|
-
server: string;
|
|
346
345
|
tool: string;
|
|
346
|
+
server: string;
|
|
347
347
|
args: Record<string, unknown>;
|
|
348
348
|
} | {
|
|
349
349
|
type: "transform";
|
package/dist/config/schema.js
CHANGED
|
@@ -24,13 +24,15 @@ const baseNodeSchema = z.object({
|
|
|
24
24
|
});
|
|
25
25
|
const entryNodeSchema = baseNodeSchema.extend({
|
|
26
26
|
type: z.literal("entry"),
|
|
27
|
+
tool: z.string(),
|
|
27
28
|
next: z.string(),
|
|
28
29
|
});
|
|
29
30
|
const exitNodeSchema = baseNodeSchema.extend({
|
|
30
31
|
type: z.literal("exit"),
|
|
32
|
+
tool: z.string(),
|
|
31
33
|
});
|
|
32
|
-
const
|
|
33
|
-
type: z.literal("
|
|
34
|
+
const mcpNodeSchema = baseNodeSchema.extend({
|
|
35
|
+
type: z.literal("mcp"),
|
|
34
36
|
server: z.string(),
|
|
35
37
|
tool: z.string(),
|
|
36
38
|
args: z.record(z.unknown()),
|
|
@@ -54,7 +56,7 @@ const switchNodeSchema = baseNodeSchema.extend({
|
|
|
54
56
|
const nodeSchema = z.discriminatedUnion("type", [
|
|
55
57
|
entryNodeSchema,
|
|
56
58
|
exitNodeSchema,
|
|
57
|
-
|
|
59
|
+
mcpNodeSchema,
|
|
58
60
|
transformNodeSchema,
|
|
59
61
|
switchNodeSchema,
|
|
60
62
|
]);
|
|
@@ -63,8 +65,6 @@ const toolDefinitionSchema = z.object({
|
|
|
63
65
|
description: z.string(),
|
|
64
66
|
inputSchema: jsonSchemaSchema,
|
|
65
67
|
outputSchema: jsonSchemaSchema,
|
|
66
|
-
entryNode: z.string(),
|
|
67
|
-
exitNode: z.string(),
|
|
68
68
|
});
|
|
69
69
|
export const mcpGraphConfigSchema = z.object({
|
|
70
70
|
version: z.string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE;IACzD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AAQzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAmB;gBAE5B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB;IAM7D,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AAQzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAmB;gBAE5B,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB;IAM7D,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,OAAO,CAAC;CA0EpB"}
|
|
@@ -24,10 +24,20 @@ export class GraphExecutor {
|
|
|
24
24
|
throw new Error(`Tool not found: ${toolName}`);
|
|
25
25
|
}
|
|
26
26
|
logger.info(`Executing tool: ${toolName}`);
|
|
27
|
+
// Find entry node for this tool
|
|
28
|
+
const entryNode = this.config.nodes.find((n) => n.type === "entry" && n.tool === toolName);
|
|
29
|
+
if (!entryNode) {
|
|
30
|
+
throw new Error(`Entry node not found for tool: ${toolName}`);
|
|
31
|
+
}
|
|
32
|
+
// Find exit node for this tool
|
|
33
|
+
const exitNode = this.config.nodes.find((n) => n.type === "exit" && n.tool === toolName);
|
|
34
|
+
if (!exitNode) {
|
|
35
|
+
throw new Error(`Exit node not found for tool: ${toolName}`);
|
|
36
|
+
}
|
|
27
37
|
const context = new ExecutionContext(toolInput);
|
|
28
|
-
let currentNodeId =
|
|
38
|
+
let currentNodeId = entryNode.id;
|
|
29
39
|
// Execute nodes until we reach the exit node
|
|
30
|
-
while (currentNodeId !==
|
|
40
|
+
while (currentNodeId !== exitNode.id) {
|
|
31
41
|
const node = this.graph.getNode(currentNodeId);
|
|
32
42
|
if (!node) {
|
|
33
43
|
throw new Error(`Node not found: ${currentNodeId}`);
|
|
@@ -44,7 +54,7 @@ export class GraphExecutor {
|
|
|
44
54
|
case "transform":
|
|
45
55
|
result = await executeTransformNode(node, context);
|
|
46
56
|
break;
|
|
47
|
-
case "
|
|
57
|
+
case "mcp":
|
|
48
58
|
result = await executeMcpToolNode(node, context, this.clientManager);
|
|
49
59
|
break;
|
|
50
60
|
case "switch":
|
|
@@ -61,12 +71,12 @@ export class GraphExecutor {
|
|
|
61
71
|
}
|
|
62
72
|
}
|
|
63
73
|
// Should not reach here, but handle exit node
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
66
|
-
const result = executeExitNode(
|
|
74
|
+
const finalExitNode = this.graph.getNode(exitNode.id);
|
|
75
|
+
if (finalExitNode && finalExitNode.type === "exit") {
|
|
76
|
+
const result = executeExitNode(finalExitNode, context);
|
|
67
77
|
return result.output;
|
|
68
78
|
}
|
|
69
|
-
throw new Error(`Exit node ${
|
|
79
|
+
throw new Error(`Exit node ${exitNode.id} not found or invalid`);
|
|
70
80
|
}
|
|
71
81
|
}
|
|
72
82
|
//# sourceMappingURL=executor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,OAAO,aAAa;IAChB,MAAM,CAAiB;IACvB,KAAK,CAAQ;IACb,aAAa,CAAmB;IAExC,YAAY,MAAsB,EAAE,aAA+B;QACjE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,SAAkC;QAElC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/execution/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP tool node executor
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { McpNode } from "../../types/config.js";
|
|
5
5
|
import type { ExecutionContext } from "../context.js";
|
|
6
6
|
import type { McpClientManager } from "../../mcp/client-manager.js";
|
|
7
|
-
export declare function executeMcpToolNode(node:
|
|
7
|
+
export declare function executeMcpToolNode(node: McpNode, context: ExecutionContext, clientManager: McpClientManager): Promise<{
|
|
8
8
|
output: unknown;
|
|
9
9
|
nextNode: string;
|
|
10
10
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-executor.d.ts","sourceRoot":"","sources":["../../../src/execution/nodes/mcp-tool-executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-tool-executor.d.ts","sourceRoot":"","sources":["../../../src/execution/nodes/mcp-tool-executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,gBAAgB,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA4EhD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-executor.js","sourceRoot":"","sources":["../../../src/execution/nodes/mcp-tool-executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,
|
|
1
|
+
{"version":3,"file":"mcp-tool-executor.js","sourceRoot":"","sources":["../../../src/execution/nodes/mcp-tool-executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAa,EACb,OAAyB,EACzB,aAA+B;IAE/B,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IAElF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtC,wDAAwD;IACxD,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC5D,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,mBAAmB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAE5E,2BAA2B;IAC3B,mDAAmD;IACnD,oEAAoE;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC;IACtB,MAAM,IAAI,GAAG;QACX,IAAI;QACJ,yCAAyC;QACzC,oEAAoE;QACpE,OAAO,CAAC,GAAG,EAAE,GAAG,cAAc;KAC/B,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAEzE,gBAAgB;IAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;QACnC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,eAA0C;KACtD,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAmC,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAA6C,CAAC;IACrE,IAAI,UAAmB,CAAC;IAExB,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,WAAW,GAAI,OAAO,CAAC,CAAC,CAAuB,CAAC,IAAI,CAAC;QAC3D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,WAAW,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAExE,yCAAyC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC;IAE1B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAErD,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/graph/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/graph/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,EAAE,CA4GvE"}
|
package/dist/graph/validator.js
CHANGED
|
@@ -5,39 +5,58 @@ import { Graph } from "./graph.js";
|
|
|
5
5
|
export function validateGraph(config) {
|
|
6
6
|
const errors = [];
|
|
7
7
|
const graph = new Graph(config.nodes);
|
|
8
|
-
// Validate all tools have
|
|
8
|
+
// Validate all tools have exactly one entry and one exit node
|
|
9
9
|
for (const tool of config.tools) {
|
|
10
|
-
|
|
10
|
+
const entryNodes = config.nodes.filter((n) => n.type === "entry" && n.tool === tool.name);
|
|
11
|
+
const exitNodes = config.nodes.filter((n) => n.type === "exit" && n.tool === tool.name);
|
|
12
|
+
if (entryNodes.length === 0) {
|
|
11
13
|
errors.push({
|
|
12
|
-
message: `Tool "${tool.name}"
|
|
14
|
+
message: `Tool "${tool.name}" has no entry node`,
|
|
13
15
|
toolName: tool.name,
|
|
14
16
|
});
|
|
15
17
|
}
|
|
16
|
-
if (
|
|
18
|
+
else if (entryNodes.length > 1) {
|
|
17
19
|
errors.push({
|
|
18
|
-
message: `Tool "${tool.name}"
|
|
20
|
+
message: `Tool "${tool.name}" has multiple entry nodes: ${entryNodes.map((n) => n.id).join(", ")}`,
|
|
19
21
|
toolName: tool.name,
|
|
20
22
|
});
|
|
21
23
|
}
|
|
22
|
-
|
|
23
|
-
const entryNode = graph.getNode(tool.entryNode);
|
|
24
|
-
if (entryNode && entryNode.type !== "entry") {
|
|
24
|
+
if (exitNodes.length === 0) {
|
|
25
25
|
errors.push({
|
|
26
|
-
message: `Tool "${tool.name}"
|
|
26
|
+
message: `Tool "${tool.name}" has no exit node`,
|
|
27
27
|
toolName: tool.name,
|
|
28
|
-
nodeId: tool.entryNode,
|
|
29
28
|
});
|
|
30
29
|
}
|
|
31
|
-
|
|
32
|
-
const exitNode = graph.getNode(tool.exitNode);
|
|
33
|
-
if (exitNode && exitNode.type !== "exit") {
|
|
30
|
+
else if (exitNodes.length > 1) {
|
|
34
31
|
errors.push({
|
|
35
|
-
message: `Tool "${tool.name}" exit
|
|
32
|
+
message: `Tool "${tool.name}" has multiple exit nodes: ${exitNodes.map((n) => n.id).join(", ")}`,
|
|
36
33
|
toolName: tool.name,
|
|
37
|
-
nodeId: tool.exitNode,
|
|
38
34
|
});
|
|
39
35
|
}
|
|
40
36
|
}
|
|
37
|
+
// Validate entry and exit nodes reference valid tools
|
|
38
|
+
for (const node of config.nodes) {
|
|
39
|
+
if (node.type === "entry") {
|
|
40
|
+
const toolName = node.tool;
|
|
41
|
+
const tool = config.tools.find((t) => t.name === toolName);
|
|
42
|
+
if (!tool) {
|
|
43
|
+
errors.push({
|
|
44
|
+
message: `Entry node "${node.id}" references non-existent tool "${toolName}"`,
|
|
45
|
+
nodeId: node.id,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (node.type === "exit") {
|
|
50
|
+
const toolName = node.tool;
|
|
51
|
+
const tool = config.tools.find((t) => t.name === toolName);
|
|
52
|
+
if (!tool) {
|
|
53
|
+
errors.push({
|
|
54
|
+
message: `Exit node "${node.id}" references non-existent tool "${toolName}"`,
|
|
55
|
+
nodeId: node.id,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
41
60
|
// Validate all node references exist
|
|
42
61
|
for (const node of config.nodes) {
|
|
43
62
|
if ("next" in node && node.next) {
|
|
@@ -61,11 +80,17 @@ export function validateGraph(config) {
|
|
|
61
80
|
}
|
|
62
81
|
// Validate exit nodes are reachable (basic check - can be enhanced)
|
|
63
82
|
for (const tool of config.tools) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
const entryNodes = config.nodes.filter((n) => n.type === "entry" && n.tool === tool.name);
|
|
84
|
+
const exitNodes = config.nodes.filter((n) => n.type === "exit" && n.tool === tool.name);
|
|
85
|
+
if (entryNodes.length === 1 && exitNodes.length === 1) {
|
|
86
|
+
const entryNode = entryNodes[0];
|
|
87
|
+
const exitNode = exitNodes[0];
|
|
88
|
+
if (!isReachable(graph, entryNode.id, exitNode.id)) {
|
|
89
|
+
errors.push({
|
|
90
|
+
message: `Tool "${tool.name}" exit node "${exitNode.id}" is not reachable from entry node "${entryNode.id}"`,
|
|
91
|
+
toolName: tool.name,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
69
94
|
}
|
|
70
95
|
}
|
|
71
96
|
return errors;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/graph/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AASnC,MAAM,UAAU,aAAa,CAAC,MAAsB;IAClD,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtC,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/graph/validator.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -17,8 +17,6 @@ export interface ToolDefinition {
|
|
|
17
17
|
description: string;
|
|
18
18
|
inputSchema: JsonSchema;
|
|
19
19
|
outputSchema: JsonSchema;
|
|
20
|
-
entryNode: string;
|
|
21
|
-
exitNode: string;
|
|
22
20
|
}
|
|
23
21
|
export interface JsonSchema {
|
|
24
22
|
type: string;
|
|
@@ -30,7 +28,7 @@ export interface JsonSchemaProperty {
|
|
|
30
28
|
type: string;
|
|
31
29
|
description?: string;
|
|
32
30
|
}
|
|
33
|
-
export type NodeDefinition = EntryNode | ExitNode |
|
|
31
|
+
export type NodeDefinition = EntryNode | ExitNode | McpNode | TransformNode | SwitchNode;
|
|
34
32
|
export interface BaseNode {
|
|
35
33
|
id: string;
|
|
36
34
|
type: string;
|
|
@@ -38,13 +36,15 @@ export interface BaseNode {
|
|
|
38
36
|
}
|
|
39
37
|
export interface EntryNode extends BaseNode {
|
|
40
38
|
type: "entry";
|
|
39
|
+
tool: string;
|
|
41
40
|
next: string;
|
|
42
41
|
}
|
|
43
42
|
export interface ExitNode extends BaseNode {
|
|
44
43
|
type: "exit";
|
|
44
|
+
tool: string;
|
|
45
45
|
}
|
|
46
|
-
export interface
|
|
47
|
-
type: "
|
|
46
|
+
export interface McpNode extends BaseNode {
|
|
47
|
+
type: "mcp";
|
|
48
48
|
server: string;
|
|
49
49
|
tool: string;
|
|
50
50
|
args: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,YAAY,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,YAAY,EAAE,UAAU,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,QAAQ,GACR,OAAO,GACP,aAAa,GACb,UAAU,CAAC;AAEf,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAEd;AAED,MAAM,WAAW,OAAQ,SAAQ,QAAQ;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC"}
|
|
@@ -24,19 +24,18 @@ tools:
|
|
|
24
24
|
count:
|
|
25
25
|
type: "number"
|
|
26
26
|
description: "The number of files in the directory"
|
|
27
|
-
entryNode: "entry_count_files"
|
|
28
|
-
exitNode: "exit_count_files"
|
|
29
27
|
|
|
30
28
|
# Graph Nodes
|
|
31
29
|
nodes:
|
|
32
30
|
# Entry node: Receives tool arguments
|
|
33
31
|
- id: "entry_count_files"
|
|
34
32
|
type: "entry"
|
|
33
|
+
tool: "count_files"
|
|
35
34
|
next: "list_directory_node"
|
|
36
35
|
|
|
37
36
|
# List directory contents
|
|
38
37
|
- id: "list_directory_node"
|
|
39
|
-
type: "
|
|
38
|
+
type: "mcp"
|
|
40
39
|
server: "filesystem"
|
|
41
40
|
tool: "list_directory"
|
|
42
41
|
args:
|
|
@@ -54,4 +53,5 @@ nodes:
|
|
|
54
53
|
# Exit node: Returns the count
|
|
55
54
|
- id: "exit_count_files"
|
|
56
55
|
type: "exit"
|
|
56
|
+
tool: "count_files"
|
|
57
57
|
|