summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlcan <[email protected]>2025-05-29 16:13:11 -0700
committerGitHub <[email protected]>2025-05-29 16:13:11 -0700
commitfe049c286f3fa20d7ea232c5d008f0112bb7d955 (patch)
tree28d4b0bb2a7dadc90b1daa62bcd4d454fc7a45ec
parent2db5d830236e063189084eb384f6cdd383914a96 (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.ts19
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,