JavaScript Executor MCP Server
Execute JavaScript code in a modern runtime environment with support for various built-in modules.
JavaScript Executor MCP Server
This MCP server provides JavaScript execution capabilities with a modern runtime.
Features
The executeJS tool provides:
- Console API:
console.log(),console.error(),console.warn()(built-in) - HTTP Server:
serve()for server creation (viarequire('http/server')) - Fetch API: Modern
fetch()with Request, Response, Headers, FormData (global) - Timers:
setTimeout(),setInterval(),clearTimeout(),clearInterval()(global) - Buffer: Buffer, Blob, File APIs for binary data handling (global)
- Crypto: Cryptographic functions - hashing, encryption, HMAC (via
require('crypto')) - Cache: In-memory caching with TTL support (via
require('cache')) - Additional modules: encoding (global), url (global)
Getting Started
Installation
Using Go Install
go install github.com/mark3labs/codebench-mcp@latest
Usage
As a standalone server
codebench-mcp
With module configuration
# Enable only specific modules
codebench-mcp --enabled-modules http,fetch
# Disable specific modules (enable all others)
codebench-mcp --disabled-modules timers
# Set custom execution timeout (in seconds)
codebench-mcp --execution-timeout 600 # 10 minutes
# Show help
codebench-mcp --help
Available modules:
http- HTTP server creation and client requests (require('http/server'))fetch- Modern fetch API with Request, Response, Headers, FormData (available globally)timers- setTimeout, setInterval, clearTimeout, clearInterval (available globally)buffer- Buffer, Blob, File APIs for binary data handling (available globally)cache- In-memory caching with TTL support (require('cache'))crypto- Cryptographic functions (hashing, encryption, HMAC) (require('crypto'))encoding- TextEncoder, TextDecoder for text encoding/decoding (available globally)url- URL and URLSearchParams APIs (available globally)
All modules are enabled by default. You can selectively enable or disable modules using CLI flags.
Note: The executeJS tool description dynamically updates to show only the enabled modules and includes detailed information about what each module provides.
As a library in your Go project
package main
import (
"log"
"github.com/mark3labs/codebench-mcp/server"
"github.com/mark3labs/mcp-go/server"
)
func main() {
// Create a new JavaScript executor server
jss, err := server.NewJSServer()
if err != nil {
log.Fatalf("Failed to create server: %v", err)
}
// Serve requests
if err := server.ServeStdio(jss); err != nil {
log.Fatalf("Server error: %v", err)
}
}
Using InProcessTransport
package main
import (
"context"
"log"
"github.com/mark3labs/codebench-mcp/server"
"github.com/mark3labs/mcp-go/client"
"github.com/mark3labs/mcp-go/mcp"
)
func main() {
// Create the JS server with custom module configuration
config := server.ModuleConfig{
EnabledModules: []string{"fetch", "crypto", "buffer"},
}
jsServer, err := server.NewJSServerWithConfig(config)
if err != nil {
log.Fatalf("Failed to create server: %v", err)
}
// Create an in-process client
mcpClient, err := client.NewInProcessClient(jsServer)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
defer mcpClient.Close()
// Start the client
if err := mcpClient.Start(context.Background()); err != nil {
log.Fatalf("Failed to start client: %v", err)
}
// Initialize the client
initRequest := mcp.InitializeRequest{}
initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
initRequest.Params.ClientInfo = mcp.Implementation{
Name: "my-app",
Version: "1.0.0",
}
_, err = mcpClient.Initialize(context.Background(), initRequest)
if err != nil {
log.Fatalf("Failed to initialize: %v", err)
}
// Execute JavaScript code
callRequest := mcp.CallToolRequest{}
callRequest.Params.Name = "executeJS"
callRequest.Params.Arguments = map[string]any{
"code": `
console.log("Hello from JavaScript!");
const result = Math.sqrt(16);
console.log("Square root of 16 is:", result);
result;
`,
}
result, err := mcpClient.CallTool(context.Background(), callRequest)
if err != nil {
log.Fatalf("Failed to call tool: %v", err)
}
if result.IsError {
log.Printf("JavaScript execution error: %v", result.Content)
} else {
log.Printf("JavaScript execution result: %v", result.Content)
}
}
Usage with Model Context Protocol
To integrate this server with apps that support MCP:
{
"mcpServers": {
"javascript": {
"command": "codebench-mcp"
}
}
}
Docker
Running with Docker
You can run the JavaScript Executor MCP server using Docker:
docker run -i --rm ghcr.io/mark3labs/codebench-mcp:latest
Docker Configuration with MCP
To integrate the Docker image with apps that support MCP:
{
"mcpServers": {
"javascript": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mark3labs/codebench-mcp:latest"
]
}
}
}
Tool Reference
executeJS
Execute JavaScript code with a modern runtime environment.
Parameters:
code(required): JavaScript code to execute
Configuration:
- Default execution timeout: 5 minutes
- Configurable via
--execution-timeout <seconds>CLI flag
Example:
console.log("Hello, World!");
// Basic JavaScript execution
const result = 2 + 3;
console.log('Result:', result);
// Fetch API (available globally when enabled)
const response = await fetch('https://api.example.com/data');
const data = await response.json();
// HTTP server (require import)
const serve = require('http/server');
serve(8000, async (req) => {
return new Response('Hello World');
});
// Cache operations (require import)
const cache = require('cache');
cache.set('key', 'value');
console.log(cache.get('key'));
// Crypto operations (require import)
const crypto = require('crypto');
const hash = crypto.md5('hello').hex();
console.log('MD5 hash:', hash);
// Timers (available globally)
setTimeout(() => console.log('Hello after 1 second'), 1000);
// Buffer operations (available globally)
const buffer = Buffer.from('hello', 'utf8');
console.log(buffer.toString('base64'));
// URL operations (available globally)
const url = new URL('https://example.com/path?param=value');
console.log('Host:', url.host);
console.log('Pathname:', url.pathname);
Limitations
- No fs or process modules - File system and process APIs are not available in the runtime
- Module access varies - Some modules are global (fetch, http), others may need require()
- Each execution creates a fresh VM - For isolation, each execution starts with a clean state
- Module filtering - Configuration exists but actual runtime filtering not fully implemented
- Execution timeout - JavaScript execution is limited by configurable timeout (default: 5 minutes)
Building
go build -o codebench-mcp .
License
See the LICENSE file for details.
関連サーバー
Scout Monitoring MCP
スポンサーPut performance and error data directly in the hands of your AI assistant.
Alpha Vantage MCP Server
スポンサーAccess financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
POX MCP Server
An MCP server for the POX SDN controller, enabling network control, management, and analysis using Python and OpenFlow.
Remote MCP Server (Authless)
An example of a remote MCP server deployable on Cloudflare Workers, without authentication.
PHP MCP Server for Laravel
A Laravel wrapper for the php-mcp/server library to expose Laravel applications as MCP servers.
mcp-server-tibet
TIBET provenance tracking for AI decisions. Cryptographic audit trails with ERIN/ERAAN/EROMHEEN/ERACHTER intent logging for compliance and transparency.
Cedardiff
Edit files using CEDARScript, a SQL-like language for code manipulation.
GoMCP
A Go library for building clients and servers using the Model Context Protocol (MCP).
Sentinel Signal MCP
Agent tools via MCP for workflow scoring, limits/usage, and feedback (trial key supported)
MCP Servers for CS Experimentation Workshop
A collection of MCP servers designed for rapid prototyping in CS experimentation workshops.
Symphony of One
An MCP server for orchestrating multiple Claude instances to collaborate in a shared workspace with real-time communication.
WinAiDbg MCP
AI-powered Windows crash dump analysis platform that provides structured access to Microsoft debugging tools through the Model Context Protocol, making complex crash investigation accessible to AI systems