diff options
| author | Olcan <[email protected]> | 2025-05-29 16:13:11 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-05-29 16:13:11 -0700 |
| commit | fe049c286f3fa20d7ea232c5d008f0112bb7d955 (patch) | |
| tree | 28d4b0bb2a7dadc90b1daa62bcd4d454fc7a45ec | |
| parent | 2db5d830236e063189084eb384f6cdd383914a96 (diff) | |
fix mcp tool names that are long or have invalid characters (based on 400 error) (#602)
| -rw-r--r-- | packages/server/src/tools/mcp-client.ts | 19 |
1 files 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, |
