diff --git a/packages/core/src/agents/toml-loader.test.ts b/packages/core/src/agents/toml-loader.test.ts index 68f130a611c..17c9b962fc5 100644 --- a/packages/core/src/agents/toml-loader.test.ts +++ b/packages/core/src/agents/toml-loader.test.ts @@ -107,7 +107,7 @@ describe('toml-loader', () => { const filePath = await writeAgentToml(` name = "test-agent" description = "A test agent" - tools = ["not-a-tool"] + tools = ["tool!"] [prompts] system_prompt = "You are a test agent." `); diff --git a/packages/core/src/tools/tool-names.test.ts b/packages/core/src/tools/tool-names.test.ts index 805727c283e..c3335f9021d 100644 --- a/packages/core/src/tools/tool-names.test.ts +++ b/packages/core/src/tools/tool-names.test.ts @@ -30,9 +30,14 @@ describe('tool-names', () => { expect(isValidToolName('my-server__my-tool')).toBe(true); }); + it('should validate generic slug names (unprefixed tools)', () => { + expect(isValidToolName('search_for_files_codesearch')).toBe(true); + expect(isValidToolName('simple-tool-name')).toBe(true); + expect(isValidToolName('tool_with_underscores')).toBe(true); + }); + it('should reject invalid tool names', () => { expect(isValidToolName('')).toBe(false); - expect(isValidToolName('invalid-name')).toBe(false); expect(isValidToolName('server__')).toBe(false); expect(isValidToolName('__tool')).toBe(false); expect(isValidToolName('server__tool__extra')).toBe(false); diff --git a/packages/core/src/tools/tool-names.ts b/packages/core/src/tools/tool-names.ts index db2967405e2..83ee9538dde 100644 --- a/packages/core/src/tools/tool-names.ts +++ b/packages/core/src/tools/tool-names.ts @@ -88,5 +88,7 @@ export function isValidToolName( return slugRegex.test(server) && slugRegex.test(tool); } - return false; + // Allow any valid slug to support unprefixed MCP tools or other dynamic tools + const slugRegex = /^[a-z0-9-_]+$/i; + return slugRegex.test(name); }