MCP Sage

mcp-sage

MCP(模型上下文协议)服务器提供将提示发送到另一个 LLM(目前仅限 Gemini 2.5 Pro)的工具,该提示会将所有引用的文件路径(文件夹则以递归方式)嵌入到提示中。这对于从能够准确处理大量上下文的模型中获取第二意见或详细的代码审查非常有用。

基本原理

我大量使用 Claude Code。它是一款非常棒的产品,非常适合我的工作流程。不过,拥有大量上下文的较新模型似乎在处理需要更多上下文的更复杂代码库时非常有用。这让我可以继续使用 Claude Code 作为开发工具,同时利用 Gemini 2.5 Pro 的庞大上下文来增强 Claude Code 有限的上下文。

灵感

该项目从另外两个开源项目中汲取灵感:

概述

该项目实现了一个 MCP 服务器,它公开了两个工具:

second-opinion

  1. 接受提示和文件/目录路径列表作为输入
  2. 将文件打包成结构化的 XML 格式
  3. 检查合并内容是否在 Gemini 的令牌限制(1M 个令牌)范围内
  4. 将组合提示 + 上下文发送到 Gemini 2.5 Pro
  5. 返回模型的响应

expert-review

  1. 接受代码更改指令和文件/目录路径列表作为输入
  2. 将文件打包成结构化的 XML 格式
  3. 检查合并内容是否在 Gemini 的令牌限制(1M 个令牌)范围内
  4. 创建一个专门的提示,指示模型使用 SEARCH/REPLACE 块来格式化响应
  5. 将上下文和指令组合发送至 Gemini 2.5 Pro
  6. 返回格式化为 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工具接受以下参数:

  • 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工具接受以下参数:

  • 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 :测试第二意见工具
  • test/test-expert.js :测试专家评审工具

执照

国际学习中心

-
security - not tested
-
license - not tested
-
quality - not tested

MCP 服务器通过在提示中嵌入文件内容,提供从 Gemini 2.5 Pro 获取第二意见或详细代码审查的工具,使其能够处理具有广泛上下文的大型代码库。

  1. Rationale
    1. Inspiration
      1. Overview
        1. second-opinion
        2. expert-review
      2. Prerequisites
        1. Installation
          1. Environment Variables
            1. Usage
              1. Prompting
                1. Debugging and Monitoring
                2. Using the Tools
              2. Running the Tests
                1. Project Structure
                  1. License
                    ID: k6how3qzn4