Python Exec Sandbox
编码与调试by lu-zhengda
Sandboxed Python execution for AI agents. PEP 723 inline deps, multi-version Python, zero pollution.
什么是 Python Exec Sandbox?
Sandboxed Python execution for AI agents. PEP 723 inline deps, multi-version Python, zero pollution.
README
mcp-python-exec-sandbox
Sandboxed Python execution for AI agents. Scripts run in ephemeral, isolated environments with inline dependencies (PEP 723) -- zero host pollution, zero leftover venvs, zero package conflicts.
Why?
Every coding agent can already run Python on your host. The problem is what happens next: packages accumulate, venvs sprawl, and a rogue pip install breaks your system. mcp-python-exec-sandbox eliminates this:
- Scripts execute in a sandbox (bubblewrap on Linux, Docker on macOS/other platforms)
- Dependencies are declared inline and resolved ephemerally via
uv - Nothing touches your host's Python, site-packages, or virtualenvs
- Each execution is isolated and disposable
Features
- Sandboxed execution -- platform-specific isolation prevents host filesystem access
- PEP 723 inline metadata -- declare dependencies directly in scripts with
# /// scriptblocks - Multi-version Python -- run scripts on Python 3.13, 3.14, or 3.15 (uv downloads the right version automatically)
- Ephemeral environments -- dependencies are resolved per-execution, never persisted
- Package caching -- uv's global cache makes repeat installs near-instant
- Timeout enforcement -- configurable per-execution timeouts
- Output truncation -- prevents runaway output from overwhelming the agent
Prerequisites
All setups require:
- Python 3.13+ -- to run the MCP server process
- uv -- manages script execution, dependency resolution, and Python version downloads. Also provides
uvxfor running the server without installing it globally.
Additional requirements depend on your chosen sandbox backend:
| Setup | Additional requirements | Install |
|---|---|---|
| Native sandbox (Linux) | bubblewrap | sudo apt install bubblewrap |
| Docker sandbox (macOS, any) | Docker Engine | See Docker docs |
| No sandbox | None | -- |
Host Python vs. execution Python: These are independent. Python 3.13+ is needed to run the server process itself. The
--python-versionflag controls which Python version your scripts execute on -- uv downloads the target version automatically. You do not need to install Python 3.14 or 3.15 on your host to run scripts on those versions.
Quick start
Claude Code (Linux -- native sandbox)
claude mcp add python-sandbox -- uvx mcp-python-exec-sandbox
Claude Code (macOS -- Docker sandbox, recommended)
claude mcp add python-sandbox -- uvx mcp-python-exec-sandbox
The Docker sandbox image is pulled automatically from GHCR on first use. No manual build required.
Claude Code (no sandbox)
claude mcp add python-sandbox -- uvx mcp-python-exec-sandbox --sandbox-backend none
Cursor
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"python-sandbox": {
"command": "uvx",
"args": ["mcp-python-exec-sandbox"]
}
}
}
OpenAI Codex CLI
codex mcp add python-sandbox -- uvx mcp-python-exec-sandbox
Or add to .codex/config.toml:
[mcp_servers.python-sandbox]
command = "uvx"
args = ["mcp-python-exec-sandbox"]
Other MCP clients
Any client that supports the MCP stdio transport can use this server:
{
"mcpServers": {
"python-sandbox": {
"command": "uvx",
"args": ["mcp-python-exec-sandbox"]
}
}
}
Multi-version Python
Use --python-version to target a specific Python version. uv downloads it automatically -- no manual install needed.
# Python 3.13 (default)
uvx mcp-python-exec-sandbox --python-version 3.13
# Python 3.14
uvx mcp-python-exec-sandbox --python-version 3.14
# Python 3.15
uvx mcp-python-exec-sandbox --python-version 3.15
This works across all sandbox backends. The Docker sandbox uses uv inside the container to manage Python versions, so the same --python-version flag applies.
Tools
execute_python
Execute a Python script with automatic dependency management.
| Parameter | Type | Default | Description |
|---|---|---|---|
script | str | required | Python source code, may include PEP 723 inline metadata |
dependencies | list[str] | [] | Extra PEP 508 dependency specifiers to merge |
timeout_seconds | int | 30 | Maximum execution time (1--300) |
# Simple script
execute_python(script="print('hello world')")
# Script with dependencies
execute_python(
script="import requests; print(requests.get('https://httpbin.org/get').status_code)",
dependencies=["requests"]
)
# Script with inline PEP 723 metadata
execute_python(script="""
# /// script
# dependencies = ["pandas", "matplotlib"]
# ///
import pandas as pd
print(pd.DataFrame({'a': [1,2,3]}).describe())
""")
check_environment
Returns information about the execution environment: Python version, uv version, platform, sandbox status, and configuration.
validate_script
Validates a script's PEP 723 metadata and dependencies without executing it.
| Parameter | Type | Default | Description |
|---|---|---|---|
script | str | required | Python source code to validate |
dependencies | list[str] | [] | Extra dependency specifiers to validate |
Sandbox backends
| Backend | Platform | Tool | Notes |
|---|---|---|---|
native | Linux | bubblewrap | Namespace isolation, network allowed |
docker | Any | Docker | Container isolation, resource limits |
none | Any | -- | No sandboxing (not recommended) |
The default backend is native (bubblewrap) on Linux and docker on macOS/other platforms. Specifying --sandbox-backend native on macOS automatically redirects to Docker. If the sandbox tool is unavailable, the server falls back to none with a warning.
Docker sandbox setup
The Docker sandbox image is published to GHCR and pulled automatically when the server starts. No manual setup is needed.
To build locally for development:
docker build -t ghcr.io/lu-zhengda/mcp-python-exec-sandbox profiles/
CLI options
mcp-python-exec-sandbox [OPTIONS]
Options:
--python-version TEXT Python version for execution (default: 3.13)
--sandbox-backend TEXT native | docker | none (default: native on Linux, docker on macOS)
--max-timeout INT Maximum allowed timeout in seconds (default: 300)
--default-timeout INT Default timeout in seconds (default: 30)
--max-output-bytes INT Maximum output size in bytes (default: 102400)
--no-warm-cache Skip cache warming on startup
--uv-path TEXT Path to uv binary (default: uv)
Development
Setup
git clone https://github.com/lu-zhengda/mcp-python-exec-sandbox.git
cd mcp-python-exec-sandbox
uv sync --dev
Project structure
src/mcp_python_exec_sandbox/ # Package source
server.py # FastMCP server + tool definitions
executor.py # uv subprocess orchestration
script.py # PEP 723 metadata parsing/merging
sandbox.py # Sandbox ABC + factory
sandbox_linux.py # bubblewrap sandbox (Linux)
sandbox_docker.py # Docker sandbox (macOS/any)
config.py, cache.py, output.py, errors.py
tests/ # Unit + integration tests (mocked or local uv)
e2e_tests/ # End-to-end tests (require uv + network)
profiles/ # Dockerfile, warmup packages
.devcontainer/ # Devcontainer for Linux sandbox testing from macOS
Running tests
Unit and integration tests -- fast, run everywhere:
uv run pytest tests/ -v
E2E tests -- require uv and network access. These exercise real script execution, package installation, MCP protocol flow, and sandbox enforcement:
uv run pytest e2e_tests/ -v
Docker sandbox tests
The Docker E2E tests (e2e_tests/test_docker_sandbox.py) verify execution, dependency installation, read-only filesystem enforcement, host isolation, and timeout handling through the Docker backend.
Prerequisites:
- Docker must be installed and running
- Build the sandbox image:
docker build -t ghcr.io/lu-zhengda/mcp-python-exec-sandbox profiles/
Then run:
uv run pytest e2e_tests/test_docker_sandbox.py -v
These tests are automatically skipped if Docker is unavailable or the image hasn't been built.
Linux sandbox tests (devcontainer)
The Linux sandbox tests (e2e_tests/test_sandbox_enforcement.py::test_linux_sandbox_blocks_etc_shadow) use bubblewrap (bwrap) for namespace isolation. They are skipped on macOS because bwrap is Linux-only.
To run them from macOS, use the included devcontainer which provides Ubuntu 24.04 with bwrap pre-installed:
VS Code:
- Install the Dev Containers extension
- Open the project and select Reopen in Container
- In the integrated terminal:
uv run pytest e2e_tests/test_sandbox_enforcement.py -v
CLI:
# Install the devcontainer CLI (once)
npm install -g @devcontainers/cli
# Build and start the container
devcontainer up --workspace-folder .
# Run the Linux sandbox tests inside the container
devcontainer exec --workspace-folder . uv run pytest e2e_tests/test_sandbox_enforcement.py -v
Test matrix
| Test suite | Command | Requirements |
|---|---|---|
| Unit tests | uv run pytest tests/ -v | uv |
| Integration tests | uv run pytest tests/test_integration.py -v | uv |
| E2E (general) | uv run pytest e2e_tests/ -v | uv, network |
| E2E (Docker sandbox) | uv run pytest e2e_tests/test_docker_sandbox.py -v | uv, Docker, sandbox image |
| E2E (Linux/bwrap sandbox) | uv run pytest e2e_tests/test_sandbox_enforcement.py -v | uv, Linux with bwrap (or devcontainer) |
Contributing
- One logical change per commit. Descriptive commit message (imperative mood).
- Run
uv run pytest tests/ -vbefore committing -- all tests must pass. - Add tests for new functionality: unit tests in
tests/, E2E ine2e_tests/if it needs real execution. - Keep dependencies minimal. Do not add runtime deps without strong justification.
- Tool docstrings in
server.pyare user-facing MCP tool descriptions. Write them for an LLM audience. - Sandbox backends must degrade gracefully: if the required tool (bwrap, docker) is missing, fall back to
NoopSandboxwith a warning.
License
MIT
常见问题
Python Exec Sandbox 是什么?
Sandboxed Python execution for AI agents. PEP 723 inline deps, multi-version Python, zero pollution.
相关 Skills
前端设计
by anthropics
面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。
✎ 想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。
网页应用测试
by anthropics
用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。
✎ 借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。
网页构建器
by anthropics
面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。
✎ 在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。
相关 MCP Server
GitHub
编辑精选by GitHub
GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。
✎ 这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。
Context7 文档查询
编辑精选by Context7
Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。
✎ 它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。
by tldraw
tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。
✎ 这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。