使用说明
Python代码沙盒MCP服务器
一个安全的跨平台MCP服务器,用于语法检查和安全执行本地LLM生成的Python代码。
用于与VS Code、LM Studio和其他MCP兼容接口中的LLM工具无缝集成。
🌟 概述
一个轻量级、安全的MCP服务器,用于本地大型语言模型(LLM)和Python代码之间的安全交互。 两个关键功能:
- 语法验证 --使用AST解析检查Python代码的语法错误,而不执行它。
- 沙盒执行 --在具有CPU、内存和I/O限制的强化隔离环境中运行代码。
安全是重中之重,服务器可防止恶意或不稳定的代码影响您的系统,是人工智能辅助开发工作流程的理想选择。
✨ 特性
- ✅ 语法检查器 --使用Python
ast用于安全验证代码结构的模块 - ✅ 安全扫描器 --阻止危险功能(
eval,exec,open,__import__等)和模块(os,subprocess,sys等等) - ✅ 跨平台沙盒 --适用于具有操作系统级资源限制的Windows和Linux/macOS:
- Unix:使用
resource.setrlimit()CPU和内存上限 - Windows:使用作业对象(通过
pywin32)用于过程隔离
- Unix:使用
- ✅ 时间和内存限制 --可配置的超时和内存上限(默认值:15秒,100MB)
- ✅ JSON输出 --标准化响应,便于与LLM工具集成
- ✅ MCP就绪 --通过以下方式与MCP协议完全兼容
fastmcp - ✅ 可编辑安装 --在开发模式下安装(
pip install -e .)用于实时代码编辑 - ✅ 无外部依赖关系 --纯Python,最小依赖
📁 项目结构
python-mcp-sandbox/
├── python_code_sandbox/
│ ├── __init__.py
│ ├── python_code_sandbox.py # Main MCP server (check_syntax, test_code)
│ ├── safe_executor.py # Core sandbox execution engine
│ └── test_safe_executor.py # Test module for the sandbox execution engine
├── pyproject.toml # Python packaging config
├── requirements.txt # Dependencies
└── README.md # This file
📦 安装
先决条件
- Python 3.8+
- 点
安装服务器
# Clone the repository
git clone https://github.com/vuguzum/python-mcp-sandbox.git
cd python-mcp-sandbox
# Install in editable mode
pip install -e .
💡 Windows用户:要实现完全资源隔离,请安装pywin32:
pip install pywin32
验证源代码
运行以下测试 safe_executor.py 在命令行中,确保所有6个测试都顺利通过:
python test_safe_executor.py
🛠️ 与LLM工具(LM Studio)集成
此服务器通过MCP.json配置文件与任何MCP兼容接口(LM Studio等)集成。
{
"mcpServers": {
"python-code-sandbox": {
"command": "python",
"args": [
"-m",
"python_code_sandbox.python_code_sandbox"
]
}
}
}
✅ 提示:上面的python代码沙箱条目指向已安装的模块。如果愿意,您还可以使用脚本的完整路径。
配置后,LLM工具可以调用两个函数:
check_syntax(code: str)--返回语法有效性和错误详细信息test_code(code: str, timeout: float = 15.0, cpu_limit_sec: float = 10.0, memory_limit_mb: int = 100)--安全执行代码并返回输出
🔍 运作原理
- 语法检查(
check_syntax)
- 使用ast.parse()解析代码——不执行
- 返回结构化JSON,其中包含:
valid:true/falseerror,line,offset,context--如果无效
- 安全执行(
test_code)
- 步骤1:验证语法
- 步骤2:扫描危险导入和函数调用
- 步骤3:将代码写入临时文件
- 步骤4:启动一个子进程:
- 受限环境(无开放、无导入、无系统访问)
- CPU和内存限制
- 通过io.StringIO捕获的输出
- 步骤5:返回JSON结果:
{
"stdout": "...",
"stderr": "...",
"exit_code": 0,
"phase": "execution"
}
所有危险模块(os, subprocess, ctypes等)在执行之前从sys.modules中删除。
🧪 示例用法
LLM工具的请求:
{
"method": "test_code",
"params": {
"code": "print('Hello, world!')\nx = 1 / 0",
"timeout": 10,
"memory_limit_mb": 50
}
}
答复:
{
"stdout": "Hello, world!\n",
"stderr": "ZeroDivisionError: division by zero\n",
"exit_code": 1,
"phase": "execution"
}
🚫 安全设计
此服务器遵循以下原则 纵深防御:
| 层 | 保护 |
|---|---|
| 1. AST解析 | 语法检查期间不执行代码 |
| 2. 静态分析 | 阻止已知的危险功能和模块 |
| 3. 环境消毒 | 删除危险模块,覆盖 __import__,禁用 open() |
| 4. 进程隔离 | 使用操作系统级别限制(Windows上的作业对象,Unix上的资源) |
| 5. 时间和内存上限 | 防止无限循环或内存耗尽 |
| 6. 输出沙盒 | 所有输出都通过缓冲区捕获,没有直接的文件系统访问 |
日志文件将写入系统的临时目录:
mcp_sandbox.logmcp_sandbox_executor.log
📌 备注
- Windows:要获得全部资源限制,请安装
pywin32没有它,只有timeout强制执行。 - Linux/macOS:默认情况下,通过资源模块进行完全资源控制。
- 不允许访问互联网——沙盒会阻止所有网络调用。
- 没有文件系统访问权限--
open()和pathlib被禁用。
📜 许可证
Apache 2.0——有关详细信息,请参阅许可证。
📧 作者
亚历山大·卡赞采夫(akazant@gmail.com )