JavaScript Executor MCP Server
Ejecuta código JavaScript en un entorno de ejecución moderno con soporte para varios módulos integrados.
Documentación
Servidor MCP de Ejecución de JavaScript
Este servidor MCP proporciona capacidades de ejecución de JavaScript con un runtime moderno.
Características
La herramienta executeJS proporciona:
- API de Consola:
console.log(),console.error(),console.warn()(incorporado) - Servidor HTTP:
serve()para la creación de servidores (a través derequire('http/server')) - API Fetch:
fetch()moderno con Request, Response, Headers, FormData (global) - Temporizadores:
setTimeout(),setInterval(),clearTimeout(),clearInterval()(global) - Buffer: APIs de Buffer, Blob, File para el manejo de datos binarios (global)
- Criptografía: Funciones criptográficas - hash, cifrado, HMAC (a través de
require('crypto')) - Caché: Caché en memoria con soporte TTL (a través de
require('cache')) - Módulos adicionales: codificación (global), url (global)
Comenzando
Instalación
Usando Go Install
go install github.com/mark3labs/codebench-mcp@latest
Uso
Como servidor independiente
codebench-mcp
Con configuración de módulos
# 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
Módulos disponibles:
http- Creación de servidores HTTP y solicitudes de cliente (require('http/server'))fetch- API fetch moderna con Request, Response, Headers, FormData (disponible globalmente)timers- setTimeout, setInterval, clearTimeout, clearInterval (disponible globalmente)buffer- APIs de Buffer, Blob, File para el manejo de datos binarios (disponible globalmente)cache- Caché en memoria con soporte TTL (require('cache'))crypto- Funciones criptográficas (hash, cifrado, HMAC) (require('crypto'))encoding- TextEncoder, TextDecoder para codificación/decodificación de texto (disponible globalmente)url- APIs de URL y URLSearchParams (disponible globalmente)
Todos los módulos están habilitados por defecto. Puedes habilitar o deshabilitar módulos selectivamente usando banderas de CLI.
Nota: La descripción de la herramienta executeJS se actualiza dinámicamente para mostrar solo los módulos habilitados e incluye información detallada sobre lo que proporciona cada módulo.
Como biblioteca en tu proyecto Go
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)
}
}
Usando 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)
}
}
Uso con Model Context Protocol
Para integrar este servidor con aplicaciones que soporten MCP:
{
"mcpServers": {
"javascript": {
"command": "codebench-mcp"
}
}
}
Docker
Ejecutando con Docker
Puedes ejecutar el servidor MCP de Ejecución de JavaScript usando Docker:
docker run -i --rm ghcr.io/mark3labs/codebench-mcp:latest
Configuración de Docker con MCP
Para integrar la imagen de Docker con aplicaciones que soporten MCP:
{
"mcpServers": {
"javascript": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mark3labs/codebench-mcp:latest"
]
}
}
}
Referencia de Herramientas
executeJS
Ejecuta código JavaScript con un entorno de runtime moderno.
Parámetros:
code(requerido): Código JavaScript a ejecutar
Configuración:
- Tiempo de espera de ejecución predeterminado: 5 minutos
- Configurable a través de la bandera de CLI
--execution-timeout <seconds>
Ejemplo:
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);
Limitaciones
- Sin módulos fs o process - Las APIs de sistema de archivos y procesos no están disponibles en el runtime
- El acceso a módulos varía - Algunos módulos son globales (fetch, http), otros pueden requerir require()
- Cada ejecución crea una VM nueva - Para aislamiento, cada ejecución comienza con un estado limpio
- Filtrado de módulos - La configuración existe pero el filtrado real del runtime no está completamente implementado
- Tiempo de espera de ejecución - La ejecución de JavaScript está limitada por un tiempo de espera configurable (predeterminado: 5 minutos)
Compilación
go build -o codebench-mcp .
Licencia
Consulta el archivo LICENSE para más detalles.