mcpField
G
gitlab

gitlab

github.com/microsoft開発1.6k70 回インストール2 日前に更新
リポジトリ

gitlab について

GitLab.com またはセルフホスト環境のマージリクエスト、ノート、パイプライン、ジョブログを調べて更新する Python CLI スキルです。OAuth と明示的に選択する旧式トークン認証に対応し、失敗時に処理を止める監査ログも任意で利用できます。

主な機能

  1. 01マージリクエストの一覧・取得・作成・更新
  2. 02マージリクエストのノート閲覧と追加
  3. 03パイプライン、ジョブ、ジョブログの確認
  4. 04OAuth と旧式トークン認証
  5. 05任意のフェイルクローズ型 JSON Lines 監査ログ

活用シーン

  1. 01オープン中のマージリクエストとノートの確認
  2. 02JSON によるマージリクエストの作成・更新
  3. 03失敗したパイプラインのジョブとログの調査

MCP 対応

これはリポジトリ内で使う Python CLI ワークフローであり、GitLab 公式の MCP サーバー連携ではありません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/microsoft/hve-core --skill gitlab

インストール後、Claude Code で/gitlabを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

pyproject.toml
SECURITY.md
scripts/
_gitlab_credentials.py
_gitlab_oauth.py
gitlab.py
tests/
conftest.py
tests/corpus/
0_empty
0_large
0_no_suffix
0_remote_path
0_unicode
0_with_suffix
0814fd5a169c01a1448b1817d8ac617d6f277db8
1_empty
1_float
1_large
1_negative
1_numeric_id
1_valid_id
2_deeply_nested
2_empty
2_field_path
2_nested_json
2_unicode
3_empty
3_json_payload
3_large
3_malformed
3_trailing
3_valid_json

詳細

GitLab スキル

概要

このスキルを使用すると、GitLab.com またはセルフマネージド GitLab インスタンス上のマージリクエスト、ノート、パイプライン、ジョブログを確認・更新できます。

このスキルは、GitLab のタスク向けにリポジトリ内で使用する Python ワークフローです。公式の GitLab MCP サーバー統合インターフェースではありません。

この最初の hve-core 実装は Python のみです。python scripts/gitlab.py で CLI を実行し、読み取り操作では出力を簡潔に保つために --fields を優先してください。

前提条件

このスキルには Python 3.11 以降が必要です。

コマンドを実行する前に、次の環境変数を設定してください。

変数必須例用途
GITLAB_URLはいhttps://gitlab.comGitLab インスタンスの URL
GITLAB_AUTH_MODE任意oauthoauth または明示的な legacy-token 互換モード
GITLAB_OAUTH_CLIENT_IDOAuthApplication ID非機密 OAuth アプリケーション ID。クライアントシークレットは不要
GITLAB_TOKENレガシーモードglpat-...GITLAB_AUTH_MODE=legacy-token の場合にのみ受け付けられる PAT
GITLAB_PROFILEいいえdefault名前付き OAuth プロファイル
GITLAB_TOKEN_STOREいいえpathOAuth ストアの上書き先。POSIX では親ディレクトリの所有者のみがアクセス可能である必要があります
GITLAB_ALLOW_INSECUREいいえ1明示的に指定されたループバック HTTP 開発エンドポイントのみを許可
XDG_DATA_HOMEいいえpathデフォルトの OAuth ストアに使用する POSIX データルート
LOCALAPPDATAいいえpathWindows 用に予約されたデータルート。OAuth の永続化は現在、Windows では安全のため失敗します
GITLAB_PROJECTいいえgroup/projectプロジェクトのパスまたは数値のプロジェクト ID

GITLAB_PROJECT が設定されていない場合、スクリプトは git remote get-url origin からプロジェクトを検出しようとします。Git リポジトリ内にいない場合や、別のプロジェクトを対象にする場合は、変数を明示的に設定してください。

運用変数
変数必須用途
GITLAB_AUDIT_LOGいいえJSON Lines 監査ログのパス。設定すると、すべてのリクエストが監査記録されます(監査ログを参照)。
GITLAB_AUDIT_ACTORいいえ記録されるアクターの ID を上書きします(例:CI サービスプリンシパル)。
GITLAB_DEBUGいいえ失敗時に秘匿化されたトレースバックを出力するには 1 を設定します。秘匿化が無効になることはありません。
監査ログ

GITLAB_AUDIT_LOG が設定されている場合、スクリプトはすべての REST API リクエストと OAuth フォームリクエストについて、構造化された JSON Lines 形式の監査記録を書き込みます。監査はフェイルクローズかつ先行書き込み方式です。

  • リクエストの送信前に attempt レコードを書き込みます。監査ログに書き込めない場合、操作は中止され、GitLab には何も送信されません。
  • リクエストの完了後に outcome レコード(success または error。失敗時は HTTP ステータスを含む)を書き込みます。

REST レコードには、UTC タイムスタンプ、実行者、認証モード、正規化されたオリジン、 操作、HTTP メソッド、イベントが含まれます。OAuth レコードでは、実行者、オリジン、 クライアント、プロファイル、コード、本文、自由形式のエラーフィールドは含めず、 操作と失敗の種類を制限された値で記録します。リソースパス、クエリ、プロファイル名、 プロファイルの内容は除外されます。オプションの監査ログ出力先は、オリジンから テナントや内部ホストが特定される可能性があるため、運用上慎重に扱う必要があります。 アクセス制御されたパスに配置し、運用上必要な期間に限って保持してください。 トークンと認証ヘッダーは記録されません。リクエスト後に監査で失敗した場合は、 結果を変更せずに警告を出力します。

認証情報のローテーション

OAuth がデフォルトです。リダイレクト URI http://127.0.0.1:8766/callback と api スコープを設定し、非機密の ユーザー所有、グループ所有、またはセルフマネージドインスタンス所有のアプリケーションを 登録してください。GITLAB_URL と GITLAB_OAUTH_CLIENT_ID のみを設定し、 auth login または人の操作を伴う auth device-login を実行します。ブラウザーログインには、 ローテーションするリフレッシュトークンが必要です。アクセストークンは有効期限前に 更新され、置き換えはアトミックに保存されます。デバイスログインではアクセストークンのみの プロファイルが返される場合があり、その場合は有効期限後に再度デバイスログインが必要です。 プロバイダー側またはローカル側のクラッシュが発生するタイミングによっては、再ログインが 必要になることがあります。

デフォルトの保存先は POSIX では $XDG_DATA_HOME/hve-core/gitlab/gitlab-token.json で、 フォールバック先は ~/.local/share/hve-core/gitlab/gitlab-token.json です。 POSIX の保存ファイルとロックファイルは、専用の所有者のみがアクセスできるディレクトリ内で モード 0600 を使用します。Python 3.11 のモードビットでは所有者のみの DACL を強制できないため、 Windows では OAuth プロファイルの永続化はフェイルクローズになります。保護された OAuth バックエンドが 利用可能になるまでは、Windows では明示的に legacy-token モードを使用してください。

PAT 認証は GITLAB_AUTH_MODE=legacy-token で引き続き利用できます。 デバイス認証には、ブラウザーを利用できるデバイスでのユーザー承認が必要であり、 無人ワークロードの ID としては使用できません。

クイックスタート

環境変数をエクスポートしてから、--fields を指定して読み取りコマンドを実行します。

export GITLAB_URL="https://gitlab.com"
export GITLAB_OAUTH_CLIENT_ID="your-application-id"
export GITLAB_PROJECT="group/project"

python scripts/gitlab.py auth login
python scripts/gitlab.py mr-list opened --fields iid,title,author.name

既知のパイプラインのパイプラインジョブを読み取ります。

python scripts/gitlab.py pipeline-jobs 12345 --fields id,name,status,stage

パラメーターリファレンス

共通オプション
パラメーター適用対象例説明
--fieldsmr-list、mr-get、mr-notes、pipeline-get、pipeline-jobs--fields iid,title,stateドット記法で特定のフィールドを抽出し、簡潔な表形式またはキーと値の形式で出力します
コマンド
コマンド引数説明
auth loginなしAuthorization Code と PKCE で認証します
auth device-loginなし人の支援を伴うデバイス認証を通じて認証します
auth statusなしシークレットを含まないローカルプロファイルの状態を表示します
auth logoutなしサーバーの認可を取り消さずに、ローカルプロファイルを 1 つ削除します
mr-list[state] [max]マージリクエストを一覧表示します。デフォルトではすべての状態を対象に 20 件表示します
mr-get<mr-iid>プロジェクト内の IID を指定して、1 件のマージリクエストを取得します
mr-create<json> or stdinJSON ペイロードからマージリクエストを作成します
mr-update<mr-iid> <json> or stdinJSON ペイロードからマージリクエストのフィールドを更新します
mr-comment<mr-iid> <body> or stdinマージリクエストにコメントを追加します
mr-notes<mr-iid> [max]マージリクエストのノートを一覧表示します。--fields を使用するとシステムノートは除外されます
pipeline-get<pipeline-id>数値 ID を指定して、1 件のパイプラインを取得します
pipeline-run<branch-or-tag>ブランチまたはタグのパイプラインを実行します
pipeline-jobs<pipeline-id>パイプラインのジョブを一覧表示します
job-log<job-id>ジョブのログ出力を未加工のまま表示します

スクリプトリファレンス

最近のオープンなマージリクエストを一覧表示します:

python scripts/gitlab.py mr-list opened --fields iid,title,author.name,user_notes_count

マージリクエストを 1 件取得します:

python scripts/gitlab.py mr-get 42 --fields iid,title,state,source_branch,target_branch

インライン JSON からマージリクエストを作成します:

python scripts/gitlab.py mr-create '{
  "source_branch": "feature/add-auth",
  "target_branch": "main",
  "title": "feat(auth): add OAuth login"
}'

標準入力からマージリクエストのコメントを追加します:

echo "CI passed. Ready for review." | python scripts/gitlab.py mr-comment 42

失敗したパイプラインを調査します:

python scripts/gitlab.py pipeline-get 12345 --fields id,status,web_url
python scripts/gitlab.py pipeline-jobs 12345 --fields id,name,status,stage
python scripts/gitlab.py job-log 67890

トラブルシューティング

症状原因解決方法
GITLAB_URL is not set必須の環境変数が設定されていませんスクリプトを実行する前に GITLAB_URL をエクスポートします
GITLAB_TOKEN is not set for legacy-token modeレガシーモードが明示されていますが、PAT がありませんGITLAB_AUTH_MODE=legacy-token の場合に限り、PAT をエクスポートします
GITLAB_TOKEN must not be set in oauth modeレガシー PAT が OAuth 設定に混入していますGITLAB_TOKEN を削除するか、legacy-token モードを明示的に選択します
OAuth persistence is unavailable on WindowsWindows プロファイルストア用の保護されたバックエンドがありませんlegacy-token モードを明示的に使用するか、POSIX から OAuth を実行します
GITLAB_OAUTH_CLIENT_ID is not setOAuth アプリケーションが設定されていませんパブリッククライアント ID を設定してから、auth login を実行します
Callback listener cannot bindポート 8766 が使用中か、転送されていませんポートを解放するか、auth device-login を使用します
timed out waiting for the GitLab OAuth token store lock別のプロセスがプロファイルストアのロックを保持しています他のコマンドが終了するまで待ってから、再試行します
GitLab device response has invalid verification_uri検証 URI が安全に表示できないか、GITLAB_URL と一致しませんGITLAB_URL がデバイス検証を提供するインスタンスと一致することを確認します
cannot parse git remote URLプロジェクトの自動検出に失敗しましたGITLAB_PROJECT を明示的に設定します
HTTP 401 or HTTP 403認証情報が無効か、アクセス権がありませんOAuth の場合は再ログインし、明示的なレガシーモードの場合は PAT をローテーションします
HTTP 404プロジェクト、MR IID、パイプライン ID、またはジョブ ID が誤っていますGITLAB_PROJECT を確認し、数値の ID が正しいことを確認します
expected numeric IDID 引数に数値以外の値が渡されましたプロジェクトの MR IID と、数値のパイプライン ID またはジョブ ID を使用します
python3 is required or syntax errors on launchサポートされていないインタープリターですPython 3.11 以降でスクリプトを実行します

GitLab では、プロジェクト内の MR IID に !42 などを使用します。このスキルでは、 グローバルなマージリクエスト ID ではなく、数値の IID を指定します。

コメント