gitlab-review-mcp
v1.0.25
Published
Node.js MCP server for GitLab code review operations with AI integration support
Maintainers
Readme
Node Code Review MCP
A Node.js implementation of the Model Context Protocol (MCP) server for code review operations, supporting both GitHub and GitLab platforms.
📖 中文文档: README-zh.md | 快速开始 | 功能对比
Features
- 🔍 Fetch pull request/merge request details
- 📄 Get code diffs for PRs or commits
- 💬 Add review comments
- 🔍 Basic code quality analysis
- 🔧 Configurable via command line arguments
- 🌐 Support for both GitHub and GitLab APIs
Installation
Via NPM (when published)
npm install -g gitlab-review-mcpLocal Development
git clone <repository>
cd gitlab-review-mcp
npm install
npm run buildConfiguration
Environment Variables
Copy env.example to .env and configure:
# API Configuration
API_BASE_URL=https://api.github.com
API_TOKEN=your_github_token_here
# For GitLab, use:
# API_BASE_URL=https://gitlab.com/api/v4
# API_TOKEN=your_gitlab_token_here
# Server Configuration
TIMEOUT=30000
MAX_RETRIES=3Command Line Arguments
gitlab-review-mcp \
--api-base-url https://api.github.com \
--api-token your_token \
--timeout 30000 \
--max-retries 3MCP Configuration
Add to your MCP client configuration (e.g., Claude Desktop):
Using NPX (Recommended)
{
"mcpServers": {
"gitlab-review-mcp": {
"command": "npx",
"args": [
"-y",
"gitlab-review-mcp",
"--api-base-url=https://api.github.com",
"--api-token=your_github_token_here"
],
"alwaysAllow": [
"fetch_pull_request",
"fetch_code_diff",
"add_review_comment",
"analyze_code_quality",
"get_server_config",
"create_merge_request",
"get_current_branch",
"get_project_info"
]
}
}
}Using Local Installation
{
"mcpServers": {
"gitlab-review-mcp": {
"command": "node",
"args": [
"/path/to/gitlab-review-mcp/dist/index.js",
"--api-base-url=https://api.github.com",
"--api-token=your_github_token_here"
],
"alwaysAllow": [
"fetch_pull_request",
"fetch_code_diff",
"add_review_comment",
"analyze_code_quality",
"get_server_config",
"create_merge_request",
"get_current_branch",
"get_project_info"
]
}
}
}For GitLab
{
"mcpServers": {
"gitlab-review-mcp": {
"command": "npx",
"args": [
"-y",
"gitlab-review-mcp",
"--api-base-url=https://gitlab.com/api/v4",
"--api-token=your_gitlab_token_here"
],
"alwaysAllow": [
"fetch_pull_request",
"fetch_code_diff",
"add_review_comment",
"analyze_code_quality",
"get_server_config",
"create_merge_request",
"get_current_branch",
"get_project_info"
]
}
}
}Available Tools
fetch_pull_request
Fetch pull request/merge request details.
Parameters:
repository(string): Repository in format "owner/repo" or GitLab project path like "group/project" (aliases:projectId,project_path)pullRequestNumber(number): Pull request numberprovider(string, optional): "github" or "gitlab" (default: "gitlab")
fetch_code_diff
Fetch code diff for a pull request or commit.
Parameters:
repository(string): Repository in format "owner/repo" or GitLab project path like "group/project"pullRequestNumber(number, optional): Pull request numbercommitSha(string, optional): Commit SHAfilePath(string, optional): Specific file path to get diff forprovider(string, optional): "github" or "gitlab" (default: "gitlab")
add_review_comment
Add a review comment to a pull request.
Parameters:
repository(string): Repository in format "owner/repo" or GitLab project path like "group/project"pullRequestNumber(number): Pull request numberbody(string): Comment bodyfilePath(string, optional): File path for line commentline(number, optional): Line number for line commentprovider(string, optional): "github" or "gitlab" (default: "gitlab")
analyze_code_quality
Analyze code quality and provide suggestions with detailed metrics.
Parameters:
code(string): Code content to analyzelanguage(string): Programming language (javascript, typescript, python, java, go, etc.)rules(array, optional): Specific rules to check
get_repository_info
Get repository information.
Parameters:
repository(string): Repository in format "owner/repo" or GitLab project path like "group/project"provider(string, optional): "github" or "gitlab" (default: "gitlab")
analyze_files_batch
Analyze multiple files for code quality issues.
Parameters:
files(array): Array of file objects withpath,content, andlanguagepropertiesrules(array, optional): Specific rules to apply to all files
get_pull_request_files
Get list of files changed in a pull request.
Parameters:
repository(string): Repository in format "owner/repo" or GitLab project path like "group/project"pullRequestNumber(number): Pull request numberprovider(string, optional): "github" or "gitlab" (default: "gitlab")
get_supported_languages
Get list of supported programming languages for code analysis.
get_language_rules
Get available analysis rules for a specific language.
Parameters:
language(string): Programming language
get_server_config
Get current server configuration and health status.
create_merge_request 🆕
Create a new GitLab merge request from a source branch with enhanced error handling.
Parameters:
projectId(string): GitLab project ID or path- Numeric ID (recommended):
"12345" - Project path:
"group/project"or"group/subgroup/project"
- Numeric ID (recommended):
sourceBranch(string): Source branch name (e.g., "feature/new-feature")targetBranch(string, optional): Target branch name (defaults to "main")title(string, optional): Merge request title (auto-generated from branch name if not provided)description(string, optional): Merge request descriptionassigneeId(number, optional): User ID to assign the merge request toreviewerIds(array, optional): Array of user IDs to request reviews fromdeleteSourceBranch(boolean, optional): Whether to delete source branch when MR is mergedsquash(boolean, optional): Whether to squash commits when merging
Enhanced Error Handling:
- Project ID validation with detailed error messages
- Automatic project verification before MR creation
- Comprehensive troubleshooting guidance for common errors (404, 401, 403, etc.)
- Support for both numeric IDs and project paths
Example:
// Minimal usage
{
"projectId": "mygroup/myproject",
"sourceBranch": "feature/user-authentication"
}
// Full configuration
{
"projectId": "12345",
"sourceBranch": "feature/user-authentication",
"targetBranch": "develop",
"title": "feat: Add user authentication system",
"description": "This MR adds JWT-based authentication with password hashing.",
"assigneeId": 123,
"reviewerIds": [456, 789],
"deleteSourceBranch": true,
"squash": true
}Auto-generated Titles: The tool automatically generates conventional commit-style titles based on branch prefixes:
feature/→feat:bugfix/→fix:hotfix/→fix:docs/→docs:refactor/→refactor:
get_current_branch 🆕
Get current Git branch and repository information.
Parameters:
workingDirectory(string, optional): Working directory path (defaults to current directory)
Example:
{
"workingDirectory": "/path/to/your/project"
}Returns:
{
"currentBranch": "feature/user-authentication",
"allBranches": ["main", "feature/user-authentication", "develop"],
"isGitRepository": true,
"repositoryRoot": "/path/to/your/project"
}get_project_info 🆕
Get current GitLab project information from Git remotes.
Parameters:
workingDirectory(string, optional): Working directory path (defaults to current directory)remoteName(string, optional): Git remote name (defaults to "origin")
Example:
{
"workingDirectory": "/path/to/your/project",
"remoteName": "origin"
}Returns:
{
"projectId": "group%2Fproject",
"projectPath": "group/project",
"gitlabUrl": "https://gitlab.com",
"remotes": [
{
"name": "origin",
"url": "[email protected]:group/project.git",
"fetch": "[email protected]:group/project.git",
"push": "[email protected]:group/project.git"
}
],
"isGitlabProject": true
}API Token Setup
GitHub
- Go to GitHub Settings > Developer settings > Personal access tokens
- Generate a new token with appropriate permissions:
reposcope for private repositoriespublic_reposcope for public repositories only
GitLab
- Go to GitLab User Settings > Access Tokens
- Create a personal access token with:
apiscope for full API accessread_apiscope for read-only access
Development
# Install dependencies
npm install
# Run in development mode
npm run dev
# Build
npm run build
# Clean build directory
npm run cleanLicense
MIT License - see LICENSE file for details.
