一个模型上下文协议 (MCP) 代理服务器,将工具调用转换为 TypeScript 代码生成。LLM 可以编写 TypeScript 代码来自然地调用多个工具,从而减少令牌开销并利用 LLM 的强大代码生成能力。
LLM 进行多次顺序工具调用,消耗令牌并且难以处理复杂的工作流:
LLM 编写 TypeScript 代码来自然地调用多个工具:
mcp.json 配置文件// 代替多次工具调用,编写如下代码:
const files = await filesystem.list_directory({ path: "/tmp" });
const results = await Promise.all(
files.map(file => filesystem.read_file({ path: file.path }))
);
return results.filter(content => content.includes("important"));
mcpcodeserver 是一个独特的 MCP 服务器,它:
list_servers - 列出连接到此 MCP 服务器的所有可用子服务器get_tool_definitions - 返回发现工具的 TypeScript 类型定义(可选按服务器过滤)generate_and_execute_code - 在沙箱中生成并执行调用这些工具的 TypeScript 代码这种架构允许 LLM 通过编写代码而不是进行顺序工具调用来编排复杂的多工具工作流,这通常对现代语言模型来说更高效且自然。
这种方法受到最近研究的启发,表明当生成可执行代码时,LLM 的表现优于直接进行工具调用:
这项研究的关键见解是,LLM 对真实世界的代码进行了广泛的训练,但对合成工具调用格式的接触有限,因此代码生成对于复杂的代理工作流来说是一种更自然和有效的方法。
mcpcodeserver 自动监控子 MCP 服务器中的工具变化,并在添加、删除或修改工具时通知父客户端:
notifications/tools/list_changed这确保了父 LLM 始终拥有最新的工具定义,而无需手动干预。
为了减少上下文窗口的使用并提高专注度,mcpcodeserver 支持按特定服务器过滤工具定义:
list_servers 查看所有已连接的子服务器get_tool_definitions 并带 server_names 参数获取特定服务器的工具pizzashop_create_pizza,filesystem_read_file)示例用法:
// 列出可用服务器
const servers = await list_servers({});
// 返回:["pizzashop", "filesystem", "memory"]
// 获取所有工具定义
const allTools = await get_tool_definitions({});
// 获取仅 pizzashop 工具
const pizzashopTools = await get_tool_definitions({
server_names: ["pizzashop"]
});
mcpcodeserver 支持在父服务器和子服务器都支持的情况下传递高级 MCP 协议功能:
这些功能会自动向父客户端宣传,并在底层子 MCP 服务器支持时无缝工作。
立即使用 npx(无需安装):
# 从 GitHub
npx github:zbowling/mcpcodeserver --help
# 或者发布到 npm
npx mcpcodeserver --help
要通过 Smithery 自动安装 mcpcodeserver:
npx -y @smithery/cli@latest install mcpcodeserver --client <client-name> --key <smithery-key>
前往:设置 -> Cursor 设置 -> MCP -> 添加新的全局 MCP 服务器
推荐的方法是在您的 Cursor ~/.cursor/mcp.json 文件中粘贴以下配置。您也可以通过在项目文件夹中创建 .cursor/mcp.json 来在特定项目中安装。
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
{
"mcpServers": {
"mcpcodeserver": {
"url": "http://localhost:3000/mcp"
}
}
}
运行此命令。更多信息请参阅 Claude Code MCP 文档。
claude mcp add mcpcodeserver -- npx -y mcpcodeserver --config /path/to/your/mcp.json
claude mcp add --transport http mcpcodeserver http://localhost:3000/mcp
添加到您的 VSCode MCP 设置:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
对于 Continue,Cline,和 RooCode,添加到您的配置:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
在您的终端中运行此命令。更多信息请参阅 Amp MCP 文档。
amp mcp add mcpcodeserver -- npx -y mcpcodeserver --config /path/to/your/mcp.json
对于 Aider,Codium,Zed,Nova,和 Sublime Text,添加到您的配置:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
添加到您的 Neovim MCP 配置:
{
mcpServers = {
mcpcodeserver = {
command = "npx",
args = {"-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"}
}
}
}
添加到您的 Emacs MCP 配置:
(setq mcp-servers
'((mcpcodeserver
:command "npx"
:args ("-y" "mcpcodeserver" "--config" "/path/to/your/mcp.json"))))
对于 IntelliJ IDEA,WebStorm,PyCharm,和 Android Studio,添加到您的 MCP 设置:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
对于 Codeium,Tabnine,GitHub Copilot,和 Amazon CodeWhisperer,添加到您的 MCP 设置:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
对于 Replit,CodeSandbox,StackBlitz,GitPod,GitHub Codespaces,GitLab Web IDE,和 Bitbucket Cloud,添加到您的 MCP 设置:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
对于 Xcode,Fleet,Sourcegraph,和 JetBrains Gateway,添加到您的 MCP 配置:
{
"mcpServers": {
"mcpcodeserver": {
"command": "npx",
"args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
}
}
}
对于远程开发环境,您可以使用 HTTP 传输:
{
"mcpServers": {
"mcpcodeserver": {
"url": "http://your-server:3000/mcp"
}
}
}
创建一个 mcp.json 配置文件来定义您的子 MCP 服务器:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
"env": { "DEBUG": "false" }
},
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"brave-search": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server