From fe049c286f3fa20d7ea232c5d008f0112bb7d955 Mon Sep 17 00:00:00 2001 From: Olcan Date: Thu, 29 May 2025 16:13:11 -0700 Subject: [PATCH] fix mcp tool names that are long or have invalid characters (based on 400 error) (#602) --- packages/server/src/tools/mcp-client.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/server/src/tools/mcp-client.ts b/packages/server/src/tools/mcp-client.ts index 8c2b4879..3b55f5e3 100644 --- a/packages/server/src/tools/mcp-client.ts +++ b/packages/server/src/tools/mcp-client.ts @@ -116,12 +116,25 @@ async function connectAndDiscover( }; removeSchemaProps(tool.inputSchema); + // if there are multiple MCP servers, prefix tool name with mcpServerName to avoid collisions + let toolNameForModel = tool.name; + if (Object.keys(mcpServers).length > 1) { + toolNameForModel = mcpServerName + '__' + toolNameForModel; + } + + // replace invalid characters (based on 400 error message) with underscores + toolNameForModel = toolNameForModel.replace(/[^a-zA-Z0-9_.-]/g, '_'); + + // if longer than 63 characters, replace middle with '___' + // note 400 error message says max length is 64, but actual limit seems to be 63 + if (toolNameForModel.length > 63) { + toolNameForModel = + toolNameForModel.slice(0, 28) + '___' + toolNameForModel.slice(-32); + } toolRegistry.registerTool( new DiscoveredMCPTool( mcpClient, - Object.keys(mcpServers).length > 1 - ? mcpServerName + '__' + tool.name - : tool.name, + toolNameForModel, tool.description ?? '', tool.inputSchema, tool.name,