isolator-mcp
If you are the rightful owner of isolator-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
Isolator MCP Server is a TypeScript-based Model Context Protocol server that provides a secure sandbox for executing code snippets in various programming languages.
Isolator MCP Server
isolator-mcp
is a Model Context Protocol (MCP) server written in TypeScript. It acts as a wrapper around the embedded , providing a secure code execution sandbox accessible via MCP.
LLM applications (MCP Hosts) can connect to this server and use its execute_code
tool to safely run Python, Go, or JavaScript code snippets provided directly or loaded from predefined snippet files.
Features
- Provides the
execute_code
MCP tool. - Supports executing code provided directly (
language
,entrypoint_code
) or via named snippets (snippet_name
). - Supports multiple languages (Python, Go, JavaScript, configurable).
- Uses the embedded
isolator
Go CLI (isolator-cli/
) for secure Docker container execution. - Configurable security defaults (timeout, resource limits, network) via
isolator_config.json
. - Manages temporary directories on the host for code execution.
- Handles file copying into containers (by instructing the
isolator
CLI). - Returns structured results (stdout, stderr, status) via MCP, setting
isError: true
on tool-level failures.
Prerequisites
- Docker: Required for container creation and execution by the
isolator-cli
. Ensure the Docker daemon is running. - Go: Required to build the embedded
isolator-cli
Go binary. - Node.js and npm: Required to install dependencies, build, and run the
isolator-mcp
TypeScript server.
Installation
- Build
isolator
Go CLI: Navigate to the embedded Go CLI directory and build the binary:This creates thecd isolator-cli go build -o isolator main.go cd ..
./isolator-cli/isolator
executable needed by the server. - Configure
isolator-mcp
:- Edit
isolator_config.json
: UpdateisolatorPath
to point to the absolute path of the built binary (e.g.,/Users/ompragash/Documents/Cline/MCP/isolator-mcp/isolator-cli/isolator
). Adjust default limits, container workdir, language images, or thepromptsDir
(used for snippets) location if needed. - Ensure the
prompts
directory exists (default:./prompts
). Add code snippet files (e.g.,hello_world.py
). The filename base (e.g.,hello_world
) is used as thesnippet_name
.
- Edit
- Install Server Dependencies: Navigate to the main directory (
isolator-mcp
) and run:npm install
- Build Server: Compile the TypeScript code:
This creates the executable script at
npm run build
build/index.js
. - Configure MCP Host: Add the server to your MCP client's settings file (e.g.,
cline_mcp_settings.json
for the VS Code extension):(Adjust the path in{ "mcpServers": { "isolator": { "command": "node", "args": ["/Users/ompragash/Documents/Cline/MCP/isolator-mcp/build/index.js"], "env": {}, "disabled": false, "autoApprove": [] } } }
args
if necessary). The MCP Host should automatically detect and start the server.
Important Note: Ensure the Docker images specified in isolator_config.json
(e.g., python:3.11-alpine
, golang:1.21-alpine
) are pulled onto your system beforehand using docker pull <image_name>
. The isolator
tool does not automatically download missing images.
Local Development / Testing
To run the server locally for development or testing (without installing it via MCP Host settings):
- Build Go CLI: Ensure the
isolator
Go CLI is built within its subdirectory:cd isolator-cli go build -o isolator main.go cd ..
- Build TS Server: In this main directory (
isolator-mcp
), runnpm install
andnpm run build
. - Configure: Make sure
isolator_config.json
correctly points to the built./isolator-cli/isolator
binary via theisolatorPath
key (use the absolute path). - Run Server: Execute the built server directly using Node:
The server will start, connect via stdio, and print logs (including
node build/index.js
console.error
messages fromindex.ts
) to the console. - Interact (Manual): You can manually send JSON-RPC messages (e.g.,
tools/list
,tools/call
) to the server's standard input to test its responses. Tools like@modelcontextprotocol/inspector
can also be helpful (npm run inspector
).
(Remember to stop this manually run server before relying on the MCP Host to start it via the settings file.)
Architecture & Flow
- MCP Host Request: An LLM asks the MCP Host (e.g., VS Code Extension) to call the
isolator
server'sexecute_code
tool with arguments. - Server Processing (
index.ts
):- Receives the
tools/call
request via stdio. - Validates arguments using Zod.
- Loads configuration from
isolator_config.json
. - Determines the code source:
- If
snippet_name
is provided, reads the corresponding file from the configuredpromptsDir
and determines the language from the file extension. - If
entrypoint_code
andlanguage
are provided, uses them directly.
- If
- Creates a temporary directory on the host.
- Writes the entrypoint code and any
additional_files
into the temporary directory. - Constructs the command-line arguments for the embedded
isolator
Go CLI, including security flags from the config and the path to the temporary directory. - Spawns the
isolator
process using Node.jschild_process.spawn
.
- Receives the
- Go CLI Execution (
isolator-cli/isolator run
):- Parses flags (including the new
--env
flag). - Creates a tar stream of the temporary directory contents.
- Uses the Docker SDK to create a container with specified image, resource limits, environment variables (from
--env
), and security settings (NO bind mount). - Uses
CopyToContainer
to copy the tar stream into the container's working directory. - Starts the container, which executes the requested command (e.g.,
python /workspace/hello_world.py
). - Waits for completion, captures stdout/stderr.
- Removes the container.
- Prints the result (status, output, etc.) as JSON to its stdout.
- Parses flags (including the new
- Server Result Handling (
index.ts
):- Reads the JSON output from the finished
isolator
process stdout. - Parses the JSON result.
- Formats the
CallToolResult
for MCP, combining stdout/stderr and settingisError
if the Go CLI reported a non-success status. - Sends the result back to the MCP Host.
- Cleans up the temporary directory on the host.
- Reads the JSON output from the finished
- MCP Host Response: Relays the result back to the LLM, which then formulates a response for the user.
execute_code
Tool
Description
Executes code (Python, Go, JavaScript) in a secure, isolated container environment.
Input Schema (arguments
)
language
(string, optional): The programming language (e.g., "python", "go", "javascript"). Required ifsnippet_name
is not provided.entrypoint_code
(string, optional): The main code content to execute. Required ifsnippet_name
is not provided.entrypoint_filename
(string, optional): Filename for the main code (e.g., "main.py", "script.js"). Defaults based on language if not provided.additional_files
(array, optional): Array of objects, each with:filename
(string, required): Name of the additional file.content
(string, required): Content of the additional file.
snippet_name
(string, optional): Name of a pre-defined code snippet file (without extension) located in the configuredpromptsDir
. Mutually exclusive withlanguage
andentrypoint_code
.
Constraint: Either snippet_name
OR both language
and entrypoint_code
must be provided.
Output (CallToolResult
)
content
: An array containing a singleTextContent
object.type
: "text"text
: A string containing the combined stdout and stderr from the execution, formatted like:
If an error occurred during execution (non-zero exit code, timeout), the text will be prepended with--- stdout --- [Actual stdout output] --- stderr --- [Actual stderr output]
Execution Failed (status): [error message]\n\n
.
isError
(boolean):true
if the execution status reported by theisolator
CLI was "error" or "timeout",false
otherwise.
(Protocol-level errors, like invalid arguments or failure to start the process, will result in a standard MCP error response instead of a CallToolResult
).