create_merge_request
Create a new merge request in GitLab to propose code changes from a source branch to a target branch, with options for title, description, assignee, and reviewers.
Instructions
建立新的 Merge Request
Args: project_id: 專案 ID 或路徑 source_branch: 來源分支 target_branch: 目標分支 title: MR 標題 description: MR 描述 assignee_id: 指派人 ID reviewer_ids: 審核者 ID 列表(逗號分隔,如 "1,2,3")
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | ||
| source_branch | Yes | ||
| target_branch | Yes | ||
| title | Yes | ||
| description | No | ||
| assignee_id | No | ||
| reviewer_ids | No |
Implementation Reference
- src/gitlab_mcp/server.py:241-282 (handler)The MCP tool registration and handler logic for 'create_merge_request', which parses input and calls the client.
@mcp.tool() def create_merge_request(project_id: int | str, source_branch: str, target_branch: str, title: str, description: str = None, assignee_id: int = None, reviewer_ids: str = None) -> str: """建立新的 Merge Request Args: project_id: 專案 ID 或路徑 source_branch: 來源分支 target_branch: 目標分支 title: MR 標題 description: MR 描述 assignee_id: 指派人 ID reviewer_ids: 審核者 ID 列表(逗號分隔,如 "1,2,3") """ try: v = GitLabValidator.validate_merge_request_data({ "source_branch": source_branch, "target_branch": target_branch, "title": title, }) if not v.is_valid: return "驗證失敗:\n" + "\n".join(v.errors) # 解析逗號分隔的 reviewer_ids parsed_reviewer_ids = None if reviewer_ids: try: parsed_reviewer_ids = [int(x.strip()) for x in reviewer_ids.split(",")] except ValueError: return "reviewer_ids 格式錯誤,請使用逗號分隔的數字(如 1,2,3)" client = get_client() mr = client.create_merge_request( project_id, source_branch, target_branch, title, description=description, assignee_id=assignee_id, reviewer_ids=parsed_reviewer_ids ) return f"✓ MR 已建立: !{mr['iid']} — {mr['title']}\n網址: {mr.get('web_url', '')}" except GitLabAPIError as e: return f"建立 MR 失敗: {str(e)}" - src/gitlab_mcp/gitlab_client.py:196-225 (handler)The actual implementation of the 'create_merge_request' method within the GitLab client, which performs the API request.
def create_merge_request( self, project_id: int | str, source_branch: str, target_branch: str, title: str, description: str = None, assignee_id: int = None, reviewer_ids: list[int] = None, ) -> dict: """POST /projects/:id/merge_requests""" pid = self._resolve_project_id(project_id) data = { "source_branch": source_branch, "target_branch": target_branch, "title": title, } if description is not None: data["description"] = description if assignee_id is not None: data["assignee_id"] = assignee_id if reviewer_ids is not None: data["reviewer_ids"] = reviewer_ids return self._post_json(f"/projects/{pid}/merge_requests", data=data) def update_merge_request( self, project_id: int | str, mr_iid: int, **kwargs ) -> dict: """PUT /projects/:id/merge_requests/:iid