diff --git a/internal/ai/runtime/internal/impl/factory/tool_factory.go b/internal/ai/runtime/internal/impl/factory/tool_factory.go index dc54d18..1d32139 100644 --- a/internal/ai/runtime/internal/impl/factory/tool_factory.go +++ b/internal/ai/runtime/internal/impl/factory/tool_factory.go @@ -34,6 +34,9 @@ func (f *ToolFactory) BuildMCPTools(aiAgent *models.AIAgent) ([]runtimetooling.M if toolCode == "" { toolCode = toolx.BuildMCPToolCode(item.ServerCode, item.ToolName) } + if toolx.ResolveToolSourceType(toolCode) != "mcp" { + continue + } serverCode, toolName := toolx.SplitMCPToolCode(toolCode) if serverCode == "" || toolName == "" { continue diff --git a/internal/ai/runtime/internal/impl/factory/tool_factory_test.go b/internal/ai/runtime/internal/impl/factory/tool_factory_test.go new file mode 100644 index 0000000..2e9417f --- /dev/null +++ b/internal/ai/runtime/internal/impl/factory/tool_factory_test.go @@ -0,0 +1,31 @@ +package factory + +import ( + "testing" + + "cs-agent/internal/models" +) + +func TestBuildMCPToolsSkipsGraphAndBuiltinTools(t *testing.T) { + aiAgent := &models.AIAgent{ + AllowedMCPTools: `[ + {"toolCode":"graph/create_ticket_with_confirmation","serverCode":"graph","toolName":"create_ticket_with_confirmation"}, + {"toolCode":"builtin/tool_search","serverCode":"builtin","toolName":"tool_search"}, + {"toolCode":"system/list_agents","serverCode":"system","toolName":"list_agents"} + ]`, + } + + got, err := NewToolFactory().BuildMCPTools(aiAgent) + if err != nil { + t.Fatalf("BuildMCPTools returned error: %v", err) + } + if len(got) != 1 { + t.Fatalf("expected 1 dynamic mcp tool, got %d: %#v", len(got), got) + } + if got[0].ToolCode != "system/list_agents" { + t.Fatalf("unexpected tool code: %#v", got[0]) + } + if got[0].ServerCode != "system" || got[0].ToolName != "list_agents" { + t.Fatalf("unexpected tool identity: %#v", got[0]) + } +}