返回 MCP 目录
public公开dns本地运行

codemode-mcp

一个基于代码模式的MCP服务器实现,让LLM通过编写TypeScript/JavaScript代码来调用MCP服务,利用LLM更擅长编写代码而非直接调用工具的特性,提供更灵活的工作流程

article

README

🚀 代码模式MCP服务器

本项目实现了MCP服务器“代码模式”工作流的本地版本。相较于繁琐的多工具调用,大语言模型(LLMs)可以编写TypeScript/JavaScript代码,通过调用简单的HTTP代理来访问你的MCP服务器。

⚠️ 重要提示

我已停止维护此仓库,新项目地址为:https://github.com/jx-codes/lootbox 。新项目对代码模式有更周全的设计。

🚀 快速开始

本项目的核心在于,大语言模型编写代码的能力远强于调用工具的能力。与其向大语言模型直接暴露众多工具(这会让它难以应对),本服务器仅为大语言模型提供一个工具:execute_code。大语言模型编写代码,通过HTTP请求来访问其他MCP服务器。

具体工作流程如下:

  1. 大语言模型获得一个工具execute_code - 用于执行TypeScript/JavaScript代码。
  2. 大语言模型编写代码:使用fetch()方法调用http://localhost:3001/mcp/*端点。
  3. HTTP代理转发请求:将请求透明地转发到实际的MCP服务器。
  4. 结果返回:通过代码执行结果反馈给大语言模型。

这种方式结合了复杂工具编排的优势,同时发挥了大语言模型编写代码的特长。

✨ 主要特性

  • 代码驱动:利用大语言模型编写代码的能力,替代复杂的工具调用。
  • 简单代理:提供单一的execute_code工具,简化与MCP服务器的交互。
  • 安全执行:代码在Deno沙箱中运行,仅具有网络访问权限。

📦 安装指南

前提条件

  • Bun(最新版本)
  • Deno(用于代码执行沙箱)
  • 兼容MCP的客户端(如Claude Desktop、Cursor、支持Copilot的VS Code等)

安装步骤

  1. 克隆仓库
git clone https://github.com/jx-codes/codemode-mcp.git
cd codemode-mcp
  1. 安装依赖
bun install
  1. 配置服务器(可选) 创建codemode-config.json文件,自定义服务器设置:
{
   "proxyPort": 3001,
   "configDirectories": [
      "~/.config/mcp/servers",
      "./mcp-servers",
      "./"
   ]
}
  1. 配置MCP服务器 在上述指定的任意目录下创建.mcp.json文件,配置MCP服务器:
{
   "mcpServers": {
      "fs": {
         "command": "npx",
         "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
         "env": {}
      }
   }
}

💻 使用示例

基础用法

以下是调用单个MCP服务器的示例:

// 列出可用的服务器
const servers = await fetch("http://localhost:3001/mcp/servers").then((r) =>
  r.json()
);
console.log("可用的服务器:", servers);

// 调用文件系统服务器上的工具
const result = await fetch("http://localhost:3001/mcp/call", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    server: "fs",
    tool: "read_file",
    args: { path: "/tmp/example.txt" },
  }),
}).then((r) => r.json());

console.log("文件内容:", result);

高级用法

以下示例展示了如何链式调用多个操作:

// 获取文件列表
const files = await fetch("http://localhost:3001/mcp/call", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    server: "fs",
    tool: "list_directory",
    args: { path: "/tmp" },
  }),
}).then((r) => r.json());

// 处理每个文件
for (const file of files.content[0].text.split("\n")) {
  if (file.endsWith(".txt")) {
    const content = await fetch("http://localhost:3001/mcp/call", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        server: "fs",
        tool: "read_file",
        args: { path: `/tmp/${file}` },
      }),
    }).then((r) => r.json());

    console.log(`${file}: ${content.content[0].text.length} 个字符`);
  }
}

📚 详细文档

工具说明

execute_code

执行具有访问MCP代理网络权限的TypeScript/JavaScript代码。

参数

  • code(字符串):要执行的代码。
  • typescript(布尔值):是否为TypeScript模式(默认:true)。

代理端点

  • GET /mcp/servers - 列出可用的MCP服务器。
  • GET /mcp/{server}/tools - 列出指定服务器的工具。
  • POST /mcp/call - 调用工具(请求体:{server, tool, args})。

check_deno_version

检查Deno的安装状态。

list_servers_with_tools

获取所有可用MCP服务器及其工具的详细信息。返回结构化的JSON数据,包含完整的工具模式和服务器状态信息,便于大语言模型处理。

JSON输出结构

{
  "summary": {
    "totalServers": 2,
    "successfulServers": 2,
    "totalTools": 4
  },
  "servers": [
    {
      "server": "filesystem",
      "status": "success",
      "toolCount": 3,
      "tools": [
        {
          "name": "read_file",
          "description": "读取文件内容",
          "inputSchema": {
            "type": "object",
            "properties": {
              "path": {
                "type": "string",
                "description": "要读取的文件路径"
              }
            },
            "required": ["path"]
          }
        }
      ]
    },
    {
      "server": "database",
      "status": "success",
      "toolCount": 1,
      "tools": [
        {
          "name": "query",
          "description": "执行SQL查询",
          "inputSchema": {
            "type": "object",
            "properties": {
              "query": {
                "type": "string",
                "description": "要执行的SQL查询"
              }
            },
            "required": ["query"]
          }
        }
      ]
    }
  ]
}

配置说明

创建codemode-config.json文件进行服务器配置:

{
  "proxyPort": 3001,
  "configDirectories": ["~/.config/mcp/servers", "./mcp-servers", "./"]
}

在指定目录下的.mcp.json文件中添加MCP服务器配置:

{
  "mcpServers": {
    "fs": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
      "env": {}
    }
  }
}

优势对比

传统MCP工作流

大语言模型 → 工具调用 → MCP服务器 → 结果 → 大语言模型 → 工具调用 → ...

  • 大语言模型难以处理工具语法。
  • 每次调用都要经过神经网络。
  • 操作链式调用困难。
  • 受限于合成工具示例的训练。

代码模式工作流

大语言模型 → 编写代码 → 代码调用代理 → 代理转发到MCP服务器 → 结果

  • 大语言模型擅长编写代码(训练数据包含数百万个真实示例)。
  • 代码可以自然地链式调用操作。
  • 结果通过代码逻辑返回,而非神经网络。
  • 支持自然的组合和数据处理。

🔧 技术细节

安全机制

  • 代码在Deno沙箱中运行,仅具有网络访问权限。
  • 无文件系统、环境或系统访问权限。
  • 执行超时时间为30秒。
  • 通过受控代理访问MCP服务器。
  • 临时文件自动清理。

故障排除

  • “Deno未安装”:安装Deno并重启。
  • “权限被拒绝”:代码尝试访问受限资源。
  • “模块未找到”:使用https:// URL进行导入。
  • “执行超时”:优化代码或拆分为更小的操作。

📄 许可证

文档中未提及许可证相关信息。

待办事项(可能)

  • 为MCP代理提供更简单的API层,例如mcp.tool('name', args);
    • 可以通过在运行用户代码之前将自定义TypeScript文件注入Deno作用域来实现。
  • 增加更多配置选项。
  • 以某种方式过滤工具。
  • 在实际工作流中更多地测试并查看结果。

参考说明

本项目的Deno代码改编自:https://github.com/Timtech4u/deno-mcp-server

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端