返回市场
代码工作坊-mcp

代码工作坊-mcp

作者:mark3labs2 星标更新:2025-11-21

项目介绍

JavaScript 执行器 MCP 服务器

此 MCP 服务器提供现代运行时环境下的 JavaScript 执行能力。

特性

executeJS 工具提供:

  • 控制台 APIconsole.log()console.error()console.warn()(内置)
  • HTTP 服务器serve() 用于创建服务器(通过 require('http/server')
  • Fetch API:现代 fetch(),包括 Request、Response、Headers、FormData(全局可用)
  • 计时器setTimeout()setInterval()clearTimeout()clearInterval()(全局可用)
  • 缓冲区:处理二进制数据的 Buffer、Blob、File API(全局可用)
  • 加密:加密函数 - 哈希、加密、HMAC(通过 require('crypto')
  • 缓存:支持 TTL 的内存缓存(通过 require('cache')
  • 附加模块:编码(全局)、URL(全局)

快速开始

安装

使用 Go 安装

go install github.com/mark3labs/codebench-mcp@latest

使用方法

作为独立服务器

codebench-mcp

配置模块

# 只启用特定模块
codebench-mcp --enabled-modules http,fetch

# 禁用特定模块(启用其他所有模块)
codebench-mcp --disabled-modules timers

# 设置自定义执行超时时间(秒)
codebench-mcp --execution-timeout 600  # 10 分钟

# 显示帮助
codebench-mcp --help

可用模块:

  • http - 创建 HTTP 服务器和客户端请求(需 require('http/server')
  • fetch - 现代 fetch API,包括 Request、Response、Headers、FormData(全局可用)
  • timers - setTimeout、setInterval、clearTimeout、clearInterval(全局可用)
  • buffer - 处理二进制数据的 Buffer、Blob、File API(全局可用)
  • cache - 支持 TTL 的内存缓存(需 require('cache')
  • crypto - 加密函数(哈希、加密、HMAC)(需 require('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() {
	// 创建一个新的 JavaScript 执行器服务器
	jss, err := server.NewJSServer()
	if err != nil {
		log.Fatalf("无法创建服务器:%v", err)
	}

	// 处理请求
	if err := server.ServeStdio(jss); err != nil {
		log.Fatalf("服务器错误:%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() {
	// 使用自定义模块配置创建 JS 服务器
	config := server.ModuleConfig{
		EnabledModules: []string{"fetch", "crypto", "buffer"},
	}
	jsServer, err := server.NewJSServerWithConfig(config)
	if err != nil {
		log.Fatalf("无法创建服务器:%v", err)
	}

	// 创建一个进程内客户端
	mcpClient, err := client.NewInProcessClient(jsServer)
	if err != nil {
		log.Fatalf("无法创建客户端:%v", err)
	}
	defer mcpClient.Close()

	// 启动客户端
	if err := mcpClient.Start(context.Background()); err != nil {
		log.Fatalf("无法启动客户端:%v", err)
	}

	// 初始化客户端
	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("初始化失败:%v", err)
	}

	// 执行 JavaScript 代码
	callRequest := mcp.CallToolRequest{}
	callRequest.Params.Name = "executeJS"
	callRequest.Params.Arguments = map[string]any{
		"code": `
			console.log("来自 JavaScript 的问候!");
			const result = Math.sqrt(16);
			console.log("16 的平方根是:", result);
			result;
		`,
	}

	result, err := mcpClient.CallTool(context.Background(), callRequest)
	if err != nil {
		log.Fatalf("调用工具失败:%v", err)
	}

	if result.IsError {
		log.Printf("JavaScript 执行错误:%v", result.Content)
	} else {
		log.Printf("JavaScript 执行结果:%v", result.Content)
	}
}

使用模型上下文协议

要将此服务器与支持 MCP 的应用程序集成:

{
  "mcpServers": {
    "javascript": {
      "command": "codebench-mcp"
    }
  }
}

Docker

使用 Docker 运行

您可以使用 Docker 运行 JavaScript 执行器 MCP 服务器:

docker run -i --rm ghcr.io/mark3labs/codebench-mcp:latest

Docker 配置与 MCP

要将 Docker 镜像与支持 MCP 的应用程序集成:

{
  "mcpServers": {
    "javascript": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/mark3labs/codebench-mcp:latest"
      ]
    }
  }
}

工具参考

executeJS

在现代运行时环境中执行 JavaScript 代码。

参数:

  • code(必需):要执行的 JavaScript 代码

配置:

  • 默认执行超时时间:5 分钟
  • 可通过 --execution-timeout <秒数> CLI 标志进行配置

示例:

console.log("你好,世界!");

// 基本的 JavaScript 执行
const result = 2 + 3;
console.log('结果:', result);

// Fetch API(启用时全局可用)
const response = await fetch('https://api.example.com/data');
const data = await response.json();

// HTTP 服务器(需导入)
const serve = require('http/server');
serve(8000, async (req) => {
  return new Response('你好世界');
});

// 缓存操作(需导入)
const cache = require('cache');
cache.set('key', 'value');
console.log(cache.get('key'));

// 加密操作(需导入)
const crypto = require('crypto');
const hash = crypto.md5('hello').hex();
console.log('MD5 哈希:', hash);

// 计时器(全局可用)
setTimeout(() => console.log('一秒后问候'), 1000);

// 缓冲区操作(全局可用)
const buffer = Buffer.from('hello', 'utf8');
console.log(buffer.toString('base64'));

// URL 操作(全局可用)
const url = new URL('https://example.com/path?param=value');
console.log('主机:', url.host);
console.log('路径名:', url.pathname);

限制

  • 无 fs 或 process 模块 - 文件系统和进程 API 在运行时不可用
  • 模块访问因模块而异 - 某些模块是全局的(fetch、http),其他可能需要 require()
  • 每次执行都会创建一个新的 VM - 为了隔离,每次执行都会从干净状态开始
  • 模块过滤 - 存在配置但实际运行时过滤尚未完全实现
  • 执行超时 - JavaScript 执行受可配置超时限制(默认:5 分钟)

构建

go build -o codebench-mcp .

许可证

详情见 LICENSE 文件。