GitLab ACTION
Approve Merge Request
Approve a merge request as the authenticated user, or withdraw an earlier approval by setting Action to
unapprove. Call Get Merge Request first to check the merge request is actually ready — its readiness rollup reports the pipeline status, conflicts and how many approvals are still required — and Get Merge Request Diffs to read the changes being approved. Two things commonly go wrong: GitLab refuses to let you approve your own merge request, and a project may require approval from a specific approval rule that the authenticated user does not satisfy; both surface as a 401. To approve as part of leaving review feedback in one step, use Create Merge Request Review with its Action set to approve instead. Optionally pass SHA to make the approval conditional on the merge request's head commit, so it fails rather than silently approving work that was pushed after you read the diff. See the documentation- Action
- Writes data
- OAuth
- SDK
- MCP
IMPLEMENTATION
Call this tool
Connect a user's GitLab account once, then configure and run Approve Merge Request from your backend or agent.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "gitlab-approve-merge-request",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
gitlab: { authProvisionId: "apn_xxxxxxx" },
projectId: "Project",
mergeRequestIid: 10,
},
})
console.log(result)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "gitlab-approve-merge-request",
"configured_props": {
"gitlab": { "authProvisionId": "apn_xxxxxxx" },
"projectId": "Project",
"mergeRequestIid": 10
}
}'// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "gitlab",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
name: "gitlab-approve-merge-request",
arguments: {
projectId: "Project",
mergeRequestIid: 10,
},
})SCHEMA
Inputs
Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.
| Property | Type | Description |
|---|---|---|
projectId Project | string | The project, given either as its path — group/project or group/subgroup/project, e.g. backend/payments — or as its numeric project ID. The path is what appears in the project URL and is usually what a user will name, so prefer it. A pasted GitLab URL also works. Use List Projects to find the path if you only know part of the name. Required |
mergeRequestIid Merge Request IID | integer | The merge request's internal ID — the !N shown in the GitLab UI and the number at the end of the merge request URL. This is not the id field, which is a much larger instance-wide number; passing id here returns a 404. Use List Merge Requests or Search Merge Requests to resolve the IID from a title, branch or author. Required |
action Action | string | approve (the default) records an approval; unapprove removes one the authenticated user gave earlier. There is no REST equivalent of GitLab's Request changes reviewer state — to block a merge request, unapprove it and explain why with Create Merge Request Comment. Optional |
sha SHA | string | Optional head commit SHA to approve. When set, GitLab rejects the approval if the merge request's head has moved on — use the diff_refs.head_sha returned by Get Merge Request to be sure you are approving the code you read. Ignored when Action is unapprove. Optional |
REFERENCE
Tool details
Behavior hints are published with the component in the Pipedream registry and surface as MCP tool annotations, so an agent can reason about a tool before it calls it.
- Registry key
- gitlab-approve-merge-request
- Version
- 0.0.1
- App
- GitLab
- Authentication
- OAuth
- Read-only
- No
- Destructive
- No
- Open world
- Yes
- Source
- View on GitHub ↗