Execute the tool command.
(
self,
tool_manager: ToolManager | None = None,
tool: str | None = None,
params: str | None = None,
server: str | None = None,
args: Any | None = None,
**kwargs,
)
| 114 | return self._requires_context |
| 115 | |
| 116 | async def execute( |
| 117 | self, |
| 118 | tool_manager: ToolManager | None = None, |
| 119 | tool: str | None = None, |
| 120 | params: str | None = None, |
| 121 | server: str | None = None, |
| 122 | args: Any | None = None, |
| 123 | **kwargs, |
| 124 | ) -> CommandResult: |
| 125 | """Execute the tool command.""" |
| 126 | if not tool_manager: |
| 127 | return CommandResult( |
| 128 | success=False, |
| 129 | error="Tool manager not available. Are servers connected?", |
| 130 | ) |
| 131 | |
| 132 | # Handle positional arguments |
| 133 | if args: |
| 134 | # Debug logging |
| 135 | import logging |
| 136 | |
| 137 | logger = logging.getLogger(__name__) |
| 138 | logger.debug( |
| 139 | f"Received args: {repr(args)}, tool={repr(tool)}, params={repr(params)}" |
| 140 | ) |
| 141 | |
| 142 | if isinstance(args, list): |
| 143 | if len(args) > 0 and not tool: |
| 144 | tool = args[0] |
| 145 | if len(args) > 1 and not params: |
| 146 | params = args[1] |
| 147 | elif isinstance(args, str): |
| 148 | # Could be either tool name or params |
| 149 | if not tool: |
| 150 | tool = args |
| 151 | elif not params: |
| 152 | params = args |
| 153 | |
| 154 | # If no tool specified, list available tools |
| 155 | if not tool: |
| 156 | return await self._list_tools(tool_manager) |
| 157 | |
| 158 | # Find the tool |
| 159 | try: |
| 160 | all_tools = await tool_manager.get_all_tools() |
| 161 | matching_tools = [t for t in all_tools if t.name.lower() == tool.lower()] |
| 162 | |
| 163 | # Filter by server/namespace if specified |
| 164 | if server: |
| 165 | matching_tools = [ |
| 166 | t for t in matching_tools if t.namespace.lower() == server.lower() |
| 167 | ] |
| 168 | if not matching_tools: |
| 169 | output.error(f"Tool '{tool}' not found on server '{server}'") |
| 170 | return await self._list_tools(tool_manager) |
| 171 | |
| 172 | if not matching_tools: |
| 173 | output.error(f"Tool not found: {tool}") |