From 63a454084ec4d1ef04ce73e6bf658ed609260e4b Mon Sep 17 00:00:00 2001 From: var4dev <89148741+var4dev@users.noreply.github.com> Date: Tue, 18 Aug 2026 12:15:16 +0700 Subject: [PATCH] fix(agent): close MCP sessions wrapped in MCPToolBinding (#18399) --- agent/canvas.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/agent/canvas.py b/agent/canvas.py index 4ccec4ae5a..14be6c10a6 100644 --- a/agent/canvas.py +++ b/agent/canvas.py @@ -168,19 +168,22 @@ class Graph: logging.exception(e) def close(self): - from common.mcp_tool_call_conn import MCPToolCallSession + from common.mcp_tool_call_conn import MCPToolBinding, MCPToolCallSession seen = set() for cpn in self.components.values(): obj = cpn.get("obj") if obj and hasattr(obj, "tools"): for tool in obj.tools.values(): - if isinstance(tool, MCPToolCallSession) and id(tool) not in seen: - seen.add(id(tool)) + session = tool if isinstance(tool, MCPToolCallSession) else ( + tool.session if isinstance(tool, MCPToolBinding) else None + ) + if isinstance(session, MCPToolCallSession) and id(session) not in seen: + seen.add(id(session)) try: - tool.close_sync(timeout=3) + session.close_sync(timeout=3) except Exception: - pass + logging.exception("Error closing MCP session for server %s", session._mcp_server.id) @staticmethod def _get_component_name(dsl, cid):