GitLabと連携するMCP Serverを作った
社内の開発チーム全体ででCursorを導入するので、それにあたってGitLabとCursorでの開発を効率化できるようなものが作れないかな〜と考え作ってみました。
はじめに
この記事では、GitLabとAIアシスタント(Claude/Cursor等)を連携させるためのModel Context Protocol (MCP) サーバーについて紹介します。このMCP Serverを使うことで、AIアシスタントがGitLabの情報(パイプラインの失敗情報やマージリクエストへの指摘事項など)を直接取得し、より的確な支援を提供できるようになります。
対象読者は、AIアシスタントを活用してGitLab上での開発作業を効率化したいと考えている開発者やチームの方々です。
基本的なGit/GitLabの知識とAIアシスタント(とくにModel Context Protocol対応のもの)についての基本理解があることを前提としています。
GitLab MCP Serverとは
GitLab MCP Serverは、AIアシスタントがGitLabの情報を直接取得できるようにするためのModel Context Protocol (MCP) サーバーです。主に以下の3つの重要な機能を提供しています:
- パイプラインの失敗情報を取得して修正:GitLabのCI/CDパイプラインで失敗したジョブのコンソール出力を取得して修正
- MRの指摘事項を取得して修正:GitLabのマージリクエスト(MR)への未解決の指摘事項(コメント)を取得して修正
- MRの変更内容取得してレビュー:GitLab MRのベースコミットから現在のローカルリポジトリの状態までの差分を取得してレビュー
これらの機能を使えば、AIアシスタントにCI/CDの失敗原因の解析やコードレビューの支援を効率的に行ってもらうことができます。
リポジトリ
機能詳細
1. パイプラインの失敗情報を取得して修正
get_pipeline_failed_jobs()
関数は、GitLabパイプラインで失敗したジョブのコンソール出力を取得します。
AIアシスタントはビルド失敗やテスト失敗の原因を分析し、修正を行います。
出力内容には、以下の情報が含まれます:
- ジョブ名
- ステータス
- 詳細なログ
2. MRの指摘事項を取得して修正
get_review_comments()
関数は、GitLab MRの未解決の指摘事項(コメント)を取得します。
すでに解決済みのコメントやファイルに紐づいていないコメントは除外されます。
AIアシスタントは指摘事項に対して修正を行います。
出力内容には、以下の情報が含まれます:
- コメント者の情報
- コメント内容
- コメントがついているファイルと行番号などの位置情報
3. MRの変更内容を取得してレビュー
get_review_changes()
関数は、MRのベースコミットから現在のローカルリポジトリの状態までの差分を取得してレビューを行います。
リモートの差分ではなく、ローカルの最新状態(作業中の未コミット変更を含む)との差分を取得できるのが特徴です。
このため未コミットの内容を踏まえたAIでのレビューが可能になります。
出力内容には、以下の情報が含まれます:
- 変更されたファイルのリスト
- 各ファイルの変更タイプ(追加・修正・削除)
- 変更内容の差分
この機能により、AIアシスタントは現在進行中の作業内容も含めて把握し、的確なアドバイスを提供できます。
レビューは、「コードベースを考慮してレビューし、コードの問題点や改善点を出してください。」というシンプルなプロンプトになっています。
AIアシスタントとの連携方法
インストール方法
Python依存パッケージ管理ツールとしてuvを使用します。
その後、https://github.com/owayo/gitlab-mcp-server をcloneしたディレクトリに移動しライブラリをインストールします。
# uvのインストール
$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ cd /path/to/this-mcp-server
# ライブラリのインストール
$ uv sync
準備
MCPサーバーを使用するには、GitLabのアクセストークンが必要です。以下の手順でトークンを取得しましょう:
- GitLabの自分のアイコンから設定をクリック
- アクセストークンに移動
-
read_api の権限にチェックを入れ、有効期限を設定し、新しいアクセストークンを作成する
有効期限を空にしても最長の有効期限の半年でトークンが作成されます - 発行されたトークンを安全に保管
このMCP Serverは、Claude for DesktopやCursorなどのMCP対応AIアシスタントと連携できます。設定方法は以下の通りです。
Claude for Desktopでの設定
claude_desktop_config.json
に以下の設定を追加します:
{
"mcpServers": {
"gitlab-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/this-mcp-server",
"run",
"main.py"
],
"env": {
"GITLAB_URL": "your_gitlab_url",
"GITLAB_PROJECT_NAME": "gitlab_project_name",
"GITLAB_API_KEY": "your_gitlab_api_key",
"GIT_REPO_PATH": "/path/to/git/repo"
}
}
}
}
Cursorでの設定
プロジェクトルートの .cursor/mcp.json
に以下の設定を追加します:
{
"mcpServers": {
"gitlab-mcp": {
"command": "env",
"args": [
"GITLAB_URL=your_gitlab_url",
"GITLAB_PROJECT_NAME=gitlab_project_name",
"GITLAB_API_KEY=your_gitlab_api_key",
"GIT_REPO_PATH=/path/to/git/repo",
"uv",
"--directory",
"/path/to/this-mcp-server",
"run",
"main.py"
]
}
}
}
注意事項: 上記の設定例では、以下の値を適切に置き換えてください:
-
your_gitlab_url
: GitLabサーバーのURL -
gitlab_project_name
: GitLabプロジェクト名 -
your_gitlab_api_key
: 取得したGitLab APIのアクセストークン -
/path/to/git/repo
: ローカルGitリポジトリの絶対パス -
/path/to/this-mcp-server
: MCPサーバーのディレクトリの絶対パス
TODO
現状、Cursorで、「gitlab-mcp を使用してレビューして」と依頼すると、パイプラインの情報や指摘の取得、レビューと全ての機能を使って処理してしまいます。
「レビューして」と依頼したらレビューだけを動かしたいのですが・・・
機能単体で利用できるよう調べて改善したいです。
まとめ
GitLab MCP Serverを使うことで、AIアシスタントがGitLab上の情報を理解しシームレスな開発ができるようになります。
パイプライン失敗の解析やコードレビューの支援など、日々の開発作業をよりスムーズに進められるようになると思うので、ぜひ試してみてください!
Discussion