mcp-use 0.1.0 → 0.1.1

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.
@@ -9,6 +9,7 @@ import { config } from 'dotenv';
9
9
  import { MCPAgent, MCPClient } from '../index.js';
10
10
  import { LangChainAdapter } from '../src/adapters/langchain_adapter.js';
11
11
  import { ServerManager } from '../src/managers/server_manager.js';
12
+ import { AddMCPServerFromConfigTool } from '../src/managers/tools/add_server_from_config.js';
12
13
  // Load environment variables from .env file
13
14
  config();
14
15
  async function main() {
@@ -16,19 +17,21 @@ async function main() {
16
17
  const client = new MCPClient();
17
18
  // The LLM to power the agent
18
19
  const llm = new ChatOpenAI({ model: 'gpt-4o', temperature: 0 });
20
+ const serverManager = new ServerManager(client, new LangChainAdapter());
21
+ serverManager.setManagementTools([new AddMCPServerFromConfigTool(serverManager)]);
19
22
  // Create the agent, enabling the ServerManager
20
23
  const agent = new MCPAgent({
21
24
  llm,
22
25
  client,
23
26
  maxSteps: 30,
24
- useServerManager: true,
25
- serverManagerFactory: client => new ServerManager(client, new LangChainAdapter()),
26
27
  autoInitialize: true,
28
+ useServerManager: true,
29
+ serverManagerFactory: () => serverManager,
27
30
  });
28
31
  // Define the server configuration that the agent will be asked to add.
29
32
  const serverConfigA = {
30
33
  command: 'npx',
31
- args: ['@playwright/mcp@latest'],
34
+ args: ['@playwright/mcp@latest', '--headless'],
32
35
  env: {
33
36
  DISPLAY: ':1',
34
37
  },
@@ -54,8 +57,19 @@ async function main() {
54
57
  \`\`\`
55
58
  and give me a house in the location of the company mcp-use.
56
59
  `;
57
- // Run the agent. It will first use the AddMCPServerTool, then the tools from the new server.
58
- const result = await agent.run(query);
60
+ // Run the agent. We call `stream()` to get the async generator.
61
+ const stepIterator = agent.stream(query);
62
+ let result;
63
+ while (true) {
64
+ const { done, value } = await stepIterator.next();
65
+ if (done) {
66
+ result = value;
67
+ break;
68
+ }
69
+ // You can inspect the intermediate steps here.
70
+ console.log('--- Agent Step ---');
71
+ console.dir(value, { depth: 4 });
72
+ }
59
73
  console.log(`\n✅ Final Result:\n${result}`);
60
74
  // Clean up the session created by the agent
61
75
  await client.closeAllSessions();
package/dist/index.d.ts CHANGED
@@ -9,5 +9,6 @@ import { Logger, logger } from './src/logging.js';
9
9
  import { MCPSession } from './src/session.js';
10
10
  export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
11
11
  export { ServerManager } from './src/managers/server_manager.js';
12
+ export * from './src/managers/tools/index.js';
12
13
  export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -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,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"}
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;AAChE,cAAc,+BAA+B,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"}
package/dist/index.js CHANGED
@@ -9,4 +9,5 @@ import { Logger, logger } from './src/logging.js';
9
9
  import { MCPSession } from './src/session.js';
10
10
  export { BaseAdapter, LangChainAdapter } from './src/adapters/index.js';
11
11
  export { ServerManager } from './src/managers/server_manager.js';
12
+ export * from './src/managers/tools/index.js';
12
13
  export { BaseConnector, HttpConnector, loadConfigFile, Logger, logger, MCPAgent, MCPClient, MCPSession, StdioConnector, WebSocketConnector };
@@ -1,10 +1,12 @@
1
1
  import type { BaseLanguageModelInterface } from '@langchain/core/language_models/base';
2
2
  import type { BaseMessage } from '@langchain/core/messages';
3
+ import type { StructuredToolInterface } from '@langchain/core/tools';
4
+ import type { AgentStep } from 'langchain/agents';
3
5
  import type { MCPClient } from '../client.js';
4
6
  import type { BaseConnector } from '../connectors/base.js';
5
- import type { ServerManager } from '../managers/server_manager.js';
6
7
  import { SystemMessage } from '@langchain/core/messages';
7
8
  import { LangChainAdapter } from '../adapters/langchain_adapter.js';
9
+ import { ServerManager } from '../managers/server_manager.js';
8
10
  export declare class MCPAgent {
9
11
  private llm;
10
12
  private client?;
@@ -13,6 +15,7 @@ export declare class MCPAgent {
13
15
  private autoInitialize;
14
16
  private memoryEnabled;
15
17
  private disallowedTools;
18
+ private additionalTools;
16
19
  private useServerManager;
17
20
  private verbose;
18
21
  private systemPrompt?;
@@ -37,6 +40,7 @@ export declare class MCPAgent {
37
40
  systemPromptTemplate?: string | null;
38
41
  additionalInstructions?: string | null;
39
42
  disallowedTools?: string[];
43
+ additionalTools?: StructuredToolInterface[];
40
44
  useServerManager?: boolean;
41
45
  verbose?: boolean;
42
46
  adapter?: LangChainAdapter;
@@ -52,7 +56,15 @@ export declare class MCPAgent {
52
56
  setSystemMessage(message: string): void;
53
57
  setDisallowedTools(disallowedTools: string[]): void;
54
58
  getDisallowedTools(): string[];
59
+ private _consumeAndReturn;
60
+ /**
61
+ * Runs the agent and returns a promise for the final result.
62
+ */
55
63
  run(query: string, maxSteps?: number, manageConnector?: boolean, externalHistory?: BaseMessage[]): Promise<string>;
64
+ /**
65
+ * Runs the agent and yields intermediate steps as an async generator.
66
+ */
67
+ stream(query: string, maxSteps?: number, manageConnector?: boolean, externalHistory?: BaseMessage[]): AsyncGenerator<AgentStep, string, void>;
56
68
  close(): Promise<void>;
57
69
  }
58
70
  //# sourceMappingURL=mcp_agent.d.ts.map
@@ -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;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"}
1
+ {"version":3,"file":"mcp_agent.d.ts","sourceRoot":"","sources":["../../../src/agents/mcp_agent.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { ChatPromptTemplate, MessagesPlaceholder, } from '@langchain/core/prompt
4
4
  import { AgentExecutor, createToolCallingAgent, } from 'langchain/agents';
5
5
  import { LangChainAdapter } from '../adapters/langchain_adapter.js';
6
6
  import { logger } from '../logging.js';
7
+ import { ServerManager } from '../managers/server_manager.js';
7
8
  import { createSystemMessage } from './prompts/system_prompt_builder.js';
8
9
  import { DEFAULT_SYSTEM_PROMPT_TEMPLATE, SERVER_MANAGER_SYSTEM_PROMPT_TEMPLATE } from './prompts/templates.js';
9
10
  export class MCPAgent {
@@ -14,6 +15,7 @@ export class MCPAgent {
14
15
  autoInitialize;
15
16
  memoryEnabled;
16
17
  disallowedTools;
18
+ additionalTools;
17
19
  useServerManager;
18
20
  verbose;
19
21
  systemPrompt;
@@ -38,6 +40,7 @@ export class MCPAgent {
38
40
  this.systemPromptTemplateOverride = options.systemPromptTemplate ?? null;
39
41
  this.additionalInstructions = options.additionalInstructions ?? null;
40
42
  this.disallowedTools = options.disallowedTools ?? [];
43
+ this.additionalTools = options.additionalTools ?? [];
41
44
  this.useServerManager = options.useServerManager ?? false;
42
45
  this.verbose = options.verbose ?? false;
43
46
  if (!this.client && this.connectors.length === 0) {
@@ -47,15 +50,13 @@ export class MCPAgent {
47
50
  if (!this.client) {
48
51
  throw new Error('\'client\' must be provided when \'useServerManager\' is true.');
49
52
  }
50
- if (options.serverManagerFactory) {
51
- this.serverManager = options.serverManagerFactory(this.client);
52
- }
53
- else {
54
- throw new Error('No serverManagerFactory passed to MCPAgent constructor.');
55
- }
53
+ this.adapter = options.adapter ?? new LangChainAdapter(this.disallowedTools);
54
+ this.serverManager = options.serverManagerFactory?.(this.client) ?? new ServerManager(this.client, this.adapter);
56
55
  }
57
56
  // Let consumers swap allowed tools dynamically
58
- this.adapter = options.adapter ?? new LangChainAdapter(this.disallowedTools);
57
+ else {
58
+ this.adapter = options.adapter ?? new LangChainAdapter(this.disallowedTools);
59
+ }
59
60
  }
60
61
  async initialize() {
61
62
  logger.info('🚀 Initializing MCP agent and connecting to services...');
@@ -65,6 +66,7 @@ export class MCPAgent {
65
66
  // Get server management tools
66
67
  const managementTools = this.serverManager.tools;
67
68
  this.tools = managementTools;
69
+ this.tools.push(...this.additionalTools);
68
70
  logger.info(`🔧 Server manager mode active with ${managementTools.length} management tools`);
69
71
  // Create the system message based on available tools
70
72
  await this.createSystemMessageFromTools(this.tools);
@@ -83,6 +85,7 @@ export class MCPAgent {
83
85
  }
84
86
  // Create LangChain tools directly from the client using the adapter
85
87
  this.tools = await LangChainAdapter.createTools(this.client);
88
+ this.tools.push(...this.additionalTools);
86
89
  logger.info(`🛠️ Created ${this.tools.length} LangChain tools from client`);
87
90
  }
88
91
  else {
@@ -95,6 +98,7 @@ export class MCPAgent {
95
98
  }
96
99
  // Create LangChain tools using the adapter with connectors
97
100
  this.tools = await this.adapter.createToolsFromConnectors(this.connectors);
101
+ this.tools.push(...this.additionalTools);
98
102
  logger.info(`🛠️ Created ${this.tools.length} LangChain tools from connectors`);
99
103
  }
100
104
  // Get all tools for system message generation
@@ -173,7 +177,28 @@ export class MCPAgent {
173
177
  getDisallowedTools() {
174
178
  return this.disallowedTools;
175
179
  }
176
- async run(query, maxSteps, manageConnector = true, externalHistory) {
180
+ async _consumeAndReturn(generator) {
181
+ // Manually iterate through the generator to consume the steps.
182
+ // The for-await-of loop is not used because it discards the generator's
183
+ // final return value. We need to capture that value when `done` is true.
184
+ while (true) {
185
+ const { done, value } = await generator.next();
186
+ if (done) {
187
+ return value;
188
+ }
189
+ }
190
+ }
191
+ /**
192
+ * Runs the agent and returns a promise for the final result.
193
+ */
194
+ async run(query, maxSteps, manageConnector, externalHistory) {
195
+ const generator = this.stream(query, maxSteps, manageConnector, externalHistory);
196
+ return this._consumeAndReturn(generator);
197
+ }
198
+ /**
199
+ * Runs the agent and yields intermediate steps as an async generator.
200
+ */
201
+ async *stream(query, maxSteps, manageConnector = true, externalHistory) {
177
202
  let result = '';
178
203
  let initializedHere = false;
179
204
  try {
@@ -217,6 +242,7 @@ export class MCPAgent {
217
242
  if (changed) {
218
243
  logger.info(`🔄 Tools changed before step ${stepNum + 1}, updating agent. New tools: ${[...currentToolNames].join(', ')}`);
219
244
  this.tools = currentTools;
245
+ this.tools.push(...this.additionalTools);
220
246
  await this.createSystemMessageFromTools(this.tools);
221
247
  this.agentExecutor = this.createAgent();
222
248
  this.agentExecutor.maxIterations = steps;
@@ -235,6 +261,7 @@ export class MCPAgent {
235
261
  const stepArray = nextStepOutput;
236
262
  intermediateSteps.push(...stepArray);
237
263
  for (const step of stepArray) {
264
+ yield step;
238
265
  const { action, observation } = step;
239
266
  const toolName = action.tool;
240
267
  let toolInputStr = String(action.toolInput);
@@ -9,6 +9,8 @@ export declare class MCPClient {
9
9
  addServer(name: string, serverConfig: Record<string, any>): void;
10
10
  removeServer(name: string): void;
11
11
  getServerNames(): string[];
12
+ getServerConfig(name: string): Record<string, any>;
13
+ getConfig(): Record<string, any>;
12
14
  saveConfig(filepath: string): void;
13
15
  createSession(serverName: string, autoInitialize?: boolean): Promise<MCPSession>;
14
16
  createAllSessions(autoInitialize?: boolean): Promise<Record<string, MCPSession>>;
@@ -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,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"}
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,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIlD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIhC,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"}
@@ -36,6 +36,12 @@ export class MCPClient {
36
36
  getServerNames() {
37
37
  return Object.keys(this.config.mcpServers ?? {});
38
38
  }
39
+ getServerConfig(name) {
40
+ return this.config.mcpServers?.[name];
41
+ }
42
+ getConfig() {
43
+ return this.config ?? {};
44
+ }
39
45
  saveConfig(filepath) {
40
46
  const dir = path.dirname(filepath);
41
47
  if (!fs.existsSync(dir)) {
@@ -7,7 +7,9 @@ export declare class ServerManager {
7
7
  readonly client: MCPClient;
8
8
  readonly adapter: LangChainAdapter;
9
9
  activeServer: string | null;
10
- constructor(client: MCPClient, adapter: LangChainAdapter);
10
+ private overrideManagementTools?;
11
+ constructor(client: MCPClient, adapter: LangChainAdapter, managementTools?: StructuredToolInterface[]);
12
+ setManagementTools(tools: StructuredToolInterface[]): void;
11
13
  logState(context: string): void;
12
14
  initialize(): void;
13
15
  prefetchServerTools(): Promise<void>;
@@ -1 +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"}
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;IACzC,OAAO,CAAC,uBAAuB,CAAC,CAA2B;gBAGzD,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,uBAAuB,EAAE;IAOtC,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAO1D,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"}
@@ -1,7 +1,7 @@
1
1
  import { isEqual } from 'lodash-es';
2
2
  import { logger } from '../logging.js';
3
3
  import { AcquireActiveMCPServerTool } from './tools/acquire_active_mcp_server.js';
4
- import { AddMCPServerTool } from './tools/add_server.js';
4
+ import { AddMCPServerFromConfigTool } from './tools/add_server_from_config.js';
5
5
  import { ConnectMCPServerTool } from './tools/connect_mcp_server.js';
6
6
  import { ListMCPServersTool } from './tools/list_mcp_servers.js';
7
7
  import { ReleaseMCPServerConnectionTool } from './tools/release_mcp_server_connection.js';
@@ -11,9 +11,15 @@ export class ServerManager {
11
11
  client;
12
12
  adapter;
13
13
  activeServer = null;
14
- constructor(client, adapter) {
14
+ overrideManagementTools;
15
+ constructor(client, adapter, managementTools) {
15
16
  this.client = client;
16
17
  this.adapter = adapter;
18
+ this.overrideManagementTools = managementTools;
19
+ }
20
+ setManagementTools(tools) {
21
+ this.overrideManagementTools = tools;
22
+ logger.info(`Overriding default management tools with a new set of ${tools.length} tools.`);
17
23
  }
18
24
  logState(context) {
19
25
  const allServerNames = this.client.getServerNames();
@@ -83,8 +89,8 @@ export class ServerManager {
83
89
  if (logger.level === 'debug') {
84
90
  this.logState('Providing tools to agent');
85
91
  }
86
- const managementTools = [
87
- new AddMCPServerTool(this),
92
+ const managementTools = this.overrideManagementTools ?? [
93
+ new AddMCPServerFromConfigTool(this),
88
94
  new ListMCPServersTool(this),
89
95
  new ConnectMCPServerTool(this),
90
96
  new AcquireActiveMCPServerTool(this),
@@ -1,7 +1,7 @@
1
1
  import type { ServerManager } from '../server_manager.js';
2
2
  import { StructuredTool } from 'langchain/tools';
3
3
  import { z } from 'zod';
4
- export declare class AddMCPServerTool extends StructuredTool {
4
+ export declare class AddMCPServerFromConfigTool extends StructuredTool {
5
5
  name: string;
6
6
  description: string;
7
7
  schema: z.ZodObject<{
@@ -18,4 +18,4 @@ export declare class AddMCPServerTool extends StructuredTool {
18
18
  constructor(manager: ServerManager);
19
19
  protected _call({ serverName, serverConfig, }: z.infer<typeof this.schema>): Promise<string>;
20
20
  }
21
- //# sourceMappingURL=add_server.d.ts.map
21
+ //# sourceMappingURL=add_server_from_config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add_server_from_config.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/add_server_from_config.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,0BAA2B,SAAQ,cAAc;IAC5D,IAAI,SAA+B;IACnC,WAAW,SAC0G;IAErH,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"}
@@ -1,9 +1,9 @@
1
1
  import { StructuredTool } from 'langchain/tools';
2
2
  import { z } from 'zod';
3
3
  import { logger } from '../../logging.js';
4
- export class AddMCPServerTool extends StructuredTool {
5
- name = 'add_mcp_server';
6
- description = 'Adds a new MCP server to the client and connects to it, making its tools available.';
4
+ export class AddMCPServerFromConfigTool extends StructuredTool {
5
+ name = 'add_mcp_server_from_config';
6
+ description = 'Adds a new MCP server to the client from a configuration object and connects to it, making its tools available.';
7
7
  schema = z.object({
8
8
  serverName: z.string().describe('The name for the new MCP server.'),
9
9
  serverConfig: z
@@ -1,4 +1,5 @@
1
1
  export * from './acquire_active_mcp_server.js';
2
+ export * from './add_server_from_config.js';
2
3
  export * from './connect_mcp_server.js';
3
4
  export * from './list_mcp_servers.js';
4
5
  export * from './release_mcp_server_connection.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oCAAoC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/managers/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oCAAoC,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export * from './acquire_active_mcp_server.js';
2
+ export * from './add_server_from_config.js';
2
3
  export * from './connect_mcp_server.js';
3
4
  export * from './list_mcp_servers.js';
4
5
  export * from './release_mcp_server_connection.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mcp-use",
3
3
  "type": "module",
4
- "version": "0.1.0",
4
+ "version": "0.1.1",
5
5
  "packageManager": "pnpm@10.6.1",
6
6
  "description": "A utility library for integrating Model Context Protocol (MCP) with LangChain, Zod, and related tools. Provides helpers for schema conversion, event streaming, and SDK usage.",
7
7
  "author": "Zane",
@@ -1 +0,0 @@
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"}