GitLab MCP Server
@anupsahu/gitlab-mcp
Production-ready MCP (Model Context Protocol) server for GitLab API with OAuth 2.0 PKCE authentication.
Features
- ๐ OAuth 2.0 PKCE Authentication - Secure authentication with token persistence
- ๐ Automatic Token Refresh - Seamless token renewal with retry logic
- ๐ Complete GitLab API Coverage - Merge requests, issues, files, commits, and more
- ๐พ Token Persistence - Sessions survive server restarts
- ๐ก๏ธ Production Ready - Clean codebase with comprehensive error handling
- ๐ง Easy Configuration - Simple setup with environment variables
Installation
npm install -g @anupsahu/gitlab-mcp
Quick Start
1. OAuth Authentication (Recommended)
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@anupsahu/gitlab-mcp"],
"env": {
"USE_OAUTH": "true",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
2. Personal Access Token (Alternative)
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@anupsahu/gitlab-mcp"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "your_gitlab_token",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
OAuth Authentication
The server supports OAuth 2.0 PKCE authentication for secure access to GitLab:
- Start the server with
USE_OAUTH=true
- Authenticate using the
oauth_login_pkce
tool - Tokens are automatically saved and persist across restarts
- Automatic token refresh handles expiration seamlessly
OAuth Tools
oauth_login_pkce
- Initiate OAuth authenticationoauth_status
- Check authentication statusoauth_logout
- Logout and clear tokens
Configuration
Environment Variables
Variable | Description | Default |
---|---|---|
USE_OAUTH |
Enable OAuth 2.0 authentication | false |
GITLAB_API_URL |
GitLab API URL | https://gitlab.com/api/v4 |
GITLAB_PERSONAL_ACCESS_TOKEN |
Personal access token (if not using OAuth) | - |
GITLAB_PROJECT_ID |
Default project ID | - |
GITLAB_ALLOWED_PROJECT_IDS |
Comma-separated list of allowed project IDs | - |
GITLAB_READ_ONLY_MODE |
Enable read-only mode | false |
Available Tools
Repository Operations
search_repositories
- Search for repositoriesget_repository_tree
- Get repository file treeget_file_contents
- Read file contentscreate_or_update_file
- Create or update filespush_files
- Push multiple files
Merge Request Operations
get_merge_request
- Get merge request detailsget_merge_request_diffs
- Get merge request changescreate_merge_request
- Create new merge requestupdate_merge_request
- Update merge requestmerge_merge_request
- Merge a merge request
Issue Operations
create_issue
- Create new issueget_issue
- Get issue detailsupdate_issue
- Update issuelist_issues
- List issues
Commit Operations
list_commits
- List repository commitsget_commit
- Get commit detailsget_commit_diff
- Get commit changes
Branch Operations
create_branch
- Create new branchfork_repository
- Fork repository
Token Storage
OAuth tokens are automatically saved to:
- Path:
~/.config/gitlab-mcp/oauth-config.json
- Format: JSON configuration file
- Persistence: Tokens survive server restarts
- Security: Automatic token refresh and expiration handling
Examples
Authenticate with OAuth
// Use the oauth_login_pkce tool
{
"sessionId": "my-session" // optional
}
Get Merge Request Details
{
"project_id": "12345",
"merge_request_iid": "123",
"sessionId": "my-session"
}
Create Issue
{
"project_id": "12345",
"title": "Bug Report",
"description": "Description of the issue",
"sessionId": "my-session"
}
Development
# Clone repository
git clone https://gitlab.com/anupsahu/gitlab-mcp.git
cd gitlab-mcp
# Install dependencies
npm install
# Build
npm run build
# Run with OAuth
USE_OAUTH=true GITLAB_API_URL=https://gitlab.com/api/v4 node build/index.js
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a merge request
Support
For issues and questions:
- Create an issue in the GitLab repository
- Check existing documentation and examples
Built with โค๏ธ for the MCP ecosystem