From 9e42822e35924ad8623cc9d131de9d048c08aaea Mon Sep 17 00:00:00 2001 From: zxstty Date: Fri, 18 Jul 2025 14:57:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8mcp=E5=AE=89=E8=A3=85=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E5=89=8D=E4=BB=8E=E4=BB=BB=E5=8A=A1=E9=98=9F=E5=88=97?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=B7=B2=E7=BB=8F=E5=AE=8C=E6=88=90=E6=88=96?= =?UTF-8?q?=E8=80=85=E5=A4=B1=E8=B4=A5=E7=9A=84=E4=BB=BB=E5=8A=A1&?= =?UTF-8?q?=E5=88=A0=E9=99=A4mcp=E6=9C=8D=E5=8A=A1=E6=97=B6=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=AF=B9=E5=BA=94=E7=9A=84mcp=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/process_handler.py | 4 ++-- apps/scheduler/pool/loader/mcp.py | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/common/process_handler.py b/apps/common/process_handler.py index cf444f42..8de3a752 100644 --- a/apps/common/process_handler.py +++ b/apps/common/process_handler.py @@ -40,9 +40,9 @@ class ProcessHandler: if not acquired: logger.warning("[ProcessHandler] 获取任务ID时锁超时。") return [] - taks_ids = list(ProcessHandler.tasks.keys()) + task_ids = list(ProcessHandler.tasks.keys()) ProcessHandler.lock.release() - return taks_ids + return task_ids @staticmethod def add_task(task_id: str, target: Callable, *args, **kwargs) -> bool: # noqa: ANN002, ANN003 diff --git a/apps/scheduler/pool/loader/mcp.py b/apps/scheduler/pool/loader/mcp.py index d5f21a49..57868672 100644 --- a/apps/scheduler/pool/loader/mcp.py +++ b/apps/scheduler/pool/loader/mcp.py @@ -123,7 +123,6 @@ class MCPLoader(metaclass=SingletonMeta): await MCPLoader.update_template_status(mcp_id, MCPInstallStatus.READY) await MCPLoader._insert_template_tool(mcp_id, config) - @staticmethod async def init_one_template(mcp_id: str, config: MCPServerConfig) -> None: """ @@ -133,20 +132,27 @@ class MCPLoader(metaclass=SingletonMeta): :param MCPServerConfig config: MCP配置 :return: 无 """ + # 删除已经完成或者是失败的MCP安装任务 + mcp_collection = MongoDB().get_collection("mcp") + mcp_ids = ProcessHandler.get_all_task_ids() + db_service_list = await mcp_collection.find( + {"_id": {"$in": mcp_ids}, "status": {"$in": [MCPInstallStatus.READY.value, MCPInstallStatus.FAILED.value]}}, + ).to_list(None) + for db_service in db_service_list: + db_service = MCPCollection.model_validate(db_service) + ProcessHandler.remove_task(db_service.id) # 插入数据库;这里用旧的config就可以 await MCPLoader._insert_template_db(mcp_id, config) # 检查目录 template_path = MCP_PATH / "template" / mcp_id await Path.mkdir(template_path, parents=True, exist_ok=True) - # 安装MCP模板 if not ProcessHandler.add_task(mcp_id, MCPLoader._install_template_task, mcp_id, config): err = f"安装任务无法执行,请稍后重试: {mcp_id}" logger.error(err) raise RuntimeError(err) - @staticmethod async def _init_all_template() -> None: """ @@ -237,7 +243,6 @@ class MCPLoader(metaclass=SingletonMeta): upsert=True, ) - @staticmethod async def _insert_template_tool(mcp_id: str, config: MCPServerConfig) -> None: """ @@ -472,6 +477,7 @@ class MCPLoader(metaclass=SingletonMeta): ).to_list(None) for mcp_service in mcp_service_list: item = MCPCollection.model_validate(mcp_service) + ProcessHandler.remove_task(item.id) for user_sub in item.activated: await MCPLoader.user_deactive_template(user_sub=user_sub, mcp_id=item.id) await mcp_collection.delete_many({"_id": {"$in": deleted_mcp_list}}) @@ -547,7 +553,6 @@ class MCPLoader(metaclass=SingletonMeta): {"$set": {"activated": user_list}}, ) - @staticmethod async def init() -> None: """ -- Gitee