diff --git a/src/google/adk/tools/mcp_tool/mcp_session_manager.py b/src/google/adk/tools/mcp_tool/mcp_session_manager.py index 560c0b9..abc49da 100644 --- a/src/google/adk/tools/mcp_tool/mcp_session_manager.py +++ b/src/google/adk/tools/mcp_tool/mcp_session_manager.py @@ -138,15 +138,15 @@ class MCPSessionManager: errlog: (Optional) TextIO stream for error logging. Use only for initializing a local stdio MCP session. """ - self.connection_params = connection_params - self.exit_stack = exit_stack - self.errlog = errlog + self._connection_params = connection_params + self._exit_stack = exit_stack + self._errlog = errlog async def create_session(self) -> ClientSession: return await MCPSessionManager.initialize_session( - connection_params=self.connection_params, - exit_stack=self.exit_stack, - errlog=self.errlog, + connection_params=self._connection_params, + exit_stack=self._exit_stack, + errlog=self._errlog, ) @classmethod diff --git a/src/google/adk/tools/mcp_tool/mcp_tool.py b/src/google/adk/tools/mcp_tool/mcp_tool.py index fc783d4..11ff5eb 100644 --- a/src/google/adk/tools/mcp_tool/mcp_tool.py +++ b/src/google/adk/tools/mcp_tool/mcp_tool.py @@ -81,15 +81,15 @@ class MCPTool(BaseTool): raise ValueError("mcp_session cannot be None") self.name = mcp_tool.name self.description = mcp_tool.description if mcp_tool.description else "" - self.mcp_tool = mcp_tool - self.mcp_session = mcp_session - self.mcp_session_manager = mcp_session_manager + self._mcp_tool = mcp_tool + self._mcp_session = mcp_session + self._mcp_session_manager = mcp_session_manager # TODO(cheliu): Support passing auth to MCP Server. - self.auth_scheme = auth_scheme - self.auth_credential = auth_credential + self._auth_scheme = auth_scheme + self._auth_credential = auth_credential async def _reinitialize_session(self): - self.mcp_session = await self.mcp_session_manager.create_session() + self._mcp_session = await self._mcp_session_manager.create_session() @override def _get_declaration(self) -> FunctionDeclaration: @@ -98,7 +98,7 @@ class MCPTool(BaseTool): Returns: FunctionDeclaration: The Gemini function declaration for the tool. """ - schema_dict = self.mcp_tool.inputSchema + schema_dict = self._mcp_tool.inputSchema parameters = to_gemini_schema(schema_dict) function_decl = FunctionDeclaration( name=self.name, description=self.description, parameters=parameters @@ -119,7 +119,7 @@ class MCPTool(BaseTool): """ # TODO(cheliu): Support passing tool context to MCP Server. try: - response = await self.mcp_session.call_tool(self.name, arguments=args) + response = await self._mcp_session.call_tool(self.name, arguments=args) return response except Exception as e: print(e) diff --git a/src/google/adk/tools/mcp_tool/mcp_toolset.py b/src/google/adk/tools/mcp_tool/mcp_toolset.py index 6cca5a0..e73ef6f 100644 --- a/src/google/adk/tools/mcp_tool/mcp_toolset.py +++ b/src/google/adk/tools/mcp_tool/mcp_toolset.py @@ -76,26 +76,28 @@ class MCPToolset(BaseToolset): connection_params: The connection parameters to the MCP server. Can be: `StdioServerParameters` for using local mcp server (e.g. using `npx` or `python3`); or `SseServerParams` for a local/remote SSE server. + errlog: (Optional) TextIO stream for error logging. Use only for + initializing a local stdio MCP session. """ if not connection_params: raise ValueError('Missing connection params in MCPToolset.') - self.connection_params = connection_params - self.errlog = errlog - self.exit_stack = AsyncExitStack() + self._connection_params = connection_params + self._errlog = errlog + self._exit_stack = AsyncExitStack() - self.session_manager = MCPSessionManager( - connection_params=self.connection_params, - exit_stack=self.exit_stack, - errlog=self.errlog, + self._session_manager = MCPSessionManager( + connection_params=self._connection_params, + exit_stack=self._exit_stack, + errlogger=self._errlog, ) - self.session = None + self._session = None self.tool_filter = tool_filter async def _initialize(self) -> ClientSession: """Connects to the MCP Server and initializes the ClientSession.""" - self.session = await self.session_manager.create_session() - return self.session + self._session = await self._session_manager.create_session() + return self._session def _is_selected( self, tool: ..., readonly_context: Optional[ReadonlyContext] @@ -112,7 +114,7 @@ class MCPToolset(BaseToolset): @override async def close(self): """Closes the connection to MCP Server.""" - await self.exit_stack.aclose() + await self._exit_stack.aclose() @retry_on_closed_resource('_initialize') @override @@ -125,14 +127,14 @@ class MCPToolset(BaseToolset): Returns: A list of MCPTools imported from the MCP Server. """ - if not self.session: + if not self._session: await self._initialize() - tools_response: ListToolsResult = await self.session.list_tools() + tools_response: ListToolsResult = await self._session.list_tools() return [ MCPTool( mcp_tool=tool, - mcp_session=self.session, - mcp_session_manager=self.session_manager, + mcp_session=self._session, + mcp_session_manager=self._session_manager, ) for tool in tools_response.tools if self._is_selected(tool, readonly_context)