mcpgraph 0.1.2 → 0.1.4
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 +46 -6
- package/dist/api.d.ts +71 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +111 -0
- package/dist/api.js.map +1 -0
- package/dist/config/schema.d.ts +106 -23
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +34 -5
- package/dist/config/schema.js.map +1 -1
- package/dist/execution/executor.d.ts +1 -0
- package/dist/execution/executor.d.ts.map +1 -1
- package/dist/execution/executor.js +25 -8
- 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 +3 -13
- 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 +57 -20
- package/dist/graph/validator.js.map +1 -1
- package/dist/main.js +10 -28
- package/dist/main.js.map +1 -1
- package/dist/mcp/client-manager.d.ts +3 -1
- package/dist/mcp/client-manager.d.ts.map +1 -1
- package/dist/mcp/client-manager.js +77 -6
- package/dist/mcp/client-manager.js.map +1 -1
- package/dist/types/config.d.ts +26 -5
- package/dist/types/config.d.ts.map +1 -1
- package/examples/api-usage.ts +69 -0
- package/examples/count_files.yaml +23 -5
- package/package.json +5 -1
|
@@ -18,16 +18,32 @@ export class GraphExecutor {
|
|
|
18
18
|
this.graph = new Graph(config.nodes);
|
|
19
19
|
this.clientManager = clientManager;
|
|
20
20
|
}
|
|
21
|
+
getServerConfig(serverName) {
|
|
22
|
+
if (!this.config.servers || !this.config.servers[serverName]) {
|
|
23
|
+
throw new Error(`Server configuration not found: ${serverName}`);
|
|
24
|
+
}
|
|
25
|
+
return this.config.servers[serverName];
|
|
26
|
+
}
|
|
21
27
|
async executeTool(toolName, toolInput) {
|
|
22
28
|
const tool = this.config.tools.find((t) => t.name === toolName);
|
|
23
29
|
if (!tool) {
|
|
24
30
|
throw new Error(`Tool not found: ${toolName}`);
|
|
25
31
|
}
|
|
26
32
|
logger.info(`Executing tool: ${toolName}`);
|
|
33
|
+
// Find entry node for this tool
|
|
34
|
+
const entryNode = this.config.nodes.find((n) => n.type === "entry" && n.tool === toolName);
|
|
35
|
+
if (!entryNode) {
|
|
36
|
+
throw new Error(`Entry node not found for tool: ${toolName}`);
|
|
37
|
+
}
|
|
38
|
+
// Find exit node for this tool
|
|
39
|
+
const exitNode = this.config.nodes.find((n) => n.type === "exit" && n.tool === toolName);
|
|
40
|
+
if (!exitNode) {
|
|
41
|
+
throw new Error(`Exit node not found for tool: ${toolName}`);
|
|
42
|
+
}
|
|
27
43
|
const context = new ExecutionContext(toolInput);
|
|
28
|
-
let currentNodeId =
|
|
44
|
+
let currentNodeId = entryNode.id;
|
|
29
45
|
// Execute nodes until we reach the exit node
|
|
30
|
-
while (currentNodeId !==
|
|
46
|
+
while (currentNodeId !== exitNode.id) {
|
|
31
47
|
const node = this.graph.getNode(currentNodeId);
|
|
32
48
|
if (!node) {
|
|
33
49
|
throw new Error(`Node not found: ${currentNodeId}`);
|
|
@@ -44,8 +60,9 @@ export class GraphExecutor {
|
|
|
44
60
|
case "transform":
|
|
45
61
|
result = await executeTransformNode(node, context);
|
|
46
62
|
break;
|
|
47
|
-
case "
|
|
48
|
-
|
|
63
|
+
case "mcp":
|
|
64
|
+
const serverConfig = this.getServerConfig(node.server);
|
|
65
|
+
result = await executeMcpToolNode(node, context, this.clientManager, serverConfig);
|
|
49
66
|
break;
|
|
50
67
|
case "switch":
|
|
51
68
|
result = await executeSwitchNode(node, context);
|
|
@@ -61,12 +78,12 @@ export class GraphExecutor {
|
|
|
61
78
|
}
|
|
62
79
|
}
|
|
63
80
|
// Should not reach here, but handle exit node
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
66
|
-
const result = executeExitNode(
|
|
81
|
+
const finalExitNode = this.graph.getNode(exitNode.id);
|
|
82
|
+
if (finalExitNode && finalExitNode.type === "exit") {
|
|
83
|
+
const result = executeExitNode(finalExitNode, context);
|
|
67
84
|
return result.output;
|
|
68
85
|
}
|
|
69
|
-
throw new Error(`Exit node ${
|
|
86
|
+
throw new Error(`Exit node ${exitNode.id} not found or invalid`);
|
|
70
87
|
}
|
|
71
88
|
}
|
|
72
89
|
//# 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, ServerConfig } 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, serverConfig: ServerConfig): 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,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACnE,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,EAC/B,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiEhD"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { evaluateJsonata } from "../../expressions/jsonata.js";
|
|
5
5
|
import { logger } from "../../logger.js";
|
|
6
|
-
export async function executeMcpToolNode(node, context, clientManager) {
|
|
6
|
+
export async function executeMcpToolNode(node, context, clientManager, serverConfig) {
|
|
7
7
|
logger.debug(`Executing MCP tool node: ${node.id} (${node.server}.${node.tool})`);
|
|
8
8
|
const exprContext = context.getData();
|
|
9
9
|
// Pre-transform: Apply JSONata to format tool arguments
|
|
@@ -21,17 +21,8 @@ export async function executeMcpToolNode(node, context, clientManager) {
|
|
|
21
21
|
}
|
|
22
22
|
logger.debug(`MCP tool args: ${JSON.stringify(transformedArgs, null, 2)}`);
|
|
23
23
|
logger.debug(`Expression context: ${JSON.stringify(exprContext, null, 2)}`);
|
|
24
|
-
// Get or create MCP client
|
|
25
|
-
|
|
26
|
-
// In a real implementation, server config would come from somewhere
|
|
27
|
-
const command = "npx";
|
|
28
|
-
const args = [
|
|
29
|
-
"-y",
|
|
30
|
-
"@modelcontextprotocol/server-filesystem",
|
|
31
|
-
// This should come from config, but for now hardcode test directory
|
|
32
|
-
process.cwd() + "/tests/files",
|
|
33
|
-
];
|
|
34
|
-
const client = await clientManager.getClient(node.server, command, args);
|
|
24
|
+
// Get or create MCP client using server configuration
|
|
25
|
+
const client = await clientManager.getClient(node.server, serverConfig);
|
|
35
26
|
// Call the tool
|
|
36
27
|
const result = await client.callTool({
|
|
37
28
|
name: node.tool,
|
|
@@ -62,7 +53,6 @@ export async function executeMcpToolNode(node, context, clientManager) {
|
|
|
62
53
|
toolOutput = content[0];
|
|
63
54
|
}
|
|
64
55
|
logger.debug(`MCP tool output: ${JSON.stringify(toolOutput, null, 2)}`);
|
|
65
|
-
// Post-transform could go here if needed
|
|
66
56
|
const output = toolOutput;
|
|
67
57
|
context.setNodeOutput(node.id, output);
|
|
68
58
|
context.addHistory(node.id, transformedArgs, output);
|
|
@@ -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":"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"}
|
|
@@ -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,CAyHvE"}
|
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) {
|
|
@@ -59,13 +78,31 @@ export function validateGraph(config) {
|
|
|
59
78
|
}
|
|
60
79
|
}
|
|
61
80
|
}
|
|
81
|
+
// Validate mcp nodes reference valid servers
|
|
82
|
+
for (const node of config.nodes) {
|
|
83
|
+
if (node.type === "mcp") {
|
|
84
|
+
const serverName = node.server;
|
|
85
|
+
if (!config.servers || !config.servers[serverName]) {
|
|
86
|
+
errors.push({
|
|
87
|
+
message: `MCP node "${node.id}" references non-existent server "${serverName}"`,
|
|
88
|
+
nodeId: node.id,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
62
93
|
// Validate exit nodes are reachable (basic check - can be enhanced)
|
|
63
94
|
for (const tool of config.tools) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
95
|
+
const entryNodes = config.nodes.filter((n) => n.type === "entry" && n.tool === tool.name);
|
|
96
|
+
const exitNodes = config.nodes.filter((n) => n.type === "exit" && n.tool === tool.name);
|
|
97
|
+
if (entryNodes.length === 1 && exitNodes.length === 1) {
|
|
98
|
+
const entryNode = entryNodes[0];
|
|
99
|
+
const exitNode = exitNodes[0];
|
|
100
|
+
if (!isReachable(graph, entryNode.id, exitNode.id)) {
|
|
101
|
+
errors.push({
|
|
102
|
+
message: `Tool "${tool.name}" exit node "${exitNode.id}" is not reachable from entry node "${entryNode.id}"`,
|
|
103
|
+
toolName: tool.name,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
69
106
|
}
|
|
70
107
|
}
|
|
71
108
|
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/main.js
CHANGED
|
@@ -3,10 +3,7 @@
|
|
|
3
3
|
* mcpGraph - MCP server that runs a directed graph of MCP server calls
|
|
4
4
|
*/
|
|
5
5
|
import { logger } from './logger.js';
|
|
6
|
-
import {
|
|
7
|
-
import { validateGraph } from './graph/validator.js';
|
|
8
|
-
import { GraphExecutor } from './execution/executor.js';
|
|
9
|
-
import { McpClientManager } from './mcp/client-manager.js';
|
|
6
|
+
import { McpGraphApi } from './api.js';
|
|
10
7
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
11
8
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
12
9
|
import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
@@ -23,24 +20,13 @@ const { values } = parseArgs({
|
|
|
23
20
|
async function main() {
|
|
24
21
|
try {
|
|
25
22
|
const configPath = values.config || 'config.yaml';
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
if (errors.length > 0) {
|
|
30
|
-
logger.error('Graph validation failed:');
|
|
31
|
-
for (const error of errors) {
|
|
32
|
-
logger.error(` - ${error.message}`);
|
|
33
|
-
}
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
logger.info(`Loaded configuration: ${config.server.name} v${config.server.version}`);
|
|
37
|
-
logger.info(`Tools defined: ${config.tools.map(t => t.name).join(', ')}`);
|
|
38
|
-
const clientManager = new McpClientManager();
|
|
39
|
-
const executor = new GraphExecutor(config, clientManager);
|
|
23
|
+
// Create API instance (loads and validates config)
|
|
24
|
+
const api = new McpGraphApi(configPath);
|
|
25
|
+
const serverInfo = api.getServerInfo();
|
|
40
26
|
// Initialize MCP server
|
|
41
27
|
const server = new Server({
|
|
42
|
-
name:
|
|
43
|
-
version:
|
|
28
|
+
name: serverInfo.name,
|
|
29
|
+
version: serverInfo.version,
|
|
44
30
|
}, {
|
|
45
31
|
capabilities: {
|
|
46
32
|
tools: {},
|
|
@@ -48,7 +34,7 @@ async function main() {
|
|
|
48
34
|
});
|
|
49
35
|
// Register tools
|
|
50
36
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
51
|
-
tools:
|
|
37
|
+
tools: api.listTools().map(tool => ({
|
|
52
38
|
name: tool.name,
|
|
53
39
|
description: tool.description,
|
|
54
40
|
inputSchema: tool.inputSchema,
|
|
@@ -56,20 +42,16 @@ async function main() {
|
|
|
56
42
|
}));
|
|
57
43
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
58
44
|
const toolName = request.params.name;
|
|
59
|
-
const tool = config.tools.find(t => t.name === toolName);
|
|
60
|
-
if (!tool) {
|
|
61
|
-
throw new Error(`Tool not found: ${toolName}`);
|
|
62
|
-
}
|
|
63
45
|
logger.info(`Tool called: ${toolName}`);
|
|
64
|
-
const
|
|
46
|
+
const executionResult = await api.executeTool(toolName, request.params.arguments || {});
|
|
65
47
|
return {
|
|
66
48
|
content: [
|
|
67
49
|
{
|
|
68
50
|
type: 'text',
|
|
69
|
-
text: JSON.stringify(result),
|
|
51
|
+
text: JSON.stringify(executionResult.result),
|
|
70
52
|
},
|
|
71
53
|
],
|
|
72
|
-
structuredContent:
|
|
54
|
+
structuredContent: executionResult.structuredContent,
|
|
73
55
|
};
|
|
74
56
|
});
|
|
75
57
|
const transport = new StdioServerTransport();
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
* MCP client manager for external MCP servers
|
|
3
3
|
*/
|
|
4
4
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
5
|
+
import type { ServerConfig } from "../types/config.js";
|
|
5
6
|
export declare class McpClientManager {
|
|
6
7
|
private clients;
|
|
7
8
|
constructor();
|
|
8
|
-
getClient(serverName: string,
|
|
9
|
+
getClient(serverName: string, serverConfig: ServerConfig): Promise<Client>;
|
|
9
10
|
closeAll(): Promise<void>;
|
|
11
|
+
private createTransport;
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=client-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/client-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"client-manager.d.ts","sourceRoot":"","sources":["../../src/mcp/client-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,oBAAoB,CAAC;AAE5B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAsB;;IAM/B,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IA0B1E,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAQjB,eAAe;CAkF9B"}
|
|
@@ -3,21 +3,20 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
5
5
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
6
|
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
7
|
+
import { StreamableHTTPClientTransport, } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
6
8
|
import { logger } from "../logger.js";
|
|
7
9
|
export class McpClientManager {
|
|
8
10
|
clients;
|
|
9
11
|
constructor() {
|
|
10
12
|
this.clients = new Map();
|
|
11
13
|
}
|
|
12
|
-
async getClient(serverName,
|
|
14
|
+
async getClient(serverName, serverConfig) {
|
|
13
15
|
if (this.clients.has(serverName)) {
|
|
14
16
|
return this.clients.get(serverName);
|
|
15
17
|
}
|
|
16
|
-
logger.info(`Creating MCP client for server: ${serverName}`);
|
|
17
|
-
const transport =
|
|
18
|
-
command,
|
|
19
|
-
args,
|
|
20
|
-
});
|
|
18
|
+
logger.info(`Creating MCP client for server: ${serverName} (type: ${getServerType(serverConfig)})`);
|
|
19
|
+
const transport = await this.createTransport(serverConfig);
|
|
21
20
|
const client = new Client({
|
|
22
21
|
name: `mcpgraph-${serverName}`,
|
|
23
22
|
version: "0.1.0",
|
|
@@ -35,5 +34,77 @@ export class McpClientManager {
|
|
|
35
34
|
}
|
|
36
35
|
this.clients.clear();
|
|
37
36
|
}
|
|
37
|
+
async createTransport(serverConfig) {
|
|
38
|
+
// Default to stdio if type is not specified
|
|
39
|
+
const configType = getServerType(serverConfig);
|
|
40
|
+
if (configType === "stdio" || !("type" in serverConfig)) {
|
|
41
|
+
const stdioConfig = serverConfig;
|
|
42
|
+
const transportOptions = {
|
|
43
|
+
command: stdioConfig.command,
|
|
44
|
+
args: stdioConfig.args,
|
|
45
|
+
env: process.env,
|
|
46
|
+
};
|
|
47
|
+
if (stdioConfig.cwd) {
|
|
48
|
+
transportOptions.cwd = stdioConfig.cwd;
|
|
49
|
+
}
|
|
50
|
+
return new StdioClientTransport(transportOptions);
|
|
51
|
+
}
|
|
52
|
+
else if (configType === "sse") {
|
|
53
|
+
const sseConfig = serverConfig;
|
|
54
|
+
const options = {};
|
|
55
|
+
// Merge headers into requestInit if provided
|
|
56
|
+
if (sseConfig.headers || sseConfig.requestInit) {
|
|
57
|
+
const existingRequestInit = sseConfig.requestInit || {};
|
|
58
|
+
const existingHeaders = existingRequestInit.headers
|
|
59
|
+
? new Headers(existingRequestInit.headers)
|
|
60
|
+
: new Headers();
|
|
61
|
+
// Add config headers to existing headers
|
|
62
|
+
if (sseConfig.headers) {
|
|
63
|
+
for (const [key, value] of Object.entries(sseConfig.headers)) {
|
|
64
|
+
existingHeaders.set(key, value);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
options.requestInit = {
|
|
68
|
+
...existingRequestInit,
|
|
69
|
+
headers: existingHeaders,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
if (sseConfig.eventSourceInit) {
|
|
73
|
+
options.eventSourceInit = sseConfig.eventSourceInit;
|
|
74
|
+
}
|
|
75
|
+
return new SSEClientTransport(new URL(sseConfig.url), options);
|
|
76
|
+
}
|
|
77
|
+
else if (configType === "streamableHttp") {
|
|
78
|
+
const httpConfig = serverConfig;
|
|
79
|
+
const options = {};
|
|
80
|
+
// Merge headers into requestInit if provided
|
|
81
|
+
if (httpConfig.headers || httpConfig.requestInit) {
|
|
82
|
+
const existingRequestInit = httpConfig.requestInit || {};
|
|
83
|
+
const existingHeaders = existingRequestInit.headers
|
|
84
|
+
? new Headers(existingRequestInit.headers)
|
|
85
|
+
: new Headers();
|
|
86
|
+
// Add config headers to existing headers
|
|
87
|
+
if (httpConfig.headers) {
|
|
88
|
+
for (const [key, value] of Object.entries(httpConfig.headers)) {
|
|
89
|
+
existingHeaders.set(key, value);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
options.requestInit = {
|
|
93
|
+
...existingRequestInit,
|
|
94
|
+
headers: existingHeaders,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return new StreamableHTTPClientTransport(new URL(httpConfig.url), options);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
throw new Error(`Unsupported server transport type: ${configType}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function getServerType(serverConfig) {
|
|
105
|
+
if (!("type" in serverConfig) || serverConfig.type === undefined || serverConfig.type === "stdio") {
|
|
106
|
+
return "stdio";
|
|
107
|
+
}
|
|
108
|
+
return serverConfig.type;
|
|
38
109
|
}
|
|
39
110
|
//# sourceMappingURL=client-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-manager.js","sourceRoot":"","sources":["../../src/mcp/client-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"client-manager.js","sourceRoot":"","sources":["../../src/mcp/client-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export interface McpGraphConfig {
|
|
5
5
|
version: string;
|
|
6
6
|
server: ServerMetadata;
|
|
7
|
+
servers?: Record<string, ServerConfig>;
|
|
7
8
|
tools: ToolDefinition[];
|
|
8
9
|
nodes: NodeDefinition[];
|
|
9
10
|
}
|
|
@@ -12,13 +13,31 @@ export interface ServerMetadata {
|
|
|
12
13
|
version: string;
|
|
13
14
|
description: string;
|
|
14
15
|
}
|
|
16
|
+
export type ServerConfig = StdioServerConfig | SseServerConfig | StreamableHttpServerConfig;
|
|
17
|
+
export interface StdioServerConfig {
|
|
18
|
+
type?: "stdio";
|
|
19
|
+
command: string;
|
|
20
|
+
args: string[];
|
|
21
|
+
cwd?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface SseServerConfig {
|
|
24
|
+
type: "sse";
|
|
25
|
+
url: string;
|
|
26
|
+
headers?: Record<string, string>;
|
|
27
|
+
eventSourceInit?: Record<string, unknown>;
|
|
28
|
+
requestInit?: Record<string, unknown>;
|
|
29
|
+
}
|
|
30
|
+
export interface StreamableHttpServerConfig {
|
|
31
|
+
type: "streamableHttp";
|
|
32
|
+
url: string;
|
|
33
|
+
headers?: Record<string, string>;
|
|
34
|
+
requestInit?: Record<string, unknown>;
|
|
35
|
+
}
|
|
15
36
|
export interface ToolDefinition {
|
|
16
37
|
name: string;
|
|
17
38
|
description: string;
|
|
18
39
|
inputSchema: JsonSchema;
|
|
19
40
|
outputSchema: JsonSchema;
|
|
20
|
-
entryNode: string;
|
|
21
|
-
exitNode: string;
|
|
22
41
|
}
|
|
23
42
|
export interface JsonSchema {
|
|
24
43
|
type: string;
|
|
@@ -30,7 +49,7 @@ export interface JsonSchemaProperty {
|
|
|
30
49
|
type: string;
|
|
31
50
|
description?: string;
|
|
32
51
|
}
|
|
33
|
-
export type NodeDefinition = EntryNode | ExitNode |
|
|
52
|
+
export type NodeDefinition = EntryNode | ExitNode | McpNode | TransformNode | SwitchNode;
|
|
34
53
|
export interface BaseNode {
|
|
35
54
|
id: string;
|
|
36
55
|
type: string;
|
|
@@ -38,13 +57,15 @@ export interface BaseNode {
|
|
|
38
57
|
}
|
|
39
58
|
export interface EntryNode extends BaseNode {
|
|
40
59
|
type: "entry";
|
|
60
|
+
tool: string;
|
|
41
61
|
next: string;
|
|
42
62
|
}
|
|
43
63
|
export interface ExitNode extends BaseNode {
|
|
44
64
|
type: "exit";
|
|
65
|
+
tool: string;
|
|
45
66
|
}
|
|
46
|
-
export interface
|
|
47
|
-
type: "
|
|
67
|
+
export interface McpNode extends BaseNode {
|
|
68
|
+
type: "mcp";
|
|
48
69
|
server: string;
|
|
49
70
|
tool: string;
|
|
50
71
|
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,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|