MCPcopy Create free account
hub / github.com/algorithmicsuperintelligence/optillm / execute_tool

Function execute_tool

optillm/plugins/mcp_plugin.py:664–703  ·  view source on GitHub ↗

Execute a tool on an MCP server This function creates a fresh connection for each tool execution to ensure reliability.

(server_name: str, tool_name: str, arguments: Dict[str, Any])

Source from the content-addressed store, hash-verified

662 return {"error": f"Error executing tool: {str(e)}"}
663
664async def execute_tool(server_name: str, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:
665 """
666 Execute a tool on an MCP server
667
668 This function creates a fresh connection for each tool execution to ensure reliability.
669 """
670 logger.info(f"Executing tool {tool_name} on server {server_name} with arguments: {arguments}")
671
672 # Load configuration
673 config_manager = MCPConfigManager()
674 if not config_manager.load_config():
675 return {"error": "Failed to load MCP configuration"}
676
677 # Get server configuration
678 server_config = config_manager.servers.get(server_name)
679 if not server_config:
680 return {"error": f"Server {server_name} not found in configuration"}
681
682 # Log the tool call in detail
683 logger.debug(f"Tool call details:")
684 logger.debug(f" Server: {server_name}")
685 logger.debug(f" Tool: {tool_name}")
686 logger.debug(f" Arguments: {json.dumps(arguments, indent=2)}")
687 logger.debug(f" Transport: {server_config.transport}")
688
689 try:
690 # Route to appropriate transport
691 if server_config.transport == "stdio":
692 return await execute_tool_stdio(server_config, tool_name, arguments)
693 elif server_config.transport == "sse":
694 return await execute_tool_sse(server_config, tool_name, arguments)
695 elif server_config.transport == "websocket":
696 return await execute_tool_websocket(server_config, tool_name, arguments)
697 else:
698 return {"error": f"Unsupported transport type: {server_config.transport}"}
699
700 except Exception as e:
701 logger.error(f"Error executing tool {tool_name} on server {server_name}: {e}")
702 logger.error(traceback.format_exc())
703 return {"error": f"Error executing tool: {str(e)}"}
704
705async def execute_tool_stdio(server_config: ServerConfig, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]:
706 """Execute tool using stdio transport"""

Calls 5

load_configMethod · 0.95
MCPConfigManagerClass · 0.85
execute_tool_stdioFunction · 0.85
execute_tool_sseFunction · 0.85
execute_tool_websocketFunction · 0.85