diff --git a/.changeset/remove-mcp-from-driver.md b/.changeset/remove-mcp-from-driver.md new file mode 100644 index 00000000..fee91504 --- /dev/null +++ b/.changeset/remove-mcp-from-driver.md @@ -0,0 +1,5 @@ +--- +"@agentxjs/mono-driver": patch +--- + +Remove MCP dependency from MonoDriver for platform-agnostic compatibility. MCP tool discovery will be handled at the Platform level (like BashProvider), not inside the Driver. diff --git a/bun.lock b/bun.lock index b69cb1ca..eb7ab35b 100644 --- a/bun.lock +++ b/bun.lock @@ -178,7 +178,6 @@ "@ai-sdk/anthropic": "^3.0.36", "@ai-sdk/deepseek": "2.0.17", "@ai-sdk/google": "^3.0.21", - "@ai-sdk/mcp": "1.0.18", "@ai-sdk/mistral": "3.0.18", "@ai-sdk/openai": "^3.0.25", "@ai-sdk/openai-compatible": "2.0.27", @@ -248,8 +247,6 @@ "@ai-sdk/google": ["@ai-sdk/google@3.0.21", "", { "dependencies": { "@ai-sdk/provider": "3.0.7", "@ai-sdk/provider-utils": "4.0.13" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-qQuvcbDqDPZojtoT45UFCQVH2w3m6KJKKjqJduUsvhN5ZqOXste0h4HgHK8hwGuDfv96Jr9QQEpspbgp6iu5Uw=="], - "@ai-sdk/mcp": ["@ai-sdk/mcp@1.0.18", "", { "dependencies": { "@ai-sdk/provider": "3.0.7", "@ai-sdk/provider-utils": "4.0.13", "pkce-challenge": "^5.0.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-6uKsRrD6TMYqaEfCMyWBaAdCVBBdNDRO/9TuIUvuJKP2HZC3bOX6gjhWbbozvboQV9H3MDBzdbOb1Uz6Rb0w6A=="], - "@ai-sdk/mistral": ["@ai-sdk/mistral@3.0.18", "", { "dependencies": { "@ai-sdk/provider": "3.0.7", "@ai-sdk/provider-utils": "4.0.13" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-k8nCBBVGOzBigNwBO5kREzsP/e+C3npcL7jt19ZdicIbZ6rvmnSIRI90iENyS9T10vM7sjrXoCpgZSYgJB2pJQ=="], "@ai-sdk/openai": ["@ai-sdk/openai@3.0.25", "", { "dependencies": { "@ai-sdk/provider": "3.0.7", "@ai-sdk/provider-utils": "4.0.13" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-DsaN46R98+D1W3lU3fKuPU3ofacboLaHlkAwxJPgJ8eup1AJHmPK1N1y10eJJbJcF6iby8Tf/vanoZxc9JPUfw=="], @@ -1732,8 +1729,6 @@ "pixelmatch": ["pixelmatch@5.3.0", "", { "dependencies": { "pngjs": "^6.0.0" }, "bin": { "pixelmatch": "bin/pixelmatch" } }, "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q=="], - "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], - "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], "pkg-up": ["pkg-up@3.1.0", "", { "dependencies": { "find-up": "^3.0.0" } }, "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="], diff --git a/packages/mono-driver/package.json b/packages/mono-driver/package.json index d030edd4..c03eb235 100644 --- a/packages/mono-driver/package.json +++ b/packages/mono-driver/package.json @@ -26,7 +26,6 @@ "@ai-sdk/anthropic": "^3.0.36", "@ai-sdk/deepseek": "2.0.17", "@ai-sdk/google": "^3.0.21", - "@ai-sdk/mcp": "1.0.18", "@ai-sdk/mistral": "3.0.18", "@ai-sdk/openai": "^3.0.25", "@ai-sdk/openai-compatible": "2.0.27", diff --git a/packages/mono-driver/src/MonoDriver.ts b/packages/mono-driver/src/MonoDriver.ts index 02b1691e..2804e725 100644 --- a/packages/mono-driver/src/MonoDriver.ts +++ b/packages/mono-driver/src/MonoDriver.ts @@ -29,9 +29,6 @@ import type { Session } from "@agentxjs/core/session"; import { createAnthropic } from "@ai-sdk/anthropic"; import { createDeepSeek } from "@ai-sdk/deepseek"; import { createGoogleGenerativeAI } from "@ai-sdk/google"; -import type { MCPClient } from "@ai-sdk/mcp"; -import { createMCPClient } from "@ai-sdk/mcp"; -import { Experimental_StdioMCPTransport } from "@ai-sdk/mcp/mcp-stdio"; import { createMistral } from "@ai-sdk/mistral"; import { createOpenAI } from "@ai-sdk/openai"; import { createOpenAICompatible } from "@ai-sdk/openai-compatible"; @@ -60,11 +57,6 @@ export class MonoDriver implements Driver { private readonly maxSteps: number; private readonly compatibleConfig?: OpenAICompatibleConfig; - /** MCP clients created during initialize() */ - private mcpClients: MCPClient[] = []; - /** Tools discovered from MCP servers */ - private mcpTools: ToolSet = {}; - constructor(config: MonoDriverConfig) { this.config = config; this.session = config.session; @@ -105,40 +97,6 @@ export class MonoDriver implements Driver { // Notify session ID captured this.config.onSessionIdCaptured?.(this._sessionId); - // Initialize MCP servers - if (this.config.mcpServers) { - for (const [name, serverConfig] of Object.entries(this.config.mcpServers)) { - let client: MCPClient; - - if ("command" in serverConfig) { - // Stdio transport — local subprocess - const transport = new Experimental_StdioMCPTransport({ - command: serverConfig.command, - args: serverConfig.args, - env: serverConfig.env, - }); - client = await createMCPClient({ transport }); - } else { - // HTTP Streamable transport — remote server - client = await createMCPClient({ - transport: { - type: serverConfig.type, - url: serverConfig.url, - headers: serverConfig.headers, - }, - }); - } - - this.mcpClients.push(client); - const tools = await client.tools(); - Object.assign(this.mcpTools, tools); - logger.info("MCP server connected", { - name, - toolCount: Object.keys(tools).length, - }); - } - } - logger.info("MonoDriver initialized", { sessionId: this._sessionId }); } @@ -153,13 +111,6 @@ export class MonoDriver implements Driver { this.abortController?.abort(); this.abortController = null; - // Close MCP clients - for (const client of this.mcpClients) { - await client.close(); - } - this.mcpClients = []; - this.mcpTools = {}; - this._state = "disposed"; logger.info("MonoDriver disposed"); } @@ -210,7 +161,7 @@ export class MonoDriver implements Driver { model: this.getModel(), system: this.config.systemPrompt, messages, - tools: this.mergeTools(), + tools: this.getTools(), stopWhen: stepCountIs(this.maxSteps), abortSignal: this.abortController.signal, }); @@ -357,13 +308,12 @@ export class MonoDriver implements Driver { // ============================================================================ /** - * Merge MCP tools and config tools into a single ToolSet. - * Config tools (bash etc.) take precedence over MCP tools with the same name. + * Convert config tools to Vercel AI SDK ToolSet. + * Tools are injected via DriverConfig.tools (from Platform providers like BashProvider). */ - private mergeTools(): ToolSet | undefined { - const configTools = this.config.tools?.length ? toVercelTools(this.config.tools) : {}; - const merged = { ...this.mcpTools, ...configTools }; - return Object.keys(merged).length > 0 ? merged : undefined; + private getTools(): ToolSet | undefined { + if (!this.config.tools?.length) return undefined; + return toVercelTools(this.config.tools); } private getModel() {