mcpField
E
Exec Sandbox

Exec Sandbox

本地服务
github.com/inhuman开发工具115 周前更新

关于 Exec Sandbox

Exec Sandbox 是面向需要运行调用方 Python 代码的 Agent 的开源 MCP 服务,提供受限执行环境。其单一 `exec` 工具返回输出和退出状态,并设有执行限制;stdio 部署支持网络隔离。

主要功能

  1. 01单一 Python `exec` 工具
  2. 02stdio 沙箱网络隔离
  3. 03超时与资源限制
  4. 04限制 stdout 和 stderr 输出
  5. 05stdio、HTTP 与 SSE 传输

适用场景

  1. 01为 Agent 运行 Python 计算
  2. 02转换数据而无需增加工具模式
  3. 03在受限环境执行不可信代码

MCP 相关

通过 stdio、HTTP 或 SSE 向 MCP 客户端提供一个 `exec` 工具。该工具接收 Python 代码,并返回 stdout、stderr、退出码、耗时、截断状态和超时状态。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"inhuman-mcp-exec": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_EXEC_TRANSPORT",
"-e",
"MCP_EXEC_DEFAULT_TIMEOUT_S",
"-e",
"MCP_EXEC_MAX_TIMEOUT_S",
"-e",
"MCP_EXEC_MAX_OUTPUT_BYTES",
"-e",
"MCP_EXEC_MAX_STDIN_BYTES",
"-e",
"MCP_EXEC_AUTH_TOKEN",
"docker.io/idconstruct/mcp-exec:v0.5.4"
],
"env": {
"MCP_EXEC_TRANSPORT": "<MCP_EXEC_TRANSPORT>",
"MCP_EXEC_DEFAULT_TIMEOUT_S": "<MCP_EXEC_DEFAULT_TIMEOUT_S>",
"MCP_EXEC_MAX_TIMEOUT_S": "<MCP_EXEC_MAX_TIMEOUT_S>",
"MCP_EXEC_MAX_OUTPUT_BYTES": "<MCP_EXEC_MAX_OUTPUT_BYTES>",
"MCP_EXEC_MAX_STDIN_BYTES": "<MCP_EXEC_MAX_STDIN_BYTES>",
"MCP_EXEC_AUTH_TOKEN": "<MCP_EXEC_AUTH_TOKEN>"
}
}
}
}
启动命令docker run -i --rm -e MCP_EXEC_TRANSPORT -e MCP_EXEC_DEFAULT_TIMEOUT_S -e MCP_EXEC_MAX_TIMEOUT_S -e MCP_EXEC_MAX_OUTPUT_BYTES -e MCP_EXEC_MAX_STDIN_BYTES -e MCP_EXEC_AUTH_TOKEN docker.io/idconstruct/mcp-exec:v0.5.4
需要配置的环境变量
MCP_EXEC_TRANSPORTMCP transport. Must be 'stdio' for direct docker/stdio use.
MCP_EXEC_DEFAULT_TIMEOUT_SDefault wall-clock timeout per exec, seconds.
MCP_EXEC_MAX_TIMEOUT_SMaximum wall-clock timeout a caller may request, seconds.
MCP_EXEC_MAX_OUTPUT_BYTESCap on combined stdout/stderr before truncation.
MCP_EXEC_MAX_STDIN_BYTESCap on stdin passed to the sandboxed code.
MCP_EXEC_AUTH_TOKEN密钥Optional X-MCP-AUTH token (http/sse transports only).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocidocker.io/idconstruct/mcp-exec:v0.5.4

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mcp-exec

英语 | 俄语

Version MCP Registry Docker Pulls Docker Image Version Build Go Version Go Report Card License: MIT Issues Last Commit

公开的开源 MCP 服务(Go,MIT),仅提供一个强大的工具 — exec — 可在网络隔离、严格受限的沙箱中运行调用方提供的 Python 代码,并返回 stdout / stderr / exit_code。它是“代码执行模式”的基础组件:Agent 无需将数百个工具架构塞满上下文,而是编写代码来编排工作。

支持三种传输方式 — stdio / HTTP / SSE — 且在所有方式下提供相同的工具集(官方 modelcontextprotocol/go-sdk)。

exec 工具

输入:{ code: string (required), timeout_s?: int, stdin?: string } 输出:{ stdout, stderr, exit_code, duration_ms, truncated, timed_out }

  • 非零 exit_code 或 timed_out=true 属于正常结果,并非工具错误。只有无效输入(code 为空、stdin 超出大小限制)才属于工具调用错误。
  • 沙箱 v1:Python 3,包含标准库以及 PyYAML、Jinja2、Pillow、numpy、pandas、matplotlib。

安全模型(不变量)

每次执行均满足:无网络、非 root 用户、cap-drop=ALL、no-new-privileges、根文件系统只读、无 CAP_SYS_ADMIN、临时 tmpdir(执行后清理)、墙钟超时(终止整个进程组)、内存 / PID / CPU 限制、输出上限(1 MiB → truncated)。同一实例内的运行会串行执行;可通过增加副本扩容。调用方数据(code / stdin / 输出)绝不会持久化,也不会完整记录日志 — 仅记录元数据。

exec 是权限最高的接口。将其嵌入 Agent 时,应通过该 Agent 的工具策略进行限制(仅限可信角色)。

网络说明:--network none 仅适用于 stdio。在 HTTP/SSE 模式下,容器需要联网才能提供端口服务,因此沙箱代码也会继承出站网络访问能力 — 请在编排器层面禁止。在 k8s 中,可使用允许访问该端口的入站流量、并禁止所有出站流量的 NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: { name: mcp-exec-lockdown }
spec:
  podSelector: { matchLabels: { app: mcp-exec } }
  policyTypes: [Ingress, Egress]
  ingress: [{ ports: [{ port: 8080 }] }]
  egress: []   # deny all egress → sandbox has no network

运行

go build -o mcp-exec ./cmd/mcp-exec
MCP_EXEC_TRANSPORT=stdio ./mcp-exec

Docker(推荐用于生产环境的配置):

docker run --rm -i --network none --read-only --cap-drop ALL \
  --security-opt no-new-privileges --user 65532:65532 \
  --tmpfs /tmp:rw,noexec,nosuid,size=64m \
  --memory 256m --pids-limit 128 --cpus 1 \
  idconstruct/mcp-exec

必须设置 --tmpfs /tmp:根文件系统为只读,且每次运行都需要一个可写的临时工作区(运行后清理)。

可选身份验证(HTTP/SSE)

设置 MCP_EXEC_AUTH_TOKEN,要求每个 HTTP/SSE 请求都携带匹配的 X-MCP-AUTH 标头(使用恒定时间比较;否则返回 401)。令牌为空时禁用此功能。不适用于 stdio。

配置

环境变量用途默认值
MCP_EXEC_TRANSPORTstdio | http | ssestdio
MCP_EXEC_ADDRhttp/sse 的监听地址:8080
MCP_EXEC_DEFAULT_TIMEOUT_S默认墙钟超时时间30
MCP_EXEC_MAX_TIMEOUT_S超时时间上限300
MCP_EXEC_MAX_OUTPUT_BYTESstdout+stderr 的总上限1048576
MCP_EXEC_MAX_STDIN_BYTESstdin 大小上限1048576
MCP_EXEC_PYTHON解释器路径python3
MCP_EXEC_AUTH_TOKEN若设置,http/sse 需要 X-MCP-AUTH 请求头(恒定时间比较);为空 = 关闭``

v1 中不包含

bash / 多语言、沙箱联网、将其他 MCP 服务代理到沙箱中。

许可证

MIT。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。