关于 Isolator MCP Server
Isolator MCP Server 是一个 TypeScript MCP 服务,可在 Docker 容器中运行 Python、Go 和 JavaScript 代码。它接受内联代码或命名代码片段,并向 MCP 主机返回输出与执行状态。
主要功能
- 01通过 execute_code 工具运行代码
- 02支持 Python、Go 和 JavaScript
- 03接受内联代码或命名代码片段
- 04配置容器安全策略与资源限制
- 05返回 stdout、stderr 和执行状态
适用场景
- 01运行 MCP 主机提交的代码片段
- 02执行带附加文件的已保存片段
- 03在 Docker 容器中隔离代码执行
MCP 相关
它向 MCP 客户端提供 execute_code 工具,接收代码或片段并返回结构化执行结果。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Isolator MCP 服务
isolator-mcp 是一个使用 TypeScript 编写的 Model Context Protocol(MCP) 服务。它封装了内嵌的 isolator Go 命令行工具,通过 MCP 提供安全的代码执行沙箱。
大模型应用(MCP Host)可以连接此服务,并使用其 execute_code 工具安全地运行直接提供或从预定义代码片段文件加载的 Python、Go 或 JavaScript 代码片段。
功能
- 提供
execute_codeMCP 工具。 - 支持直接提供代码(
language、entrypoint_code),也支持通过命名代码片段(snippet_name)执行代码。 - 支持多种语言(Python、Go、JavaScript,可配置)。
- 使用内嵌的
isolatorGo 命令行工具(isolator-cli/)在 Docker 容器中安全执行代码。 - 通过
isolator_config.json配置安全默认值(超时、资源限制、网络)。 - 在主机上管理用于代码执行的临时目录。
- 处理向容器复制文件的操作(通过指示
isolatorCLI 执行)。 - 通过 MCP 返回结构化结果(stdout、stderr、状态),并在工具级故障时设置
isError: true。
前置条件
- Docker:
isolator-cli创建和运行容器时需要。请确保 Docker 守护进程正在运行。 - Go: 构建内嵌的
isolator-cliGo 二进制文件时需要。 - Node.js 和 npm: 安装依赖项、构建和运行
isolator-mcpTypeScript 服务时需要。
安装
- 构建
isolatorGo CLI: 进入内嵌的 Go CLI 目录并构建二进制文件:
这会创建服务所需的可执行文件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 - 构建服务: 编译 TypeScript 代码:
这会在npm run buildbuild/index.js创建可执行脚本。 - 配置 MCP Host: 将服务添加到 MCP 客户端的设置文件中(例如,VS Code 扩展的
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 Host 应会自动检测并启动服务。
重要提示: 请确保事先使用 docker pull <image_name> 将 isolator_config.json 中指定的 Docker 镜像(例如,python:3.11-alpine、golang:1.21-alpine)拉取到系统中。isolator 工具不会自动下载缺失的镜像。
本地开发/测试
若要在本地运行服务进行开发或测试(无需通过 MCP Host 设置安装):
- 构建 Go CLI: 确保已在
isolatorGo CLI 的子目录中构建它:cd isolator-cli go build -o isolator main.go cd .. - 构建 TS 服务: 在此主目录(
isolator-mcp)中,运行npm install和npm run build。 - 配置: 确保
isolator_config.json通过isolatorPath键正确指向已构建的./isolator-cli/isolator二进制文件(使用绝对路径)。 - 运行服务: 使用 Node 直接执行已构建的服务:
服务将启动并通过 stdio 连接,同时在控制台打印日志(包括来自node build/index.jsindex.ts的console.error消息)。 - 交互(手动): 可以手动向服务的标准输入发送 JSON-RPC 消息(例如
tools/list、tools/call),以测试其响应。@modelcontextprotocol/inspector等工具也会有所帮助(npm run inspector)。
(请记得在依靠 MCP Host 通过设置文件启动服务之前,手动停止此服务。)
架构与流程
- MCP Host 请求: 大模型请求 MCP Host(例如 VS Code Extension)调用
isolator服务的execute_code工具并传入参数。 - 服务处理(
index.ts):- 通过 stdio 接收
tools/call请求。 - 使用 Zod 验证参数。
- 从
isolator_config.json加载配置。 - 确定代码来源:
- 如果提供了
snippet_name,则从已配置的promptsDir中读取相应文件,并根据文件扩展名确定语言。 - 如果提供了
entrypoint_code和language,则直接使用它们。
- 如果提供了
- 在主机上创建临时目录。
- 将入口代码和任何
additional_files写入临时目录。 - 为嵌入式
isolatorGo CLI 构造命令行参数,包括配置中的安全标志和临时目录路径。 - 使用 Node.js
child_process.spawn启动isolator进程。
- 通过 stdio 接收
- Go CLI 执行(
isolator-cli/isolator run):- 解析标志(包括新增的
--env标志)。 - 创建临时目录内容的 tar 流。
- 使用 Docker SDK 创建容器,并设置指定的镜像、资源限制、环境变量(来自
--env)和安全设置(不使用绑定挂载)。 - 使用
CopyToContainer将 tar 流复制到容器的工作目录中。 - 启动容器,执行所请求的命令(例如
python /workspace/hello_world.py)。 - 等待完成并捕获 stdout/stderr。
- 移除容器。
- 将结果(状态、输出等)作为 JSON 打印到其 stdout。
- 解析标志(包括新增的
- 服务处理结果(
index.ts):- 从已结束的
isolator进程 stdout 读取 JSON 输出。 - 解析 JSON 结果。
- 为 MCP 格式化
CallToolResult,合并 stdout/stderr,并在 Go CLI 报告非成功状态时设置isError。 - 将结果发送回 MCP Host。
- 清理主机上的临时目录。
- 从已结束的
- MCP Host 响应: 将结果转发回大模型,由大模型为用户生成回复。
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 的字符串,格式如下:
如果执行期间发生错误(退出代码非零、超时),文本前面会添加--- stdout --- [实际 stdout 输出] --- stderr --- [实际 stderr 输出]Execution Failed (status): [error message]\n\n。
isError(布尔值):如果isolatorCLI 报告的执行状态为 "error" 或 "timeout",则为true;否则为false。
(如果发生协议级错误,例如参数无效或无法启动进程,系统将返回标准 MCP 错误响应,而不是 CallToolResult。)
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。