Safe Local Python Executor/Interpreter

by maxim-saplin
Verified
#!/usr/bin/env python3 """ MCP Server for LocalPythonExecutor This module implements a Model Context Protocol (MCP) server that exposes the LocalPythonExecutor as a tool for AI assistants. """ import logging from typing import Dict, Any from mcp.server.fastmcp import FastMCP # from executor import LocalPythonExecutor from smolagents.local_python_executor import LocalPythonExecutor # Configure logging logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" ) logger = logging.getLogger(__name__) mcp = FastMCP("python-executor") executor = LocalPythonExecutor(additional_authorized_imports=[]) executor.send_tools({}) @mcp.tool() async def run_python( code: str ) -> Dict[str, Any]: """Execute Python code in a secure sandbox environment. This tool allows running simple Python code for calculations and data manipulations. The execution environment is restricted for security purposes. Make sure you create a single file that can be executed in one go and it returns a result. Default allowed imports: - math - random - datetime - time - json - re - string - collections - itertools - functools - operator Args: code: The Python code to execute. Must be valid Python 3 code. The result must be stored in a variable called `result`. E.g.: ```python import math result = math.sqrt(16) ``` Returns: A dictionary with execution results containing: - result: The final value or None if no value is returned - logs: Any output from print statements """ logger.info(f"Executing Python code: {code}") result, logs, _ = executor(code) response = { "result": result, "logs": logs } logger.info(f"Execution result: {result}") return response if __name__ == "__main__": logger.info("Starting MCP server for Python executor") mcp.run(transport='stdio')
ID: cj2uey3ghu