集装箱-MCP
模型上下文协议 (MCP) 的安全、基于容器的实现,用于代表大型语言模型执行工具。
概述
Container-MCP 提供了一个沙盒环境,用于安全地执行代码、运行命令、访问文件以及执行大型语言模型请求的 Web 操作。它实现了 MCP 协议,将这些功能公开为工具,以便 AI 系统能够以安全的方式发现和调用。
该架构采用具有多层安全性的特定域管理器模式,以确保工具在具有适当限制的隔离环境中执行,从而保护主机系统免受潜在的有害操作的侵害。
Related MCP server: MCP Local File Reader
主要特点
多层安全
使用 Podman/Docker 进行容器隔离
用于限制访问的 AppArmor 配置文件
Firejail 沙盒提供额外的隔离
资源限制(CPU、内存、执行时间)
路径遍历预防
允许的扩展限制
MCP 协议实现
标准化工具发现和执行
资源管理
异步执行支持
领域特定管理器
BashManager:安全命令执行PythonManager:沙盒 Python 代码执行FileManager:安全文件操作WebManager:安全的网页浏览和抓取
可配置环境
通过环境变量进行广泛的配置
自定义环境支持
开发和生产模式
可用工具
系统操作
system_run_command
在安全的沙盒环境中执行 bash 命令。
参数:
command(字符串,必需):要执行的 bash 命令working_dir(字符串,可选):工作目录(在沙箱中忽略)
返回:
stdout(字符串):命令标准输出stderr(字符串):命令标准错误exit_code(整数):命令退出代码success(布尔值):命令是否成功完成
system_run_python
在安全的沙盒环境中执行 Python 代码。
参数:
code(字符串,必需):要执行的 Python 代码working_dir(字符串,可选):工作目录(在沙箱中忽略)
返回:
output(字符串):打印代码的输出error(字符串):代码的错误输出result(任意):可选返回值(如果代码设置了_变量则可用)success(布尔值):代码是否执行成功
system_env_var
获取环境变量值。
参数:
var_name(字符串,可选):要检索的特定变量
返回:
variables(对象):环境变量字典requested_var(字符串):请求变量的值(如果提供了 var_name)
文件操作
file_read
安全地读取文件内容。
参数:
path(字符串,必需):文件路径(相对于沙盒根目录)encoding(字符串,可选):文件编码(默认值:“utf-8”)
返回:
content(字符串):文件内容size(整数):文件大小(以字节为单位)modified(浮点数):上次修改的时间戳success(布尔值):读取是否成功
file_write
将内容安全地写入文件。
参数:
path(字符串,必需):文件路径(相对于沙盒根目录)content(字符串,必需):要写入的内容encoding(字符串,可选):文件编码(默认值:“utf-8”)
返回:
success(布尔值):写入是否成功path(字符串):写入文件的路径
file_list
安全地列出目录的内容。
参数:
path(字符串,可选):目录路径(默认值:“/”)pattern(字符串,可选):用于过滤文件的 Glob 模式
返回:
entries(数组):带有元数据的目录条目列表path(字符串):列出的目录路径success(布尔值):列表是否成功
file_delete
安全删除文件。
参数:
path(字符串,必需):要删除的文件的路径
返回:
success(布尔值):删除是否成功path(字符串):已删除文件的路径
file_move
安全地移动或重命名文件。
参数:
source(字符串,必需):源文件路径destination(字符串,必需):目标文件路径
返回:
success(布尔值):移动是否成功source(字符串):原始文件路径destination(字符串):新文件路径
Web 操作
web_search
使用搜索引擎在网络上查找信息。
参数:
query(字符串,必需):要搜索的查询
返回:
results(数组):搜索结果列表query(字符串):原始查询
web_scrape
抓取特定的 URL 并返回内容。
参数:
url(字符串,必需):要抓取的 URLselector(字符串,可选):用于定位特定内容的 CSS 选择器
返回:
content(字符串):抓取的内容url(字符串):被抓取的 URLtitle(字符串):页面标题success(布尔值):抓取是否成功error(字符串):如果抓取失败则显示错误消息
web_browse
使用 Playwright 以交互方式浏览网站。
参数:
url(字符串,必需):浏览会话的起始 URL
返回:
content(字符串):页面 HTML 内容url(字符串):任何重定向后的最终 URLtitle(字符串):页面标题success(布尔值):浏览是否成功error(字符串):浏览失败时显示的错误信息
执行环境
Container-MCP 为不同类型的操作提供隔离的执行环境,每种操作都有自己的安全措施和资源限制。
容器环境
主要的 Container-MCP 服务在容器内运行(使用 Podman 或 Docker),提供第一层隔离:
基础镜像:Ubuntu 24.04
用户:非 root ubuntu 用户
Python :3.12
网络:仅限于本地主机绑定
文件系统:配置、数据和日志的卷挂载
安全性:AppArmor、Seccomp 和功能限制
Bash 执行环境
Bash 执行环境配置了多个隔离层:
允许的命令:仅限于
BASH_ALLOWED_COMMANDS中配置的安全命令Firejail Sandbox :通过限制文件系统访问进行进程隔离
AppArmor 配置文件:细粒度访问控制
资源限制:
执行超时(默认值:30秒,最大值:120秒)
仅限沙盒的目录访问
网络:无网络访问
文件系统:只读访问数据,读写沙箱
允许的命令示例:
Python执行环境
Python 执行环境是为安全代码执行而设计的:
Python版本:3.12
内存限制:可配置内存上限(默认值:256MB)
执行超时:可配置的时间限制(默认值:30 秒,最大值:120 秒)
AppArmor 配置文件:限制对系统资源的访问
Firejail Sandbox :进程隔离
能力:所有能力均被放弃
网络:无网络访问
可用库:仅标准库
输出捕获:stdout/stderr 重定向和清理
资源控制:强制执行 CPU 和内存限制
文件系统环境
文件系统环境控制对沙箱内文件的访问:
基目录:所有操作都限制在沙盒根目录下
路径验证:所有路径均已规范化并检查遍历尝试
大小限制:强制执行最大文件大小(默认值:10MB)
扩展控制:仅允许允许的扩展(默认值:txt,md,csv,json,py)
权限控制:强制适当的读/写权限
隔离:无法访问主机文件系统
Web 环境
Web 环境提供对外部资源的受控访问:
域控制:可选的允许域白名单
超时控制:可配置操作超时
浏览器控制:通过 Playwright 的无头浏览器进行完整渲染
抓取控制:通过请求/BeautifulSoup进行简单抓取
内容清理:所有内容都经过解析和清理
网络隔离:通过容器分离网络命名空间
建筑学
该项目采用模块化架构:
每个管理器都遵循一致的设计模式:
.from_env()类方法用于基于环境的初始化非阻塞操作的异步执行方法
强大的输入验证和错误处理
所有操作均采用安全第一的方法
安全措施
Container-MCP 实现了多层安全性:
容器隔离:使用 Podman/Docker 进行容器隔离
AppArmor 配置文件:针对 bash 和 Python 执行的细粒度访问控制
Firejail 沙盒:额外的进程隔离
资源限制:内存、CPU 和执行时间限制
路径遍历预防:验证并规范所有文件路径
允许的扩展限制:控制可以访问的文件类型
网络限制:控制可以访问哪些域
最小权限:组件以最少的必要权限运行
安装
先决条件
带有 Podman 或 Docker 的 Linux 系统
Python 3.12+
Firejail(
apt install firejail或dnf install firejail)AppArmor(
apt install apparmor apparmor-utils或dnf install apparmor apparmor-utils)
快速入门
最快的入门方式是使用一体化脚本:
分步安装
您还可以单独执行安装步骤:
初始化项目:
./bin/01-init.sh构建容器:
./bin/02-build-container.sh设置环境:
./bin/03-setup-environment.sh运行容器:
./bin/04-run-container.sh运行测试(可选):
./bin/05-run-tests.sh
用法
容器运行后,您可以使用任何 MCP 客户端实现连接到它。服务器将通过http://localhost:8000或您配置中指定的端口访问。
**重要提示:**配置 MCP 客户端时,必须将端点 URL 设置为http://127.0.0.1:<port>/sse (其中<port>默认为 8000 或您配置的端口)。/ /sse路径是服务器发送事件正常通信所必需的。
Python 客户端示例
配置
Container-MCP 可以通过环境变量进行配置,可以在volume/config/custom.env中设置:
服务器配置
Bash 管理器配置
Python管理器配置
文件管理器配置
Web管理器配置
发展
设置开发环境
创建 Python 虚拟环境:
python3.12 -m venv .venv source .venv/bin/activate安装依赖项:
pip install -r requirements-dev.txt以开发模式安装包:
pip install -e .
运行测试
开发服务器
要在开发模式下运行 MCP 服务器:
执照
该项目采用 Apache License 2.0 许可。
作者
马丁·布考斯基