MCP代码智者
一个MCP服务器,通过在提示中嵌入文件内容,提供从Gemini 2.5 Pro获取第二意见或详细代码审查的工具,使其能够处理具有广泛上下文的大型代码库。
服务介绍
mcp-sage
一个MCP(Model Context Protocol)服务器,提供工具将提示发送给另一个LLM(目前仅支持Gemini 2.5 Pro),并在提示中嵌入所有引用的文件路径(对于文件夹递归嵌入)。这对于从能够准确处理大量上下文的模型中获取第二意见或详细的代码审查非常有用。
理由
我大量使用了Claude Code。它是一个很好的产品,非常适合我的工作流程。然而,对于更复杂的代码库,需要更多上下文时,具有大量上下文的新模型似乎非常有用。这使我能够继续将Claude Code作为开发工具,同时利用Gemini 2.5 Pro的大容量上下文来增强Claude Code有限的上下文能力。
灵感来源
该项目借鉴了另外两个开源项目:
- simonw/files-to-prompt 用于文件压缩
- asadm/vibemode 用于将整个仓库发送给Gemini以获得全面编辑建议的想法和提示
概述
该项目实现了一个MCP服务器,暴露了两个工具:
second-opinion
- 接收一个提示和一组文件/目录路径作为输入
- 将这些文件打包成结构化的XML格式
- 检查组合内容是否在Gemini的令牌限制内(1M个令牌)
- 将组合后的提示+上下文发送给Gemini 2.5 Pro
- 返回模型的响应
expert-review
- 接收一个代码更改指令和一组文件/目录路径作为输入
- 将这些文件打包成结构化的XML格式
- 检查组合内容是否在Gemini的令牌限制内(1M个令牌)
- 创建一个特定的提示,指示模型使用SEARCH/REPLACE块格式化响应
- 将组合后的上下文+指令发送给Gemini 2.5 Pro
- 返回易于实施的SEARCH/REPLACE块格式的编辑建议
前提条件
- Node.js(v18或更高版本)
- 一个Google Gemini API密钥
安装
# Clone the repository
git clone https://github.com/your-username/mcp-sage.git
cd mcp-sage
# Install dependencies
npm install
# Build the project
npm run build
环境变量
设置以下环境变量:
GEMINI_API_KEY: 您的Google Gemini API密钥
使用方法
在使用npm run build构建后,在您的MCP配置中添加以下内容:
GEMINI_API_KEY=XXX node /path/to/this/repo/dist/index.js
提示
要获取第二意见,只需请求第二意见即可。
要获取代码审查,请请求代码审查或专家审查。
这两种方式都受益于提供您希望包含在上下文中的文件路径,但如果省略,主机LLM可能会推断出应包含的内容。
调试与监控
服务器通过MCP日志功能提供了详细的监控信息。这些日志包括:
- 令牌使用统计(已用令牌与令牌限制)
- 请求中包含的文件和文档数量
- 请求处理时间指标
- 当超出令牌限制时的错误信息
日志通过MCP协议的notifications/message方法发送,确保它们不会干扰JSON-RPC通信。支持日志记录的MCP客户端将适当显示这些日志。
示例日志条目:
Token usage: 1,234 / 1,000,000 tokens (0.12%)
Files included: 3, Document count: 3
Sending request to Gemini with 1,234 tokens...
Received response from Gemini in 982ms
使用工具
second-opinion 工具
second-opinion 工具接受以下参数:
prompt(字符串,必填):发送给Gemini的提示paths(字符串数组,必填):作为上下文包含的文件路径列表
示例MCP工具调用(使用JSON-RPC 2.0):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "second-opinion",
"arguments": {
"prompt": "Explain how this code works",
"paths": ["path/to/file1.js", "path/to/file2.js"]
}
}
}
expert-review 工具
expert-review 工具接受以下参数:
instruction(字符串,必填):所需的特定更改或改进paths(字符串数组,必填):作为上下文包含的文件路径列表
示例MCP工具调用(使用JSON-RPC 2.0):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "expert-review",
"arguments": {
"instruction": "Add error handling to the function",
"paths": ["path/to/file1.js", "path/to/file2.js"]
}
}
}
响应中将包含SEARCH/REPLACE块,您可以使用这些块来实现建议的更改:
<<<<<<< SEARCH
function getData() {
return fetch('/api/data')
.then(res => res.json());
}
=======
function getData() {
return fetch('/api/data')
.then(res => {
if (!res.ok) {
throw new Error(`HTTP error! Status: ${res.status}`);
}
return res.json();
})
.catch(error => {
console.error('Error fetching data:', error);
throw error;
});
}
>>>>>>> REPLACE
运行测试
要测试工具:
# Test the second-opinion tool
GEMINI_API_KEY=your_api_key_here node test/run-test.js
# Test the expert-review tool
GEMINI_API_KEY=your_api_key_here node test/test-expert.js
项目结构
src/index.ts:带有工具定义的主要MCP服务器实现src/pack.ts:用于将文件打包成结构化XML格式的工具src/tokenCounter.ts:用于计算提示中令牌数量的实用程序src/gemini.ts:Gemini API客户端实现test/run-test.js:针对second-opinion工具的测试test/test-expert.js:针对expert-review工具的测试
许可证
ISC