JavaScript执行器MCP服务器
此MCP服务器提供具有现代运行时的JavaScript执行功能。
特性
这 executeJS 该工具提供:
- 控制台API:
console.log(),console.error(),console.warn()(内置) - HTTP服务器:
serve()用于服务器创建(通过require('http/server')) - 获取API:现代
fetch()具有请求、响应、标头、表单数据(全局) - 计时器:
setTimeout(),setInterval(),clearTimeout(),clearInterval()(全球) - 缓冲:用于二进制数据处理的缓冲区、Blob、文件API(全局)
- 加密:加密函数-哈希、加密、HMAC(通过
require('crypto')) - 缓存:支持TTL的内存缓存(通过
require('cache')) - 附加模块:编码(全局),url(全局)
入门指南
安装
使用Go安装
go install github.com/mark3labs/codebench-mcp@latest用法
作为独立服务器
codebench-mcp具有模块配置
# 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可用模块:
http-HTTP服务器创建和客户端请求(require('HTTP/server'))fetch-现代获取API,包括请求、响应、头和FormData(全球可用)timers-setTimeout、setInterval、clearTimeout、clearInterval(全局可用)buffer-用于二进制数据处理的缓冲区、Blob、文件API(全局可用)cache-支持TTL的内存缓存(必需(“缓存”))crypto-加密函数(散列、加密、HMAC)(必需(‘crypto’))encoding-用于文本编码/解码的TextEncoder、TextDecoder(全球可用)url-URL和URLSearchParams API(全球可用)
默认情况下,所有模块均已启用。您可以使用CLI标志选择性地启用或禁用模块。
注: 这 executeJS 工具描述会动态更新,仅显示已启用的模块,并包括每个模块提供的详细信息。
作为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)
}
}使用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)
}
}使用模型上下文协议
要将此服务器与支持MCP的应用程序集成,请执行以下操作:
{
"mcpServers": {
"javascript": {
"command": "codebench-mcp"
}
}
}码头工人
使用Docker运行
您可以使用Docker运行JavaScript Executor MCP服务器:
docker run -i --rm ghcr.io/mark3labs/codebench-mcp:latest使用MCP配置Docker
要将Docker镜像与支持MCP的应用程序集成,请执行以下操作:
{
"mcpServers": {
"javascript": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mark3labs/codebench-mcp:latest"
]
}
}
}工具参考
executeJS
使用现代运行时环境执行JavaScript代码。
参数:
code(必填):要执行的JavaScript代码
配置:
- 默认执行超时:5分钟
- 可通过以下方式配置
--execution-timeoutCLI标志
例子:
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);局限性
- 没有fs或进程模块 -文件系统和进程API在运行时不可用
- 模块访问方式各不相同 -有些模块是全局的(fetch,http),其他模块可能需要require()
- 每次执行都会创建一个新的VM -为了隔离,每次执行都以干净状态开始
- 模块过滤 -配置存在,但实际运行时过滤未完全实现
- 执行超时 -JavaScript执行受到可配置超时的限制(默认值:5分钟)
建筑
go build -o codebench-mcp .许可证
请参阅 许可证 文件以获取详细信息。
