@@ -371,6 +371,8 @@ async def _establish_session(
371371 async def _aggregate_components (self , server_info : types .Implementation , session : mcp .ClientSession ) -> None :
372372 """Aggregates prompts, resources, and tools from a given session."""
373373
374+ capabilities = session .initialize_result .capabilities if session .initialize_result else None
375+
374376 # Create a reverse index so we can find all prompts, resources, and
375377 # tools belonging to this session. Used for removing components from
376378 # the session group via self.disconnect_from_server.
@@ -384,35 +386,38 @@ async def _aggregate_components(self, server_info: types.Implementation, session
384386 tool_to_session_temp : dict [str , mcp .ClientSession ] = {}
385387
386388 # Query the server for its prompts and aggregate to list.
387- try :
388- prompts = (await session .list_prompts ()).prompts
389- for prompt in prompts :
390- name = self ._component_name (prompt .name , server_info )
391- prompts_temp [name ] = prompt
392- component_names .prompts .add (name )
393- except MCPError as err : # pragma: no cover
394- logging .warning (f"Could not fetch prompts: { err } " )
389+ if capabilities is None or capabilities .prompts is not None :
390+ try :
391+ prompts = (await session .list_prompts ()).prompts
392+ for prompt in prompts :
393+ name = self ._component_name (prompt .name , server_info )
394+ prompts_temp [name ] = prompt
395+ component_names .prompts .add (name )
396+ except MCPError as err : # pragma: no cover
397+ logging .warning (f"Could not fetch prompts: { err } " )
395398
396399 # Query the server for its resources and aggregate to list.
397- try :
398- resources = (await session .list_resources ()).resources
399- for resource in resources :
400- name = self ._component_name (resource .name , server_info )
401- resources_temp [name ] = resource
402- component_names .resources .add (name )
403- except MCPError as err : # pragma: no cover
404- logging .warning (f"Could not fetch resources: { err } " )
400+ if capabilities is None or capabilities .resources is not None :
401+ try :
402+ resources = (await session .list_resources ()).resources
403+ for resource in resources :
404+ name = self ._component_name (resource .name , server_info )
405+ resources_temp [name ] = resource
406+ component_names .resources .add (name )
407+ except MCPError as err : # pragma: no cover
408+ logging .warning (f"Could not fetch resources: { err } " )
405409
406410 # Query the server for its tools and aggregate to list.
407- try :
408- tools = (await session .list_tools ()).tools
409- for tool in tools :
410- name = self ._component_name (tool .name , server_info )
411- tools_temp [name ] = tool
412- tool_to_session_temp [name ] = session
413- component_names .tools .add (name )
414- except MCPError as err : # pragma: no cover
415- logging .warning (f"Could not fetch tools: { err } " )
411+ if capabilities is None or capabilities .tools is not None :
412+ try :
413+ tools = (await session .list_tools ()).tools
414+ for tool in tools :
415+ name = self ._component_name (tool .name , server_info )
416+ tools_temp [name ] = tool
417+ tool_to_session_temp [name ] = session
418+ component_names .tools .add (name )
419+ except MCPError as err : # pragma: no cover
420+ logging .warning (f"Could not fetch tools: { err } " )
416421
417422 # Clean up exit stack for session if we couldn't retrieve anything
418423 # from the server.
0 commit comments