Skip to main content
Glama
JesBrian

GitLab MCP Server

by JesBrian
README.md
# GitLab MCP Server

> [!NOTE]
> This documentation is available in [简体中文](./README.zh.md).

A GitLab API server built on the Model Context Protocol (MCP). This server provides a set of tools that allow AI models to interact with GitLab instances, with a focus on branch management and merge request (MR) operations.

## Project Info

- **Package**: @jesbrian/gitlab-mcp-server
- **Version**: 0.2.4
- **Type**: CommonJS
- **Main Entry**: index.js
- **Executable**: gitlab-mcp-server
- **Config Module**: config/Config.js

## Project Structure

```
gitlab-mcp-server/
├── index.js                          # Main entry file
├── config/                           # Config directory
│   └── Config.js                     # Centralized config file
├── lib/                              # Library directory
│   └── GitLabClient.js               # GitLab API client
├── package.json
└── README.md
```

### Modular Design

- **GitLabClient.js**: Client class encapsulating GitLab API calls (root directory)
- **config/Config.js**: Centralized management for all configuration items (GitLab connection, client options, MCP Server config, Tools definitions)
- **index.js**: MCP Server main logic, handles tool invocations and request processing

## Features

*   **User Management**: Get current GitLab user information.
*   **Project Management**: Search projects, get project ID mappings, and retrieve project details.
*   **Branch Management**:
    *   List repository branches.
    *   Create new branches (supports specifying source branch/tag).
    *   Delete branches.
*   **Merge Request (MR) Management**:
    *   Create MRs (supports standard creation and quick creation for public repositories).
    *   Get MR status (including merge status, conflict detection).
    *   Execute merge operations.
    *   Close MRs.
    *   Poll and wait for MR to become mergeable (supports timeout settings).

## Configuration

All configuration items are centralized in `lib/config/Config.js`, customizable via environment variables:

Configure the following environment variables:

| Variable | Description | Required | Default |
| :--- | :--- | :--- | :--- |
| `GITLAB_URL` | GitLab instance URL (e.g., `https://gitlab.example.com`) | Yes | - |
| `GITLAB_PRIVATE_TOKEN` | GitLab personal access token (Private Token) | Yes | - |
| `TIMEOUT` | Request timeout in milliseconds | No | 10000 |
| `WAIT_INTERVAL` | Polling interval in milliseconds | No | 2000 |

## Usage

### As an MCP Server

Add to Claude Desktop configuration file:

#### Option 1: Using npx (Recommended)

```json
{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["@jesbrian/gitlab-mcp-server"],
      "env": {
        "GITLAB_URL": "https://your-gitlab-url.com",
        "GITLAB_PRIVATE_TOKEN": "your-private-token"
      }
    }
  }
}
```

#### Option 2: Local Path

Start the project locally first, then configure Claude Code:

```bash
# After cloning the project, enter the directory and install dependencies
cd gitlab-mcp-server
npm install

# Start the service locally (choose one method)
npm start              # Option 1: Use npm scripts
node index.js          # Option 2: Run directly
gitlab-mcp-server      # Option 3: Install globally and use command
```

Add to Claude Code MCP configuration:

```json
{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": ["/path/to/gitlab-mcp-server/index.js"],
      "env": {
        "GITLAB_URL": "https://your-gitlab-url.com",
        "GITLAB_PRIVATE_TOKEN": "your-private-token"
      }
    }
  }
}
```

## Available Tools

### User & Project Management
*   `get_current_user`: Get current GitLab user information.
*   `get_project_ids`: Search projects by name and get project ID mappings (returns IDs across different namespaces).
*   `get_project`: Get detailed information for a specified project.

### Branch Operations
*   `get_repository_branches`: List branches of a project.
*   `create_branch`: Create a new branch (can specify source branch/tag, defaults to master).
*   `delete_branch`: Delete a branch.

### Merge Request (MR)
*   `create_merge_request`: Create a merge request (supports custom title and description).
*   `create_merge_request_to_public`: Quick tool that auto-detects personal and public repositories, creates MR from personal branch to public repository.
*   `merge_branch`: Execute merge operation.
*   `get_merge_request_status`: Get current MR status (including merge status, conflicts, etc.).
*   `close_merge_request`: Close a merge request.
*   `wait_for_mergeable_status`: Poll and wait for MR to become mergeable (supports timeout, default 5 minutes).

TDQS

C2.4/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap.

Naming Consistency5/5

A single tool trivially maintains naming consistency; there are no inconsistencies to assess.

Tool Count1/5

One tool for a GitLab server is extremely thin; GitLab's broad feature set requires many more tools for meaningful coverage.

Completeness1/5

The server only exposes a merge request status check, missing all other essential GitLab operations such as issue, repository, and pipeline management.

Maintenance

ActivityInactive
ResponsivenessNo issues