MCPcopy Create free account
hub / github.com/IBM/mcp-cli / execute

Method execute

src/mcp_cli/commands/tools/execute_tool.py:116–379  ·  view source on GitHub ↗

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,
    )

Source from the content-addressed store, hash-verified

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}")

Calls 10

_list_toolsMethod · 0.95
_show_tool_infoMethod · 0.95
_parse_simple_paramsMethod · 0.95
CommandResultClass · 0.90
to_serializableFunction · 0.90
unwrap_tool_resultFunction · 0.90
successMethod · 0.80
get_all_toolsMethod · 0.45
getMethod · 0.45
execute_toolMethod · 0.45