diff --git a/packages/cli/src/acp-integration/acpAgent.ts b/packages/cli/src/acp-integration/acpAgent.ts index f2dcec2cef..c09c7abec3 100644 --- a/packages/cli/src/acp-integration/acpAgent.ts +++ b/packages/cli/src/acp-integration/acpAgent.ts @@ -2504,6 +2504,12 @@ class QwenAgent implements Agent { 'Invalid or missing name', ); } + if (name.length > 256 || !/^[A-Za-z0-9_-]+$/.test(name)) { + throw RequestError.invalidParams( + undefined, + 'Server name must be ≤256 chars, alphanumeric + underscore/hyphen', + ); + } if (!config || typeof config !== 'object' || Array.isArray(config)) { throw RequestError.invalidParams( undefined, @@ -2537,6 +2543,7 @@ class QwenAgent implements Agent { includeTools: _inc, excludeTools: _exc, cwd: _cwd, + env: _env, ...safeConfig } = config as Record; const result = await manager.addRuntimeMcpServer( @@ -2578,6 +2585,12 @@ class QwenAgent implements Agent { 'Invalid or missing name', ); } + if (name.length > 256 || !/^[A-Za-z0-9_-]+$/.test(name)) { + throw RequestError.invalidParams( + undefined, + 'Server name must be ≤256 chars, alphanumeric + underscore/hyphen', + ); + } if ( typeof originatorClientId !== 'string' || originatorClientId.length === 0 diff --git a/packages/core/src/tools/mcp-client-manager.ts b/packages/core/src/tools/mcp-client-manager.ts index 4dd31a50aa..3c95045347 100644 --- a/packages/core/src/tools/mcp-client-manager.ts +++ b/packages/core/src/tools/mcp-client-manager.ts @@ -2825,6 +2825,7 @@ export class McpClientManager { // Clean up any partial state (including tools from partial discover) this.toolRegistry.removeMcpToolsByServer(name); this.pooledConnections.delete(name); + removeMCPServerStatus(name); const failedClient = this.clients.get(name); if (failedClient) { try {