mcp-gitlab について
mcp-gitlabは、AIクライアントをGitLab REST APIに接続するMCPサーバーです。リポジトリ作業向けのツール、リソース、プロンプトを提供し、読み取り専用モードでは書き込みツールを非表示にします。
主な機能
- 01プロジェクト、イシュー、MRの管理
- 02パイプラインとCI/CD変数の操作
- 03コードレビューと承認
- 04ツール、リソース、プロンプトの提供
- 05読み取り専用時の書き込みツール非表示
活用シーン
- 01マージリクエストとイシューの確認
- 02パイプラインとCI/CDの状況確認
- 03ホスト型GitLabインスタンスのプロジェクト管理
- 04エージェントへのGitLab読み取り専用アクセス
MCP 対応
MCPツール、リソース、プロンプトを通じてGitLab REST APIの操作を公開します。stdioとstreamable HTTPに対応し、読み取り専用での運用も可能です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-gitlabGITLAB_TOKENシークレットGitLab personal access token (token mode). Optional after `mcp-gitlab auth login`; also accepts GITLAB_PAT, GITLAB_PERSONAL_ACCESS_TOKEN, GITLAB_API_TOKENGITLAB_URLGitLab instance URL (e.g. https://gitlab.com)GITLAB_READ_ONLYAlias for MCP_READ_ONLY. Any value other than false/0/no/off/empty locks the server read-only; --read-only can only raise the lockMCP_READ_ONLYLocks the server read-only: write tools and write-workflow prompts are not listed and nothing lifts the lock at runtime. Shared name across the mcp-* servers; set it in the deployer's envGITLAB_AUTHシークレットAuthentication mode: token (default) or oauth (OAuth 2.1 proxy; streamable-http only)GITLAB_OAUTH_CLIENT_IDシークレットApplication ID of the GitLab OAuth app (oauth mode, or local sign-in on a self-managed instance)GITLAB_OAUTH_CLIENT_SECRETシークレットSecret of the GitLab OAuth app (oauth mode)GITLAB_OAUTH_BASE_URLシークレットPublic URL of this server, no trailing slash (oauth mode); redirect URI is <base>/auth/callbackGITLAB_OAUTH_SCOPESシークレットSpace-separated GitLab scopes required on every request (oauth mode; default api)GITLAB_OAUTH_JWT_KEYシークレットFastMCP JWT signing key, >=32 random chars (oauth mode; defaults to one derived from the client secret)GITLAB_HTTP_BEARER_TOKENシークレットBearer token (min 16 chars) required to bind an HTTP transport to a non-loopback host; clients send it as 'Authorization: Bearer <token>' (token mode; --auth oauth has its own sign-in)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-gitlab
mcp-gitlab は、GitLab REST API 向けの Model Context Protocol(MCP) サーバーです。AI アシスタントに 91 個のツール、7 個のリソース、6 個のプロンプトを提供し、プロジェクト、マージリクエスト、パイプライン、CI/CD 変数、承認、イシュー、コードレビューを管理できます。Claude Desktop、Claude Code、Cursor、Windsurf、VS Code Copilot、および MCP 対応クライアントで利用できます。書き込み可能モード、または読み取り専用にロックされたモード(MCP_READ_ONLY=true)のどちらかで実行でき、後者では 57 個の書き込みツールがモデルに提示されることはありません。
GitLab.com とセルフホスト型 GitLab インスタンス(CE/EE)に対応しています。GitLab Duo や Premium は不要です。
MCP 2026-07-28 仕様(MCP 2.0 と呼ばれることもあります)に対応し、2025-11-25 クライアントとの互換性も維持しています。
FastMCP 4.x、httpx、Pydantic で構築されています。
インストール: uvx mcp-gitlab | PyPI | MCP Registry | 変更履歴
uvx mcp-gitlab # with writes
MCP_READ_ONLY=true uvx mcp-gitlab # locked read-only: write tools are not listed
ワンクリックインストール
💡 ヒント: その他の AI アシスタント(Claude Code、Windsurf、IntelliJ、Gemini CLI)については、GitLab MCP Installation Gateway をご覧ください。
手動セットアップガイド(クリックして展開)
前提条件:まず
uvをインストールしてください(すべてのuvxインストール手順で必要です)。uv をインストール。
Claude Code
# with writes
claude mcp add gitlab -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
# locked read-only
claude mcp add gitlab -e MCP_READ_ONLY=true -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
Windsurf と IntelliJ
Windsurf: ~/.codeium/windsurf/mcp_config.json に追加します
IntelliJ: Settings | Tools | MCP Servers に追加します
注: 実際のサーバー設定は、
mcpServersオブジェクト内のgitlabから始まります。書き込みを許可するにはMCP_READ_ONLYを削除してください。
{
"mcpServers": {
"gitlab": {
"command": "uvx",
"args": ["mcp-gitlab"],
"env": {
"GITLAB_URL": "https://gitlab.example.com",
"GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
"MCP_READ_ONLY": "true"
}
}
}
}
Gemini CLI
# with writes
gemini mcp add -s user -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx gitlab uvx mcp-gitlab
# locked read-only
gemini mcp add -s user -e MCP_READ_ONLY=true -e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx gitlab uvx mcp-gitlab
VS Code
.vscode/mcp.json に追加します。書き込みを許可するには MCP_READ_ONLY を削除してください。
{
"servers": {
"gitlab": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-gitlab"],
"env": {
"GITLAB_URL": "https://gitlab.example.com",
"GITLAB_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
"MCP_READ_ONLY": "true"
}
}
}
}
Codex
# with writes
codex mcp add gitlab --env GITLAB_URL=https://gitlab.example.com --env GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
# locked read-only
codex mcp add gitlab --env MCP_READ_ONLY=true --env GITLAB_URL=https://gitlab.example.com --env GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx -- uvx mcp-gitlab
pip / uv
uv pip install mcp-gitlab
書き込みを許可するには MCP_READ_ONLY を削除してください。共有サーバーまたはホスト型サーバーでは、クライアント設定ではなくデプロイ担当者の環境に設定してください。
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
GITLAB_URL | はい | - | GitLab インスタンスの URL(例:https://gitlab.example.com) |
GITLAB_TOKEN | mcp-gitlab auth login でサインインしていない場合は必須 | - | 認証トークン(下記参照) |
MCP_READ_ONLY | いいえ | false | mcp-* サーバー間で共通の名前です。false/0/no/off/空以外の値を指定すると、サーバーは読み取り専用にロックされます。57 個の書き込みツールと書き込みワークフローのプロンプトは一覧に表示されず、実行時にロックを解除することもできません |
GITLAB_READ_ONLY | いいえ | false | MCP_READ_ONLY のサーバーごとの別名です。どちらを指定してもサーバーは読み取り専用にロックされます。--read-only でロックを強めることはできますが、解除はできません |
GITLAB_HTTP_BEARER_TOKEN | いいえ | - | HTTP トランスポートをループバック以外のホストにバインドする際に必要なベアラートークン(16 文字以上)です。クライアントは Authorization: Bearer <token> を送信します。トークンモードのみ |
GITLAB_TIMEOUT | いいえ | 30 | リクエストのタイムアウト(秒) |
GITLAB_SSL_VERIFY | いいえ | true | SSL 検証をスキップするには false を指定します |
GITLAB_AUTH | いいえ | token | token(環境変数の PAT)または oauth(OAuth 2.1 プロキシ。下記参照) |
サポートされているトークンの種類
サーバーは以下の環境変数を順に確認し、最初に一致したものを使用します。
GITLAB_TOKENGITLAB_PATGITLAB_PERSONAL_ACCESS_TOKENGITLAB_API_TOKEN
以下のいずれかの種類のトークンを指定できます。
| トークンの種類 | 形式 | 用途 |
|---|---|---|
| パーソナルアクセストークン | glpat-xxx | api スコープを持つユーザーレベルのアクセス |
| OAuth2 トークン | oauth-xxx | OAuth アプリとの連携 |
| CI ジョブトークン | $CI_JOB_TOKEN | GitLab CI パイプラインへのアクセス |
トークンなしでサインインする
stdio 経由で自分用にサーバーを実行し、パーソナルアクセストークンがない場合に使用します。mcp-gitlab auth login を実行すると、パブリック OAuth クライアントとして GitLab にサインインし、トークンをローカルに保存します。以降、サーバーは起動時にトークンを読み込み、自動で更新します。これは OAuth モードではありません。サーバーはトークンモードのままで、MCP ワイヤ上の動作に変更はありません。
コマンドは 3 つです。
mcp-gitlab auth login # device flow by default; add --web for the browser flow
mcp-gitlab auth status # show the stored account, scopes, and token freshness
mcp-gitlab auth logout # revoke the token at GitLab and delete the local copy
auth login を実行すると、コードと URL が表示されます。URL を開いてコードを入力し、承認してください。その後、GITLAB_URL を設定し、トークンを指定しなくてもサーバーを使用できます。
クライアント ID
サインインのたびに OAuth アプリケーション ID が必要です。解決順序は --client-id、GITLAB_OAUTH_CLIENT_ID、https://gitlab.com 用の組み込みデフォルトです。
gitlab.com のデフォルトは、まだ登録されていません。登録されるまでは、gitlab.com でも GITLAB_OAUTH_CLIENT_ID を設定するか、--client-id を指定してください。
アプリを登録する(セルフマネージド環境、またはデフォルトが提供されるまでの gitlab.com)
User Settings → Applications → Add new application で、以下の設定を使ってアプリケーションを作成します。
| フィールド | 値 |
|---|---|
| Name | mcp-gitlab |
| Redirect URI | http://127.0.0.1/callback(ループバック IP。ポートなし) |
| Confidential | チェックなし(パブリッククライアント) |
| Scopes | api、read_api |
localhost ではなく 127.0.0.1 を使用してください。デバイスフローには GitLab 17.9 以降が必要です。それより古いインスタンスでは mcp-gitlab auth login --web を使用してください。
保存場所と優先順位
認証情報は ~/.config/mcp-gitlab/credentials.json に、GitLab URL ごとに 1 件ずつ、モード 0600 で保存されます。環境変数のトークンが常に優先されます。GITLAB_TOKEN が設定されている場合、サーバーはその値を使用し、保存済みの認証情報は無視します。
読み取り専用セッションにするには --scopes read_api を指定してください。この場合、サーバーは API 呼び出しの前に書き込みツールをブロックします。
OAuth 2.1(リモートデプロイ)
複数人で共有するサーバーでは、--auth oauth を指定すると、GitLab を上流の OAuth プロバイダーとする MCP 2026-07-28 リソースサーバーとして mcp-gitlab が動作します。各ユーザーはそれぞれの GitLab アカウントでサインインし、すべてのリクエストはそのユーザーのトークンで実行されるため、サーバーにパーソナルアクセストークンを設定する必要はありません。サーバーを一度ホストし、複数のユーザーが接続する場合に使用してください。単一ユーザーのローカル環境では、デフォルトの --auth token を使用してください。
OAuth モードには --transport streamable-http が必要です(OAuth は HTTP にのみ適用されます。stdio では引き続き環境トークンが使用されます)。
1. GitLab OAuth アプリケーションを登録する(ユーザー設定 → アプリケーション、またはグループ/インスタンスのアプリケーション)。リダイレクト URI を <base>/auth/callback(例:https://mcp.example.com/auth/callback)に設定し、機密情報としてマークして、api スコープ(読み取り専用のデプロイでは read_api)を許可します。Application ID と Secret をコピーします。
2. サーバーを設定する:
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
GITLAB_URL | はい | - | GitLab インスタンス。上流の認可サーバーとしても使用されます |
GITLAB_OAUTH_CLIENT_ID | はい | - | Application ID(OAuth モードまたはローカルサインイン用) |
GITLAB_OAUTH_CLIENT_SECRET | はい | - | アプリケーションのシークレット |
GITLAB_OAUTH_BASE_URL | はい | - | このサーバーの公開 URL。末尾にスラッシュを付けないでください(例:https://mcp.example.com)。リソース URL は <base>/mcp です |
GITLAB_OAUTH_SCOPES | いいえ | api | すべてのリクエストで必要となる GitLab スコープをスペース区切りで指定します。読み取り専用の OAuth デプロイでは、ここに read_api を設定し、さらに MCP_READ_ONLY=true にしてください。これにより、書き込みツールがサーバー全体で非表示になり、ユーザーごとのトークンにも書き込みスコープが付与されません |
GITLAB_OAUTH_JWT_KEY | いいえ | 生成値 | FastMCP の JWT 署名キー。ランダムな文字を 32 文字以上指定してください。本番環境では設定して、クライアントシークレットをローテーションしてもクライアント登録が保持されるようにしてください |
FASTMCP_HOME | いいえ | プラットフォームのデータディレクトリ | 暗号化されたトークンストアは $FASTMCP_HOME/oauth-proxy/<fingerprint>/ に保存されます |
GITLAB_URL=https://gitlab.com GITLAB_AUTH=oauth \
GITLAB_OAUTH_CLIENT_ID=... GITLAB_OAUTH_CLIENT_SECRET=... \
GITLAB_OAUTH_BASE_URL=https://mcp.example.com \
uvx mcp-gitlab --transport streamable-http
MCP クライアント(または MCP Inspector、pnpm dlx @modelcontextprotocol/inspector)から <base>/mcp に接続すると、認可サーバーを検出して OAuth フローを実行します。その後、各ツール呼び出しでは、そのユーザーの GitLab トークンが使用されます。read_api のみのトークンでは読み取りはできますが、実行可能な対応策を示すヒントとともに書き込みが拒否されます。
詳しいガイド、クライアントの設定、トラブルシューティングについては、docs/oauth.md をご覧ください。
互換性
| クライアント | 対応 | インストール方法 |
|---|---|---|
| Claude Desktop | はい | claude_desktop_config.json |
| Claude Code | はい | claude mcp add |
| Cursor | はい | ワンクリックのディープリンクまたは .cursor/mcp.json |
| VS Code Copilot | はい | ワンクリックのディープリンクまたは .vscode/mcp.json |
| Windsurf | はい | ~/.codeium/windsurf/mcp_config.json |
| 任意の MCP クライアント | はい | stdio または HTTP トランスポート |
プロトコルのサポート
mcp-gitlab は Model Context Protocol を実装しています。MCP 2.0 とも呼ばれる 2026-07-28 仕様をサポートしています。2025-11-25 クライアントとの互換性も維持しています。
- 仕様:MCP 2026-07-28(MCP 2.0)。
stdioとstreamable-httpで検証済みです。 - レガシークライアント:2025-11-25 クライアントも引き続き動作します。
- 基盤:FastMCP 4.x と MCP Python SDK 2.x。
- トランスポート:
stdio(デフォルト)とstreamable-http(リモート接続に推奨)。sse(HTTP+SSE)トランスポートも引き続き動作しますが、2026-07-28 仕様では非推奨になっています。使用するとサーバーが警告を表示します。 - 機能:ツール、リソース、プロンプト。サーバーはルート、サンプリング、ログ記録、エリシテーション、リソースサブスクリプションを使用しないため、2026-07-28 での非推奨化の影響はありません。
エラー結果
予期される失敗(404、401、検証エラー、または読み取り専用ガードに阻止された書き込み)は、プロトコルレベルの isError フラグが設定されたツール結果として返されるため、クライアントは正常に見える結果から "error" キーを解析するのではなく、失敗を検出して自己修正できます。ロックされた読み取り専用モードでは書き込みツールが非表示になるため、呼び出すと Unknown tool エラーが返されます。読み取り専用エンベロープはガード自体の応答であり、クライアントが何らかの理由で書き込みツールに到達した場合(キャッシュされた一覧、または将来タグ付けされていないツール)にのみ返されます。本文は error と、役立つ場合は status_code、body、および実行可能な hint を含む JSON オブジェクトです。このオブジェクトが結果のテキストコンテンツになります。厳格なクライアント(TypeScript MCP SDK)は isError の結果でも structuredContent をツールの出力スキーマに照らして検証し、そのスキーマはエラー本文を拒否するため、エラー結果には structuredContent は設定されません。予期しないバグも isError の結果として返されますが、TypeName: message のテキストのみを含み、同様に structuredContent はありません。
成功した結果では、レスポンスは整形済みのテキストコンテンツと structuredContent の両方で JSON オブジェクトとして返されます(オブジェクトそのものであり、厳格なクライアントが拒否する旧形式の {"result": "<json string>"} ラッパーではありません)。ツールは outputSchema を公開しません。上流の GitLab フィールドは型指定されずにそのまま渡されるため、新しい API フィールドがスキーマに影響することはありません。クライアントが型指定されたスキーマを必要とする場合は、ツールごとに output_schema= を指定してオプトインできます。
ツール(91)
| カテゴリ | 数 | ツール |
|---|---|---|
| プロジェクト | 4 | 取得、作成、削除、マージ設定の更新 |
| プロジェクト承認 | 10 | 設定の取得/更新、承認ルールの CRUD(プロジェクト+MR) |
| グループ | 6 | 一覧表示、取得、プロジェクトの共有/共有解除、グループの共有/共有解除 |
| ブランチ | 3 | 一覧表示、作成、削除 |
| コミット | 4 | 一覧表示、取得(差分付き)、作成、比較 |
| リポジトリファイル | 4 | ファイルの取得(ref、行範囲指定)、ツリーの一覧表示、コード検索、blame |
| マージリクエスト | 15 | 一覧表示、取得、作成、更新、マージ、マージシーケンス、リベース、変更の取得、承認、承認解除、承認の取得、パイプラインの一覧表示、コミットの一覧表示、登録、登録解除 |
| MR ノート | 6 | 一覧表示、追加、削除、更新、絵文字リアクションの付与、絵文字リアクションの削除 |
| MR ディスカッション | 4 | 一覧表示、作成(インライン+複数行)、返信、解決 |
| 下書きノート | 4 | 作成(インライン、SHA 自動入力)、一覧表示、すべて公開、削除 |
| パイプライン | 5 | 一覧表示、取得(ジョブ付き)、作成、再試行、キャンセル |
| ジョブ | 4 | 再試行、実行、キャンセル、ログの取得 |
| タグ | 4 | 一覧表示、取得、作成、削除 |
| リリース | 5 | 一覧表示、取得、作成、更新、削除 |
| CI/CD 変数 | 8 | プロジェクト変数の CRUD、グループ変数の CRUD |
| イシュー | 5 | 一覧表示、取得、作成、更新、コメントの追加 |
ツールの完全なリファレンス(クリックして展開)
プロジェクト
| ツール | 説明 |
|---|---|
gitlab_get_project | プロジェクトの詳細を取得 |
gitlab_create_project | 新しいプロジェクトを作成 |
gitlab_delete_project | プロジェクトを削除 |
gitlab_update_project_merge_settings | マージ設定を更新 |
プロジェクト承認
| ツール | 説明 |
|---|---|
gitlab_get_project_approvals | 承認設定を取得 |
gitlab_update_project_approvals | 承認設定を更新 |
gitlab_list_project_approval_rules | 承認ルールを一覧表示 |
gitlab_create_project_approval_rule | 承認ルールを作成 |
gitlab_update_project_approval_rule | 承認ルールを更新 |
gitlab_delete_project_approval_rule | 承認ルールを削除 |
gitlab_list_mr_approval_rules | MR 承認ルールを一覧表示 |
gitlab_create_mr_approval_rule | MR 承認ルールを作成 |
gitlab_update_mr_approval_rule | MR 承認ルールを更新 |
gitlab_delete_mr_approval_rule | MR 承認ルールを削除 |
グループ
| ツール | 説明 |
|---|---|
gitlab_list_groups | グループの一覧を取得 |
gitlab_get_group | グループの詳細を取得 |
gitlab_share_project_with_group | プロジェクトをグループと共有 |
gitlab_unshare_project_with_group | グループとのプロジェクト共有を解除 |
gitlab_share_group_with_group | グループを別のグループと共有 |
gitlab_unshare_group_with_group | 別のグループとのグループ共有を解除 |
ブランチ
| ツール | 説明 |
|---|---|
gitlab_list_branches | ブランチの一覧を取得 |
gitlab_create_branch | ブランチを作成 |
gitlab_delete_branch | ブランチを削除 |
コミット
| ツール | 説明 |
|---|---|
gitlab_list_commits | コミットの一覧を取得 |
gitlab_get_commit | コミットを取得(差分は任意) |
gitlab_create_commit | ファイル操作を指定してコミットを作成 |
gitlab_compare | ブランチ/タグ/コミットを比較 |
リポジトリファイル
| ツール | 説明 |
|---|---|
gitlab_get_file | ref 時点のデコード済みファイル内容をメタデータとともに取得(行範囲は任意) |
gitlab_list_tree | ref 時点のリポジトリツリーのエントリ(ファイルとディレクトリ)の一覧を取得 |
gitlab_search_code | プロジェクトのコードを検索(scope=blobs)。インスタンスの検索バックエンドに依存 |
gitlab_get_blame | ref 時点のファイルの git blame を取得。行範囲の指定は任意 |
マージリクエスト
| ツール | 説明 |
|---|---|
gitlab_list_mrs | マージリクエストの一覧を取得 |
gitlab_get_mr | MR の詳細を取得 |
gitlab_create_mr | マージリクエストを作成 |
gitlab_update_mr | マージリクエストを更新 |
gitlab_merge_mr | マージリクエストをマージ |
gitlab_merge_mr_sequence | 複数の MR を順番にマージ |
gitlab_rebase_mr | マージリクエストをリベース |
gitlab_mr_changes | MR のファイル変更を取得 |
gitlab_approve_mr | マージリクエストを承認 |
gitlab_unapprove_mr | マージリクエストの承認を取り消し |
gitlab_get_mr_approvals | MR の承認状態を取得 |
gitlab_list_mr_pipelines | MR パイプラインの一覧を取得 |
gitlab_list_mr_commits | MR のコミット一覧を取得 |
gitlab_subscribe_mr | MR の通知を購読 |
gitlab_unsubscribe_mr | MR の通知の購読を解除 |
MR のノート
| ツール | 説明 |
|---|---|
gitlab_list_mr_notes | MR のコメント一覧を取得 |
gitlab_add_mr_note | MR にコメントを追加 |
gitlab_delete_mr_note | MR のコメントを削除 |
gitlab_update_mr_note | MR のコメントを更新 |
gitlab_award_emoji | ノートに絵文字を付与 |
gitlab_remove_emoji | ノートから絵文字を削除 |
MR のディスカッション
| ツール | 説明 |
|---|---|
gitlab_list_mr_discussions | ディスカッションの一覧を取得 |
gitlab_create_mr_discussion | ディスカッションを作成(インラインおよび複数行。old_line/new_line の組み合わせは MR の差分から解決) |
gitlab_reply_to_discussion | ディスカッションに返信 |
gitlab_resolve_discussion | ディスカッションを解決/未解決にする |
下書きノート
| ツール | 説明 |
|---|---|
gitlab_create_draft_note | 未公開の下書きノートを作成(SHA は MR の最新バージョンから取得し、対応する行番号は差分から取得) |
gitlab_list_draft_notes | 現在のユーザーの未公開の下書きノート一覧を取得 |
gitlab_publish_draft_notes | 保留中の下書きノートをすべて一度に公開(「レビューを送信」) |
gitlab_delete_draft_note | 未公開の下書きノートを1件削除 |
パイプライン
| ツール | 説明 |
|---|---|
gitlab_list_pipelines | パイプラインの一覧を取得 |
gitlab_get_pipeline | パイプラインを取得(ジョブは任意) |
gitlab_create_pipeline | パイプラインを実行 |
gitlab_retry_pipeline | 失敗したジョブを再試行 |
gitlab_cancel_pipeline | パイプラインをキャンセル |
ジョブ
| ツール | 説明 |
|---|---|
gitlab_retry_job | ジョブを再試行 |
gitlab_play_job | 手動ジョブを実行 |
gitlab_cancel_job | ジョブをキャンセル |
gitlab_get_job_log | ジョブログの出力を取得(デフォルトでは直近の200行。すべて取得する場合は tail_lines=0) |
タグ
| ツール | 説明 |
|---|---|
gitlab_list_tags | タグを一覧表示 |
gitlab_get_tag | タグの詳細を取得 |
gitlab_create_tag | タグを作成 |
gitlab_delete_tag | タグを削除 |
リリース
| ツール | 説明 |
|---|---|
gitlab_list_releases | リリースを一覧表示 |
gitlab_get_release | リリースの詳細を取得 |
gitlab_create_release | リリースを作成 |
gitlab_update_release | リリースを更新 |
gitlab_delete_release | リリースを削除 |
CI/CD 変数
| ツール | 説明 |
|---|---|
gitlab_list_variables | プロジェクト変数を一覧表示 |
gitlab_create_variable | プロジェクト変数を作成 |
gitlab_update_variable | プロジェクト変数を更新 |
gitlab_delete_variable | プロジェクト変数を削除 |
gitlab_list_group_variables | グループ変数を一覧表示 |
gitlab_create_group_variable | グループ変数を作成 |
gitlab_update_group_variable | グループ変数を更新 |
gitlab_delete_group_variable | グループ変数を削除 |
イシュー
| ツール | 説明 |
|---|---|
gitlab_list_issues | イシューを一覧表示 |
gitlab_get_issue | イシューの詳細を取得 |
gitlab_create_issue | イシューを作成 |
gitlab_update_issue | イシューを更新 |
gitlab_add_issue_comment | イシューにコメントを追加 |
リソース(7)
このサーバーは、クライアントが必要に応じて読み取れる、厳選されたワークフローガイドをMCP リソースとして公開します。
| URI | 名前 | 説明 |
|---|---|---|
resource://rules/gitlab-ci | GitLab CI/CD パイプラインのパターン | ステージ設計、ジョブルール、キャッシュ、アーティファクト、needs DAG、マルチプロジェクトパイプライン |
resource://rules/git-workflow | Git ワークフロー標準 | ブランチの命名、トランクベースのフロー、マージとリベース、保護されたブランチ |
resource://rules/mr-hygiene | マージリクエストのベストプラクティス | MR のサイズ、説明テンプレート、レビュー用チェックリスト、スレッドの解決 |
resource://rules/conventional-commits | Conventional Commits 仕様 | コミットの種類、スコープ、破壊的変更、変更履歴の生成 |
resource://guides/code-review | コードレビュー標準 | レビューの優先事項、インラインコメント、承認ワークフロー、軽微な指摘とブロッカー |
resource://guides/codeowners | GitLab CODEOWNERS リファレンス | 構文、セクションオーナー、承認ルール、パターンマッチング |
resource://guides/approval-workflow | 承認ワークフローガイド | 承認の種類、プロジェクト単位と MR 単位のルール、SHA の安全性、マージの準備状況 |
プロンプト(6)
このサーバーは、クライアントがスラッシュコマンドとして表示できる、再利用可能な複数ツールのワークフローテンプレートであるMCP プロンプトを提供します。
| プロンプト | パラメーター | ワークフロー |
|---|---|---|
review_mr | project_id, mr_iid | MR を取得 → パイプラインを確認 → 変更をレビュー → ディスカッションのメモを作成 |
approve_mr | project_id, mr_iid | 承認を確認 → パイプラインを検証 → 変更をレビュー → 承認または変更をリクエスト |
diagnose_pipeline | project_id, pipeline_id | パイプラインを取得 → 失敗したジョブを特定 → ログを取得 → 修正を提案 |
prepare_release | project_id, tag_name, ref | 前回のタグ以降のコミットを比較 → 変更履歴の草案を作成 → タグとリリースを作成 |
setup_branch_protection | project_id | 設定を確認 → マージ方法を構成 → 承認ルールを設定 |
triage_issues | project_id, label | オープン中のイシューを一覧表示 → 分類 → 優先順位付け → 重複を特定 |
使用例
プロジェクトとブランチ
"Get details for project my-org/api-gateway"
→ gitlab_get_project(project_id="my-org/api-gateway")
"Create a feature branch from main"
→ gitlab_create_branch(project_id="123", branch_name="feat/login", ref="main")
"Delete all branches merged into main"
→ gitlab_list_branches(project_id="123") → filter merged → gitlab_delete_branch for each
マージリクエストとコードレビュー
"Open a merge request from feat/login to main"
→ gitlab_create_mr(project_id="123", source_branch="feat/login", target_branch="main", title="Add login")
"Review MR !42 — list changes and add inline comments"
→ gitlab_mr_changes(project_id="123", mr_iid=42)
→ gitlab_create_mr_discussion(project_id="123", mr_iid=42, body="nit: ...", new_path="src/auth.py", new_line=15)
# old_line is filled from the diff when line 15 is unchanged
"Merge MR !42 after resolving all threads"
→ gitlab_list_mr_discussions(project_id="123", mr_iid=42) → resolve unresolved
→ gitlab_merge_mr(project_id="123", mr_iid=42, squash=True)
パイプラインと CI/CD
"Show failed pipelines on main this week"
→ gitlab_list_pipelines(project_id="123", ref="main", status="failed")
"Retry a failed pipeline"
→ gitlab_retry_pipeline(project_id="123", pipeline_id=456)
"Get the build log for job 789"
→ gitlab_get_job_log(project_id="123", job_id=789, tail_lines=100)
イシュー
"Create a bug report in project 123"
→ gitlab_create_issue(project_id="123", title="Login page 500 error", labels=["bug","P1"])
"Find open issues assigned to me"
→ gitlab_list_issues(project_id="123", state="opened", assignee_username="johndoe")
セキュリティに関する考慮事項
- トークンのスコープ:必要最小限のスコープを使用してください。
apiスコープはすべてのアクセスを許可するため、読み取り専用のデプロイではread_apiを推奨します。 - 読み取り専用モード:起動を管理する場所で
MCP_READ_ONLY=true(またはGITLAB_READ_ONLY=true)を設定すると、サーバーはロックされた状態で起動します。57 個の書き込みツールと書き込みワークフローのプロンプトは一覧に表示されず、それらを呼び出すと「Unknown tool」が返され、ガードはそれでも到達した書き込みを拒否します。実行時にロックを解除するものはありません。別のソースからのfalse、.envファイル、ツール引数のいずれも解除できません。false/0/no/off/空以外の値はすべてロックし、--read-onlyはロックを強めることしかできません。ロックの強度は起動方法に依存します。ユーザーが編集できない場所(Claude Code のmanaged-mcp.jsonなどの管理対象 MCP 設定、コンテナ、k8s または systemd の環境変数、ホスト型 HTTP デプロイなど)で設定してください。サーバーを自分で起動するユーザーは、その環境を制御できます。OAuth モードでは、各ユーザーの GitLab トークンに書き込みスコープが含まれないよう、GITLAB_OAUTH_SCOPES=read_apiも設定してください。 - SSL 検証:デフォルトでは
GITLAB_SSL_VERIFY=trueです。信頼できるネットワーク内で自己署名証明書を使用する場合に限り、無効にしてください。 - CI/CD 変数のマスキング:
gitlab_list_variablesとgitlab_list_group_variablesは、GitLab でマスク対象として設定された変数の値を自動的にマスクし、実際の値の代わりに***MASKED***を返します。 - MCP ツールのアノテーション:各ツールは、クライアント側の権限確認プロンプト用に
readOnlyHint、destructiveHint、idempotentHintを宣言します。 - 認証情報の保存:サーバーは環境変数から
GITLAB_TOKENを読み込み、書き込むことはありません。mcp-gitlab auth loginは OAuth トークンを~/.config/mcp-gitlab/credentials.jsonに保存し(モード 0600)、その場で更新します。
レート制限と権限
レート制限
GitLab はユーザーごとのレート制限を適用します(デフォルトでは、認証済みユーザーは 1 分あたり 2000 リクエストです)。レート制限に達すると、ツールは再試行まで待つよう案内するヒント付きの 429 エラーを返します。ページネーション対応エンドポイントのデフォルトは 1 ページあたり 20 件です。API 呼び出し回数を減らすには、per_page(最大 100)を使用してください。
必要な権限
| 操作 | 必要な GitLab ロール |
|---|---|
| プロジェクト、MR、パイプライン、イシュー、ファイル/ツリー/blame/コード検索の読み取り | Reporter |
| ブランチ、MR、イシュー、下書きノート(作成/公開/削除)の作成 | Developer |
| MR のマージ、CI/CD 変数の管理 | Maintainer |
| プロジェクトの削除、承認ルールの管理 | Maintainer/Owner |
| プロジェクト/グループの共有 | Owner(または Admin) |
CLI とトランスポートのオプション
# Default: stdio transport (for MCP clients)
uvx mcp-gitlab
# HTTP transport — streamable-http is recommended for remote use
uvx mcp-gitlab --transport streamable-http --port 9000
# SSE transport — deprecated by MCP 2026-07-28; still works, prints a warning
uvx mcp-gitlab --transport sse --host 127.0.0.1 --port 8000
# OAuth 2.1 mode (per-user GitLab sign-in; streamable-http only) — see "OAuth 2.1" above
uvx mcp-gitlab --auth oauth --transport streamable-http
# Local sign-in for stdio without a token — see "Sign in without a token" above
mcp-gitlab auth login|status|logout
# CLI overrides for config
GITLAB_TOKEN=glpat-xxx uvx mcp-gitlab --gitlab-url https://gitlab.example.com --read-only
--gitlab-token は引き続き使用できますが、非推奨であり、--help には表示されません。トークンが
ps とシェルの履歴に残るためです。GITLAB_TOKEN を使用してください。
--auth {token,oauth} は認証モードを選択します(デフォルトは token)。
oauth には --transport streamable-http が必要です。
トークンモードでは、HTTP トランスポートは単一の GITLAB_TOKEN を使ってすべてのツールを提供するため、
ポートに接続できるすべてのユーザーが利用できます。そのため、GITLAB_HTTP_BEARER_TOKEN(16 文字以上。クライアントは
Authorization: Bearer <token> として送信します)を設定するか、ユーザーごとのサインインを行うために --auth oauth に切り替えない限り、
ループバック以外の --host へのバインドは拒否されます。デフォルトの 127.0.0.1 へのバインドでは、どちらも必要ありません。
サーバーは python-dotenv を使って、作業ディレクトリにある .env ファイルを自動的に読み込みます。
Docker
最小構成の非 root イメージを、このリポジトリ(uv、コミット済みの uv.lock)から直接ビルドします。イメージは
デフォルトで読み取り専用にロックされています(MCP_READ_ONLY=true)。書き込みを許可するには、この設定を上書きしてください。
docker build -t mcp-gitlab .
# locked read-only (the image default) — stdio for an MCP client
docker run --rm -i \
-e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
mcp-gitlab
# allow writes: override the read-only default
docker run --rm -i \
-e MCP_READ_ONLY=false \
-e GITLAB_URL=https://gitlab.example.com -e GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
mcp-gitlab
HTTP トランスポートを使う場合は、--transport streamable-http --host 0.0.0.0 を追加してください。トークンモードでループバック以外にバインドするには、
GITLAB_HTTP_BEARER_TOKEN(16 文字以上)または GITLAB_AUTH=oauth が必要です(上記を参照)。
FAQ
mcp-gitlab は MCP 2.0 をサポートしていますか?
はい。一般に MCP 2.0 と呼ばれる MCP 2026-07-28 仕様をサポートしています。また、2025-11-25 クライアントとの互換性も維持しています。
セルフホスト版 GitLab でも動作しますか?
はい。GitLab.com とセルフホスト版 GitLab(CE および EE)で動作します。GitLab Duo や Premium は必要ありません。
どのトランスポートに対応していますか?
stdio(デフォルト)とstreamable-httpに対応しています。sseトランスポートも引き続き動作しますが、2026-07-28の仕様では非推奨となっています。OAuth 2.1 モード(--auth oauth)はstreamable-httpでのみ利用できます。
アシスタントがマージ、プッシュ、コメントできないように、mcp-gitlab を読み取り専用で実行できますか?
はい。MCP_READ_ONLY=true(またはGITLAB_READ_ONLY=true)を設定して起動してください。すると、57 個の書き込みツールと書き込みワークフローのプロンプトは一切表示されなくなるため、モデルがそれらを見ることはありません。呼び出すと「Unknown tool」が返され、プロセスの実行中に書き込みを再び有効にすることはできません。ユーザーが自分でサーバーを起動する場合は、この変数を指定せずに起動できるため、管理している起動設定(管理対象の MCP 設定、コンテナーや systemd の環境変数、ホステッドデプロイなど)で設定してください。
必要なトークンスコープは何ですか?
すべての機能を利用するには、apiスコープのトークンを使用してください。読み取り専用のデプロイでは、read_apiスコープを使用してください。サーバーは環境変数からGITLAB_TOKENを読み込みますが、書き込むことはありません。mcp-gitlab auth loginで取得したトークンは~/.config/mcp-gitlab/credentials.jsonに保存されます。
どの AI アシスタントで利用できますか?
Claude Desktop、Claude Code、Cursor、Windsurf、VS Code Copilot、および MCP 互換クライアントで利用できます。
mcp-gitlab をインストールするにはどうすればよいですか?
uvx mcp-gitlabを実行するか、MCP クライアントの設定に追加してください。詳しくは、上記のインストールセクションをご覧ください。
関連する MCP サーバー
- mcp-atlassian-extended — Jira + Confluence 連携(22 個のツール、15 個のリソース、5 個のプロンプト)
- mcp-coda — Coda 連携(53 個のツール、12 個のリソース、5 個のプロンプト)
- mcp-argocd — Argo CD 連携(37 個のツール、7 個のリソース、7 個のプロンプト)
開発
git clone https://github.com/vish288/mcp-gitlab.git
cd mcp-gitlab
uv sync --all-extras
uv run pytest --cov
uv run ruff check .
uv run ruff format --check .
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。