From b75d24d92c6b95331349d8f0dd69c8504dab768a Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 12 Apr 2025 17:56:23 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=88=20perf:=20=E9=80=82=E9=85=8D=20MCP?= =?UTF-8?q?=20=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E5=B8=A6=20mcpServers?= =?UTF-8?q?=20=E7=9A=84=E6=83=85=E5=86=B5(Cursor)=20=F0=9F=90=9B=20fix:=20?= =?UTF-8?q?=E5=85=B3=E9=97=AD/=E5=88=A0=E9=99=A4=20MCP=20=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E5=90=8E=20Tools=20=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/core/provider/func_tool_manager.py | 14 ++++++++++++++ astrbot/dashboard/routes/tools.py | 12 ++++++++++-- dashboard/src/views/ToolUsePage.vue | 9 +++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/astrbot/core/provider/func_tool_manager.py b/astrbot/core/provider/func_tool_manager.py index 325f89199..0de8a9054 100644 --- a/astrbot/core/provider/func_tool_manager.py +++ b/astrbot/core/provider/func_tool_manager.py @@ -95,6 +95,10 @@ class MCPClient: mcp_server_config (dict): Configuration for the MCP server. See https://modelcontextprotocol.io/quickstart/server """ cfg = mcp_server_config.copy() + print(cfg) + if "mcpServers" in cfg: + key_0 = list(cfg["mcpServers"].keys())[0] + cfg = cfg["mcpServers"][key_0] cfg.pop("active", None) server_params = mcp.StdioServerParameters( **cfg, @@ -260,6 +264,11 @@ class FuncCall: if data["name"] in self.mcp_client_event: self.mcp_client_event[data["name"]].set() self.mcp_client_event.pop(data["name"], None) + self.func_list = [ + f + for f in self.func_list + if not (f.origin == "mcp" and f.mcp_server_name == data["name"]) + ] else: for name in self.mcp_client_dict.keys(): # await self._terminate_mcp_client(name) @@ -267,6 +276,11 @@ class FuncCall: if name in self.mcp_client_event: self.mcp_client_event[name].set() self.mcp_client_event.pop(name, None) + self.func_list = [ + f + for f in self.func_list + if not (f.origin == "mcp") + ] async def _init_mcp_client_task_wrapper( self, name: str, cfg: dict, event: asyncio.Event diff --git a/astrbot/dashboard/routes/tools.py b/astrbot/dashboard/routes/tools.py index 36da48ce4..2bf1b6e18 100644 --- a/astrbot/dashboard/routes/tools.py +++ b/astrbot/dashboard/routes/tools.py @@ -106,7 +106,11 @@ class ToolsRoute(Route): # 复制所有配置字段 for key, value in server_data.items(): if key not in ["name", "active", "tools"]: # 排除特殊字段 - server_config[key] = value + if key == "mcpServers": + key_0 = list(server_data["mcpServers"].keys())[0] + server_config = server_data["mcpServers"][key_0] + else: + server_config[key] = value has_valid_config = True if not has_valid_config: @@ -163,7 +167,11 @@ class ToolsRoute(Route): # 复制所有配置字段 for key, value in server_data.items(): if key not in ["name", "active", "tools"]: # 排除特殊字段 - server_config[key] = value + if key == "mcpServers": + key_0 = list(server_data["mcpServers"].keys())[0] + server_config = server_data["mcpServers"][key_0] + else: + server_config[key] = value only_update_active = False # 如果只更新活动状态,保留原始配置 diff --git a/dashboard/src/views/ToolUsePage.vue b/dashboard/src/views/ToolUsePage.vue index 27eb3dcc1..1d27811d6 100644 --- a/dashboard/src/views/ToolUsePage.vue +++ b/dashboard/src/views/ToolUsePage.vue @@ -32,6 +32,7 @@ mdi-server MCP 服务器 + 新增服务器 @@ -404,6 +405,11 @@ export default { mounted() { this.getServers(); this.getTools(); + setInterval(() => { + this.getServers(); + this.getTools(); + }, 5000); // 每10秒刷新一次服务器列表 + }, methods: { @@ -420,12 +426,15 @@ export default { }, getServers() { + this.loading = true axios.get('/api/tools/mcp/servers') .then(response => { this.mcpServers = response.data.data || []; + this.loading = false }) .catch(error => { this.showError("获取 MCP 服务器列表失败: " + error.message); + this.loading = false }); },