Skip to content

Commit 9f9ffee

Browse files
committed
fix: optimize MCP tool grouping by server and streamline tool filtering in component panel
1 parent a918dc0 commit 9f9ffee

2 files changed

Lines changed: 19 additions & 19 deletions

File tree

  • astrbot/dashboard/routes
  • dashboard/src/components/extension/componentPanel

astrbot/dashboard/routes/tools.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,14 @@ async def get_mcp_servers(self):
8383
)
8484
mcp_servers = {}
8585

86+
# 按 server 名预分组 MCP 工具,避免每台服务器都扫一遍 func_list
87+
mcp_tools_by_server: dict[str, list[MCPTool]] = {}
88+
for f in self.tool_mgr.func_list:
89+
if isinstance(f, MCPTool):
90+
mcp_tools_by_server.setdefault(f.mcp_server_name, []).append(f)
91+
92+
runtime_view = self.tool_mgr.mcp_server_runtime_view
93+
8694
# 获取所有服务器并添加它们的工具列表
8795
for name, server_config in mcp_servers.items():
8896
if not isinstance(server_config, dict):
@@ -103,20 +111,14 @@ async def get_mcp_servers(self):
103111

104112
# tools 为 namespaced 名(与 personaForm.tools 匹配),
105113
# original_tool_names 为原始名(给 UI 显示)
106-
for name_key, runtime in self.tool_mgr.mcp_server_runtime_view.items():
107-
if name_key == name:
108-
mcp_client = runtime.client
109-
mcp_tools = [
110-
f
111-
for f in self.tool_mgr.func_list
112-
if isinstance(f, MCPTool) and f.mcp_server_name == name
113-
]
114-
server_info["tools"] = [f.name for f in mcp_tools]
115-
server_info["original_tool_names"] = [
116-
f.original_tool_name for f in mcp_tools
117-
]
118-
server_info["errlogs"] = mcp_client.server_errlogs
119-
break
114+
runtime = runtime_view.get(name)
115+
if runtime is not None:
116+
mcp_tools = mcp_tools_by_server.get(name, [])
117+
server_info["tools"] = [f.name for f in mcp_tools]
118+
server_info["original_tool_names"] = [
119+
f.original_tool_name for f in mcp_tools
120+
]
121+
server_info["errlogs"] = runtime.client.server_errlogs
120122
else:
121123
server_info["tools"] = []
122124
server_info["original_tool_names"] = []

dashboard/src/components/extension/componentPanel/index.vue

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,9 @@ const {
8484
openDetailsDialog
8585
} = useCommandActions(toast, () => fetchCommands(tm('messages.loadFailed')));
8686
87-
const filteredTools = computed(() => {
88-
const query = normalizeTextInput(toolSearch.value).trim().toLowerCase();
89-
if (!query) return tools.value;
90-
return tools.value.filter(tool => matchesToolSearch(tool, query));
91-
});
87+
const filteredTools = computed(() =>
88+
tools.value.filter(tool => matchesToolSearch(tool, toolSearch.value))
89+
);
9290
9391
// 处理切换指令状态
9492
const handleToggleCommand = async (cmd: CommandItem) => {

0 commit comments

Comments
 (0)