mcpField
G
gitlab-mcp

gitlab-mcp

ローカル
github.comバージョン管理0今日更新

gitlab-mcp について

gitlab-mcpは、gitlab.comのプロジェクトで作業する人向けのstdioサーバーで、Issue、マージリクエスト、コードレビュー、リポジトリ、CIを扱います。非信頼コンテンツの境界、書き込み操作の制限、OSキーチェーンを使ったOAuthログインを備えています。

主な機能

  1. 01Issueとマージリクエスト用ツール
  2. 02コードレビューとディスカッション管理
  3. 03リポジトリ、ブランチ、コミット操作
  4. 04CIパイプラインとジョブの確認
  5. 05OSキーチェーンに保存するOAuthログイン
  6. 06非信頼コンテンツの境界とツール登録制御

活用シーン

  1. 01プロジェクトのIssueを検索・更新
  2. 02マージリクエストの差分を確認しコメントを送信
  3. 03パイプラインのジョブ、ログ、テスト結果を確認
  4. 04プロジェクトのブランチやコミットを管理

MCP 対応

stdioで動作し、GitLabのプロジェクト操作をMCPツールとして公開します。Issue、マージリクエスト、ジョブログ向けのリソースも提供し、サーバー設定またはClaude Desktopバンドルから接続できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbgitlab-mcp_4.1.4.mcpb4.1.4

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

gitlab-mcp

CI Release Go Reference License: Apache 2.0

gitlab.com 向けの MCP サーバーです。stdio 経由で動作する単一のバイナリで、あなたとしてサインインします。 プロジェクト内のイシュー、マージリクエスト、レビュー、リポジトリ、CI に対応しています。インスタンスとグループの管理、ランナー、CI 変数、トークンは対象外です。

非公式であり、GitLab Inc. とは提携していません。NOTICE をご覧ください。

他との違い

  • 登録によって制御される、必要最小限の機能群。 API の単なるミラーではなく、ツールは約 60 個です。無効にしたツールは登録されないため、呼び出すことはできません。
  • 書き込み操作でクイックアクションが実行されることはありません。 コメント内の /merge は拒否またはエスケープされ、実行されることはありません。
  • コンテンツは信頼できないものとしてマークされます。 イシュー、レビュー、ファイル、ジョブログは、コンテンツで閉じられない境界内で返されます。
  • デスクトップアプリのようにサインインします。 独自の OAuth アプリケーションを使い、ブラウザーのタブを開いて、トークンを OS のキーリングに保存します。
  • 検証可能なリリース。 署名付きチェックサム、ビルドの来歴情報、SBOM を提供します。

ステータス

安定版です。上のリリースバッジに最新のタグが表示され、CHANGELOG.md に各リリースの内容が記載されています。ツール群は契約です。ツール名と出力フィールドは維持されます。 docs/architecture.md §16 が計画を示しています。

ツール

ツール説明
get_meサインインしているユーザー、付与されているスコープ、GitLab が自身について報告している内容
resolve_urlGitLab の Web URL を別のツールが受け取る引数に変換し、そのツール名を示します
search_projects名前またはグループ内でプロジェクトを検索します
get_project1 つのプロジェクトのデフォルトブランチ、公開範囲、有効になっている機能
list_membersプロジェクトへのアクセス権を持つユーザーと、そのロール
find_users完全一致するユーザー名または名前でアカウントを検索します
search_issuesgitlab.com、グループ、またはプロジェクト全体からイシューを検索します
get_issue1 つのイシュー、その信頼できないコンテンツとしてマークされた説明、およびリンクされたマージリクエスト
create_issueイシューを作成します。ラベル、担当者、マイルストーンは事前に確認されます
update_issueイシューのフィールドを変更します。読み取り後に変更されている場合は拒否されます
list_discussionsイシューまたはマージリクエストのコメントスレッド
list_item_eventsイシューまたはマージリクエストのラベル、状態、マイルストーン、ウェイトの変更を新しい順に表示します
add_commentイシューまたはマージリクエストにコメントする、スレッドに返信する、またはスレッドを開始します。差分行へのコメントにも対応します
update_comment自分のコメントを、スレッド内の位置と差分行を保ったまま編集します
resolve_discussionマージリクエストまたはイシューのスレッドを解決または再開します
link_issues1 つまたは 2 つのプロジェクトにある 2 つのイシューをリンクします
unlink_issues2 つのイシュー間のリンクを解除します
link_merge_requests1 つまたは 2 つのプロジェクトにあるマージリクエストを、別のマージリクエストがマージされるまで待機させます
unlink_merge_requests2 つのマージリクエスト間の依存関係を解除します
search_merge_requestsgitlab.com またはプロジェクト全体からマージリクエストを検索します
get_merge_request1 つのマージリクエストと、その承認、レビュアーの状態、リンクされたイシュー、依存関係
list_mr_filesマージリクエストで変更されたファイル、行数、GitLab のマーカー
get_mr_diffマージリクエストの差分をファイルごとに、上限付きで表示します
list_mr_commitsマージリクエストのコミット
list_mr_versionsマージリクエストの差分バージョンをプッシュごとに表示します
compare_mr_versionsマージリクエストの 2 つのバージョン間、または指定したバージョン以降の変更内容
create_merge_requestブランチからマージリクエストを作成します
update_merge_requestマージリクエストのフィールドを変更します。読み取り後に変更されている場合は拒否されます
track_timeイシューまたはマージリクエストの見積もり時間を設定またはリセットし、実績時間を追加またはリセットします
add_review_commentマージリクエストまたは差分行にレビューコメントの下書きを追加します
list_review_commentsマージリクエストに投稿していない自分のレビューコメント
delete_review_comment自分の下書きを 1 つ削除します
update_review_comment下書きの位置を保ったまま、テキストを変更します
publish_review_comment自分の下書きを 1 つだけ投稿します
submit_reviewすべての下書きを、概要とレビュアーの状態を添えて一度に投稿します
rerequest_reviewレビュアーが求めた変更に対応した後、新たなレビューを依頼します
get_file指定した ref のファイルを上限付きで取得します
list_tree指定した ref のディレクトリ一覧
list_branchesプロジェクトのブランチ
list_commits指定した ref またはパスのコミット
get_commit1 つのコミットとその差分を上限付きで取得し、そのコミットを含むマージリクエストも表示します
compare_refs2 つの ref 間のコミットと差分を上限付きで表示します
list_tagsプロジェクトのタグ
create_branchref からブランチを作成します
create_commitブランチにファイル変更をコミットします。デフォルトブランチまたは保護ブランチにはコミットしません
get_blameファイルの各行を最後に変更したユーザーを上限付きで表示します
cherry_pick_commitコミットをブランチに適用します。デフォルトブランチまたは保護ブランチには適用しません
revert_commit新しいコミットを作成してブランチ上のコミットを取り消します。デフォルトブランチまたは保護ブランチでは実行しません
list_pipelinesプロジェクトの CI パイプライン
get_pipeline1 つのパイプラインと、トリガージョブを含む失敗したジョブ
list_jobsパイプラインのジョブ
get_job_logジョブのログの指定範囲を表示します。シークレットはマスクされ、失敗箇所はリクエストに応じて表示されます
get_test_reportパイプラインのテスト件数と失敗ケースを、シークレットをマスクして上限付きで表示します
lint_ci指定した ref のプロジェクトの CI 設定、または渡された設定をチェックします
list_job_artifactsジョブがアーティファクトとして保存したファイル
get_job_artifactジョブのアーティファクトからテキストファイルを 1 つ取得します。シークレットはマスクされ、上限が適用されます
list_labelsプロジェクトのイシューやマージリクエストに付けられるラベル
list_milestonesプロジェクトまたはグループのマイルストーン
list_boardsプロジェクトのイシューボードと各リスト、および各リストを読み取るための search_issues 引数
searchプロジェクト、グループ、または全体を対象にコード、コミット、コメントなどを検索します
list_todos自分の ToDo 項目
mark_todos_done自分の ToDo 項目を完了済みにします
add_todoイシューまたはマージリクエストに、自分用の ToDo を追加します
subscribeイシューまたはマージリクエストの通知を購読、または購読解除します
reactイシュー、マージリクエスト、またはコメントに付けた自分の絵文字リアクションを追加または削除します
upload_file許可したディレクトリから画像をアップロードし、コメントまたは説明に表示する Markdown を取得します
merge_merge_requestレビューした HEAD でマージするか、パイプラインの成功時にマージします(Ship)
cancel_auto_mergeパイプライン成功時にマージする設定を停止します(Ship)
approve_merge_requestレビューした HEAD を承認します(Ship)
unapprove_merge_request自分の承認を撤回します(Ship)
apply_suggestionsマージリクエストの差分コメントにある提案をソースブランチにコミットします。保護ブランチには適用しません(Ship)
rebase_merge_requestレビューした HEAD を基に、マージリクエストのソースブランチをリベースします(Ship)
move_issueイシューを別のプロジェクトに移動します。より多くの人が閲覧できるプロジェクトへの移動はできません(Ship)
run_pipelineref のパイプラインを実行します。変数の値は表示されません(Ship)
run_merge_request_pipelineGitLab の選択に応じて、マージリクエストのパイプラインをマージ結果または分離状態で実行します。フォークのマージリクエストには使用できません(Ship)
retry_pipelineパイプラインの失敗またはキャンセルされたジョブを再試行します(Ship)
retry_job入力を指定して、完了したジョブを再実行します(Ship)
play_job変数と入力を指定して、手動ジョブを開始します(Ship)
cancel_pipeline実行中のパイプラインをキャンセルします(Ship)
delete_branchブランチを削除します。依頼がない限り、デフォルトブランチ、保護ブランチ、または未マージのブランチは削除しません(Destructive)
delete_comment自分のコメントを 1 つ削除します(Destructive)
make_issue_public機密イシューを公開します(Destructive)
list_wiki_pagesプロジェクト Wiki のページ(wiki toolset)
get_wiki_page1 つの Wiki ページを上限付きで取得します(wiki toolset)
save_wiki_pageWiki ページを作成するか、読み取り後に変更されていないページを編集します(wiki toolset)
delete_wiki_pageWiki ページを削除します(wiki toolset、Destructive)
list_snippetsプロジェクトのスニペット、または自分のスニペット(snippets toolset)
get_snippet1 つのスニペットとそのファイルを上限付きで取得します(snippets toolset)
create_snippet常に非公開のスニペットを作成します(snippets toolset)
update_snippet自分の非公開スニペットのタイトル、説明、ファイルを変更します。読み取り後に変更されている場合は拒否されます(snippets toolset)
delete_snippet自分のスニペットを削除します(snippets toolset、Destructive)
list_releasesプロジェクトのリリース(releases toolset)
get_release1 つのリリースとそのリリースノート(releases toolset)
create_releaseリリースと ref のタグを作成し、プロジェクト自身のページへのアセットリンクを設定します(releases toolset、Ship)
create_tagref にタグを作成します。保護タグは作成しません(releases toolset)
delete_tagタグを削除します。保護タグは削除しません(releases toolset、Destructive)
create_labelプロジェクトラベルを作成します(planning toolset)
update_label読み取り後に変更されていないプロジェクトラベルを変更します(planning toolset)
delete_labelプロジェクトラベルを削除します(planning toolset、Destructive)
create_milestoneプロジェクトのマイルストーンを作成します(planning toolset)
update_milestone読み取り後に変更されていないマイルストーンを変更、クローズ、または再開します(planning toolset)
delete_milestoneプロジェクトのマイルストーンを削除します(planning toolset、Destructive)
list_environmentsプロジェクトの環境と、それぞれの最新デプロイ(deployments toolset)
list_deploymentsデプロイ先と、デプロイを実行したジョブ(deployments toolset)
list_events自分またはプロジェクトの最近のアクティビティ(activity toolset)
Ship ツールと Destructive ツールは以下の設定でのみ登録され、
6 つのツールセットは GITLAB_MCP_TOOLSETS で指定された場合にのみ登録されます。

呼び出すのではなく添付するクライアント向けに、同じテキストを含む 3 つのリソースがあります:イシュー、マージリクエスト、ジョブログです。

インストール

リリースページからお使いのプラットフォーム用のアーカイブをダウンロードするか、次のコマンドを実行してください:

go install github.com/mmedum/gitlab-mcp/v4/cmd/gitlab-mcp@latest

Claude Desktop ユーザーは、同じリリースにある .mcpb バンドルを開くことができます。 この操作ではログインされません。先に以下の手順を行ってください。

サインイン

OAuth アプリケーションはご自身で用意してください。バイナリには何も同梱されておらず、 パーソナルアクセストークンも使用しません。

  1. アプリケーションを登録します。登録は一度だけです。gitlab.com の場合:アバター → プロフィールを編集 → アプリケーション(またはグループのアプリケーション)。リダイレクト URI は http://127.0.0.1/callback、Confidential はオフ、スコープは api (読み取り専用の場合は read_api)です。正確な値は docs/setup.md を参照してください。

  2. ログインします。ターミナルで次を実行してください:

    gitlab-mcp login --client-id <application id>
    

    要求するスコープを表示し、ブラウザーを開いて、トークンを OS のキーリングに保存します。ブラウザーのないマシンでは、 --no-browser を指定すると URL とコールバックを転送するための ssh -L の行が表示されます。

  3. 確認します:

    gitlab-mcp doctor
    

    doctor は接続、TLS、サインイン、アプリケーション、許可されたスコープ、およびユーザーとしての呼び出しを順に確認し、不足しているものを示します。 status と logout は名前のとおりの動作をします。--profile を使うと、2 つの gitlab.com ログインを並行して保持できます。

クライアントの接続

Claude Code:

claude mcp add gitlab -- gitlab-mcp

JSON サーバーリストを受け取るクライアントの場合:

{
  "mcpServers": {
    "gitlab": { "command": "gitlab-mcp" }
  }
}

Claude Desktop では、リリースから .mcpb バンドルを開くこともできます。 同じ設定を求められます。マージ、承認、提案の適用、イシューの移動、CI、リリース(enable_ship)、削除(enable_destructive)は、有効にしない限りオフのままです。また、write_namespaces により、書き込み先を指定したグループとプロジェクトに限定できます。 このサーバーは呼び出しの前に確認を求めません。Claude Desktop は各ツールを承認し、常に許可したツールは確認なしで実行されるため、必要なツールでない限りスイッチはオフのままにしてください。

設定

すべての設定は GITLAB_MCP_ 接頭辞の環境変数と、それに対応するフラグです。すべての設定は docs/configuration.md に記載されています。

安全性

GitLab のコンテンツはあなた以外の誰かが作成したものであり、その一部はエージェントを誘導するために書かれています。サーバーはこれを信頼できないデータとして扱い、参照先を取得することはなく、そこに含まれる内容によってモデルに何かを実行させることもありません。

登録できる内容は設定によって異なります。GitLab の api スコープでは、その内容を個別に制限できないためです。

設定登録される内容
GITLAB_MCP_READ_ONLY=true読み取りツールのみ。read_api トークンを使用
デフォルト読み取りと書き込み:イシュー、コメント、レビュー、ブランチ、マージリクエスト
GITLAB_MCP_ENABLE_SHIP=trueマージ、承認、CI の実行、リリースを追加
GITLAB_MCP_ENABLE_DESTRUCTIVE=true削除とイシューの公開を追加。各呼び出しには confirm: true が必要

各呼び出しを承認するのは MCP クライアントであり、サーバー自身が確認を求めることはありません。claude.ai と Codex は破壊的操作としてマークされた Ship ツールと Destructive ツールの実行時に確認を求め、VS Code は書き込みを行うすべてのツールで確認を求めます。Claude Code では、どのようなルールを設定していても、delete_label、delete_milestone、make_issue_public は呼び出しのたびに確認を求めます。これらは取り消せず、それぞれ対象の 1 件を超える範囲に影響するためです。ラベルまたはマイルストーンはすべてのイシューとマージリクエストから削除され、公開されたイシューは誰でも読めるようになります。それ以外の操作については、設定の permissions.ask に承認する呼び出しを個別に列挙し、gitlab の代わりにサーバーに付けた名前を指定してください。たとえば、リリース、公開、アップロード、削除を行う書き込み操作は次のとおりです。

{
  "permissions": {
    "ask": [
      "mcp__gitlab__merge_merge_request", "mcp__gitlab__approve_merge_request",
      "mcp__gitlab__apply_suggestions", "mcp__gitlab__run_pipeline",
      "mcp__gitlab__run_merge_request_pipeline", "mcp__gitlab__play_job",
      "mcp__gitlab__create_release", "mcp__gitlab__create_tag", "mcp__gitlab__move_issue",
      "mcp__gitlab__upload_file",
      "mcp__gitlab__delete_branch", "mcp__gitlab__delete_comment",
      "mcp__gitlab__delete_wiki_page", "mcp__gitlab__delete_label",
      "mcp__gitlab__delete_milestone", "mcp__gitlab__delete_tag",
      "mcp__gitlab__delete_snippet"
    ]
  }
}
  • クイックアクションは使いません。 GitLab は説明文やコメントから /merge、/close などを実行します。このサーバーが送信する本文はすべて検査され、クイックアクションの行は拒否されるか、要求に応じてエスケープされます。
  • 保護ブランチ。 コードがデフォルトブランチまたは保護ブランチに到達するのはマージリクエスト経由のみです。そこへの直接コミットは拒否されます。
  • 無条件の再試行はしません。 作成が成功したかどうか不明な場合は、再作成せず、読み取りによって状況を確認します。
  • 許可された場所にあるローカルファイルのみを使用します。 upload_file は、GITLAB_MCP_UPLOAD_DIRS で指定されたディレクトリにある画像のみを読み込みます。また、バイト列から PNG、JPEG、GIF、WebP と判定されたものに限ります。そのため、コメントで「添付」するよう求められた鍵ファイルがアップロードされることはありません。

デフォルトのトークンでは引き続きマージと承認が可能です。Ship を無効にすると、このサーバーがそれらを実行しなくなるだけで、そのトークンを持つ他のものには影響しません。 詳しくは docs/security.md をご覧ください。

リリースの検証

各リリースでは、鍵なしの Sigstore 証明書で checksums.txt に署名し、すべてのアーカイブとバンドルに対するアテステーションを作成します。

sha256sum -c checksums.txt --ignore-missing
cosign verify-blob checksums.txt --bundle checksums.txt.bundle \
  --certificate-identity "https://github.com/mmedum/gitlab-mcp/.github/workflows/release.yml@refs/tags/<tag>" \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
gh attestation verify <archive> --repo mmedum/gitlab-mcp

コントリビューション

CONTRIBUTING.md をご覧ください。セキュリティに関する報告は、イシューではなく SECURITY.md の手順に従ってください。

ライセンス

Apache-2.0 です。LICENSE と NOTICE をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。