GitLab MCP Server について
GitLab MCP Serverは、GitLabのプロジェクトやグループの操作をMCPクライアントに公開します。リポジトリ、ファイル、イシュー、マージリクエスト、ラベルに加え、プロジェクト単位とグループ単位のマイルストーンを扱い、ファイルの一括変更とブランチの自動作成にも対応します。
主な機能
- 01リポジトリの検索、作成、フォーク
- 02ファイルの作成・取得と一括プッシュ
- 03ブランチ、イシュー、マージリクエストの管理
- 04ラベルとプロジェクトマイルストーンの管理
- 05複数プロジェクトにまたがるグループマイルストーン管理
活用シーン
- 01単一または複数のプロジェクトファイルを作成・更新する
- 02MCPクライアントからイシューとマージリクエストを追跡する
- 03GitLabグループ内の複数プロジェクトでマイルストーンを調整する
MCP 対応
このサーバーはGitLab APIの操作をMCPクライアントに公開し、プロジェクト、リポジトリ、イシュー、マージリクエスト、ラベル、マイルストーン用のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
GitLab MCP サーバー
プロジェクト管理、ファイル操作などを可能にする GitLab API 用 MCP サーバーです。https://github.com/modelcontextprotocol からフォークされました。
目次
- インストール
- 機能
- グループマイルストーンとプロジェクトマイルストーンの違い
- グループマイルストーンの例
- 実践的なワークフロー:グループの検索とマイルストーンの作成
- ツール
- セットアップ
- 環境変数
- 開発
- ライセンス
インストール
NPX(推奨)
npx @therealchristhomas/gitlab-mcp-server
グローバルインストール
npm install -g @therealchristhomas/gitlab-mcp-server
gitlab-mcp
機能
- ブランチの自動作成:ファイルの作成・更新や変更のプッシュ時に、ブランチが存在しない場合は自動的に作成します
- 包括的なエラー処理:よくある問題に対して明確なエラーメッセージを表示します
- Git 履歴の保持:強制プッシュを行わず、適切な Git 履歴を維持して操作します
- バッチ操作:単一ファイルと複数ファイルの両方の操作に対応します
- プロジェクトワークフロー管理:プロジェクトをより適切に整理するためのラベルとマイルストーンの管理
- リポジトリ管理:GitLab プロジェクトの検索、作成、フォーク
- ファイル操作:ファイル内容の作成、更新、取得
- ブランチ管理:ブランチの作成とリポジトリ構造の管理
- イシュー管理:イシューの作成、一覧表示、更新、検索、コメント
- マージリクエスト管理:マージリクエストの一覧表示、更新、マージ、コメント
- ラベル管理:プロジェクトラベルの作成、更新、削除
- プロジェクトマイルストーン:プロジェクト単位のマイルストーンの作成、更新、削除
- グループマイルストーン:複数のプロジェクトにまたがるグループ単位のマイルストーンの作成、更新、削除
グループマイルストーンとプロジェクトマイルストーンの違い
このサーバーは、プロジェクトマイルストーンとグループマイルストーンの両方に対応しています。
プロジェクトマイルストーン
- 単一のプロジェクトを対象とします
- 使用するツール:
list_milestones、create_milestone、update_milestone、delete_milestone - 例:
my-webappプロジェクトの機能を追跡します
グループマイルストーン
- グループ内の複数のプロジェクトにまたがります
- 使用するツール:
list_group_milestones、create_group_milestone、update_group_milestone、delete_group_milestone include_ancestors、include_descendantsによる高度なフィルタリングに対応しています- 例:
my-webapp、my-api、my-adminにまたがるリリースを追跡します
グループマイルストーンの例
グループマイルストーンの一覧表示
{
"group_id": "my-organization",
"state": "active",
"include_descendants": true
}
グループマイルストーンの作成
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Major feature release including new tools and performance improvements",
"due_date": "2025-03-31",
"start_date": "2025-01-01"
}
高度なグループマイルストーン検索
{
"group_id": "my-organization/core",
"search": "release",
"include_ancestors": true,
"updated_after": "2024-01-01T00:00:00Z"
}
GitLab Group Milestones APIに基づいて、グループマイルストーンは、組織内の複数のプロジェクトにまたがるリリースや機能の調整に最適です。
実践的なワークフロー:グループの検索とマイルストーンの作成
グループマイルストーンを扱う一般的なワークフローは次のとおりです。
1. グループを検索する
まず、作業対象のグループを見つけます。
{
"search": "my-organization",
"owned": true
}
2. 既存のグループマイルストーンを一覧表示する
すでに存在するマイルストーンを確認します。
{
"group_id": "my-organization",
"state": "active"
}
3. グループマイルストーンを作成する
複数のプロジェクトにまたがるマイルストーンを作成します。
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Cross-project release including webapp, API, and admin features",
"due_date": "2025-03-31"
}
このワークフローは、同じグループに複数の関連プロジェクトがある大規模な組織で特に役立ちます。
ツール
ファイル操作
-
create_or_update_file- プロジェクト内の単一ファイルを作成または更新します
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスfile_path(文字列):ファイルを作成または更新するパスcontent(文字列):ファイルの内容commit_message(文字列):コミットメッセージbranch(文字列):ファイルを作成または更新するブランチprevious_path(省略可能な文字列):移動または名前変更するファイルのパス
- 戻り値:ファイルの内容とコミットの詳細
-
push_files- 複数のファイルを単一のコミットでプッシュします
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスbranch(文字列):プッシュ先のブランチfiles(配列):プッシュするファイル。各要素にfile_pathとcontentを含みますcommit_message(文字列):コミットメッセージ
- 戻り値:更新されたブランチ参照
-
get_file_contents- ファイルまたはディレクトリの内容を取得します
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスfile_path(文字列):ファイルまたはディレクトリのパスref(省略可能な文字列):内容を取得するブランチ/タグ/コミット
- 戻り値:ファイルまたはディレクトリの内容
リポジトリ管理
-
search_repositories- GitLab プロジェクトを検索します
- 入力:
search(文字列):検索クエリpage(省略可能な数値):ページネーションのページ番号per_page(省略可能な数値):1 ページあたりの結果数(デフォルトは 20)
- 戻り値:プロジェクトの検索結果
-
create_repository- 新しい GitLab プロジェクトを作成します
- 入力:
name(文字列):プロジェクト名description(省略可能な文字列):プロジェクトの説明visibility(省略可能な文字列):'private'、'internal'、または 'public'initialize_with_readme(省略可能なブール値):README で初期化するかどうか
- 戻り値:作成したプロジェクトの詳細
-
fork_repository- プロジェクトをフォークします
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスnamespace(省略可能な文字列):フォーク先の名前空間
- 戻り値:フォークしたプロジェクトの詳細
-
create_branch- 新しいブランチを作成します
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスbranch(文字列):新しいブランチ名ref(省略可能な文字列):新しいブランチのソースとなるブランチまたはコミット
- 戻り値:作成したブランチ参照
グループ操作
-
search_groups- GitLab グループを検索します
- 入力:
search(文字列):グループの検索クエリpage(省略可能な数値):ページネーションのページ番号per_page(省略可能な数値):1 ページあたりの結果数(デフォルトは 20)owned(省略可能なブール値):現在のユーザーが所有するグループに限定するかどうかmin_access_level(省略可能な数値):最低アクセスレベル(10=Guest、20=Reporter、30=Developer、40=Maintainer、50=Owner)
- 戻り値:グループの検索結果
課題管理
-
create_issue- 新しい課題を作成します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスtitle(string):課題のタイトルdescription(optional string):課題の説明assignee_ids(optional number[]):割り当てるユーザー IDlabels(optional string[]):追加するラベルmilestone_id(optional number):マイルストーン ID
- 戻り値:作成した課題の詳細
-
list_issues- GitLab プロジェクト内のすべての課題を一覧表示します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスstate(optional string):'opened'、'closed'、または 'all'labels(optional string):カンマ区切りのラベル名のリストmilestone(optional string):マイルストーンのタイトルassignee_id(optional number):担当者のユーザー IDauthor_id(optional number):作成者のユーザー IDsearch(optional string):タイトルと説明を対象に検索しますcreated_after(optional string):指定した日付以降に作成された課題を返します(ISO 8601)created_before(optional string):指定した日付より前に作成された課題を返します(ISO 8601)updated_after(optional string):指定した日付以降に更新された課題を返します(ISO 8601)updated_before(optional string):指定した日付より前に更新された課題を返します(ISO 8601)sort(optional string):さまざまな条件で課題を並べ替えますorder_by(optional string):'asc' または 'desc'page(optional number):ページネーションのページ番号per_page(optional number):1 ページあたりの結果数(デフォルトは 20)with_labels_details(optional boolean):true の場合、各ラベルの詳細を返します。デフォルトは false です。
- 戻り値:課題オブジェクトの配列
-
update_issue- GitLab プロジェクト内の既存の課題を更新します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスissue_iid(number):課題の内部 IDtitle(optional string):新しい課題のタイトルdescription(optional string):新しい課題の説明state_event(optional string):'close' または 'reopen'labels(optional string[]):ラベル名の配列assignee_ids(optional number[]):割り当てるユーザー ID の配列milestone_id(optional number):割り当てるマイルストーン ID
- 戻り値:更新した課題の詳細
-
search_issues- GitLab プロジェクト内の課題を検索します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスsearch(string):タイトルと説明を対象とする検索語state(optional string):'opened'、'closed'、または 'all'labels(optional string):カンマ区切りのラベル名のリストpage(optional number):ページネーションのページ番号per_page(optional number):1 ページあたりの結果数(デフォルトは 20)
- 戻り値:一致する課題オブジェクトの配列
-
add_issue_comment- GitLab プロジェクト内の課題にコメントを追加します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスissue_iid(number):課題の内部 IDbody(string):コメントの内容
- 戻り値:作成したコメントの詳細
マージリクエストの管理
create_merge_request
- 新しいマージリクエストを作成します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスtitle(string):MR のタイトルdescription(optional string):MR の説明source_branch(string):変更を含むブランチtarget_branch(string):マージ先のブランチdraft(optional boolean):ドラフト MR として作成しますallow_collaboration(optional boolean):アップストリームのメンバーによるコミットを許可します
- 戻り値:作成されたマージリクエストの詳細
-
list_merge_requests- GitLab プロジェクト内のすべてのマージリクエストを一覧表示します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスstate(optional string):'opened'、'closed'、'locked'、'merged'、または 'all'target_branch(optional string):ターゲットブランチで絞り込みますsource_branch(optional string):ソースブランチで絞り込みますlabels(optional string):ラベル名をコンマ区切りで指定しますmilestone(optional string):マイルストーンのタイトルassignee_id(optional number):担当者のユーザー IDauthor_id(optional number):作成者のユーザー IDsearch(optional string):タイトルと説明を検索しますcreated_after(optional string):指定した日付以降に作成された MR を返します(ISO 8601)created_before(optional string):指定した日付より前に作成された MR を返します(ISO 8601)updated_after(optional string):指定した日付以降に更新された MR を返します(ISO 8601)updated_before(optional string):指定した日付より前に更新された MR を返します(ISO 8601)sort(optional string):マージリクエストの並べ替え方法order_by(optional string):'asc' または 'desc'page(optional number):ページネーションのページ番号per_page(optional number):1 ページあたりの結果数(デフォルトは 20)
- 戻り値:マージリクエストオブジェクトの配列
-
update_merge_request- GitLab プロジェクト内の既存のマージリクエストを更新します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスmerge_request_iid(number):マージリクエストの内部 IDtitle(optional string):新しいマージリクエストのタイトルdescription(optional string):新しいマージリクエストの説明state_event(optional string):'close' または 'reopen'target_branch(optional string):新しいターゲットブランチlabels(optional string[]):ラベル名の配列assignee_ids(optional number[]):割り当てるユーザー ID の配列milestone_id(optional number):割り当てるマイルストーン IDremove_source_branch(optional boolean):マージ時にソースブランチを削除します
- 戻り値:更新されたマージリクエストの詳細
-
merge_merge_request- GitLab プロジェクト内のマージリクエストをマージします
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスmerge_request_iid(number):マージリクエストの内部 IDmerge_commit_message(optional string):カスタムのマージコミットメッセージshould_remove_source_branch(optional boolean):マージ後にソースブランチを削除しますmerge_when_pipeline_succeeds(optional boolean):パイプラインが成功したときにマージしますsha(optional string):ソースブランチの HEAD と一致する必要がある SHA
- 戻り値:マージされたマージリクエストの詳細
-
add_merge_request_comment- GitLab プロジェクト内のマージリクエストにコメントを追加します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスmerge_request_iid(number):マージリクエストの内部 IDbody(string):コメントの内容
- 戻り値:作成されたコメントの詳細
ラベル管理
-
list_labels- プロジェクト内のすべてのラベルを一覧表示します
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスpage(任意の数値):ページネーションのページ番号per_page(任意の数値):1 ページあたりの結果数(デフォルトは 20)
- 戻り値:ラベルオブジェクトの配列
-
create_label- 新しいラベルを作成します
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスname(文字列):ラベル名color(文字列):ラベルの色(16 進数コード)description(任意の文字列):ラベルの説明priority(任意の数値):ラベルの優先度
- 戻り値:作成したラベルの詳細
-
update_label- 既存のラベルを更新します
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスname(文字列):現在のラベル名new_name(任意の文字列):新しいラベル名color(任意の文字列):新しいラベルの色description(任意の文字列):新しいラベルの説明priority(任意の数値):新しいラベルの優先度
- 戻り値:更新したラベルの詳細
-
delete_label- ラベルを削除します
- 入力:
project_id(文字列):プロジェクト ID または URL エンコードされたパスname(文字列):削除するラベル名
- 戻り値:成功の確認
マイルストーン管理
-
list_milestones- プロジェクト内のすべてのマイルストーンを一覧表示します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスstate(省略可能な string):'active' または 'closed'page(省略可能な number):ページネーションのページ番号per_page(省略可能な number):1 ページあたりの結果数(デフォルトは 20)
- 戻り値:マイルストーンオブジェクトの配列
-
create_milestone- 新しいマイルストーンを作成します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスtitle(string):マイルストーンのタイトルdescription(省略可能な string):マイルストーンの説明due_date(省略可能な string):期限(YYYY-MM-DD)start_date(省略可能な string):開始日(YYYY-MM-DD)
- 戻り値:作成されたマイルストーンの詳細
-
update_milestone- 既存のマイルストーンを更新します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスmilestone_id(number):マイルストーン IDtitle(省略可能な string):新しいタイトルdescription(省略可能な string):新しい説明due_date(省略可能な string):新しい期限start_date(省略可能な string):新しい開始日state_event(省略可能な string):'close' または 'activate'
- 戻り値:更新されたマイルストーンの詳細
-
delete_milestone- マイルストーンを削除します
- 入力:
project_id(string):プロジェクト ID または URL エンコードされたパスmilestone_id(number):削除するマイルストーン ID
- 戻り値:成功の確認
-
list_group_milestones- GitLab グループ内のすべてのマイルストーンを一覧表示します
- 入力:
group_id(string):グループ ID または URL エンコードされたパスstate(省略可能な string):'active' または 'closed'title(省略可能な string):マイルストーンのタイトルで絞り込み(大文字と小文字を区別)search(省略可能な string):タイトルまたは説明を検索search_title(省略可能な string):タイトルのみを検索include_ancestors(省略可能な boolean):親グループのマイルストーンを含めるinclude_descendants(省略可能な boolean):サブグループのマイルストーンを含めるupdated_before(省略可能な string):更新日で絞り込み(ISO 8601)updated_after(省略可能な string):更新日で絞り込み(ISO 8601)containing_date(省略可能な string):指定した日付を含むマイルストーンstart_date(省略可能な string):due_date >= start_date で絞り込みend_date(省略可能な string):start_date <= end_date で絞り込みpage(省略可能な number):ページネーションのページ番号per_page(省略可能な number):1 ページあたりの結果数(デフォルトは 20)
- 戻り値:グループマイルストーンオブジェクトの配列
-
create_group_milestone- GitLab グループに新しいマイルストーンを作成します
- 入力:
group_id(string):グループ ID または URL エンコードされたパスtitle(string):マイルストーンのタイトルdescription(省略可能な string):マイルストーンの説明due_date(省略可能な string):期限(YYYY-MM-DD)start_date(省略可能な string):開始日(YYYY-MM-DD)
- 戻り値:作成されたグループマイルストーンの詳細
-
update_group_milestone- GitLab グループ内の既存のマイルストーンを更新します
- 入力:
group_id(string):グループ ID または URL エンコードされたパスmilestone_id(number):マイルストーン IDtitle(省略可能な string):新しいタイトルdescription(省略可能な string):新しい説明due_date(省略可能な string):新しい期限start_date(省略可能な string):新しい開始日state_event(省略可能な string):'close' または 'activate'
- 戻り値:更新されたグループマイルストーンの詳細
-
delete_group_milestone- GitLab グループからマイルストーンを削除します
- 入力:
group_id(string):グループ ID または URL エンコードされたパスmilestone_id(number):削除するマイルストーン ID
- 戻り値:成功の確認
セットアップ
Personal Access Token
適切な権限を設定して、GitLab Personal Access Tokenを作成します。
- GitLabの「User Settings > Access Tokens」に移動します
- 必要なスコープを選択します。
api:APIへのフルアクセスread_api:読み取り専用アクセスread_repositoryとwrite_repository:リポジトリ操作
- トークンを作成し、安全に保管します
Claude Desktopでの使用
claude_desktop_config.jsonに以下を追加します。
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
Cursor/VSCode/Winsurfでの使用
MCPの設定に以下を追加します。
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
注:<YOUR_TOKEN>を実際のGitLab Personal Access Tokenに置き換えてください。また、gitlab.comを使用していない場合は、Gitlab API URLに置き換えてください。
環境変数
GITLAB_PERSONAL_ACCESS_TOKEN:GitLabのPersonal Access Token(必須)GITLAB_API_URL:GitLab APIのベースURL(任意。デフォルトはhttps://gitlab.com/api/v4)
セルフホストのGitLabインスタンスでは、GITLAB_API_URLをインスタンスのURLに更新します。
"GITLAB_API_URL": "https://your-gitlab-instance.com/api/v4"
開発
ビルド
npm run build
開発モード
npm run dev
ウォッチモード
npm run watch
ライセンス
このMCP サーバーはMIT Licenseの下でライセンスされています。MIT Licenseの利用規約に従うことを条件として、ソフトウェアを自由に使用、変更、配布できます。詳しくは、プロジェクトリポジトリのLICENSEファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。