isolator-mcp 是一个用 TypeScript 编写的 模型上下文协议(MCP) 服务器。它作为嵌入式 isolator Go 命令行工具 的封装,提供了一个可通过 MCP 访问的安全代码执行沙箱。
LLM 应用程序(MCP 主机)可以连接到此服务器,并使用其 execute_code 工具安全地运行直接提供的或从预定义片段文件加载的 Python、Go 或 JavaScript 代码片段。
execute_code MCP 工具。language,entrypoint_code)或通过命名片段(snippet_name)提供的代码。isolator Go 命令行工具(isolator-cli/)进行安全的 Docker 容器执行。isolator_config.json 配置安全默认设置(超时、资源限制、网络)。isolator CLI)。isError: true。isolator-cli 创建和执行容器。确保 Docker 守护进程正在运行。isolator-cli Go 可执行文件。isolator-mcp TypeScript 服务器。isolator Go 命令行工具: 导航到嵌入的 Go 命令行工具目录并构建二进制文件:
cd isolator-cli
go build -o isolator main.go
cd ..
这会创建服务器所需的 ./isolator-cli/isolator 可执行文件。isolator-mcp:
isolator_config.json: 更新 isolatorPath 指向构建二进制文件的绝对路径(例如,/Users/ompragash/Documents/Cline/MCP/isolator-mcp/isolator-cli/isolator)。根据需要调整默认限制、容器工作目录、语言镜像或 promptsDir(用于片段)的位置。prompts 目录存在(默认:./prompts)。添加代码片段文件(例如,hello_world.py)。文件名基础(例如,hello_world)将用作 snippet_name。isolator-mcp)并运行:
npm install
npm run build
这会在 build/index.js 中创建可执行脚本。cline_mcp_settings.json):
{
"mcpServers": {
"isolator": {
"command": "node",
"args": ["/Users/ompragash/Documents/Cline/MCP/isolator-mcp/build/index.js"],
"env": {},
"disabled": false,
"autoApprove": []
}
}
}
(如有必要,请调整 args 中的路径)。MCP 主机应自动检测并启动服务器。重要提示: 确保在系统上提前拉取 isolator_config.json 中指定的 Docker 镜像(例如,python:3.11-alpine,golang:1.21-alpine)使用 docker pull <image_name>。isolator 工具不会自动下载缺失的镜像。
要运行服务器进行开发或测试(无需通过 MCP 主机设置安装):
isolator Go 命令行工具在其子目录内已构建:
cd isolator-cli
go build -o isolator main.go
cd ..
isolator-mcp)中,运行 npm install 和 npm run build。isolator_config.json 正确指向通过 isolatorPath 键构建的 ./isolator-cli/isolator 二进制文件(使用绝对路径)。node build/index.js
服务器将启动,通过标准 I/O 连接,并将日志(包括来自 index.ts 的 console.error 消息)打印到控制台。tools/list,tools/call)到服务器的标准输入以测试其响应。工具如 @modelcontextprotocol/inspector 也可能有所帮助(npm run inspector)。(记得在依靠 MCP 主机通过设置文件启动之前停止手动运行的服务器。)
isolator 服务器的 execute_code 工具及其参数。index.ts):
tools/call 请求。isolator_config.json 加载配置。snippet_name,则从配置的 promptsDir 读取相应的文件,并根据文件扩展名确定语言。entrypoint_code 和 language,则直接使用它们。additional_files 写入临时目录。isolator Go 命令行工具的命令行参数,包括来自配置的安全标志和临时目录的路径。child_process.spawn 启动 isolator 进程。isolator-cli/isolator run):
--env 标志)。--env)和安全设置(无绑定挂载)的容器。CopyToContainer 将 tar 流复制到容器的工作目录。python /workspace/hello_world.py)。index.ts):
isolator 进程的标准输出读取 JSON 输出。CallToolResult,结合标准输出/标准错误,并在 Go 命令行报告非成功状态时设置 isError。execute_code 工具在安全隔离的容器环境中执行代码(Python、Go、JavaScript)。
arguments)language(字符串,可选): 编程语言(例如,“python”,“go”,“javascript”)。如果未提供 snippet_name,则必须提供。entrypoint_code(字符串,可选): 要执行的主要代码内容。如果未提供 snippet_name,则必须提供。entrypoint_filename(字符串,可选): 主代码的文件名(例如,“main.py”,“script.js”)。如果没有提供,则基于语言默认。additional_files(数组,可选): 对象数组,每个对象包含:
filename(字符串,必需): 额外文件的名称。content(字符串,必需): 额外文件的内容。snippet_name(字符串,可选): 配置的 promptsDir 中预定义代码片段文件的名称(不带扩展名)。与 language 和 entrypoint_code 互斥。约束: 必须提供 snippet_name 或同时提供 language 和 entrypoint_code。
CallToolResult)content: 包含单个 TextContent 对象的数组。
type: "text"text: 字符串,包含执行期间的组合标准输出和标准错误,格式如下:
--- stdout ---
[实际标准输出]
--- stderr ---
[实际标准错误]
如果执行过程中发生错误(非零退出码、超时),文本将被 Execution Failed (状态): [错误消息]\n\n 预置。isError(布尔值): 如果 isolator CLI 报告的状态是“错误”或“超时”,则为 true,否则为 false。(协议级别的错误,如无效参数或无法启动进程,将导致标准 MCP 错误响应而不是 CallToolResult)。