Skip to main content
Glama
lininn
by lininn
README-zh.md12.5 kB
# Node 代码审查 MCP 一个基于 Node.js 的模型上下文协议 (MCP) 服务器,用于代码审查操作,支持 GitHub 和 GitLab 平台。 ## 功能特性 - 🔍 获取拉取请求/合并请求详情 - 📄 获取代码差异文件 - 💬 添加审查评论 - 🔍 基础代码质量分析 - 🔧 支持命令行参数配置 - 🌐 同时支持 GitHub 和 GitLab API ## 安装方式 ### 通过 NPM 安装(发布后) ```bash npm install -g gitlab-review-mcp ``` ### 本地开发 ```bash git clone <仓库地址> cd gitlab-review-mcp npm install npm run build ``` ## 配置 ### 环境变量 复制 `env.example` 为 `.env` 并配置: ```bash # API 配置 API_BASE_URL=https://api.github.com API_TOKEN=你的_github_token # 对于 GitLab,使用: # API_BASE_URL=https://gitlab.com/api/v4 # API_TOKEN=你的_gitlab_token # 服务器配置 TIMEOUT=30000 MAX_RETRIES=3 ``` ### 命令行参数 ```bash gitlab-review-mcp \ --api-base-url https://api.github.com \ --api-token 你的_token \ --timeout 30000 \ --max-retries 3 ``` ## MCP 配置 添加到你的 MCP 客户端配置中(如 Claude Desktop): ### 使用 NPX(推荐) ```json { "mcpServers": { "gitlab-review-mcp": { "command": "npx", "args": [ "-y", "gitlab-review-mcp", "--api-base-url=https://api.github.com", "--api-token=你的_github_token" ], "alwaysAllow": [ "fetch_pull_request", "fetch_code_diff", "add_review_comment", "analyze_code_quality", "get_repository_info", "analyze_files_batch", "get_pull_request_files", "get_supported_languages", "get_language_rules", "get_server_config" ] } } } ``` ### 使用本地安装 ```json { "mcpServers": { "gitlab-review-mcp": { "command": "node", "args": [ "/path/to/gitlab-review-mcp/dist/index.js", "--api-base-url=https://api.github.com", "--api-token=你的_github_token" ], "alwaysAllow": [ "fetch_pull_request", "fetch_code_diff", "add_review_comment", "analyze_code_quality", "get_repository_info", "analyze_files_batch", "get_pull_request_files", "get_supported_languages", "get_language_rules", "get_server_config" ] } } } ``` ### GitLab 配置 ```json { "mcpServers": { "gitlab-review-mcp": { "command": "npx", "args": [ "-y", "gitlab-review-mcp", "--api-base-url=https://gitlab.com/api/v4", "--api-token=你的_gitlab_token" ], "alwaysAllow": [ "fetch_pull_request", "fetch_code_diff", "add_review_comment", "analyze_code_quality", "get_repository_info", "analyze_files_batch", "get_pull_request_files", "get_supported_languages", "get_language_rules", "get_server_config" ] } } } ``` ## 可用工具 ### `fetch_pull_request` 获取拉取请求/合并请求详情。 **参数:** - `repository` (字符串): 仓库格式 "owner/repo",或 GitLab 项目路径如 "group/project"(也可使用 `projectId`、`project_path`) - `pullRequestNumber` (数字): 拉取请求编号 - `provider` (字符串,可选): "github" 或 "gitlab"(默认:"gitlab") **示例:** ```json { "repository": "microsoft/vscode", "pullRequestNumber": 123, "provider": "github" } ``` ### `fetch_code_diff` 获取拉取请求或提交的代码差异。 **参数:** - `repository` (字符串): 仓库格式 "owner/repo",或 GitLab 项目路径如 "group/project" - `pullRequestNumber` (数字,可选): 拉取请求编号 - `commitSha` (字符串,可选): 提交 SHA - `filePath` (字符串,可选): 特定文件路径 - `provider` (字符串,可选): "github" 或 "gitlab"(默认:"gitlab") **示例:** ```json { "repository": "microsoft/vscode", "pullRequestNumber": 123, "filePath": "src/index.js", "provider": "github" } ``` ### `add_review_comment` 为拉取请求添加审查评论。 **参数:** - `repository` (字符串): 仓库格式 "owner/repo",或 GitLab 项目路径如 "group/project" - `pullRequestNumber` (数字): 拉取请求编号 - `body` (字符串): 评论内容 - `filePath` (字符串,可选): 行评论的文件路径 - `line` (数字,可选): 行评论的行号 - `provider` (字符串,可选): "github" 或 "gitlab"(默认:"gitlab") **示例:** ```json { "repository": "microsoft/vscode", "pullRequestNumber": 123, "body": "这个函数需要添加错误处理", "filePath": "src/index.js", "line": 42, "provider": "github" } ``` ### `analyze_code_quality` 分析代码质量并提供详细的改进建议。 **参数:** - `code` (字符串): 要分析的代码内容 - `language` (字符串): 编程语言(javascript、typescript、python、java、go 等) - `rules` (数组,可选): 特定的检查规则 **示例:** ```json { "code": "console.log('Hello World');", "language": "javascript", "rules": ["no-console-log", "no-var"] } ``` ### `get_repository_info` 获取仓库信息。 **参数:** - `repository` (字符串): 仓库格式 "owner/repo",或 GitLab 项目路径如 "group/project" - `provider` (字符串,可选): "github" 或 "gitlab"(默认:"gitlab") **示例:** ```json { "repository": "microsoft/vscode", "provider": "github" } ``` ### `analyze_files_batch` 批量分析多个文件的代码质量问题。 **参数:** - `files` (数组): 文件对象数组,包含 `path`、`content` 和 `language` 属性 - `rules` (数组,可选): 应用于所有文件的特定规则 **示例:** ```json { "files": [ { "path": "src/index.js", "content": "console.log('Hello');", "language": "javascript" }, { "path": "src/utils.py", "content": "print('World')", "language": "python" } ], "rules": ["no-console-log", "no-print"] } ``` ### `get_pull_request_files` 获取拉取请求中已更改的文件列表。 **参数:** - `repository` (字符串): 仓库格式 "owner/repo",或 GitLab 项目路径如 "group/project" - `pullRequestNumber` (数字): 拉取请求编号 - `provider` (字符串,可选): "github" 或 "gitlab"(默认:"gitlab") **示例:** ```json { "repository": "microsoft/vscode", "pullRequestNumber": 123, "provider": "github" } ``` ### `get_supported_languages` 获取代码分析支持的编程语言列表。 **示例:** ```json {} ``` ### `get_language_rules` 获取特定语言的可用分析规则。 **参数:** - `language` (字符串): 编程语言 **示例:** ```json { "language": "javascript" } ``` ### `get_server_config` 获取当前服务器配置和健康状态。 **示例:** ```json {} ``` ## API Token 设置 ### GitHub 1. 前往 GitHub 设置 > 开发者设置 > 个人访问令牌 2. 生成新令牌并分配适当权限: - 私有仓库需要 `repo` 权限 - 公开仓库仅需要 `public_repo` 权限 ### GitLab 1. 前往 GitLab 用户设置 > 访问令牌 2. 创建个人访问令牌并分配权限: - 完整 API 访问需要 `api` 权限 - 只读访问需要 `read_api` 权限 ## 支持的编程语言 | 语言 | 规则检查 | 特定规则 | |------|----------|----------| | **JavaScript** | ✅ | no-console-log, no-var, no-eval, arrow-function-spacing | | **TypeScript** | ✅ | JavaScript 规则 + no-any, explicit-return-type | | **Python** | ✅ | no-print, pep8-line-length, unused-import | | **Java** | ✅ | system-out-println, public-class-naming | | **Go** | ✅ | no-fmt-println, error-handling | ### 通用规则(适用于所有语言) - `todo-comment` - 检测 TODO/FIXME 注释 - `long-line` - 行长度检查(超过 120 字符) - `trailing-whitespace` - 检测尾随空格 ## 代码分析功能 ### 分析指标 - **圈复杂度** - 基于控制流语句计算 - **可维护性指数** - 0-100 分评分系统 - **问题统计** - 按严重程度分类 ### 问题类型 - **错误 (Error)** - 必须修复的问题 - **警告 (Warning)** - 建议修复的问题 - **信息 (Info)** - 代码改进建议 ### 批量分析统计 - 总文件数、总行数、总问题数 - 平均复杂度计算 - 按类型分组的问题分布 ## 使用示例 ### 分析 JavaScript 代码 ```javascript // 使用 MCP 客户端调用 { "tool": "analyze_code_quality", "arguments": { "code": "var x = 1; console.log(x); eval('dangerous');", "language": "javascript" } } ``` **返回结果:** ```json { "language": "javascript", "codeLength": 45, "lineCount": 1, "issues": [ { "line": 1, "column": 1, "type": "best-practice", "message": "Use let or const instead of var", "severity": "warning", "rule": "no-var" }, { "line": 1, "column": 8, "type": "debug", "message": "Console.log statement found", "severity": "warning", "rule": "no-console-log" }, { "line": 1, "column": 23, "type": "security", "message": "eval() is dangerous and should be avoided", "severity": "error", "rule": "no-eval" } ], "suggestions": [ "Replace console.log with proper logging framework" ], "metrics": { "cyclomaticComplexity": 1, "maintainabilityIndex": 65, "issueCount": { "error": 1, "warning": 2, "info": 0 } } } ``` ### 批量分析多文件 ```javascript { "tool": "analyze_files_batch", "arguments": { "files": [ { "path": "src/index.js", "content": "console.log('Hello World');", "language": "javascript" }, { "path": "src/utils.py", "content": "print('Hello Python')", "language": "python" } ] } } ``` ### 获取 PR 文件变更 ```javascript { "tool": "get_pull_request_files", "arguments": { "repository": "microsoft/vscode", "pullRequestNumber": 196892, "provider": "github" } } ``` ## 错误处理 ### 自动重试机制 - 网络错误自动重试(最多 3 次) - 指数退避延迟策略 - 智能错误分类 ### 速率限制处理 - 自动检测 API 速率限制 - 智能等待和重试 - 速率限制状态监控 ### 常见错误 1. **认证失败** - 检查 API Token 是否正确 2. **仓库不存在** - 确认仓库名称格式正确 3. **权限不足** - 确保 Token 具有相应权限 4. **网络超时** - 调整 timeout 参数 ## 开发 ### 本地开发 ```bash # 安装依赖 npm install # 开发模式运行 npm run dev # 构建 npm run build # 清理构建目录 npm run clean ``` ### 测试 ```bash # 运行测试服务器 node test-examples/test-server.js # 测试命令行参数 node dist/index.js --help ``` ### 项目结构 ``` src/ ├── index.ts # 主服务器文件 ├── code-analyzer.ts # 代码分析器 ├── api-client.ts # API 客户端 └── types.ts # 类型定义 test-examples/ ├── test-code.js # JavaScript 测试代码 ├── test-code.py # Python 测试代码 ├── test-server.js # 服务器测试脚本 └── mcp-test-config.json # MCP 测试配置 ``` ## 性能优化 ### 内存使用 - 基础运行:~50MB - 大文件处理:~100MB - 批量处理:~200MB ### 响应时间 - 单文件分析:< 100ms - 批量分析(10文件):< 500ms - API 请求:< 2s(取决于网络) ### 并发限制 - 最多 5 个并发 API 请求 - 防止 API 请求过载 - 智能请求排队 ## 常见问题 ### Q: 如何切换到 GitLab? A: 修改配置中的 `api-base-url` 为 `https://gitlab.com/api/v4` 并使用 GitLab token。 ### Q: 支持企业版 GitHub/GitLab 吗? A: 是的,只需修改 `api-base-url` 为企业版 API 地址。 ### Q: 如何添加新的代码分析规则? A: 编辑 `src/code-analyzer.ts` 文件中的规则定义。 ### Q: 可以分析超大文件吗? A: 建议单文件不超过 10MB,批量处理不超过 100 个文件。 ## 许可证 MIT 许可证 - 详见 LICENSE 文件。 ## 贡献 欢迎提交 Pull Request 和 Issue! 1. Fork 本仓库 2. 创建功能分支 3. 提交更改 4. 创建 Pull Request ## 更新日志 ### v1.0.0 - 初始版本发布 - 支持 GitHub 和 GitLab - 基础代码质量分析 - 10 个 MCP 工具 - 5 种编程语言支持

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lininn/gitlab-review-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server