mcp-use 0.0.6 → 0.1.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/README.md +66 -5
- package/dist/examples/add_server_tool.d.ts +8 -0
- package/dist/examples/add_server_tool.d.ts.map +1 -0
- package/dist/examples/add_server_tool.js +65 -0
- package/dist/examples/airbnb_use.d.ts +10 -0
- package/dist/examples/airbnb_use.d.ts.map +1 -0
- package/dist/examples/airbnb_use.js +43 -0
- package/dist/examples/blender_use.d.ts +15 -0
- package/dist/examples/blender_use.d.ts.map +1 -0
- package/dist/examples/blender_use.js +39 -0
- package/dist/examples/browser_use.d.ts +10 -0
- package/dist/examples/browser_use.d.ts.map +1 -0
- package/dist/examples/browser_use.js +46 -0
- package/dist/examples/chat_example.d.ts +10 -0
- package/dist/examples/chat_example.d.ts.map +1 -0
- package/dist/examples/chat_example.js +86 -0
- package/dist/examples/filesystem_use.d.ts +11 -0
- package/dist/examples/filesystem_use.d.ts.map +1 -0
- package/dist/examples/filesystem_use.js +43 -0
- package/dist/examples/http_example.d.ts +18 -0
- package/dist/examples/http_example.d.ts.map +1 -0
- package/dist/examples/http_example.js +36 -0
- package/dist/examples/mcp_everything.d.ts +6 -0
- package/dist/examples/mcp_everything.d.ts.map +1 -0
- package/dist/examples/mcp_everything.js +25 -0
- package/dist/examples/multi_server_example.d.ts +10 -0
- package/dist/examples/multi_server_example.d.ts.map +1 -0
- package/dist/examples/multi_server_example.js +51 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/src/adapters/langchain_adapter.js +1 -1
- package/dist/src/agents/index.d.ts +0 -1
- package/dist/src/agents/index.d.ts.map +1 -1
- package/dist/src/agents/index.js +0 -1
- package/dist/src/agents/mcp_agent.d.ts +1 -1
- package/dist/src/agents/mcp_agent.d.ts.map +1 -1
- package/dist/src/agents/mcp_agent.js +3 -3
- package/dist/src/client.d.ts +1 -1
- package/dist/src/client.d.ts.map +1 -1
- package/dist/src/client.js +6 -3
- package/dist/src/connectors/stdio.d.ts.map +1 -1
- package/dist/src/connectors/stdio.js +14 -1
- package/dist/src/logging.d.ts +15 -4
- package/dist/src/logging.d.ts.map +1 -1
- package/dist/src/logging.js +71 -38
- package/dist/src/managers/index.d.ts +3 -0
- package/dist/src/managers/index.d.ts.map +1 -0
- package/dist/src/managers/index.js +2 -0
- package/dist/src/managers/server_manager.d.ts +16 -0
- package/dist/src/managers/server_manager.d.ts.map +1 -0
- package/dist/src/managers/server_manager.js +100 -0
- package/dist/src/managers/tools/acquire_active_mcp_server.d.ts +13 -0
- package/dist/src/managers/tools/acquire_active_mcp_server.d.ts.map +1 -0
- package/dist/src/managers/tools/acquire_active_mcp_server.js +17 -0
- package/dist/src/managers/tools/add_server.d.ts +21 -0
- package/dist/src/managers/tools/add_server.d.ts.map +1 -0
- package/dist/src/managers/tools/add_server.js +40 -0
- package/dist/src/managers/tools/base.d.ts +24 -0
- package/dist/src/managers/tools/base.d.ts.map +1 -0
- package/dist/src/managers/tools/base.js +17 -0
- package/dist/src/managers/tools/connect_mcp_server.d.ts +26 -0
- package/dist/src/managers/tools/connect_mcp_server.d.ts.map +1 -0
- package/dist/src/managers/tools/connect_mcp_server.js +46 -0
- package/dist/src/managers/tools/index.d.ts +5 -0
- package/dist/src/managers/tools/index.d.ts.map +1 -0
- package/dist/src/managers/tools/index.js +4 -0
- package/dist/src/managers/tools/list_mcp_servers.d.ts +13 -0
- package/dist/src/managers/tools/list_mcp_servers.d.ts.map +1 -0
- package/dist/src/managers/tools/list_mcp_servers.js +33 -0
- package/dist/src/managers/tools/release_mcp_server_connection.d.ts +13 -0
- package/dist/src/managers/tools/release_mcp_server_connection.d.ts.map +1 -0
- package/dist/src/managers/tools/release_mcp_server_connection.js +19 -0
- package/dist/src/session.d.ts +1 -9
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/session.js +1 -30
- package/package.json +52 -21
- package/dist/src/agents/server_manager.d.ts +0 -22
- package/dist/src/agents/server_manager.d.ts.map +0 -1
- package/dist/src/agents/server_manager.js +0 -152
@@ -0,0 +1,51 @@
|
|
1
|
+
/**
|
2
|
+
* Example demonstrating how to use MCPClient with multiple servers.
|
3
|
+
*
|
4
|
+
* This example shows how to:
|
5
|
+
* 1. Configure multiple MCP servers
|
6
|
+
* 2. Create and manage sessions for each server
|
7
|
+
* 3. Use tools from different servers in a single agent
|
8
|
+
*/
|
9
|
+
import { ChatAnthropic } from '@langchain/anthropic';
|
10
|
+
import { config } from 'dotenv';
|
11
|
+
import { MCPAgent, MCPClient } from '../index.js';
|
12
|
+
// Load environment variables from .env file
|
13
|
+
config();
|
14
|
+
async function runMultiServerExample() {
|
15
|
+
// Create a configuration with multiple servers
|
16
|
+
const config = {
|
17
|
+
mcpServers: {
|
18
|
+
airbnb: {
|
19
|
+
command: 'npx',
|
20
|
+
args: ['-y', '@openbnb/mcp-server-airbnb', '--ignore-robots-txt'],
|
21
|
+
},
|
22
|
+
playwright: {
|
23
|
+
command: 'npx',
|
24
|
+
args: ['@playwright/mcp@latest'],
|
25
|
+
env: { DISPLAY: ':1' },
|
26
|
+
},
|
27
|
+
filesystem: {
|
28
|
+
command: 'npx',
|
29
|
+
args: [
|
30
|
+
'-y',
|
31
|
+
'@modelcontextprotocol/server-filesystem',
|
32
|
+
'YOUR_DIRECTORY_HERE',
|
33
|
+
],
|
34
|
+
},
|
35
|
+
},
|
36
|
+
};
|
37
|
+
// Create MCPClient with the multi-server configuration
|
38
|
+
const client = MCPClient.fromDict(config);
|
39
|
+
// Create LLM
|
40
|
+
const llm = new ChatAnthropic({ model: 'claude-3-5-sonnet-20240620' });
|
41
|
+
// Create agent with the client
|
42
|
+
const agent = new MCPAgent({ llm, client, maxSteps: 30 });
|
43
|
+
// Example 1: Using tools from different servers in a single query
|
44
|
+
const result = await agent.run('Search for a nice place to stay in Barcelona on Airbnb, '
|
45
|
+
+ 'then use Google to find nearby restaurants and attractions.'
|
46
|
+
+ 'Write the result in the current directory in restarant.txt', 30);
|
47
|
+
console.log(result);
|
48
|
+
}
|
49
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
50
|
+
runMultiServerExample().catch(console.error);
|
51
|
+
}
|
package/dist/index.d.ts
CHANGED
@@ -7,5 +7,7 @@ import { StdioConnector } from './src/connectors/stdio.js';
|
|
7
7
|
import { WebSocketConnector } from './src/connectors/websocket.js';
|
8
8
|
import { Logger, logger } from './src/logging.js';
|
9
9
|
import { MCPSession } from './src/session.js';
|
10
|
+
export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
|
11
|
+
export { ServerManager } from './src/managers/server_manager.js';
|
10
12
|
export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAEhE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
|
package/dist/index.js
CHANGED
@@ -7,4 +7,6 @@ import { StdioConnector } from './src/connectors/stdio.js';
|
|
7
7
|
import { WebSocketConnector } from './src/connectors/websocket.js';
|
8
8
|
import { Logger, logger } from './src/logging.js';
|
9
9
|
import { MCPSession } from './src/session.js';
|
10
|
+
export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
|
11
|
+
export { ServerManager } from './src/managers/server_manager.js';
|
10
12
|
export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
|
@@ -80,7 +80,7 @@ export class LangChainAdapter extends BaseAdapter {
|
|
80
80
|
return parseMcpToolResult(result);
|
81
81
|
}
|
82
82
|
catch (err) {
|
83
|
-
logger.error(`Error executing MCP tool: ${err}`);
|
83
|
+
logger.error(`Error executing MCP tool: ${err.message}`);
|
84
84
|
return `Error executing MCP tool: ${String(err)}`;
|
85
85
|
}
|
86
86
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/src/agents/index.js
CHANGED
@@ -2,7 +2,7 @@ import type { BaseLanguageModelInterface } from '@langchain/core/language_models
|
|
2
2
|
import type { BaseMessage } from '@langchain/core/messages';
|
3
3
|
import type { MCPClient } from '../client.js';
|
4
4
|
import type { BaseConnector } from '../connectors/base.js';
|
5
|
-
import type { ServerManager } from '
|
5
|
+
import type { ServerManager } from '../managers/server_manager.js';
|
6
6
|
import { SystemMessage } from '@langchain/core/messages';
|
7
7
|
import { LangChainAdapter } from '../adapters/langchain_adapter.js';
|
8
8
|
export declare class MCPAgent {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAqB,MAAM,sCAAsC,CAAA;AACzG,OAAO,KAAK,EACV,WAAW,EACZ,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;
|
1
|
+
{"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAqB,MAAM,sCAAsC,CAAA;AACzG,OAAO,KAAK,EACV,WAAW,EACZ,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAGL,aAAa,EACd,MAAM,0BAA0B,CAAA;AAUjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAKnE,qBAAa,QAAQ;IACnB,OAAO,CAAC,GAAG,CAA4B;IACvC,OAAO,CAAC,MAAM,CAAC,CAAW;IAC1B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,4BAA4B,CAAC,CAAe;IACpD,OAAO,CAAC,sBAAsB,CAAC,CAAe;IAE9C,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,mBAAmB,CAAoB;IAC/C,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,aAAa,CAA6B;gBAEtC,OAAO,EAAE;QACnB,GAAG,EAAE,0BAA0B,CAAA;QAC/B,MAAM,CAAC,EAAE,SAAS,CAAA;QAClB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAA;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,aAAa,CAAC,EAAE,OAAO,CAAA;QACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QAC5B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACpC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACtC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;QAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,OAAO,CAAC,EAAE,gBAAgB,CAAA;QAC1B,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,aAAa,CAAA;KAC5D;IAkCY,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YA8D1B,4BAA4B;IAuB1C,OAAO,CAAC,WAAW;IAyBZ,sBAAsB,IAAI,WAAW,EAAE;IAIvC,wBAAwB,IAAI,IAAI;IAIvC,OAAO,CAAC,YAAY;IAKb,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAIxC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAavC,kBAAkB,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI;IAQnD,kBAAkB,IAAI,MAAM,EAAE;IAIxB,GAAG,CACd,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,eAAe,UAAO,EACtB,eAAe,CAAC,EAAE,WAAW,EAAE,GAC9B,OAAO,CAAC,MAAM,CAAC;IAyJL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAyBpC"}
|
@@ -63,7 +63,7 @@ export class MCPAgent {
|
|
63
63
|
if (this.useServerManager && this.serverManager) {
|
64
64
|
await this.serverManager.initialize();
|
65
65
|
// Get server management tools
|
66
|
-
const managementTools =
|
66
|
+
const managementTools = this.serverManager.tools;
|
67
67
|
this.tools = managementTools;
|
68
68
|
logger.info(`🔧 Server manager mode active with ${managementTools.length} management tools`);
|
69
69
|
// Create the system message based on available tools
|
@@ -209,7 +209,7 @@ export class MCPAgent {
|
|
209
209
|
logger.info(`🏁 Starting agent execution with max_steps=${steps}`);
|
210
210
|
for (let stepNum = 0; stepNum < steps; stepNum++) {
|
211
211
|
if (this.useServerManager && this.serverManager) {
|
212
|
-
const currentTools =
|
212
|
+
const currentTools = this.serverManager.tools;
|
213
213
|
const currentToolNames = new Set(currentTools.map(t => t.name));
|
214
214
|
const existingToolNames = new Set(this.tools.map(t => t.name));
|
215
215
|
const changed = currentTools.length !== this.tools.length
|
@@ -223,7 +223,7 @@ export class MCPAgent {
|
|
223
223
|
nameToToolMap = Object.fromEntries(this.tools.map(t => [t.name, t]));
|
224
224
|
}
|
225
225
|
}
|
226
|
-
logger.info(
|
226
|
+
logger.info(`👣 Step ${stepNum + 1}/${steps}`);
|
227
227
|
try {
|
228
228
|
logger.debug('Starting agent step execution');
|
229
229
|
const nextStepOutput = await this.agentExecutor._takeNextStep(nameToToolMap, inputs, intermediateSteps);
|
package/dist/src/client.d.ts
CHANGED
@@ -12,7 +12,7 @@ export declare class MCPClient {
|
|
12
12
|
saveConfig(filepath: string): void;
|
13
13
|
createSession(serverName: string, autoInitialize?: boolean): Promise<MCPSession>;
|
14
14
|
createAllSessions(autoInitialize?: boolean): Promise<Record<string, MCPSession>>;
|
15
|
-
getSession(serverName: string): MCPSession;
|
15
|
+
getSession(serverName: string): MCPSession | null;
|
16
16
|
getAllActiveSessions(): Record<string, MCPSession>;
|
17
17
|
closeSession(serverName: string): Promise<void>;
|
18
18
|
closeAllSessions(): Promise<void>;
|
package/dist/src/client.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAiC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAK;gBAExB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;WAWnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;WAI7C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAI9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKhE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC,cAAc,IAAI,MAAM,EAAE;IAI1B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ5B,aAAa,CACxB,UAAU,EAAE,MAAM,EAClB,cAAc,UAAO,GACpB,OAAO,CAAC,UAAU,CAAC;IAwBT,iBAAiB,CAC5B,cAAc,UAAO,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAc/B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAiC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAK;gBAExB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;WAWnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS;WAI7C,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAI9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAKhE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC,cAAc,IAAI,MAAM,EAAE;IAI1B,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQ5B,aAAa,CACxB,UAAU,EAAE,MAAM,EAClB,cAAc,UAAO,GACpB,OAAO,CAAC,UAAU,CAAC;IAwBT,iBAAiB,CAC5B,cAAc,UAAO,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAc/B,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAWjD,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;IAM5C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB/C"}
|
package/dist/src/client.js
CHANGED
@@ -46,7 +46,7 @@ export class MCPClient {
|
|
46
46
|
async createSession(serverName, autoInitialize = true) {
|
47
47
|
const servers = this.config.mcpServers ?? {};
|
48
48
|
if (Object.keys(servers).length === 0) {
|
49
|
-
|
49
|
+
logger.warn('No MCP servers defined in config');
|
50
50
|
}
|
51
51
|
if (!servers[serverName]) {
|
52
52
|
throw new Error(`Server '${serverName}' not found in config`);
|
@@ -65,7 +65,7 @@ export class MCPClient {
|
|
65
65
|
async createAllSessions(autoInitialize = true) {
|
66
66
|
const servers = this.config.mcpServers ?? {};
|
67
67
|
if (Object.keys(servers).length === 0) {
|
68
|
-
|
68
|
+
logger.warn('No MCP servers defined in config');
|
69
69
|
}
|
70
70
|
for (const name of Object.keys(servers)) {
|
71
71
|
await this.createSession(name, autoInitialize);
|
@@ -74,8 +74,11 @@ export class MCPClient {
|
|
74
74
|
}
|
75
75
|
getSession(serverName) {
|
76
76
|
const session = this.sessions[serverName];
|
77
|
+
// if (!session) {
|
78
|
+
// throw new Error(`No session exists for server '${serverName}'`)
|
79
|
+
// }
|
77
80
|
if (!session) {
|
78
|
-
|
81
|
+
return null;
|
79
82
|
}
|
80
83
|
return session;
|
81
84
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/connectors/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAMrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAG5D,EACE,OAAe,EACf,IAAS,EACT,GAAG,EACH,MAAuB,EACvB,GAAG,IAAI,EACR,GAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,QAAQ,CAAA;KAClB,GAAG,qBAA0B;IAWhC,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../../src/connectors/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAMrD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAC/C;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAwB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;gBAG5D,EACE,OAAe,EACf,IAAS,EACT,GAAG,EACH,MAAuB,EACvB,GAAG,IAAI,EACR,GAAE;QACD,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,CAAC,EAAE,QAAQ,CAAA;KAClB,GAAG,qBAA0B;IAWhC,sDAAsD;IAChD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA+C/B"}
|
@@ -26,10 +26,23 @@ export class StdioConnector extends BaseConnector {
|
|
26
26
|
logger.debug(`Connecting to MCP implementation via stdio: ${this.command}`);
|
27
27
|
try {
|
28
28
|
// 1. Build server parameters for the transport
|
29
|
+
// Merge env with process.env, filtering out undefined values
|
30
|
+
let mergedEnv;
|
31
|
+
if (this.env) {
|
32
|
+
mergedEnv = {};
|
33
|
+
// First add process.env values (excluding undefined)
|
34
|
+
for (const [key, value] of Object.entries(process.env)) {
|
35
|
+
if (value !== undefined) {
|
36
|
+
mergedEnv[key] = value;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
// Then override with provided env
|
40
|
+
Object.assign(mergedEnv, this.env);
|
41
|
+
}
|
29
42
|
const serverParams = {
|
30
43
|
command: this.command,
|
31
44
|
args: this.args,
|
32
|
-
env:
|
45
|
+
env: mergedEnv,
|
33
46
|
};
|
34
47
|
// 2. Start the connection manager -> returns a live transport
|
35
48
|
this.connectionManager = new StdioConnectionManager(serverParams, this.errlog);
|
package/dist/src/logging.d.ts
CHANGED
@@ -1,9 +1,20 @@
|
|
1
1
|
import type { Logger as WinstonLogger } from 'winston';
|
2
|
+
export type LogLevel = 'error' | 'warn' | 'info' | 'http' | 'verbose' | 'debug' | 'silly';
|
3
|
+
interface LoggerOptions {
|
4
|
+
level?: LogLevel;
|
5
|
+
console?: boolean;
|
6
|
+
file?: string;
|
7
|
+
format?: 'minimal' | 'detailed' | 'emoji';
|
8
|
+
}
|
2
9
|
export declare class Logger {
|
3
|
-
private static
|
4
|
-
static
|
5
|
-
static
|
6
|
-
static
|
10
|
+
private static instances;
|
11
|
+
private static currentFormat;
|
12
|
+
static get(name?: string): WinstonLogger;
|
13
|
+
private static getFormatter;
|
14
|
+
static configure(options?: LoggerOptions): void;
|
15
|
+
static setDebug(enabled: boolean | 0 | 1 | 2): void;
|
16
|
+
static setFormat(format: 'minimal' | 'detailed' | 'emoji'): void;
|
7
17
|
}
|
8
18
|
export declare const logger: WinstonLogger;
|
19
|
+
export {};
|
9
20
|
//# sourceMappingURL=logging.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AAOtD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAA;AAEzF,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;CAC1C;AA2BD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAC5D,OAAO,CAAC,MAAM,CAAC,aAAa,CAA8C;WAE5D,GAAG,CAAC,IAAI,GAAE,MAA4B,GAAG,aAAa;IAkBpE,OAAO,CAAC,MAAM,CAAC,YAAY;WAab,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,IAAI;WAoC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;WAc5C,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI;CAIxE;AAGD,eAAO,MAAM,MAAM,eAAe,CAAA"}
|
package/dist/src/logging.js
CHANGED
@@ -1,59 +1,92 @@
|
|
1
1
|
import fs from 'node:fs';
|
2
2
|
import path from 'node:path';
|
3
3
|
import { createLogger, format, transports } from 'winston';
|
4
|
-
const { combine, timestamp, label, printf } = format;
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
const { combine, timestamp, label, printf, colorize, splat } = format;
|
5
|
+
const DEFAULT_LOGGER_NAME = 'mcp-use';
|
6
|
+
function resolveLevel(env) {
|
7
|
+
switch (env?.trim()) {
|
8
|
+
case '2':
|
9
|
+
return 'debug';
|
10
|
+
case '1':
|
11
|
+
return 'info';
|
12
|
+
default:
|
13
|
+
return 'warn';
|
14
|
+
}
|
12
15
|
}
|
13
|
-
const
|
16
|
+
const minimalFormatter = printf(({ level, message, label, timestamp }) => {
|
17
|
+
return `${timestamp} [${label}] ${level}: ${message}`;
|
18
|
+
});
|
19
|
+
const detailedFormatter = printf(({ level, message, label, timestamp }) => {
|
20
|
+
return `${timestamp} [${label}] ${level.toUpperCase()}: ${message}`;
|
21
|
+
});
|
22
|
+
const emojiFormatter = printf(({ level, message, label, timestamp }) => {
|
23
|
+
return `${timestamp} [${label}] ${level.toUpperCase()}: ${message}`;
|
24
|
+
});
|
14
25
|
export class Logger {
|
15
|
-
static
|
16
|
-
static
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
26
|
+
static instances = {};
|
27
|
+
static currentFormat = 'minimal';
|
28
|
+
static get(name = DEFAULT_LOGGER_NAME) {
|
29
|
+
if (!this.instances[name]) {
|
30
|
+
this.instances[name] = createLogger({
|
31
|
+
level: resolveLevel(process.env.DEBUG),
|
32
|
+
format: combine(colorize(), splat(), label({ label: name }), timestamp({ format: 'HH:mm:ss' }), this.getFormatter()),
|
21
33
|
transports: [],
|
22
34
|
});
|
23
35
|
}
|
24
|
-
return this.
|
36
|
+
return this.instances[name];
|
25
37
|
}
|
26
|
-
static
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
38
|
+
static getFormatter() {
|
39
|
+
switch (this.currentFormat) {
|
40
|
+
case 'minimal':
|
41
|
+
return minimalFormatter;
|
42
|
+
case 'detailed':
|
43
|
+
return detailedFormatter;
|
44
|
+
case 'emoji':
|
45
|
+
return emojiFormatter;
|
46
|
+
default:
|
47
|
+
return minimalFormatter;
|
33
48
|
}
|
34
|
-
|
49
|
+
}
|
50
|
+
static configure(options = {}) {
|
51
|
+
const { level, console = true, file, format = 'minimal' } = options;
|
52
|
+
const resolvedLevel = level ?? resolveLevel(process.env.DEBUG);
|
53
|
+
this.currentFormat = format;
|
54
|
+
const root = this.get();
|
55
|
+
root.level = resolvedLevel;
|
35
56
|
root.clear();
|
36
|
-
if (
|
57
|
+
if (console) {
|
37
58
|
root.add(new transports.Console());
|
38
59
|
}
|
39
|
-
if (
|
40
|
-
const dir = path.dirname(
|
41
|
-
if (
|
60
|
+
if (file) {
|
61
|
+
const dir = path.dirname(path.resolve(file));
|
62
|
+
if (!fs.existsSync(dir)) {
|
42
63
|
fs.mkdirSync(dir, { recursive: true });
|
43
64
|
}
|
44
|
-
root.add(new transports.File({ filename:
|
65
|
+
root.add(new transports.File({ filename: file }));
|
45
66
|
}
|
67
|
+
// Update all existing loggers with new format
|
68
|
+
Object.values(this.instances).forEach((logger) => {
|
69
|
+
logger.level = resolvedLevel;
|
70
|
+
logger.format = combine(colorize(), splat(), label({ label: DEFAULT_LOGGER_NAME }), timestamp({ format: 'HH:mm:ss' }), this.getFormatter());
|
71
|
+
});
|
46
72
|
}
|
47
|
-
static setDebug(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
73
|
+
static setDebug(enabled) {
|
74
|
+
let level;
|
75
|
+
if (enabled === 2 || enabled === true)
|
76
|
+
level = 'debug';
|
77
|
+
else if (enabled === 1)
|
78
|
+
level = 'info';
|
79
|
+
else
|
80
|
+
level = 'warn';
|
81
|
+
Object.values(this.instances).forEach((logger) => {
|
82
|
+
logger.level = level;
|
55
83
|
});
|
84
|
+
process.env.DEBUG = enabled ? (enabled === true ? '2' : String(enabled)) : '0';
|
85
|
+
}
|
86
|
+
static setFormat(format) {
|
87
|
+
this.currentFormat = format;
|
88
|
+
this.configure({ format });
|
56
89
|
}
|
57
90
|
}
|
58
91
|
Logger.configure();
|
59
|
-
export const logger = Logger.
|
92
|
+
export const logger = Logger.get();
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/managers/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import type { StructuredToolInterface } from '@langchain/core/tools';
|
2
|
+
import type { LangChainAdapter } from '../adapters/langchain_adapter.js';
|
3
|
+
import type { MCPClient } from '../client.js';
|
4
|
+
export declare class ServerManager {
|
5
|
+
readonly initializedServers: Record<string, boolean>;
|
6
|
+
readonly serverTools: Record<string, StructuredToolInterface[]>;
|
7
|
+
readonly client: MCPClient;
|
8
|
+
readonly adapter: LangChainAdapter;
|
9
|
+
activeServer: string | null;
|
10
|
+
constructor(client: MCPClient, adapter: LangChainAdapter);
|
11
|
+
logState(context: string): void;
|
12
|
+
initialize(): void;
|
13
|
+
prefetchServerTools(): Promise<void>;
|
14
|
+
get tools(): StructuredToolInterface[];
|
15
|
+
}
|
16
|
+
//# sourceMappingURL=server_manager.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"server_manager.d.ts","sourceRoot":"","sources":["../../../src/managers/server_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAW7C,qBAAa,aAAa;IACxB,SAAgB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAK;IAChE,SAAgB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAK;IAE3E,SAAgB,MAAM,EAAE,SAAS,CAAA;IACjC,SAAgB,OAAO,EAAE,gBAAgB,CAAA;IAClC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAO;gBAE7B,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB;IAKjD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqBtC,UAAU,IAAI,IAAI;IAOZ,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoD1C,IAAI,KAAK,IAAI,uBAAuB,EAAE,CAsBrC;CACF"}
|
@@ -0,0 +1,100 @@
|
|
1
|
+
import { isEqual } from 'lodash-es';
|
2
|
+
import { logger } from '../logging.js';
|
3
|
+
import { AcquireActiveMCPServerTool } from './tools/acquire_active_mcp_server.js';
|
4
|
+
import { AddMCPServerTool } from './tools/add_server.js';
|
5
|
+
import { ConnectMCPServerTool } from './tools/connect_mcp_server.js';
|
6
|
+
import { ListMCPServersTool } from './tools/list_mcp_servers.js';
|
7
|
+
import { ReleaseMCPServerConnectionTool } from './tools/release_mcp_server_connection.js';
|
8
|
+
export class ServerManager {
|
9
|
+
initializedServers = {};
|
10
|
+
serverTools = {};
|
11
|
+
client;
|
12
|
+
adapter;
|
13
|
+
activeServer = null;
|
14
|
+
constructor(client, adapter) {
|
15
|
+
this.client = client;
|
16
|
+
this.adapter = adapter;
|
17
|
+
}
|
18
|
+
logState(context) {
|
19
|
+
const allServerNames = this.client.getServerNames();
|
20
|
+
const activeSessionNames = Object.keys(this.client.getAllActiveSessions());
|
21
|
+
if (allServerNames.length === 0) {
|
22
|
+
logger.info('Server Manager State: No servers configured.');
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
const tableData = allServerNames.map(name => ({
|
26
|
+
'Server Name': name,
|
27
|
+
'Connected': activeSessionNames.includes(name) ? '✅' : '❌',
|
28
|
+
'Initialized': this.initializedServers[name] ? '✅' : '❌',
|
29
|
+
'Tool Count': this.serverTools[name]?.length ?? 0,
|
30
|
+
'Active': this.activeServer === name ? '✅' : '❌',
|
31
|
+
}));
|
32
|
+
logger.info(`Server Manager State: [${context}]`);
|
33
|
+
console.table(tableData); // eslint-disable-line no-console
|
34
|
+
}
|
35
|
+
initialize() {
|
36
|
+
const serverNames = this.client.getServerNames?.();
|
37
|
+
if (serverNames.length === 0) {
|
38
|
+
logger.warn('No MCP servers defined in client configuration');
|
39
|
+
}
|
40
|
+
}
|
41
|
+
async prefetchServerTools() {
|
42
|
+
const servers = this.client.getServerNames();
|
43
|
+
for (const serverName of servers) {
|
44
|
+
try {
|
45
|
+
let session = null;
|
46
|
+
session = this.client.getSession(serverName);
|
47
|
+
logger.debug(`Using existing session for server '${serverName}' to prefetch tools.`);
|
48
|
+
if (!session) {
|
49
|
+
session = await this.client.createSession(serverName).catch((createSessionError) => {
|
50
|
+
logger.warn(`Could not create session for '${serverName}' during prefetch: ${createSessionError}`);
|
51
|
+
return null;
|
52
|
+
});
|
53
|
+
logger.debug(`Temporarily created session for '${serverName}' to prefetch tools.`);
|
54
|
+
}
|
55
|
+
if (session) {
|
56
|
+
const connector = session.connector;
|
57
|
+
let tools = [];
|
58
|
+
try {
|
59
|
+
tools = await this.adapter.createToolsFromConnectors([connector]);
|
60
|
+
}
|
61
|
+
catch (toolFetchError) {
|
62
|
+
logger.error(`Failed to create tools from connector for server '${serverName}': ${toolFetchError}`);
|
63
|
+
continue;
|
64
|
+
}
|
65
|
+
const cachedTools = this.serverTools[serverName];
|
66
|
+
const toolsChanged = !cachedTools || !isEqual(cachedTools, tools);
|
67
|
+
if (toolsChanged) {
|
68
|
+
this.serverTools[serverName] = tools;
|
69
|
+
this.initializedServers[serverName] = true;
|
70
|
+
logger.debug(`Prefetched ${tools.length} tools for server '${serverName}'.`);
|
71
|
+
}
|
72
|
+
else {
|
73
|
+
logger.debug(`Tools for server '${serverName}' unchanged, using cached version.`);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
}
|
77
|
+
catch (outerError) {
|
78
|
+
logger.error(`Error prefetching tools for server '${serverName}': ${outerError}`);
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}
|
82
|
+
get tools() {
|
83
|
+
if (logger.level === 'debug') {
|
84
|
+
this.logState('Providing tools to agent');
|
85
|
+
}
|
86
|
+
const managementTools = [
|
87
|
+
new AddMCPServerTool(this),
|
88
|
+
new ListMCPServersTool(this),
|
89
|
+
new ConnectMCPServerTool(this),
|
90
|
+
new AcquireActiveMCPServerTool(this),
|
91
|
+
new ReleaseMCPServerConnectionTool(this),
|
92
|
+
];
|
93
|
+
if (this.activeServer && this.serverTools[this.activeServer]) {
|
94
|
+
const activeTools = this.serverTools[this.activeServer];
|
95
|
+
logger.debug(`Adding ${activeTools.length} tools from active server '${this.activeServer}'`);
|
96
|
+
return [...managementTools, ...activeTools];
|
97
|
+
}
|
98
|
+
return managementTools;
|
99
|
+
}
|
100
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import type { ServerManager } from '../server_manager.js';
|
2
|
+
import { z } from 'zod';
|
3
|
+
import { MCPServerTool } from './base.js';
|
4
|
+
declare const PresentActiveServerSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
5
|
+
export declare class AcquireActiveMCPServerTool extends MCPServerTool<typeof PresentActiveServerSchema> {
|
6
|
+
name: string;
|
7
|
+
description: string;
|
8
|
+
schema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
9
|
+
constructor(manager: ServerManager);
|
10
|
+
_call(): Promise<string>;
|
11
|
+
}
|
12
|
+
export {};
|
13
|
+
//# sourceMappingURL=acquire_active_mcp_server.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"acquire_active_mcp_server.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/acquire_active_mcp_server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,QAAA,MAAM,yBAAyB,gDAAe,CAAA;AAE9C,qBAAa,0BAA2B,SAAQ,aAAa,CAAC,OAAO,yBAAyB,CAAC;IACpF,IAAI,SAA0B;IAC9B,WAAW,SAAiE;IAC5E,MAAM,iDAA4B;gBAE/B,OAAO,EAAE,aAAa;IAI5B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAO/B"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { z } from 'zod';
|
2
|
+
import { MCPServerTool } from './base.js';
|
3
|
+
const PresentActiveServerSchema = z.object({});
|
4
|
+
export class AcquireActiveMCPServerTool extends MCPServerTool {
|
5
|
+
name = 'get_active_mcp_server';
|
6
|
+
description = 'Get the currently active MCP (Model Context Protocol) server';
|
7
|
+
schema = PresentActiveServerSchema;
|
8
|
+
constructor(manager) {
|
9
|
+
super(manager);
|
10
|
+
}
|
11
|
+
async _call() {
|
12
|
+
if (!this.manager.activeServer) {
|
13
|
+
return `No MCP server is currently active. Use connect_to_mcp_server to connect to a server.`;
|
14
|
+
}
|
15
|
+
return `Currently active MCP server: ${this.manager.activeServer}`;
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import type { ServerManager } from '../server_manager.js';
|
2
|
+
import { StructuredTool } from 'langchain/tools';
|
3
|
+
import { z } from 'zod';
|
4
|
+
export declare class AddMCPServerTool extends StructuredTool {
|
5
|
+
name: string;
|
6
|
+
description: string;
|
7
|
+
schema: z.ZodObject<{
|
8
|
+
serverName: z.ZodString;
|
9
|
+
serverConfig: z.ZodAny;
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
11
|
+
serverName: string;
|
12
|
+
serverConfig?: any;
|
13
|
+
}, {
|
14
|
+
serverName: string;
|
15
|
+
serverConfig?: any;
|
16
|
+
}>;
|
17
|
+
private manager;
|
18
|
+
constructor(manager: ServerManager);
|
19
|
+
protected _call({ serverName, serverConfig, }: z.infer<typeof this.schema>): Promise<string>;
|
20
|
+
}
|
21
|
+
//# sourceMappingURL=add_server.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"add_server.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/add_server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,IAAI,SAAmB;IACvB,WAAW,SAC8E;IAEzF,MAAM;;;;;;;;;OAOJ;IAEF,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,EAAE,aAAa;cAKlB,KAAK,CAAC,EACpB,UAAU,EACV,YAAY,GACb,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CA6BjD"}
|