Python代码沙箱服务器

一个安全的跨平台MCP服务器,用于语法检查和本地LLM生成的Python代码的安全执行,适用于AI辅助开发工作流。

  • by vuguzum
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 vuguzum/python-mcp-sandbox

使用说明

Python代码沙盒MCP服务器

一个安全的跨平台MCP服务器,用于语法检查和安全执行本地LLM生成的Python代码。

用于与VS Code、LM Studio和其他MCP兼容接口中的LLM工具无缝集成。

🌟 概述

一个轻量级、安全的MCP服务器,用于本地大型语言模型(LLM)和Python代码之间的安全交互。 两个关键功能:

  1. 语法验证 --使用AST解析检查Python代码的语法错误,而不执行它。
  2. 沙盒执行 --在具有CPU、内存和I/O限制的强化隔离环境中运行代码。

安全是重中之重,服务器可防止恶意或不稳定的代码影响您的系统,是人工智能辅助开发工作流程的理想选择。

✨ 特性

  • ✅ 语法检查器 --使用Python ast 用于安全验证代码结构的模块
  • ✅ 安全扫描器 --阻止危险功能(eval, exec, open, __import__等)和模块(os, subprocess, sys等等)
  • ✅ 跨平台沙盒 --适用于具有操作系统级资源限制的Windows和Linux/macOS:
    • Unix:使用 resource.setrlimit() CPU和内存上限
    • Windows:使用作业对象(通过 pywin32)用于过程隔离
  • ✅ 时间和内存限制 --可配置的超时和内存上限(默认值: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) --安全执行代码并返回输出

🔍 运作原理

  1. 语法检查(check_syntax)
  • 使用ast.parse()解析代码——不执行
  • 返回结构化JSON,其中包含:
    • valid: true/false
    • error, line, offset, context --如果无效
  1. 安全执行(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.log
  • mcp_sandbox_executor.log

📌 备注

  • Windows:要获得全部资源限制,请安装 pywin32没有它,只有 timeout 强制执行。
  • Linux/macOS:默认情况下,通过资源模块进行完全资源控制。
  • 不允许访问互联网——沙盒会阻止所有网络调用。
  • 没有文件系统访问权限-- open() 和 pathlib 被禁用。

📜 许可证

Apache 2.0——有关详细信息,请参阅许可证。

📧 作者

亚历山大·卡赞采夫(akazant@gmail.com )