Servidor MCP aislador
isolator-mcp es un servidor de Protocolo de Contexto de Modelo (MCP) escrito en TypeScript. Actúa como un contenedor de la herramienta CLI de Go integrada, , y proporciona un entorno de ejecución de código seguro accesible a través de MCP.
Las aplicaciones LLM (hosts MCP) pueden conectarse a este servidor y usar su herramienta execute_code para ejecutar de forma segura fragmentos de código Python, Go o JavaScript proporcionados directamente o cargados desde archivos de fragmentos predefinidos.
Características
Proporciona la herramienta MCP
execute_code.Admite la ejecución de código proporcionado directamente (
language,entrypoint_code) o mediante fragmentos con nombre (snippet_name).Admite varios idiomas (Python, Go, JavaScript, configurable).
Utiliza el
isolatorintegrado Go CLI (isolator-cli/) para la ejecución segura del contenedor Docker.Valores predeterminados de seguridad configurables (tiempo de espera, límites de recursos, red) a través de
isolator_config.json.Administra directorios temporales en el host para la ejecución de código.
Maneja la copia de archivos en contenedores (mediante instrucciones a la CLI
isolator).Devuelve resultados estructurados (stdout, stderr, status) a través de MCP, estableciendo
isError: trueen caso de fallas a nivel de herramienta.
Related MCP server: Hello World MCP Server
Prerrequisitos
Docker: Necesario para la creación y ejecución de contenedores por parte de
isolator-cli. Asegúrese de que el demonio de Docker esté en ejecución.Go: necesario para crear el binario Go
isolator-cliintegrado.Node.js y npm: necesarios para instalar dependencias, compilar y ejecutar el servidor TypeScript
isolator-mcp.
Instalación
isolatornavegue hasta el directorio Go CLI integrado y compile el binario:cd isolator-cli go build -o isolator main.go cd ..Esto crea el ejecutable
./isolator-cli/isolatorque necesita el servidor.Configurar
Editar
isolator_config.json: ActualizarisolatorPathpara que apunte a la ruta absoluta del binario compilado (p. ej.,/Users/ompragash/Documents/Cline/MCP/isolator-mcp/isolator-cli/isolator). Ajustar los límites predeterminados, el directorio de trabajo del contenedor, las imágenes de idioma o la ubicación depromptsDir(usado para fragmentos) si es necesario.Asegúrese de que el directorio de
promptsexista (predeterminado:./prompts). Agregue fragmentos de código (p. ej.,hello_world.py). El nombre de archivo base (p. ej.,hello_world) se utiliza comosnippet_name.
Instalar dependencias del servidor: navegue al directorio principal (
isolator-mcp) y ejecute:npm installServidor de compilación: compila el código TypeScript:
npm run buildEsto crea el script ejecutable en
build/index.js.Configurar el host MCP: agregue el servidor al archivo de configuración de su cliente MCP (por ejemplo,
cline_mcp_settings.jsonpara la extensión VS Code):{ "mcpServers": { "isolator": { "command": "node", "args": ["/Users/ompragash/Documents/Cline/MCP/isolator-mcp/build/index.js"], "env": {}, "disabled": false, "autoApprove": [] } } }(Ajuste la ruta en . El host MCP debería detectar e iniciar el servidor automáticamente.
Nota importante: Asegúrese de que las imágenes de Docker especificadas en isolator_config.json (p. ej., python:3.11-alpine , golang:1.21-alpine ) se hayan descargado previamente en su sistema mediante docker pull <image_name> . La herramienta isolator no descarga automáticamente las imágenes faltantes.
Desarrollo local / Pruebas
Para ejecutar el servidor localmente para desarrollo o pruebas (sin instalarlo a través de la configuración del host de MCP):
Crear Go CLI: asegúrese de que el
isolatorGo CLI esté creado dentro de su subdirectorio:cd isolator-cli go build -o isolator main.go cd ..Construir servidor TS: en este directorio principal (
isolator-mcp), ejecutenpm installynpm run build.Configurar: asegúrese de que
isolator_config.jsonapunte correctamente al binario./isolator-cli/isolatorcompilado a través de la claveisolatorPath(use la ruta absoluta).Ejecutar servidor: ejecute el servidor compilado directamente usando Node:
node build/index.jsEl servidor se iniciará, se conectará a través de stdio e imprimirá registros (incluidos los mensajes
console.errordeindex.ts) en la consola.Interacción (Manual): Puedes enviar manualmente mensajes JSON-RPC (p. ej.,
tools/list,tools/call) a la entrada estándar del servidor para probar sus respuestas. Herramientas como@modelcontextprotocol/inspectortambién pueden ser útiles (npm run inspector).
(Recuerde detener este servidor que se ejecuta manualmente antes de confiar en el host MCP para iniciarlo a través del archivo de configuración).
Arquitectura y flujo
Solicitud de host MCP: un LLM solicita al host MCP (por ejemplo, extensión VS Code) que llame a la herramienta
execute_codedel servidorisolatorcon argumentos.Procesamiento del servidor (
Recibe la solicitud
tools/calla través de stdio.Valida argumentos usando Zod.
Carga la configuración desde
isolator_config.json.Determina la fuente del código:
Si se proporciona
snippet_name, lee el archivo correspondiente desde elpromptsDirconfigurado y determina el idioma a partir de la extensión del archivo.Si se proporcionan
entrypoint_codeylanguage, los utiliza directamente.
Crea un directorio temporal en el host.
Escribe el código del punto de entrada y cualquier
additional_filesen el directorio temporal.Construye los argumentos de la línea de comandos para el
isolatorincorporado Go CLI, incluidos los indicadores de seguridad de la configuración y la ruta al directorio temporal.Genera el proceso
isolatorusando Node.jschild_process.spawn.
Ejecución de Go CLI (
Analiza los indicadores (incluido el nuevo indicador
--env).Crea un flujo tar del contenido del directorio temporal.
Utiliza el SDK de Docker para crear un contenedor con una imagen especificada, límites de recursos, variables de entorno (desde
--env) y configuraciones de seguridad (SIN montaje de enlace).Utiliza
CopyToContainerpara copiar el flujo tar en el directorio de trabajo del contenedor.Inicia el contenedor, que ejecuta el comando solicitado (por ejemplo,
python /workspace/hello_world.py).Espera la finalización, captura stdout/stderr.
Quita el contenedor.
Imprime el resultado (estado, salida, etc.) como JSON en su salida estándar.
Manejo de resultados del servidor (
Lee la salida JSON de la salida estándar del proceso
isolatorfinalizado.Analiza el resultado JSON.
Formatea
CallToolResultpara MCP, combinando stdout/stderr y configurandoisErrorsi la CLI de Go informó un estado de no éxito.Envía el resultado de vuelta al host MCP.
Limpia el directorio temporal en el host.
Respuesta del host MCP: transmite el resultado al LLM, que luego formula una respuesta para el usuario.
Herramienta execute_code
Descripción
Ejecuta código (Python, Go, JavaScript) en un entorno de contenedor aislado y seguro.
Esquema de entrada ( arguments )
language(cadena, opcional): El lenguaje de programación (p. ej., "Python", "Go", "JavaScript"). Obligatorio si no se proporcionasnippet_name.entrypoint_code(cadena, opcional): El código principal que se ejecutará. Obligatorio si no se proporcionasnippet_name.entrypoint_filename(cadena, opcional): Nombre del archivo del código principal (p. ej., "main.py", "script.js"). Si no se proporciona, el valor predeterminado se basa en el idioma.additional_files(matriz, opcional): matriz de objetos, cada uno con:filename(cadena, obligatorio): Nombre del archivo adicional.content(cadena, obligatorio): Contenido del archivo adicional.
snippet_name(cadena, opcional): Nombre de un archivo de fragmento de código predefinido (sin extensión) ubicado en elpromptsDirconfigurado. Se excluye mutuamente conlanguageyentrypoint_code.
Restricción: se debe proporcionar snippet_name O bien language y entrypoint_code .
Salida ( CallToolResult )
content: una matriz que contiene un único objetoTextContent.type: "texto"text: una cadena que contiene la salida estándar y la salida estándar combinadas de la ejecución, con el siguiente formato:--- stdout --- [Actual stdout output] --- stderr --- [Actual stderr output]Si se produjo un error durante la ejecución (código de salida distinto de cero, tiempo de espera), el texto se antepondrá con
Execution Failed (status): [error message]\n\n.
isError(booleano):truesi el estado de ejecución informado por la CLIisolatorfue "error" o "tiempo de espera",falseen caso contrario.
(Los errores a nivel de protocolo, como argumentos no válidos o errores al iniciar el proceso, generarán una respuesta de error MCP estándar en lugar de un .