mcp-python-sandbox

mcp-python-sandbox

A lightweight MCP server that enables any MCP client to execute Python code safely in a sandboxed environment, with automatic matplotlib inline image return and temporary file isolation.

Category
访问服务器

README

mcp-python-sandbox

轻量级 MCP Python 代码沙箱执行器 —— 让任意 MCP 客户端拥有本地代码解释器能力。

基于 MCP (Model Context Protocol) 标准协议实现,适用于低功耗、不支持 AVX 指令集的 x86 服务器(如 Intel Celeron / Atom / Pentium Silver 系列),有效规避主流托管代码解释器方案的高内存开销与 AVX 指令集依赖。

[!WARNING] 本项目由 AI 辅助完成,开发目的仅为个人使用,可能存在非预期的 bug。 目前项目无法确认处于稳定,请谨慎使用最新代码,避免因意外问题导致损失! 建议配合 Docker 容器隔离部署(见下方安全模型章节)。

✨ 特性

  • 协议通用 — 标准 MCP stdio 服务器,兼容 LibreChat、Claude Desktop、Cursor、Cline 等任意 MCP 客户端
  • 异步沙箱执行 — 基于 asyncio.create_subprocess_exec 拉起独立子进程执行代码,主进程永不阻塞
  • 临时目录隔离 — 每次请求独享 tempfile.TemporaryDirectory() 工作目录,执行完自动销毁,杜绝多人并发文件冲突
  • 超时强杀asyncio.wait_for 时间锁,死循环代码超时立即强杀,保护宿主机 CPU
  • 安全加固 — 子进程内封禁 os.system / subprocess / eval / exec 等危险调用,写文件限制在工作目录内
  • 图像内联透传 — 自动劫持 plt.show(),matplotlib 图表以 Base64 编码通过 MCP 原生 image Content Block 返回,客户端直接渲染,不占用大模型上下文 Token
  • 旧平台兼容 — 针对无 AVX 指令集处理器提供源码编译方案与 Docker 多阶段构建

📦 项目结构

mcp-python-sandbox/
├── pyproject.toml              # 项目元数据与依赖声明
├── Dockerfile                  # 多阶段构建(源码编译 + 精简运行时)
├── docker-compose.yml          # 镜像构建与手动测试
├── librechat.yaml              # LibreChat 对接配置示例(可选)
└── src/mcp_python_sandbox/
    ├── __init__.py
    ├── __main__.py             # python -m mcp_python_sandbox 入口
    ├── server.py               # MCP 服务主入口(FastMCP, stdio 传输)
    ├── executor.py             # 异步子进程执行引擎
    ├── preamble.py             # matplotlib plt.show() 劫持注入脚本
    └── restrictions.py         # 安全沙箱限制注入脚本

🚀 快速开始

方式一:Docker 部署(推荐)

源码编译全部在镜像构建阶段完成,宿主机零污染:

# 构建镜像(首次含 numpy/pandas/scipy/sklearn 源码编译,低功耗处理器上可能耗时 30-60 分钟)
docker compose build

# 手动测试 MCP 通信(可选)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0.1"}}}' | docker run -i --rm mcp-python-sandbox:latest

方式二:宿主机虚拟环境部署

1. 构建预装依赖的虚拟环境(Fat Venv)

预先安装常用科学计算库,避免模型每次请求时执行 pip install 浪费时间与 Token:

python3 -m venv /opt/mcp-python-sandbox/venv
source /opt/mcp-python-sandbox/venv/bin/activate

# ⚠️ 对指令集敏感的库:在无 AVX 处理器上必须源码编译
# (预编译轮子可能包含 AVX 指令,运行时会触发 Illegal instruction 崩溃)
# 注意:--no-binary 只锁定目标库,不要用 :all:(会连 meson/ninja/cython
# 等构建工具也强制源码构建,导致失败且不带来任何兼容性收益)
export MAKEFLAGS="-j$(nproc)"
pip install --no-binary numpy,pandas,scipy,scikit-learn \
    numpy pandas scipy scikit-learn

# 🟢 无兼容性问题的库:直接安装
pip install matplotlib seaborn Pillow \
    requests beautifulsoup4 lxml urllib3 yfinance \
    openpyxl xlrd PyPDF2 python-docx \
    python-dateutil networkx sympy

2. 安装本项目

pip install /path/to/mcp-python-sandbox

🔌 客户端接入

本项目为标准 MCP stdio 服务器,任何支持 MCP 的客户端均可接入。

LibreChat(librechat.yaml

mcpServers:
  python-sandbox:
    command: "docker"
    args:
      - "run"
      - "-i"
      - "--rm"
      - "--memory=512m"
      - "--cpus=2"
      - "--security-opt=no-new-privileges:true"
      - "--read-only"
      - "--tmpfs=/tmp"
      - "--tmpfs=/home/sandbox"
      - "mcp-python-sandbox:latest"
    timeout: 90000

Claude Desktop(claude_desktop_config.json

{
  "mcpServers": {
    "python-sandbox": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--memory=512m", "--cpus=2",
               "mcp-python-sandbox:latest"]
    }
  }
}

宿主机虚拟环境方式(任意客户端)

command: "/opt/mcp-python-sandbox/venv/bin/python"
args: ["-m", "mcp_python_sandbox"]

💡 Cursor / Cline / VS Code 等客户端的 MCP 配置结构与上述示例基本一致,仅配置文件位置不同。

🔧 工具接口

服务暴露单个 MCP 工具:

execute_python

参数 类型 说明
code string 要执行的 Python 代码

返回:多模态 Content Block 列表

{
  "content": [
    { "type": "text", "text": "执行输出(已剔除 Base64 巨串)" },
    { "type": "image", "data": "<base64>", "mimeType": "image/png" }
  ]
}
  • 代码中调用 plt.show() 的图表会自动以内联图片返回
  • 默认超时 60 秒,超时后子进程被强杀
  • 每次执行拥有独立临时工作目录,结束后自动销毁

图像内联渲染依赖客户端对 MCP image 类型的支持(LibreChat、Claude Desktop、Cursor 等主流客户端均已支持);不支持的客户端仍可正常执行代码,仅不显示图表。

🛡️ 安全模型

多层纵深防御:

层级 机制
容器层(Docker) --read-only + no-new-privileges + 非 root 用户
资源层 --memory=512m --cpus=2 硬限制 + 60s 超时强杀
代码层 注入沙箱脚本封禁 os.system / subprocess / eval / exec / ctypes
文件系统层 tmpfs 临时目录隔离,写操作限制在工作目录内,执行后销毁

⚠️ 注意:代码层的 Python 沙箱可被高级技巧绕过,请不要作为唯一防线。生产环境建议使用 Docker 部署进行容器层隔离。

🖼️ 图像透传原理

AI 生成代码
    │
    ▼ MCP 服务端注入前置脚本(劫持 plt.show → Base64 输出到 stdout)
子进程执行
    │
    ▼ stdout 含 [IMAGE_DATA_BEGIN]<base64>[IMAGE_DATA_END] 标记
MCP 服务端正则提取
    │
    ├─▶ 文本部分(已剔除 Base64)→ type: "text"   → 大模型上下文保持干净
    └─▶ Base64 图像数据          → type: "image"  → 客户端原生渲染

📋 环境要求

  • Python >= 3.10
  • MCP SDK >= 1.0.0
  • 任意支持 MCP 的客户端(LibreChat / Claude Desktop / Cursor / Cline 等)
  • Docker(可选,推荐)

📄 License

本项目采用 MIT License

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选