From 0ea493e536d46fdc0e15a4708d0b06fae18bf167 Mon Sep 17 00:00:00 2001 From: mlogclub Date: Tue, 14 Apr 2026 14:59:44 +0800 Subject: [PATCH] feat: add test to ensure BuildMCPTools skips graph and builtin tools --- .../internal/impl/factory/tool_factory.go | 3 ++ .../impl/factory/tool_factory_test.go | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 internal/ai/runtime/internal/impl/factory/tool_factory_test.go 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]) + } +}