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.
相关服务器
Alpha Vantage MCP Server
赞助Access financial market data: realtime & historical stock, ETF, options, forex, crypto, commodities, fundamentals, technical indicators, & more
MCP-Allure
Reads Allure test reports and returns them in LLM-friendly formats for better test analysis and insights.
Contrast MCP Server
Remediate vulnerabilities found by Contrast products using LLM and Coding Agent capabilities.
Node9-Proxy
The Execution Security Layer for the Agentic Era. Providing deterministic "Sudo" governance and audit logs for autonomous AI agents.
Gateway MCP Server
A gateway server that intelligently routes MCP requests to multiple backend servers based on external configuration.
Kirby MCP
CLI-first MCP server for composer-based Kirby CMS projects—inspect blueprints/templates/plugins, interact with a real Kirby runtime, and use a bundled Kirby knowledge base.
MantisBT MCP Server
Integrates MantisBT bug tracker into Claude and other MCP clients via the REST API. Read and manage issues, notes, file attachments, tags, relationships, and monitors — with optional offline semantic search across all issues.
AgentMesh
AI agent governance middleware: policy enforcement, cryptographic audit trails, Trust Score, DLP, EU AI Act compliance
Dify Workflow
A tool server for integrating Dify Workflows via the Model Context Protocol (MCP).
UUID MCP Provider
Generates timestamp-based unique identifiers using UUID v7.
QA Sphere
Integration with QA Sphere test management system, enabling LLMs to discover, summarize, and interact with test cases directly from AI-powered IDEs