local agent = require("agent")
local mcp_tool_map = {
outline__docs = {
server = "outline",
tool = "docs",
def = {
name = "outline__docs",
description = "outline docs",
input_schema = { type = "object", properties = {} },
group = "outline",
},
},
search__query = {
server = "search",
tool = "query",
def = {
name = "search__query",
description = "search query",
input_schema = { type = "object", properties = {} },
group = "search",
},
},
}
local tools_outline = agent._build_tools(mcp_tool_map, nil, { "outline" })
local found_outline = false
local found_search_in_outline_filter = false
for _, t in ipairs(tools_outline) do
if t.name == "outline__docs" then found_outline = true end
if t.name == "search__query" then found_search_in_outline_filter = true end
end
print("case1.outline_included=" .. tostring(found_outline))
print("case1.search_excluded=" .. tostring(not found_search_in_outline_filter))
local tools_search = agent._build_tools(mcp_tool_map, nil, { "search" })
local found_search = false
local found_outline_in_search_filter = false
for _, t in ipairs(tools_search) do
if t.name == "search__query" then found_search = true end
if t.name == "outline__docs" then found_outline_in_search_filter = true end
end
print("case2.search_included=" .. tostring(found_search))
print("case2.outline_excluded=" .. tostring(not found_outline_in_search_filter))
local tools_all = agent._build_tools(mcp_tool_map, nil, nil)
local count = 0
for _ in pairs(mcp_tool_map) do count = count + 1 end
print("case3.all_tools_count=" .. tostring(#tools_all) .. "_expected=" .. tostring(count))
local tools_default = agent._build_tools(mcp_tool_map, nil, { "default" })
local mcp_leaked = false
for _, t in ipairs(tools_default) do
if t.name == "outline__docs" or t.name == "search__query" then
mcp_leaked = true
end
end
print("case4.mcp_not_in_default=" .. tostring(not mcp_leaked))
local tools_all2 = agent._build_tools(mcp_tool_map, nil, nil)
local group_leaked = false
for _, t in ipairs(tools_all2) do
if t.group ~= nil then
group_leaked = true
end
end
print("case5.group_not_in_emitted_def=" .. tostring(not group_leaked))