get_merge_request
Retrieve detailed information about a specific merge request from a GitLab project using project ID and merge request IID.
Instructions
取得 Merge Request 詳細資訊
Args: project_id: 專案 ID 或路徑 mr_iid: MR 的 IID(專案內編號)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| mr_iid | Yes |
Implementation Reference
- src/gitlab_mcp/server.py:191-237 (handler)The handler for the "get_merge_request" MCP tool, which orchestrates the call to the GitLab client and formats the result.
@mcp.tool() def get_merge_request(project_id: int | str, mr_iid: int) -> str: """取得 Merge Request 詳細資訊 Args: project_id: 專案 ID 或路徑 mr_iid: MR 的 IID(專案內編號) """ try: client = get_client() mr = client.get_merge_request(project_id, mr_iid) status_emoji = {"opened": "🟢", "closed": "🔴", "merged": "🟣"} emoji = status_emoji.get(mr.get("state", ""), "⚪") assignee = mr.get("assignee") assignee_str = f"{assignee['name']} (@{assignee['username']})" if assignee else "未指派" reviewers = mr.get("reviewers", []) reviewer_str = ", ".join(f"{r['name']}" for r in reviewers) if reviewers else "無" pipeline = mr.get("pipeline") pipeline_str = f"#{pipeline['id']} ({pipeline['status']})" if pipeline else "無" result = f"""{emoji} Merge Request !{mr['iid']} 標題: {mr['title']} 狀態: {mr.get('state', 'N/A')} 來源分支: {mr.get('source_branch', 'N/A')} → 目標分支: {mr.get('target_branch', 'N/A')} 作者: {mr.get('author', {}).get('name', 'N/A')} 指派: {assignee_str} 審核者: {reviewer_str} Pipeline: {pipeline_str} 建立時間: {mr.get('created_at', 'N/A')} 更新時間: {mr.get('updated_at', 'N/A')} 網址: {mr.get('web_url', '')}""" if mr.get('merged_at'): result += f"\n合併時間: {mr['merged_at']}" merged_by = mr.get('merged_by') if merged_by: result += f"\n合併者: {merged_by.get('name', 'N/A')}" if mr.get('description'): result += f"\n\n--- 描述 ---\n{mr['description']}" return result except GitLabAPIError as e: - src/gitlab_mcp/gitlab_client.py:191-194 (handler)The low-level client method that performs the API request to fetch merge request details from GitLab.
def get_merge_request(self, project_id: int | str, mr_iid: int) -> dict: """GET /projects/:id/merge_requests/:iid""" pid = self._resolve_project_id(project_id) return self._get_json(f"/projects/{pid}/merge_requests/{mr_iid}")