Skip to main content
Glama
owayo

https://github.com/owayo/gitlab-mcp-server

get_review_changes

Retrieve file differences in GitLab merge requests to identify code changes for review and collaboration.

Instructions

GitLab MRで修正したファイルの差分を取得

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • main.py:63-77 (handler)
    The handler function for the 'get_review_changes' tool, registered via @mcp.tool(). It gets the current MR ID and uses get_mr_changes to fetch the review changes diff, formatting it for review.
    @mcp.tool() def get_review_changes() -> str: """GitLab MRで修正したファイルの差分を取得""" mr_id = get_current_mr_id() changes = get_mr_changes(mr_id=mr_id) if changes: return f""" 以下の変更について @Codebase を考慮してレビューし、コードの問題点や改善点を出してください。 {changes} """ else: return "変更内容を取得できません。"
  • Helper function called by the tool handler to retrieve MR details and compute the base SHA, then delegate to get_diff_from_base for the actual diff.
    def get_mr_changes(mr_id: int) -> str: """ 指定したMR IDに関連するMRのベースコミット(base_sha)から現在のローカルの状態までの差分を取得します。 リモートの差分ではなく、ローカルの最新状態との差分を取得します。 Args: mr_id (int): Merge Request ID Returns: str: MRのベースコミットから現在のローカル状態までの変更内容(差分) Raises: ValueError: 変更内容の取得に失敗した場合 """ try: project = get_gitlab_project() # MRを取得 try: mr: MergeRequest = project.mergerequests.get(mr_id) except gitlab.exceptions.GitlabGetError: return f"MR ID #{mr_id} が見つかりません。" # MRのdiff_refsからbase_shaを取得 if not hasattr(mr, "diff_refs") or not mr.diff_refs: return f"MR #{mr.iid} の差分情報が取得できません。" base_sha: Optional[str] = mr.diff_refs.get("base_sha") if not base_sha: return f"MR #{mr.iid} のベースコミットが特定できません。" # ローカルリポジトリでbase_shaからの差分を取得 try: diff_output = get_diff_from_base(base_sha) if not diff_output or diff_output == "変更されたファイルはありません。": return f"MR #{mr.iid} (ベースコミット: {base_sha}) からの変更はありません。" return diff_output except Exception as e: return f"ローカルリポジトリからの差分取得に失敗しました: {str(e)}" except Exception as e: raise ValueError(f"MRの変更内容の取得に失敗しました: {str(e)}")
  • Core helper that performs the actual Git diff computation from the base SHA to the current local repository state, formatting the changes per file.
    def get_diff_from_base(base_sha: str) -> str: """ 指定されたベースSHAから現在の状態までの差分を取得します。 ローカルリポジトリの変更を含みます。 Args: base_sha (str): 比較の基点となるコミットのSHA Returns: str: ベースSHAから現在までの差分 Raises: ValueError: 差分の取得に失敗した場合 """ try: repo_path = get_git_repo_path() repo = git.Repo(repo_path) # 変更されたファイルのリストを取得 change_details = [] # リポジトリの現在の状態(インデックスと作業ディレクトリ)をベースSHAと比較 diff_index = repo.git.diff(base_sha, name_status=True).strip() if not diff_index: return "変更されたファイルはありません。" # 変更されたファイルごとに詳細な差分を取得 for line in diff_index.split("\n"): if not line: continue parts = line.split("\t") if len(parts) < 2: continue change_type_code = parts[0] file_path = parts[1] # 変更の種類を判定 change_type = "変更" if change_type_code.startswith("A"): change_type = "新規追加" elif change_type_code.startswith("D"): change_type = "削除" elif change_type_code.startswith("R"): change_type = "名前変更" # ファイルの差分を取得 try: file_diff = repo.git.diff(base_sha, file_path, unified=3) change_details.append( f"# ファイル: {file_path} ({change_type})\n```diff\n{file_diff}\n```" ) except Exception as e: # 特定のファイルの差分取得に失敗した場合はエラーメッセージを追加 change_details.append( f"# ファイル: {file_path} ({change_type})\n```\n差分の取得に失敗しました: {str(e)}\n```" ) return "\n\n".join(change_details) except Exception as e: raise ValueError(f"差分の取得に失敗しました: {str(e)}")
  • main.py:31-44 (helper)
    Internal helper used by the tool to get the current MR ID from the branch name.
    def get_current_mr_id() -> int: """ 現在のブランチのMRIDを取得します。 Returns: int: 現在のブランチのMRID """ branch_name = get_current_branch() mr = get_merge_request(branch_name) if mr: return mr.iid else: return "現在のブランチに関連するMerge Requestが見つかりません。"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/owayo/gitlab-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server