@mce-bt/microagents-mcp 0.5.0 → 0.6.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/dist/mcp-client.d.ts +19 -1
- package/dist/mcp-client.d.ts.map +1 -1
- package/dist/mcp-client.js +89 -19
- package/dist/mcp-client.js.map +1 -1
- package/package.json +1 -1
package/dist/mcp-client.d.ts
CHANGED
|
@@ -20,7 +20,25 @@ export interface McpServerConfig {
|
|
|
20
20
|
export declare class McpClientManager {
|
|
21
21
|
private servers;
|
|
22
22
|
private toolRegistry;
|
|
23
|
-
|
|
23
|
+
private log?;
|
|
24
|
+
constructor(toolRegistry: ToolRegistry, logger?: {
|
|
25
|
+
info?(msg: string): void;
|
|
26
|
+
warn?(msg: string): void;
|
|
27
|
+
});
|
|
28
|
+
private createTransport;
|
|
29
|
+
private connectClient;
|
|
30
|
+
/**
|
|
31
|
+
* Re-initialize a server connection in place: fresh transport, fresh
|
|
32
|
+
* session. Registered tools keep working — they route through
|
|
33
|
+
* callServerTool(), never a captured client.
|
|
34
|
+
*/
|
|
35
|
+
private reconnectServer;
|
|
36
|
+
/**
|
|
37
|
+
* Call a tool on a connected server. A stale Streamable HTTP session
|
|
38
|
+
* (remote restarted, session expired) triggers one transparent
|
|
39
|
+
* reconnect + retry; any other failure propagates unchanged.
|
|
40
|
+
*/
|
|
41
|
+
private callServerTool;
|
|
24
42
|
/**
|
|
25
43
|
* Connect to an MCP server and import its tools into the agent's ToolRegistry.
|
|
26
44
|
*/
|
package/dist/mcp-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,0BAA0B,CAAC;AAG7E,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,0BAA0B,CAAC;AAG7E,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AA+BD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,GAAG,CAAC,CAAyD;gBAGnE,YAAY,EAAE,YAAY,EAC1B,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAMjE,OAAO,CAAC,eAAe;YAmBT,aAAa;IAU3B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;OAIG;YACW,cAAc;IAkB5B;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA2E/D;;OAEG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAanD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,iCAAiC;IACjC,WAAW,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAOzD,gDAAgD;IAChD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;CAGvC"}
|
package/dist/mcp-client.js
CHANGED
|
@@ -2,6 +2,23 @@ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
|
2
2
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
3
3
|
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
+
/**
|
|
6
|
+
* A remote Streamable HTTP server that restarted (or expired the session)
|
|
7
|
+
* rejects the old session id on every call until the client re-initializes.
|
|
8
|
+
* Match that family of errors — never plain tool failures.
|
|
9
|
+
*/
|
|
10
|
+
function isStaleSessionError(err) {
|
|
11
|
+
const msg = String(err instanceof Error ? err.message : err).toLowerCase();
|
|
12
|
+
if (!msg.includes('session'))
|
|
13
|
+
return false;
|
|
14
|
+
return (msg.includes('-32000') ||
|
|
15
|
+
msg.includes('invalid') ||
|
|
16
|
+
msg.includes('missing') ||
|
|
17
|
+
msg.includes('expired') ||
|
|
18
|
+
msg.includes('not found') ||
|
|
19
|
+
msg.includes('404') ||
|
|
20
|
+
msg.includes('terminated'));
|
|
21
|
+
}
|
|
5
22
|
/**
|
|
6
23
|
* MCP Client Manager — connects to external MCP servers
|
|
7
24
|
* and imports their tools into the agent's ToolRegistry.
|
|
@@ -9,36 +26,88 @@ import { z } from 'zod';
|
|
|
9
26
|
export class McpClientManager {
|
|
10
27
|
servers = new Map();
|
|
11
28
|
toolRegistry;
|
|
12
|
-
|
|
29
|
+
log;
|
|
30
|
+
constructor(toolRegistry, logger) {
|
|
13
31
|
this.toolRegistry = toolRegistry;
|
|
32
|
+
this.log = logger;
|
|
14
33
|
}
|
|
15
|
-
|
|
16
|
-
* Connect to an MCP server and import its tools into the agent's ToolRegistry.
|
|
17
|
-
*/
|
|
18
|
-
async connectServer(config) {
|
|
19
|
-
if (this.servers.has(config.name)) {
|
|
20
|
-
throw new Error(`MCP server "${config.name}" is already connected`);
|
|
21
|
-
}
|
|
22
|
-
let transport;
|
|
34
|
+
createTransport(config) {
|
|
23
35
|
if (config.transport === 'stdio') {
|
|
24
36
|
if (!config.command)
|
|
25
37
|
throw new Error('stdio transport requires "command"');
|
|
26
|
-
|
|
38
|
+
return new StdioClientTransport({
|
|
27
39
|
command: config.command,
|
|
28
40
|
args: config.args,
|
|
29
41
|
env: config.env,
|
|
30
42
|
});
|
|
31
43
|
}
|
|
32
|
-
|
|
44
|
+
if (config.transport === 'http') {
|
|
33
45
|
if (!config.url)
|
|
34
46
|
throw new Error('http transport requires "url"');
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
throw new Error(`Unsupported transport: ${config.transport}`);
|
|
47
|
+
return new StreamableHTTPClientTransport(new URL(config.url), config.headers ? { requestInit: { headers: config.headers } } : undefined);
|
|
39
48
|
}
|
|
49
|
+
throw new Error(`Unsupported transport: ${config.transport}`);
|
|
50
|
+
}
|
|
51
|
+
async connectClient(config) {
|
|
52
|
+
const transport = this.createTransport(config);
|
|
40
53
|
const client = new Client({ name: `microagent-mcp-client`, version: '0.1.0' }, { capabilities: {} });
|
|
41
54
|
await client.connect(transport);
|
|
55
|
+
return { client, transport };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Re-initialize a server connection in place: fresh transport, fresh
|
|
59
|
+
* session. Registered tools keep working — they route through
|
|
60
|
+
* callServerTool(), never a captured client.
|
|
61
|
+
*/
|
|
62
|
+
reconnectServer(name) {
|
|
63
|
+
const server = this.servers.get(name);
|
|
64
|
+
if (!server)
|
|
65
|
+
return Promise.reject(new Error(`MCP server "${name}" is not connected`));
|
|
66
|
+
if (server.reconnecting)
|
|
67
|
+
return server.reconnecting;
|
|
68
|
+
const attempt = (async () => {
|
|
69
|
+
this.log?.warn?.(`MCP session for "${name}" is stale — reconnecting`);
|
|
70
|
+
await server.client.close().catch(() => undefined);
|
|
71
|
+
const { client, transport } = await this.connectClient(server.config);
|
|
72
|
+
server.client = client;
|
|
73
|
+
server.transport = transport;
|
|
74
|
+
this.log?.info?.(`MCP server "${name}" reconnected`);
|
|
75
|
+
})();
|
|
76
|
+
server.reconnecting = attempt.finally(() => {
|
|
77
|
+
server.reconnecting = undefined;
|
|
78
|
+
});
|
|
79
|
+
return server.reconnecting;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Call a tool on a connected server. A stale Streamable HTTP session
|
|
83
|
+
* (remote restarted, session expired) triggers one transparent
|
|
84
|
+
* reconnect + retry; any other failure propagates unchanged.
|
|
85
|
+
*/
|
|
86
|
+
async callServerTool(serverName, toolName, args) {
|
|
87
|
+
const server = this.servers.get(serverName);
|
|
88
|
+
if (!server)
|
|
89
|
+
throw new Error(`MCP server "${serverName}" is not connected`);
|
|
90
|
+
try {
|
|
91
|
+
return await server.client.callTool({ name: toolName, arguments: args });
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (!isStaleSessionError(err))
|
|
95
|
+
throw err;
|
|
96
|
+
await this.reconnectServer(serverName);
|
|
97
|
+
const fresh = this.servers.get(serverName);
|
|
98
|
+
if (!fresh)
|
|
99
|
+
throw err;
|
|
100
|
+
return await fresh.client.callTool({ name: toolName, arguments: args });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Connect to an MCP server and import its tools into the agent's ToolRegistry.
|
|
105
|
+
*/
|
|
106
|
+
async connectServer(config) {
|
|
107
|
+
if (this.servers.has(config.name)) {
|
|
108
|
+
throw new Error(`MCP server "${config.name}" is already connected`);
|
|
109
|
+
}
|
|
110
|
+
const { client, transport } = await this.connectClient(config);
|
|
42
111
|
// List available tools from the server
|
|
43
112
|
const { tools } = await client.listTools();
|
|
44
113
|
const registeredNames = [];
|
|
@@ -54,11 +123,11 @@ export class McpClientManager {
|
|
|
54
123
|
parameters: zodSchema,
|
|
55
124
|
jsonSchema: inputSchema,
|
|
56
125
|
visibility: 'internal',
|
|
126
|
+
// Provenance: lets the registry group by server for the schema budget
|
|
127
|
+
// and lets the discovery tools scope a search to one system.
|
|
128
|
+
source: { kind: 'mcp', server: config.name },
|
|
57
129
|
handler: async (params) => {
|
|
58
|
-
const result = await
|
|
59
|
-
name: tool.name,
|
|
60
|
-
arguments: params,
|
|
61
|
-
});
|
|
130
|
+
const result = await this.callServerTool(config.name, tool.name, params);
|
|
62
131
|
if (result.isError) {
|
|
63
132
|
const errorContent = result.content;
|
|
64
133
|
const errorText = Array.isArray(errorContent)
|
|
@@ -85,6 +154,7 @@ export class McpClientManager {
|
|
|
85
154
|
}
|
|
86
155
|
this.servers.set(config.name, {
|
|
87
156
|
name: config.name,
|
|
157
|
+
config,
|
|
88
158
|
client,
|
|
89
159
|
transport,
|
|
90
160
|
toolNames: registeredNames,
|
package/dist/mcp-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAA8B,MAAM,2CAA2C,CAAC;AAC7G,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAGnG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../src/mcp-client.ts"],"names":[],"mappings":"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"}
|