gitlab-mcp

nguyenvanduocit/gitlab-mcp

3.3

If you are the rightful owner of gitlab-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

GitLab MCP is a tool for interacting with the GitLab API through the Model Context Protocol (MCP).

GitLab MCP

A comprehensive Go-based MCP (Model Context Protocol) connector for GitLab that enables AI assistants like Claude to interact seamlessly with GitLab repositories, projects, and workflows. This tool provides a powerful interface for AI models to perform comprehensive GitLab operations through natural language.

WHY

While GitLab provides various API integrations, our MCP implementation offers superior AI-native interaction and comprehensive workflow management. We've built this connector to address the real challenges developers and project managers face when working with GitLab through AI assistants.

Key Advantages:

  • Comprehensive GitLab Integration: Full access to projects, merge requests, pipelines, commits, CI/CD jobs, and user management
  • AI-Optimized Interface: Designed specifically for natural language interactions with AI assistants
  • Real-World Workflow Focus: Built to solve actual daily problems like code review, CI/CD monitoring, and project management
  • Enhanced Productivity: Seamless integration allowing AI to help with GitLab operations without context switching
  • Developer-Friendly: Tools designed for actual development workflows, not just basic API calls

šŸš€ Features Overview

šŸ“ Project & Repository Management

  • List and explore projects with detailed information and access levels
  • Get file content from any repository with branch/commit support
  • Browse repository structure and navigate codebases
  • Access project metadata including statistics and configuration

šŸ”€ Merge Request Operations

  • List merge requests with filtering by state, author, and target branch
  • Get detailed MR information including changes, discussions, and approvals
  • Create new merge requests with custom titles and descriptions
  • Comment on merge requests and manage discussions
  • Monitor merge request status and review progress
  • Get MR pipelines and commits for comprehensive review
  • Rebase merge requests when needed

šŸ”„ Pipeline & CI/CD Management

  • List and analyze pipelines with status and duration information
  • Get detailed pipeline information including jobs and artifacts
  • Trigger new pipelines with custom variables
  • Monitor pipeline execution and job details
  • Track CI/CD performance across projects

šŸ’¼ Job Management

  • List project and pipeline jobs with filtering capabilities
  • Get detailed job information including logs and artifacts
  • Cancel running jobs when needed
  • Retry failed jobs for quick recovery
  • Monitor job status across pipelines

šŸ“ Commit & History Tracking

  • Search and list commits with author, date, and message filtering
  • Get detailed commit information including changes and statistics
  • Search commits by author and file path for targeted analysis
  • Comment on commits for code review
  • Cherry-pick and revert commits for branch management
  • Track repository history and development progress

🌊 Git Flow Workflow Support

  • Create release branches following Git Flow conventions
  • Create feature branches with proper naming
  • Create hotfix branches for urgent fixes
  • Finish releases by creating merge requests to develop and master
  • Finish features by creating merge requests to develop
  • Finish hotfixes by creating merge requests to both branches
  • List Git Flow branches by type (feature, release, hotfix)

šŸ‘„ User & Group Management

  • View user contribution events and activity streams
  • List group members and their roles
  • List accessible groups with filtering options
  • Track user contributions across projects
  • Monitor team activity and collaboration

šŸ” Variable & Security Management

  • List group variables with security information
  • Create and update group variables with proper scoping
  • Manage variable security (protected, masked, raw)
  • Remove variables when no longer needed
  • Handle environment-specific variables

šŸš€ Deployment & Token Management

  • List deploy tokens for projects and groups
  • Create deploy tokens with specific scopes
  • Manage token permissions and expiration
  • Delete tokens when no longer needed
  • Handle both project and group-level tokens

šŸ” Advanced Search Capabilities

  • Global search across all GitLab content
  • Group-specific search within organizations
  • Project-specific search for targeted results
  • Search by scope (projects, merge requests, commits, users, code)
  • Specialized search tools for issues, merge requests, commits, and code

šŸš€ Quick Start Guide

Prerequisites

Before you begin, you'll need:

  1. GitLab Account with access to your GitLab instance (GitLab.com or self-hosted)
  2. Personal Access Token from GitLab (we'll help you get this)
  3. Cursor IDE with Claude integration

Step 1: Get Your GitLab Personal Access Token

  1. Go to your GitLab instance → User Settings → Access Tokens
  2. Click "Add new token"
  3. Give it a name like "GitLab MCP Connector"
  4. Select scopes: api, read_user, read_repository, write_repository
  5. Set expiration date (optional)
  6. Click "Create personal access token"
  7. Copy the token (you won't see it again!)

Step 2: Choose Your Installation Method

We recommend Docker for the easiest setup:

🐳 Option A: Docker (Recommended)
# Pull the latest image
docker pull ghcr.io/nguyenvanduocit/gitlab-mcp:latest

# Test it works (replace with your details)
docker run --rm \
  -e GITLAB_URL=https://gitlab.com \
  -e GITLAB_TOKEN=your-personal-access-token \
  ghcr.io/nguyenvanduocit/gitlab-mcp:latest
šŸ“¦ Option B: Download Binary
  1. Go to GitHub Releases
  2. Download for your platform:
    • macOS: gitlab-mcp_darwin_amd64
    • Linux: gitlab-mcp_linux_amd64
    • Windows: gitlab-mcp_windows_amd64.exe
  3. Make it executable (macOS/Linux):
    chmod +x gitlab-mcp_*
    sudo mv gitlab-mcp_* /usr/local/bin/gitlab-mcp
    
šŸ› ļø Option C: Build from Source
go install github.com/nguyenvanduocit/gitlab-mcp@latest

Step 3: Configure Cursor

  1. Open Cursor
  2. Go to Settings → Features → Model Context Protocol
  3. Add a new MCP server with this configuration:
For Docker Users:
{
  "mcpServers": {
    "gitlab": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "GITLAB_URL=https://gitlab.com",
        "-e", "GITLAB_TOKEN=your-personal-access-token",
        "ghcr.io/nguyenvanduocit/gitlab-mcp:latest"
      ]
    }
  }
}
For Binary Users:
{
  "mcpServers": {
    "gitlab": {
      "command": "/usr/local/bin/gitlab-mcp",
      "env": {
        "GITLAB_URL": "https://gitlab.com",
        "GITLAB_TOKEN": "your-personal-access-token"
      }
    }
  }
}
For Self-Hosted GitLab:

Replace https://gitlab.com with your GitLab instance URL (e.g., https://gitlab.yourcompany.com)

Step 4: Test Your Setup

  1. Restart Cursor completely
  2. Open a new chat with Claude
  3. Try these test commands:
List my GitLab groups
Show me recent merge requests in my projects
What's the status of the latest pipeline?

If you see GitLab data, congratulations! šŸŽ‰ You're all set up.

šŸ”§ Advanced Configuration

Using Environment Files

Create a .env file for easier management:

# .env file
GITLAB_URL=https://gitlab.com
GITLAB_TOKEN=your-personal-access-token

Then use it:

# With binary
gitlab-mcp -env .env

# With Docker
docker run --rm -i --env-file .env ghcr.io/nguyenvanduocit/gitlab-mcp:latest

HTTP Mode for Development

For development and testing, you can run in HTTP mode:

# Start HTTP server on port 3000
gitlab-mcp -env .env -http_port 3000

Then configure Cursor with:

{
  "mcpServers": {
    "gitlab": {
      "url": "http://localhost:3000/mcp"
    }
  }
}

šŸŽÆ Usage Examples

Once configured, you can ask Claude to help with GitLab tasks using natural language:

Project & Repository Management

  • "Show me all my GitLab groups"
  • "List projects in group 'my-team'"
  • "Get the README file from the main branch of project X"
  • "What are the recent changes in project Z?"

Merge Request Operations

  • "Show me all open merge requests in project ABC"
  • "Create a merge request from feature-branch to develop"
  • "What's the status of MR #123 in project ABC?"
  • "Add a comment to merge request #456 saying 'LGTM'"
  • "Show me the pipeline status for MR #789"

Pipeline & CI/CD Management

  • "What's the status of the latest pipeline in project X?"
  • "Trigger a new pipeline on the develop branch"
  • "Show me failed pipelines from the last week"
  • "List all running jobs in project Y"
  • "Cancel job #123 in project Z"

Git Flow Workflows

  • "Create a release branch for version 1.2.0"
  • "Create a feature branch called user-authentication"
  • "Finish the release 1.2.0 and create merge requests"
  • "List all feature branches in the project"

Search & Discovery

  • "Search for commits containing 'bug fix' across all projects"
  • "Find merge requests related to authentication in group X"
  • "Search for code containing 'API_KEY' in project Y"
  • "Show me all users in group Z"

Variable & Security Management

  • "List all variables in group 'production'"
  • "Create a new variable DATABASE_URL in group X"
  • "Show me deploy tokens for project Y"

Development Insights

  • "Show me recent commits by author John"
  • "What commits were made to the main branch today?"
  • "List all commits with 'fix' in the message"
  • "Show me user activity for the development team"

šŸ› ļø Available Tools Reference

Project Tools

  • list_projects - List projects in a group
  • get_project - Get detailed project information

Merge Request Tools

  • list_mrs - List merge requests with filtering
  • get_mr_details - Get detailed MR information
  • create_mr - Create new merge requests
  • create_mr_note - Add comments to merge requests
  • list_mr_comments - List all MR comments
  • get_mr_pipelines - Get MR pipeline information
  • get_mr_commits - Get MR commit history
  • create_mr_pipeline - Trigger new MR pipeline
  • rebase_mr - Rebase merge requests

Repository Tools

  • get_file_content - Get file content from repositories
  • list_commits - List commits with date filtering
  • get_commit_details - Get detailed commit information
  • search_commits - Search commits by author/path/date
  • get_commit_comments - Get commit comments
  • post_commit_comment - Add comments to commits
  • get_commit_merge_requests - Get MRs associated with commits
  • cherry_pick_commit - Cherry-pick commits to other branches
  • revert_commit - Revert commits

Pipeline Tools

  • list_pipelines - List project pipelines
  • get_pipeline - Get detailed pipeline information
  • trigger_pipeline - Trigger new pipelines with variables

Job Tools

  • list_project_jobs - List all project jobs
  • list_pipeline_jobs - List jobs for specific pipeline
  • get_job - Get detailed job information
  • cancel_job - Cancel running jobs
  • retry_job - Retry failed jobs

Git Flow Tools

  • gitflow_create_release - Create release branches
  • gitflow_finish_release - Finish releases with MRs
  • gitflow_create_feature - Create feature branches
  • gitflow_finish_feature - Finish features with MRs
  • gitflow_create_hotfix - Create hotfix branches
  • gitflow_finish_hotfix - Finish hotfixes with MRs
  • gitflow_list_branches - List Git Flow branches

User & Group Tools

  • list_user_contribution_events - List user activity
  • list_group_users - List group members
  • list_groups - List accessible groups

Variable Tools

  • list_group_variables - List group variables
  • get_group_variable - Get specific variable details
  • create_group_variable - Create new variables
  • update_group_variable - Update existing variables
  • remove_group_variable - Remove variables

Deployment Tools

  • list_all_deploy_tokens - List all deploy tokens (admin)
  • list_project_deploy_tokens - List project deploy tokens
  • get_project_deploy_token - Get project token details
  • create_project_deploy_token - Create project tokens
  • delete_project_deploy_token - Delete project tokens
  • list_group_deploy_tokens - List group deploy tokens
  • get_group_deploy_token - Get group token details
  • create_group_deploy_token - Create group tokens
  • delete_group_deploy_token - Delete group tokens

Search Tools

  • search_global - Search across all GitLab
  • search_group - Search within specific groups
  • search_project - Search within specific projects
  • search_issues_global - Global issue search
  • search_merge_requests_global - Global MR search
  • search_commits_global - Global commit search
  • search_code_global - Global code search

šŸ› ļø Troubleshooting

Common Issues

āŒ "Connection failed" or "Authentication error"

  • Double-check your GITLAB_URL (should include https://)
  • Verify your personal access token is correct and not expired
  • Make sure your token has the required scopes (api, read_user, read_repository, write_repository)

āŒ "No MCP servers found"

  • Restart Cursor completely after adding the configuration
  • Check the MCP configuration syntax in Cursor settings
  • Verify the binary path is correct (for binary installations)

āŒ "Permission denied" errors

  • Make sure your GitLab account has access to the projects you're trying to access
  • Check if your personal access token has the necessary permissions
  • Verify you're using the correct GitLab instance URL

āŒ "Rate limit exceeded"

  • GitLab has API rate limits; wait a moment before retrying
  • Consider using a more specific query to reduce API calls

āŒ "Missing required environment variables"

  • Ensure both GITLAB_URL and GITLAB_TOKEN are set
  • Check that environment variables are properly loaded from .env file

Getting Help

  1. Check the logs: Run with -http_port to see detailed error messages
  2. Test your credentials: Try the Docker test command from Step 2
  3. Verify Cursor config: The app will show you the exact configuration to use
  4. Check GitLab permissions: Ensure your token has access to the resources you need

šŸ“š Development

For local development and contributing:

# Clone the repository
git clone https://github.com/nguyenvanduocit/gitlab-mcp.git
cd gitlab-mcp

# Create .env file with your credentials
cp .env.example .env
# Edit .env with your details

# Run in development mode
just dev
# or
go run main.go -env .env

# Build the project
just build

# Install locally
just install

# Test with MCP inspector (if running in HTTP mode)
npx @modelcontextprotocol/inspector http://localhost:3000/mcp

Project Structure

gitlab-mcp/
ā”œā”€ā”€ bin/          # Compiled binaries
ā”œā”€ā”€ tools/        # Tool implementations
│   ā”œā”€ā”€ projects.go      # Project management tools
│   ā”œā”€ā”€ merge_requests.go # MR management tools
│   ā”œā”€ā”€ repositories.go  # Repository and commit tools
│   ā”œā”€ā”€ pipelines.go     # Pipeline management tools
│   ā”œā”€ā”€ job.go          # CI/CD job tools
│   ā”œā”€ā”€ flow.go         # Git Flow workflow tools
│   ā”œā”€ā”€ users.go        # User management tools
│   ā”œā”€ā”€ groups.go       # Group management tools
│   ā”œā”€ā”€ variable.go     # Variable management tools
│   ā”œā”€ā”€ deploy.go       # Deployment token tools
│   └── search.go       # Search functionality tools
ā”œā”€ā”€ util/         # Utility functions
ā”œā”€ā”€ main.go       # Application entry point
ā”œā”€ā”€ go.mod        # Go module definition
ā”œā”€ā”€ justfile      # Build automation
└── README.md     # This file

šŸ¤ Contributing

We welcome contributions! Here's how to get started:

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'feat: add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Contribution Guidelines

  • Follow Conventional Commits for commit messages
  • Add tests for new features
  • Update documentation as needed
  • Ensure all tests pass before submitting

šŸ“„ License

This project is licensed under the MIT License - see the file for details.


Need help? Check our for recent updates or open an issue on GitHub.