Let AI execute JavaScript/Python code with any package imports!
- Secure Sandbox: Isolated execution environment protecting your host system
- Install-on-Demand: Dynamically import any npm/PyPI packages
- Reduce Hallucinations: Let AI verify logic by executing code
- Quick Validation: Test if packages meet your needs without local installation
deno add jsr:@mcpc/code-runner-mcpPackage: @mcpc/code-runner-mcp
npm install @mcpc-tech/code-runner-mcpPackage: @mcpc-tech/code-runner-mcp
{
"mcpServers": {
"code-runner": {
"command": "deno",
"args": ["run", "--allow-all", "jsr:@mcpc/code-runner-mcp/bin"],
"env": {
"DENO_PERMISSION_ARGS": "--allow-net",
"NODEFS_ROOT": "/tmp",
"NODEFS_MOUNT_POINT": "/tmp"
},
"transportType": "stdio"
}
}
}{
"mcpServers": {
"code-runner": {
"command": "npx",
"args": ["-y", "@mcpc-tech/code-runner-mcp"],
"env": {
"NODE_OPTIONS": "--experimental-wasm-stack-switching",
"DENO_PERMISSION_ARGS": "--allow-net",
"NODEFS_ROOT": "/tmp",
"NODEFS_MOUNT_POINT": "/tmp"
},
"transportType": "stdio"
}
}
}Note:
NODE_OPTIONS=--experimental-wasm-stack-switchingis required for Pyodide (WebAssembly Python runtime) to work properly in Node.js.
// Import npm packages directly to test functionality
import { z } from "npm:zod";
import { serve } from "jsr:@std/http";
const schema = z.object({ name: z.string() });
console.log(schema.parse({ name: "test" }));# Dynamically install and use Python packages
import requests
response = requests.get("https://api.github.com")
print(f"Status code: {response.status_code}")When import names differ from PyPI package names, use the packages parameter:
# sklearn -> scikit-learn, PIL -> Pillow
from sklearn.datasets import load_iris
data = load_iris()
print(data.feature_names)Use packages: {"sklearn": "scikit-learn"}
# Access host file system (via NODEFS_ROOT and NODEFS_MOUNT_POINT)
import os
files = os.listdir('/tmp') # List files at the mount point
print(f"Found {len(files)} files")| Variable | Description | Default |
|---|---|---|
ALLOWED_TOOLS |
Selectively enable tools: all, python, javascript, js, or comma-separated (e.g., python,javascript) |
all |
DENO_PERMISSION_ARGS |
Additional Deno permissions for JS/TS execution (e.g., --allow-net, --allow-all) |
- |
NODEFS_ROOT |
Host file system root directory path for Python access | - |
NODEFS_MOUNT_POINT |
Mount point path in Python environment (defaults to NODEFS_ROOT) |
- |
PYODIDE_PACKAGE_BASE_URL |
Custom package download source for Pyodide (e.g., private mirror CDN) | - |
PYODIDE_PACKAGE_CACHE_DIR |
Custom package cache directory for Pyodide packages (Pyodide v0.28.1+) | - |
// Enable only Python
{ "ALLOWED_TOOLS": "python" }
// Enable only JavaScript
{ "ALLOWED_TOOLS": "javascript" }
// Enable both (default)
{ "ALLOWED_TOOLS": "python,javascript" }- Deno Sandbox: Strict permission control with explicit authorization
- Pyodide WASM: WebAssembly isolated environment
- File System Isolation: Controlled host file access
- JavaScript/TypeScript: Powered by Deno runtime
- Python: Powered by Pyodide WebAssembly technology
- Package Management: Dynamic installation from npm, JSR, and PyPI
Issues & Feedback:
GitHub Issues
Repository:
GitHub Repository
