第二意见🔍
一个MCP(模型上下文协议)服务器,协助Claude Code审查提交和代码库。该工具利用外部LLM(OpenAI、Google Gemini、Ollama、Mistral)提供智能代码审查功能、git差异分析、提交质量评估和未提交工作分析。
特性
- Git差异分析:使用LLM分析git diff输出以了解代码更改
- 代码审查:在人工智能的帮助下审查代码的质量、安全性和最佳实践
- 提交分析:分析git提交的质量和对最佳实践的遵守情况
- 未承诺工作分析:分析所有未提交的更改或只是阶段性更改
- 存储库信息:获取有关git存储库的信息
- 多种LLM支持:与OpenAI、谷歌Gemini、Ollama(本地)和Mistral AI合作
- 🚀 智能优化:动态令牌分配和特定任务的温度调整
- ⚡ 性能调整:特定于提供商的优化和内存感知分块
- 安全:输入验证、安全路径处理和API密钥保护
- 内存安全:可配置的内存限制和对大差异的流媒体支持
安装
先决条件
- 达到1.20或更高
- Git
- Claude代码桌面应用程序
从源代码构建
- 克隆存储库:
git clone https://github.com/dshills/second-opinion.git
cd second-opinion- 安装依赖项:
go mod tidy- 构建服务器:
go build -o bin/second-opinion配置
Second Opinion支持两种配置方法,优先级顺序如下:
- JSON配置文件 (首选):
~/.second-opinion.json在您的主目录中 - 环境变量:使用
.env文件或系统环境变量
JSON配置(推荐)
创建一个 .second-opinion.json 主目录中的文件:
{
"default_provider": "openai",
"temperature": 0.3,
"max_tokens": 4096,
"server_name": "Second Opinion 🔍",
"server_version": "1.0.0",
"openai": {
"api_key": "sk-your-openai-api-key",
"model": "gpt-5-mini"
},
"google": {
"api_key": "your-google-api-key",
"model": "gemini-2.0-flash-exp"
},
"ollama": {
"endpoint": "http://localhost:11434",
"model": "devstral:latest"
},
"mistral": {
"api_key": "your-mistral-api-key",
"model": "mistral-small-latest"
},
"memory": {
"max_diff_size_mb": 10,
"max_file_count": 1000,
"max_line_length": 1000,
"enable_streaming": true,
"chunk_size_mb": 1
}
}🚀 智能优化功能:
- 动态令牌分配:根据差异大小自动调整令牌(4096-32768)
- 任务特定温度:根据分析类型优化温度(0.1-0.3)
- 提供商优化:每个LLM提供程序的自定义参数
- 内存管理:针对大差异和高文件数的自动分块
环境变量配置
如果没有找到JSON配置,服务器将回退到环境变量:
- 复制示例环境文件:
cp .env.example .env- 编辑
.env并配置LLM提供程序:
# Set your default provider
DEFAULT_PROVIDER=openai # or google, ollama, mistral
# Configure each provider with its own API key and preferred model
OPENAI_API_KEY=sk-your-openai-api-key
OPENAI_MODEL=gpt-5-mini # or gpt-5, gpt-5-nano, gpt-5-chat-latest, gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-3.5-turbo
GOOGLE_API_KEY=your-google-api-key
GOOGLE_MODEL=gemini-2.0-flash-exp # or gemini-1.5-flash, gemini-1.5-pro
OLLAMA_ENDPOINT=http://localhost:11434
OLLAMA_MODEL=devstral:latest # or llama3.2, codellama, mistral, etc.
MISTRAL_API_KEY=your-mistral-api-key
MISTRAL_MODEL=mistral-small-latest # or mistral-large-latest, codestral-latest
# Global settings apply to all providers
LLM_TEMPERATURE=0.3 # Controls randomness (0.0-2.0, default: 0.3)
LLM_MAX_TOKENS=4096 # Maximum response length (default: 4096)使用Claude Code进行设置
1.找到克劳德代码配置
配置文件的位置取决于您的操作系统:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
2.编辑配置
打开配置文件并添加Second Opinion服务器:
选项1:使用JSON配置(推荐)
{
"mcpServers": {
"second-opinion": {
"command": "/path/to/second-opinion/bin/second-opinion"
}
}
}替换 /path/to/second-opinion 使用克隆存储库的实际路径。
选项2:使用环境变量
{
"mcpServers": {
"second-opinion": {
"command": "/path/to/second-opinion/bin/second-opinion",
"env": {
"DEFAULT_PROVIDER": "openai",
"OPENAI_API_KEY": "your-openai-api-key",
"OPENAI_MODEL": "gpt-5-mini",
"LLM_TEMPERATURE": "0.3",
"LLM_MAX_TOKENS": "4096"
}
}
}
}3.重新启动克劳德代码
保存配置后,重新启动Claude Code以使更改生效。
4.验证安装
在Claude Code中,您应该在MCP服务器列表中看到“第二意见”。您可以通过以下方式进行测试:
"What git repository information can you get from the current directory?"可用工具
1. analyze_git_diff 🚀 优化
使用配置的LLM自动优化来分析git diff输出,以了解代码更改。
参数:
diff_content(必填):要分析的Git差异输出summarize(可选):是否提供更改摘要provider(可选):要使用的LLM提供程序(覆盖默认值)model(可选):要使用的模型(覆盖提供程序默认值)
智能优化:
- 动态令牌分配:4096-32768个基于差异大小的令牌
- 温度调谐:0.25针对差异分析进行了优化
- 分块:大差异(>10MB或>1000个文件)的自动分块
- 提供商特定:每个LLM提供程序的自定义参数
克劳德代码中的示例:
"Analyze this git diff and tell me what changed: [paste diff here]"2. review_code 🚀 优化
使用配置的LLM和特定于任务的优化来审查代码的质量、安全性和最佳实践。
参数:
code(必填):需审查的代码language(可选):代码的编程语言focus(可选):特定焦点区域-security,performance,style,或allprovider(可选):要使用的LLM提供程序(覆盖默认值)model(可选):要使用的模型(覆盖提供程序默认值)
智能优化:
- 任务特定温度:0.1用于安全重点(高精度),0.2用于一般代码审查
- 动态令牌分配:使用代码大小进行全面分析
- 焦点感知分析:每个重点领域的专门提示和参数
克劳德代码中的示例:
"Review this Python code for security issues: [paste code here]"3. analyze_commit 🚀 优化
使用配置的LLM和特定于提交的优化来分析git提交的质量和对最佳实践的遵守情况。
参数:
commit_sha(可选):Git提交SHA进行分析(默认:HEAD)repo_path(可选):git存储库的路径(默认:当前目录)provider(可选):要使用的LLM提供程序(覆盖默认值)model(可选):要使用的模型(覆盖提供程序默认值)
智能优化:
- 提交分析温度:0.2用于一致性、确定性提交分析
- 内存安全差分处理:通过自动截断处理大型提交
- 综合分析:包括提交消息质量、差异分析和最佳实践
克劳德代码中的示例:
"Analyze the latest commit in this repository"
"Analyze commit abc123 and tell me if it follows best practices"4. analyze_uncommitted_work 🚀 优化
分析git存储库中未提交的更改,以帮助通过智能优化为提交做好准备。
参数:
repo_path(可选):git存储库的路径(默认:当前目录)staged_only(可选):仅分析阶段性更改(默认值:false,分析所有未提交的更改)provider(可选):要使用的LLM提供程序(覆盖默认值)model(可选):要使用的模型(覆盖提供程序默认值)
智能优化:
- 代码审查温度:0.2用于未提交变更的平衡分析
- 大型变更集处理:自动分块,可进行大量修改
- 情境感知分析:针对分阶段工作与所有未提交工作进行量身定制的分析
LLM分析包括:
- 所有更改摘要(修改、添加、删除的文件)
- 更改的类型和性质(功能、错误修复、重构等)
- 完整性和承诺准备
- 潜在问题或疑虑
- 如果更改已准备就绪,建议提交消息
- 如果需要拆分更改,则建议组织提交
克劳德代码中的示例:
"Analyze my uncommitted changes and suggest a commit message"
"Review only my staged changes before I commit"
"Should I split my current changes into multiple commits?"5. get_repo_info
获取有关git存储库的信息(无LLM分析)。
参数:
repo_path(可选):git存储库的路径(默认:当前目录)
克劳德代码中的示例:
"Show me information about this git repository"安全功能
- 输入验证:所有存储库路径和提交SHA都经过验证,以防止命令注入
- 路径限制:存储库路径必须在当前工作目录中
- API密钥保护:API密钥从不在错误消息或日志中公开
- HTTP超时:所有LLM API调用都有30秒的超时,以防止挂起
- 并发访问:并发请求的线程安全提供程序管理
优化系统🚀
Second Opinion包括一个全面的优化系统,可以根据内容和上下文自动调整性能:
动态令牌分配
- 4096个令牌:差异非常小(\500KB)
任务特定温度设置
- 0.1:安全审查(最高精度)
- 0.2:代码审查和提交分析(主要是确定性的)
- 0.25:差异分析(略微灵活)
- 0.3:架构审查(允许创造力)
特定于提供商的优化
- OpenAI:top_p=0.9的完整令牌分配
- 谷歌:通过集中采样,上限为8192个令牌(top_k=20,top_p=0.8)
- 米斯特拉尔:保守分配,top_p=0.8
- 奥拉马:具有repeat_penalty=1.05的局部模型优化
内存管理
- 自动分块:大差异(>10MB或>1000个文件)被智能分割
- 智能块尺寸:根据文件计数调整块大小
- 内存感知流媒体:支持大型操作的流式传输
发展
项目结构
second-opinion/
├── main.go # MCP server setup and tool registration
├── handlers.go # Tool handler implementations
├── validation.go # Input validation functions
├── config/ # Configuration loading and optimization
│ ├── config.go # Main configuration with optimization methods
│ └── optimization_test.go # Comprehensive optimization tests
├── llm/ # LLM provider implementations
│ ├── provider.go # Provider interface, prompts, and optimization wrapper
│ ├── openai.go # OpenAI implementation
│ ├── google.go # Google Gemini implementation
│ ├── ollama.go # Ollama implementation with advanced options
│ └── mistral.go # Mistral implementation with additional parameters
├── CLAUDE.md # Claude Code specific instructions
└── TODO.md # Development roadmap运行测试
# Run all tests
go test ./... -v
# Run optimization tests specifically
go test ./config -v
# Run specific test suites
go test ./llm -v -run TestProviderConnections
# Run with race detection
go test -race ./...
# Run with coverage
go test -cover ./...掉毛
# Install golangci-lint if not already installed
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# Run linter
golangci-lint run
# Auto-fix issues where possible
golangci-lint run --fix建筑
# Build for current platform
go build -o bin/second-opinion
# Build with race detector (for development)
go build -race -o bin/second-opinion
# Build for different platforms
GOOS=darwin GOARCH=amd64 go build -o bin/second-opinion-darwin-amd64
GOOS=linux GOARCH=amd64 go build -o bin/second-opinion-linux-amd64
GOOS=windows GOARCH=amd64 go build -o bin/second-opinion-windows-amd64.exe故障排除
常见问题
- “提供程序未配置”错误
- 确保您已设置 ~/.second-opinion.json 或环境变量 - 检查API密钥是否有效并具有适当的权限
- “不是git仓库”错误
- 确保您在具有以下内容的目录中运行该工具 .git 文件夹 - 该工具验证路径是否是安全的git存储库
- 超时错误
- 检查您的互联网连接 - 对于Ollama,请确保本地服务器正在运行: ollama serve - 如果超时持续存在,请考虑使用更快的模型
- 权限被拒绝错误
- 该工具仅允许访问当前工作目录和子目录 - 确保二进制文件具有执行权限: chmod +x bin/second-opinion
调试模式
要查看详细的日志,您可以直接运行服务器:
./bin/second-opinion 2>debug.log贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 确保所有测试均已通过,且棉绒保持清洁
- 提交拉取请求
看 TODO.md 对于计划中的功能和已知问题。
内存使用
对于大型存储库,请参见 docs/MEMORY_USAGE.md 用于配置选项以有效处理较大差异。
许可证
麻省理工学院
