Code Sandbox MCP Server
Uses Docker to create isolated containers for safely executing code snippets submitted by AI assistants.
Integrates with Google's Gemini SDK and CLI to provide code execution capabilities for AI interactions.
Enables execution of JavaScript code in a Node.js environment within a secure, isolated container.
Provides alternative containerization using Podman for executing code in secure environments.
Executes Python code snippets in a secure, isolated sandbox environment, capturing output and error streams.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Code Sandbox MCP Serverrun a Python script that calculates the first 10 Fibonacci numbers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Code Sandbox MCP Server
The Code Sandbox MCP Server is a lightweight, STDIO-based Model Context Protocol (MCP) Server, allowing AI assistants and LLM applications to safely execute code snippets using containerized environments. It is uses the llm-sandbox package to execute the code snippets.

How It Works:
Starts a container session (podman, docker, etc.) and ensures the session is open.
Writes the
codeto a temporary file on the host.Copies this temporary file into the container at the configured
workdir.Executes the language-specific commands to run the code, e.g. python
python3 -u code.pyor javascriptnode -u code.jsCaptures the output and error streams from the container.
Returns the output and error streams to the client.
Stops and removes the container.
Available Tools:
run_python_code - Executes a snippet of Python code in a secure, isolated sandbox.
code(string, required): The Python code to execute.
run_js_code - Executes a snippet of JavaScript (Node.js) code in a secure, isolated sandbox.
code(string, required): The JavaScript code to execute.
Installation
pip install git+https://github.com/philschmid/code-sandbox-mcp.gitRelated MCP server: Container-MCP
Getting Started: Usage with an MCP Client
Examples:
Local Client Python example for running python code
Gemini SDK example for running python code with the Gemini SDK
Calling Gemini from a client example for running python code that uses the Gemini SDK and passes through the Gemini API key
Local Client Javascript example for running javascript code
To use the Code Sandbox MCP server, you need to add it to your MCP client's configuration file (e.g., in your AI assistant's settings). The server is designed to be launched on-demand by the client.
Add the following to your mcpServers configuration:
{
"mcpServers": {
"code-sandbox": {
"command": "code-sandbox-mcp",
}
}
}Provide Secrets and pass through environment variables
You can pass through environment variables to the sandbox by setting the --pass-through-env flag when starting the MCP server and providing the env when starting the server
{
"mcpServers": {
"code-sandbox": {
"command": "code-sandbox-mcp",
"args": ["--pass-through-env", "API_KEY,SECRET_TOKEN"]
"env": {
"API_KEY": "1234567890",
"SECRET_TOKEN": "1234567890"
}
}
}
}Provide a custom container image
You can provide a custom container image by setting the CONTAINER_IMAGE and CONTAINER_LANGUAGE environment variables when starting the MCP server. Both variables are required as the CONTAINER_LANGUAGE is used to determine the commands to run in the container and the CONTAINER_IMAGE is used to determine the image to use.
Note: When providing a custom container image both tools will use the same container image.
{
"mcpServers": {
"code-sandbox": {
"command": "code-sandbox-mcp",
"env": {
"CONTAINER_IMAGE": "your-own-image",
"CONTAINER_LANGUAGE": "python" # or "javascript"
}
}
}
}Use with Gemini SDK
The code-sandbox-mcp server can be used with the Gemini SDK by passing the tools parameter to the generate_content method.
from fastmcp import Client
from google import genai
import asyncio
mcp_client = Client(
{
"local_server": {
"transport": "stdio",
"command": "code-sandbox-mcp",
}
}
)
gemini_client = genai.Client()
async def main():
async with mcp_client:
response = await gemini_client.aio.models.generate_content(
model="gemini-2.5-flash",
contents="Use Python to ping the google.com website and return the response time.",
config=genai.types.GenerateContentConfig(
temperature=0,
tools=[mcp_client.session], # Pass the FastMCP client session
),
)
print(response.text)
if __name__ == "__main__":
asyncio.run(main())Use with Gemini CLI
The code-sandbox-mcp server can be used with the Gemini CLI. You can configure MCP servers at the global level in the ~/.gemini/settings.json file or in your project's root directory, create or open the .gemini/settings.json file. Within the file, add the mcpServers configuration block.

See settings.json for an example and read more about the Gemini CLI
{
"mcpServers": {
"code-sandbox": {
"command": "code-sandbox-mcp",
}
}
}Customize/Build new Container Images
The repository comes with 2 container images, which are published on Docker Hub:
philschmi/code-sandbox-python:latestphilschmi/code-sandbox-js:latest
docker build -t philschmi/code-sandbox-python:latest -f containers/Dockerfile.python .
docker build -t philschmi/code-sandbox-js:latest -f containers/Dockerfile.nodejs .The script will build the image using the current user's account. To update the images you want to use you can either pass the --python-image or --js-image flags when starting the MCP server or update the const.py file.
To push the images to Docker Hub you need to retag the images to your own account and push them.
docker tag philschmi/code-sandbox-python:latest <your-account>/code-sandbox-python:latest
docker push <your-account>/code-sandbox-python:latestTo customize or install additional dependencies you can add them to the Dockerfile and build the image again.
Testing
With MCP Inspector
Start the server with streamable-http and test your server using the MCP inspector. Alternatively start inspector and run the server with stdio.
npx @modelcontextprotocol/inspectorTo run the test suite for code-sandbox-mcp and its components, clone the repository and run:
# You may need to install development dependencies first
pip install -e ".[dev]"
# Run the tests
pytest tests/License
Code Sandbox MCP Server is open source software licensed under the MIT License.
Available Tools
2 toolsrun_javascript_codeB
Execute JavaScript code in the sandbox environment and captures the standard output and error.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The JavaScript code to execute, included libraries are @google/genai |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| type | Yes | |
| _meta | No | |
| annotations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the sandbox environment and capture of output/error, but lacks details on execution limits, security implications, error handling, or what the sandbox entails. For a code execution tool with zero annotation coverage, this is insufficient behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It front-loads the core action and key details, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (code execution), lack of annotations, and presence of an output schema, the description is minimally adequate. It covers the basic purpose and output capture but misses critical behavioral aspects like safety, limits, and comparison to siblings. The output schema likely handles return values, reducing the burden here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents the 'code' parameter fully. The description adds that included libraries are '@google/genai', which provides some context beyond the schema, but doesn't elaborate on syntax, supported features, or other libraries. Baseline 3 is appropriate as the schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute JavaScript code') and the environment ('in the sandbox environment'), and specifies what it captures ('standard output and error'). It distinguishes from the sibling 'run_python_code' by specifying JavaScript, but doesn't explicitly contrast them. The purpose is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'run_python_code', nor does it mention any prerequisites, constraints, or typical use cases. It simply states what the tool does without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_python_codeB
Execute Python code in the sandbox environment and captures the standard output and error.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The Python code to execute, included libraries are numpy, pandas, matplotlib, scikit-learn, requests, google-genai |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | |
| type | Yes | |
| _meta | No | |
| annotations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: execution in a 'sandbox environment' (implying isolation/safety) and capture of 'standard output and error'. However, it lacks details on execution limits, timeouts, memory constraints, security implications, or response format beyond capture. The description adds value but is incomplete for a code execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It is front-loaded with the core action and environment, making it easy to parse. Every word earns its place without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (code execution), no annotations, and an output schema present (which covers return values), the description is reasonably complete. It specifies the sandbox environment and capture behavior, which are critical for understanding. However, it lacks details on execution constraints and security, leaving some gaps for a potentially risky operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'code' fully documented in the schema (including available libraries). The description adds no additional parameter semantics beyond what the schema provides, such as code length limits or syntax requirements. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Execute Python code in the sandbox environment and captures the standard output and error.' It specifies the verb ('execute'), resource ('Python code'), and environment ('sandbox'), but doesn't explicitly differentiate from its sibling 'run_javascript_code' beyond the language name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention the sibling tool 'run_javascript_code' or any other alternatives, nor does it specify prerequisites, constraints, or typical use cases. Usage is implied by the language name only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
- First observed
run_javascript_code - First observed
run_python_code
TDQS
The two tools are perfectly distinct, each targeting a different programming language (JavaScript vs Python) with identical functionality otherwise. There is no overlap or ambiguity in purpose, making tool selection straightforward for an agent.
Both tools follow a consistent verb_noun pattern ('run_javascript_code' and 'run_python_code'), using the same verb 'run' and structured noun phrases. This predictability enhances readability and usability.
With only two tools, the server feels under-scoped for a 'Code Sandbox' purpose, as it lacks support for other common languages (e.g., Java, C++, Ruby) or additional sandbox operations (e.g., managing files, setting timeouts). This minimal set limits functionality and may require agents to work around gaps.
The tool surface is severely incomplete for a code sandbox domain, covering only JavaScript and Python execution. Missing are tools for other languages, code analysis, input/output handling, or environment configuration, which are typical for such systems, leading to potential agent failures in broader tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that allows secure execution of pre-approved commands, enabling AI assistants to safely interact with the user's system.1822ISC
- AlicenseNot gradedqualityFmaintenanceA secure, container-based implementation of the Model Context Protocol (MCP) that provides sandboxed environments for AI systems to safely execute code, run commands, access files, and perform web operations.22Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that enables LLMs to run ANY code safely in isolated Docker containers.121MIT
- AlicenseBqualityDmaintenanceA TypeScript server implementing the Model Context Protocol that provides secure code execution in isolated Docker containers, allowing LLM applications to safely run Python, Go, or JavaScript code snippets.12Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/philschmid/code-sandbox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server