update_merge_request
Modify merge request details including title, description, assignees, reviewers, target branch, or state to manage code review workflows in GitLab projects.
Instructions
更新 Merge Request
Args: project_id: 專案 ID 或路徑 mr_iid: MR 的 IID title: 新標題 description: 新描述 state_event: 狀態變更(close 或 reopen) assignee_id: 新指派人 ID reviewer_ids: 審核者 ID 列表(逗號分隔) target_branch: 新目標分支
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| mr_iid | Yes | ||
| title | No | ||
| description | No | ||
| state_event | No | ||
| assignee_id | No | ||
| reviewer_ids | No | ||
| target_branch | No |
Implementation Reference
- src/gitlab_mcp/server.py:286-331 (handler)The tool `update_merge_request` is defined in `server.py` and decorated with `@mcp.tool()`. It handles input validation and calls the `client.update_merge_request` method.
def update_merge_request(project_id: int | str, mr_iid: int, title: str = None, description: str = None, state_event: str = None, assignee_id: int = None, reviewer_ids: str = None, target_branch: str = None) -> str: """更新 Merge Request Args: project_id: 專案 ID 或路徑 mr_iid: MR 的 IID title: 新標題 description: 新描述 state_event: 狀態變更(close 或 reopen) assignee_id: 新指派人 ID reviewer_ids: 審核者 ID 列表(逗號分隔) target_branch: 新目標分支 """ try: data = {} if title is not None: data["title"] = title if description is not None: data["description"] = description if state_event is not None: data["state_event"] = state_event if assignee_id is not None: data["assignee_id"] = assignee_id if target_branch is not None: data["target_branch"] = target_branch if reviewer_ids is not None: try: data["reviewer_ids"] = [int(x.strip()) for x in reviewer_ids.split(",")] except ValueError: return "reviewer_ids 格式錯誤" if not data: return "請至少提供一個要更新的欄位" v = GitLabValidator.validate_merge_request_data(data, is_update=True) if not v.is_valid: return "驗證失敗:\n" + "\n".join(v.errors) client = get_client() mr = client.update_merge_request(project_id, mr_iid, **data) return f"✓ MR !{mr['iid']} 已更新 — {mr['title']} [{mr.get('state', '')}]" except GitLabAPIError as e: return f"更新 MR 失敗: {str(e)}" - src/gitlab_mcp/gitlab_client.py:221-232 (handler)The actual implementation that performs the API call to GitLab for updating a merge request.
def update_merge_request( self, project_id: int | str, mr_iid: int, **kwargs ) -> dict: """PUT /projects/:id/merge_requests/:iid 支援的 kwargs: title, description, state_event (close/reopen), assignee_id, reviewer_ids, target_branch """ pid = self._resolve_project_id(project_id) # 僅包含非 None 值 data = {k: v for k, v in kwargs.items() if v is not None} return self._put_json(f"/projects/{pid}/merge_requests/{mr_iid}", data=data)