UNPKG

@weirdscience/mcp-gitlab

Version:

MCP server exposing GitLab tools via glab CLI

318 lines (240 loc) 7.29 kB
# @weirdscience/mcp-gitlab A Model Context Protocol (MCP) server that provides GitLab integration tools using the `glab` CLI. This server enables AI assistants to interact with GitLab repositories, issues, merge requests, and pipelines through a standardized MCP interface. ## Features - **Issue Management**: List, create, and manage GitLab issues - **Merge Requests**: List and create merge requests - **Pipeline Monitoring**: View project pipelines and their status - **Raw API Access**: Direct access to GitLab REST API endpoints - **Multi-Instance Support**: Works with gitlab.com and self-hosted GitLab instances - **Pagination Support**: Automatic handling of large result sets ## Prerequisites - Node.js 18+ - `glab` CLI tool installed and configured - GitLab personal access token ## Installation ### Global Installation ```bash npm install -g @weirdscience/mcp-gitlab ``` ### Local Installation ```bash npm install @weirdscience/mcp-gitlab ``` ## Setup ### 1. Install glab CLI First, install the `glab` CLI tool: ```bash # macOS brew install glab # Linux sudo apt install glab # Windows winget install GitLab.GLab ``` ### 2. Configure glab Authenticate with your GitLab instance: ```bash # For gitlab.com glab auth login # For self-hosted GitLab glab auth login --hostname gitlab.your-instance.com ``` ### 3. Configure MCP Add the server to your MCP configuration file (`~/.config/mcp.json` or similar): ```json { "mcpServers": { "gitlab-glab": { "command": "mcp-gitlab", "env": { "GITLAB_HOST": "gitlab.com", "GITLAB_TOKEN": "your-gitlab-token" } } } } ``` ## Cursor Configuration To use this MCP server with Cursor, you need to configure it in Cursor's settings: ### Method 1: Global Configuration 1. Open Cursor's Command Palette (`Cmd/Ctrl + Shift + P`) 2. Search for "MCP" and select "MCP: Configure Servers" 3. Add a new server configuration: ```json { "name": "gitlab-glab", "command": "mcp-gitlab", "env": { "GITLAB_HOST": "gitlab.com", "GITLAB_TOKEN": "your-gitlab-token" } } ``` ### Method 2: Workspace Configuration Create a `.cursorrules` file in your project root: ```json { "mcpServers": { "gitlab-glab": { "command": "mcp-gitlab", "env": { "GITLAB_HOST": "gitlab.com", "GITLAB_TOKEN": "your-gitlab-token" } } } } ``` ### Method 3: Settings UI 1. Open Cursor Settings (`Cmd/Ctrl + ,`) 2. Search for "MCP" 3. Add the server configuration in the MCP settings section ### Verification After configuration, you can verify the server is working by: 1. Opening Cursor's Command Palette 2. Running "MCP: List Available Tools" 3. You should see tools like `gitlab.issues.list`, `gitlab.mrs.list`, etc. ### Usage in Cursor Once configured, you can use GitLab tools directly in Cursor: - Ask Cursor to "list open issues in my project" - Request "create a merge request for the current branch" - Ask "show me the latest pipeline status" Cursor will automatically use the appropriate MCP tools to fulfill these requests. ### Environment Variables | Variable | Description | Example | |----------|-------------|---------| | `GITLAB_HOST` | GitLab instance hostname | `gitlab.com` or `gitlab.your-company.com` | | `GITLAB_TOKEN` | GitLab personal access token | `glpat-xxxxxxxxxxxxxxxxxxxx` | | `GITLAB_URI` | Full GitLab instance URI | `https://gitlab.your-company.com` | ## Available Tools ### `gitlab.issues.list` List issues for a project. **Parameters:** - `project` (string): Project path or numeric ID (e.g., `'gitlab-org/cli'`) - `state` (optional): Issue state (`'opened'`, `'closed'`, `'all'`) - `labels` (optional): Comma-separated label names - `assignee` (optional): Assignee username ### `gitlab.mrs.list` List merge requests for a project. **Parameters:** - `project` (string): Project path or numeric ID - `state` (optional): MR state (`'opened'`, `'merged'`, `'closed'`, `'all'`) - `labels` (optional): Comma-separated label names - `draft` (optional): Filter for draft MRs ### `gitlab.mr.create` Create a new merge request. **Parameters:** - `project` (string): Project path or numeric ID - `sourceBranch` (string): Source branch name - `targetBranch` (string): Target branch name - `title` (string): MR title - `description` (optional): MR description - `draft` (optional): Create as draft MR - `labels` (optional): Comma-separated labels - `assignees` (optional): Comma-separated assignee usernames ### `gitlab.pipelines.list` List pipelines for a project. **Parameters:** - `project` (string): Project path or numeric ID - `page` (optional): Page number (default: 1) - `perPage` (optional): Items per page (default: 50, max: 100) - `status` (optional): Pipeline status filter ### `gitlab.api` Low-level access to GitLab REST API. **Parameters:** - `method` (optional): HTTP method (`'GET'`, `'POST'`, `'PUT'`, `'PATCH'`, `'DELETE'`) - `path` (string): API path below `/api/v4` - `fields` (optional): Request body fields - `headers` (optional): Custom headers ### `glab.version` Get the installed `glab` CLI version. ## Usage Examples ### List Open Issues ```json { "tool": "gitlab.issues.list", "arguments": { "project": "gitlab-org/cli", "state": "opened" } } ``` ### Create Merge Request ```json { "tool": "gitlab.mr.create", "arguments": { "project": "my-group/my-project", "sourceBranch": "feature/new-feature", "targetBranch": "main", "title": "Add new feature", "description": "This PR adds a new feature to improve user experience.", "labels": "enhancement,frontend" } } ``` ### Get Project Pipelines ```json { "tool": "gitlab.pipelines.list", "arguments": { "project": "my-group/my-project", "perPage": 10, "status": "success" } } ``` ## Development ### Prerequisites - Node.js 18+ - npm or yarn ### Setup ```bash git clone https://github.com/weirdscience/mcp-gitlab.git cd mcp-gitlab npm install ``` ### Build ```bash npm run build ``` ### Development Mode ```bash npm run dev ``` ### Testing ```bash npm run check ``` ### Linting ```bash npm run lint npm run lint:fix ``` ### Formatting ```bash npm run format ``` ## Contributing 1. Fork the repository 2. Create a feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'Add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## Acknowledgments - [Model Context Protocol](https://modelcontextprotocol.io/) for the MCP specification - [glab CLI](https://gitlab.com/gitlab-org/cli) for GitLab command-line interface - [GitLab](https://gitlab.com/) for the GitLab platform ## Support If you encounter any issues or have questions: 1. Check the [GitHub Issues](https://github.com/weirdscience/mcp-gitlab/issues) 2. Review the [glab CLI documentation](https://gitlab.com/gitlab-org/cli/-/blob/main/docs/source/index.md) 3. Consult the [MCP documentation](https://modelcontextprotocol.io/) ## Changelog ### 0.1.0 - Initial release - Basic GitLab integration via glab CLI - Support for issues, merge requests, and pipelines - Raw API access capability