README
🚀 代码模式MCP服务器
本项目实现了MCP服务器“代码模式”工作流的本地版本。相较于繁琐的多工具调用,大语言模型(LLMs)可以编写TypeScript/JavaScript代码,通过调用简单的HTTP代理来访问你的MCP服务器。
⚠️ 重要提示
我已停止维护此仓库,新项目地址为:https://github.com/jx-codes/lootbox 。新项目对代码模式有更周全的设计。
🚀 快速开始
本项目的核心在于,大语言模型编写代码的能力远强于调用工具的能力。与其向大语言模型直接暴露众多工具(这会让它难以应对),本服务器仅为大语言模型提供一个工具:execute_code。大语言模型编写代码,通过HTTP请求来访问其他MCP服务器。
具体工作流程如下:
- 大语言模型获得一个工具:
execute_code- 用于执行TypeScript/JavaScript代码。 - 大语言模型编写代码:使用
fetch()方法调用http://localhost:3001/mcp/*端点。 - HTTP代理转发请求:将请求透明地转发到实际的MCP服务器。
- 结果返回:通过代码执行结果反馈给大语言模型。
这种方式结合了复杂工具编排的优势,同时发挥了大语言模型编写代码的特长。
✨ 主要特性
- 代码驱动:利用大语言模型编写代码的能力,替代复杂的工具调用。
- 简单代理:提供单一的
execute_code工具,简化与MCP服务器的交互。 - 安全执行:代码在Deno沙箱中运行,仅具有网络访问权限。
📦 安装指南
前提条件
安装步骤
- 克隆仓库
git clone https://github.com/jx-codes/codemode-mcp.git
cd codemode-mcp
- 安装依赖
bun install
- 配置服务器(可选)
创建
codemode-config.json文件,自定义服务器设置:
{
"proxyPort": 3001,
"configDirectories": [
"~/.config/mcp/servers",
"./mcp-servers",
"./"
]
}
- 配置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
微信扫一扫