使用说明
隔离器MCP服务器
isolator-mcp 是一个 模型上下文协议(MCP) 用TypeScript编写的服务器。它充当嵌入式系统的包装器 isolator Go CLI工具,提供可通过MCP访问的安全代码执行沙盒。
LLM应用程序(MCP主机)可以连接到此服务器并使用其 execute_code 该工具用于安全运行直接提供或从预定义代码段文件加载的Python、Go或JavaScript代码段。
特性
- 提供
execute_codeMCP工具。 - 支持执行直接提供的代码(
language,entrypoint_code)或通过命名片段(snippet_name). - 支持多种语言(Python、Go、JavaScript、可配置)。
- 使用嵌入式
isolatorGo CLI(isolator-cli/)用于安全的Docker容器执行。 - 通过以下方式配置安全默认值(超时、资源限制、网络)
isolator_config.json. - 管理主机上用于代码执行的临时目录。
- 处理文件复制到容器中(通过指示
isolatorCLI)。 - 通过MCP设置返回结构化结果(stdout、stderr、status)
isError: true工具级故障。
先决条件
- Docker: 容器创建和执行所需
isolator-cli.确保Docker守护进程正在运行。 - 去: 需要构建嵌入式
isolator-cli去二进制。 - Node.js和npm: 需要安装依赖项、构建和运行
isolator-mcpTypeScript服务器。
安装
- 构建
isolator转到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主机: 将服务器添加到MCP客户端的设置文件中(例如。,
cline_mcp_settings.json对于VS代码扩展):*(调整路径{ "mcpServers": { "isolator": { "command": "node", "args": ["/Users/ompragash/Documents/Cline/MCP/isolator-mcp/build/index.js"], "env": {}, "disabled": false, "autoApprove": [] } } }args如有必要)*MCP主机应自动检测并启动服务器。
重要提示: 确保中指定的Docker镜像 isolator_config.json (例如。, python:3.11-alpine, golang:1.21-alpine)预先使用 docker pull <image_name>The isolator 该工具不会自动下载丢失的图像。
本地开发/测试
要在本地运行服务器进行开发或测试(不通过MCP主机设置安装):
- 构建Go命令行界面: 确保
isolatorGo CLI是在其子目录中构建的:cd isolator-cli go build -o isolator main.go cd .. - 构建TS服务器: 在这个主目录中(
isolator-mcp),跑npm install和npm run build. - 配置: 确保
isolator_config.json正确指向已建./isolator-cli/isolator二进制通过isolatorPath键(使用绝对路径)。 - 运行服务器: 使用Node直接执行构建的服务器:服务器将启动,通过stdio连接,并打印日志(包括
node build/index.jsconsole.error消息来自index.ts)到控制台。 - 交互(手动): 您可以手动发送JSON-RPC消息(例如。,
tools/list,tools/call)以测试服务器的响应。工具如@modelcontextprotocol/inspector也可能有所帮助(npm run inspector).
(在依赖MCP主机通过设置文件启动服务器之前,请记住停止此手动运行的服务器。)
架构与流程
- MCP主机请求: LLM要求MCP主机(例如VS代码扩展)调用
isolator服务器的execute_code带有论据的工具。 - 服务器处理(
index.ts):- 收到
tools/call通过stdio请求。 - 使用Zod验证参数。
- 从加载配置
isolator_config.json. - 确定代码源:
- 如果
snippet_name提供,从配置的文件中读取相应的文件promptsDir并根据文件扩展名确定语言。 - 如果
entrypoint_code和language直接使用它们。
- 如果
- 在主机上创建临时目录。
- 写入入口点代码和任何
additional_files进入临时目录。 - 为嵌入式系统构造命令行参数
isolatorGo CLI,包括配置中的安全标志和临时目录的路径。 - 产卵
isolator使用Node.js的进程child_process.spawn.
- 收到
- Go CLI执行(
isolator-cli/isolator run):- 解析标志(包括新的
--env旗)。 - 创建临时目录内容的tar流。
- 使用Docker SDK创建具有指定映像、资源限制和环境变量的容器(来自
--env),以及安全设置(无绑定挂载)。 - 用途
CopyToContainer将tar流复制到容器的工作目录中。 - 启动执行所请求命令的容器(例如。,
python /workspace/hello_world.py). - 等待完成,捕获stdout/stderr。
- 移除容器。
- 将结果(状态、输出等)作为JSON打印到其stdout。
- 解析标志(包括新的
- 服务器结果处理(
index.ts):- 读取已完成的JSON输出
isolator进程stdout。 - 解析JSON结果。
- 格式化
CallToolResult对于MCP,结合stdout/stderr和设置isError如果Go CLI报告了不成功状态。 - 将结果发送回MCP主机。
- 清理主机上的临时目录。
- 读取已完成的JSON输出
- MCP主机响应: 将结果转发回LLM,然后LLM为用户制定响应。
execute_code 工具
描述
在安全、隔离的容器环境中执行代码(Python、Go、JavaScript)。
输入模式(arguments)
language(字符串,可选):编程语言(例如“python”、“go”、“javascript”)。如果需要snippet_name未提供。entrypoint_code(string,可选):要执行的主要代码内容。如果需要snippet_name未提供。entrypoint_filename(string,可选):主代码的文件名(例如“main.py”、“script.js”)。如果未提供,则基于语言的默认值。additional_files(array,可选):对象数组,每个对象具有:filename(string,必填):附加文件的名称。content(string,必填):附加文件的内容。
snippet_name(字符串,可选):位于配置文件中的预定义代码段文件的名称(不带扩展名)promptsDir.相互排斥language和entrypoint_code.
约束: 要么 snippet_name 或两者 language 和 entrypoint_code 必须提供。
输出(CallToolResult)
content:一个包含单个TextContent对象。type:“文本”text:一个包含执行时stdout和stderr组合的字符串,格式如下:如果发生错误 在...期间 执行(非零退出代码,超时),文本将加上--- stdout --- [Actual stdout output] --- stderr --- [Actual stderr output]Execution Failed (status): [error message]\n\n.
isError(布尔值):true如果执行状态由isolatorCLI为“错误”或“超时”,false否则。
(协议级错误,如无效参数或无法启动进程,将导致标准MCP错误响应,而不是 CallToolResult).
