# Reported issues for gitlab-mcp

Pod holds 24 of 188 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [gitlab-mcp](/mcp/gitlab-mcp).

## Most discussed

### Error when running /mcp in Gemini CLI

Gemini CLI Version: 0.1.12

Running the /mcp command works correctly, and it displays the following tool information:

 GitLab communication server__create_branch
   - GitLab communication server__create_issue
   - GitLab communication server__create_issue_link
   - GitLab communication server__create_issue_note
   - GitLab communication server__create_label
   - GitLab communication server__create_merge_request
   - GitLab communication server__create_merge_request_note
   - GitLab communicatio

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/177) · 2025-07-17 · closed · external user · 12 comments

### MCP not working with Gemini

Model: Gemini-2.0-flash

Running the MCP server locally on the main branch (version: 1.0.72)
```
"GitLab-comm-server": {
      "type": "sse",
      "url": "http://localhost:3002/sse"
    }
```

I am using the Agno framework to connect to MCP

```

import asyncio
import os
from textwrap import dedent
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.mcp import MCPTools

server_url = "http://localhost:3002/sse"

async def run_agent(message: str) -> None:
    async

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/166) · 2025-07-14 · closed · external user · 17 comments

### Issue Fetching isn't working anymore

Last week, I was using the MCP to fetch private GitLab issues but that's not working anymore.

<img width="962" height="513" alt="Image" src="https://github.com/user-attachments/assets/a58dcfc9-ede2-45ca-a129-c5aed343dc18" />

The issue I am trying to fetch is in a private repo but I obviously provided a correct PAT.

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/157) · 2025-07-09 · closed · external user · 18 comments

### `remove_source_branch` in `create_merge_request` not working

```
⏺ Now I'll create the merge request using the GitLab API:

⏺ GitLab:create_merge_request (MCP)(project_id: "xxx", title: "xxx
                                   xxx", description: "xxx", source_branch:
                                    "xxx", target_branch: "main",
                                   assignee_ids: [84], remove_source_branch: "true")
  ⎿ {                                                                                                
      "id": 19248,
      "iid": 12386,
  

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/142) · 2025-07-07 · closed · external user · 22 comments

### Possible to get working for Gemini Cli?

Have tried, doesnt seem to work

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/139) · 2025-07-07 · closed · external user · 18 comments

### Use as remote MCP server with an oauth application

It would be useful to perhaps allow running the mcp as a remote mcp server pointed at an instance, and then users when they connect to it, authorize with the gitlab instance/application, using that token for auth.

this way, people dont have to generate a token in order to use MCP with our gitlab instance, and ideally I just setup the MCP server with an application once for myself. 

Are there any plans / interest in this sort of feature?

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/121) · 2025-06-30 · closed · external user · 15 comments

### Feature Request: Support for Multiline Comments in Merge Requests

Hello,

First of all, thank you for this project! It's been very helpful in the daily GitLab management workflow.

I’d like to request support for multiline comments in Merge Requests diff view using the GitLab API. 

GitLab provides a way to create multiline comments via their API by specifying the position parameters, as documented here:

* https://docs.gitlab.com/api/discussions/#create-a-new-thread-in-the-merge-request-diff

It would be great if gitlab-mcp could support this functionality, a

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/90) · 2025-06-09 · closed · external user · 12 comments

### list issues doesn't work well when filtering by label

When I try to get the current issues filtered by certain label via mcp it just doesn't work. Tickets show up that don't have that label at all.

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/74) · 2025-06-01 · closed · external user · 13 comments

## Most recent

### Environment lifecycle and pipeline triggers

Add environment update/delete/stop/stale-stop and project pipeline trigger CRUD plus trigger_pipeline.

Reference: https://docs.gitlab.com/api/environments/ and https://docs.gitlab.com/api/pipeline_triggers/

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/682) · 2026-08-26 · open · outside contributor · 0 comments

### Deployment operations and approvals

Add deployment create/update/delete, deployment merge-request listing, and approve/reject plus approval inspection.

Reference: https://docs.gitlab.com/api/deployments/

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/681) · 2026-08-26 · open · outside contributor · 0 comments

### Pipeline jobs DAG and lifecycle tools

Add job erase, job inputs, DAG/needs helpers, and wait_for_pipeline/wait_for_job polling helpers.

Reference: https://docs.gitlab.com/api/jobs/

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/680) · 2026-08-26 · open · outside contributor · 0 comments

### Pipeline schedules and schedule variables

Add pipeline schedule CRUD, play, ownership transfer, triggered-pipeline listing, and schedule-variable CRUD.

Reference: https://docs.gitlab.com/api/pipeline_schedules/

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/679) · 2026-08-26 · open · outside contributor · 1 comment

### Pipeline core and reports API tools

Add the remaining pipeline core operations documented by GitLab: test report, test report summary, delete pipeline, and update pipeline metadata.

Reference: https://docs.gitlab.com/api/pipelines/

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/678) · 2026-08-26 · open · outside contributor · 0 comments

### Feature: add GitLab Pipeline Schedules API tools

## Summary

The server exposes 14 pipeline-related tools (`list_pipelines`, `get_pipeline`, `create_pipeline`, `retry_pipeline`, `cancel_pipeline`, the job tools, artifacts, …) but none of them cover the [Pipeline Schedules API](https://docs.gitlab.com/api/pipeline_schedules/) (`/projects/:id/pipeline_schedules`).

That means an agent can trigger and inspect *ad-hoc* pipelines, but cannot see or manage the **scheduled** ones — which is where a lot of a project's recurring CI actually lives (nigh

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/676) · 2026-08-25 · closed · outside contributor · 2 comments

### bug: list_merge_requests tool fails with schema validation error (expected record, received array)

### Description

When calling the `list_merge_requests` tool, the GitLab MCP server fails with a schema validation error:

```json
[
  {
    "expected": "record",
    "code": "invalid_type",
    "path": [
      "structuredContent"
    ],
    "message": "Invalid input: expected record, received array"
  }
]
```

### Root Cause
The GitLab REST API returns an array of merge request objects when listing merge requests (either globally or project-scoped). However, the MCP server's response schema def

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/675) · 2026-08-25 · open · external user · 1 comment

### README badge for gitlab-mcp

Saw the homebrew formula sync for the release - gitlab-mcp ships steadily. mcpindex tracks the registry entry and diffs the tool contracts daily: https://mcpindex.ai/server/io-github-zereight-gitlab-mcp

Badge for the row next to MCP Toplist, if you want it:

[![mcpindex](https://mcpindex.ai/api/v1/badge/io-github-zereight-gitlab-mcp)](https://mcpindex.ai/server/io-github-zereight-gitlab-mcp)

Advisory only. Reply if the card states anything wrong.

Thank you,
GB
https://mcpindex.ai

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/666) · 2026-08-19 · closed · external user · 1 comment

### merge_merge_request fails on GitLab 19.2: schema has no sha field → "SHA must be provided when merging"

### Environment

- **MCP client/runtime:** opencode (opencode-ai TUI), stdio transport. Reproduced
  independently with a raw JSON-RPC stdio client against `build/index.js`.
- **Install method:** `npx -y` from the opencode MCP config; reproduced the bug
  with a plain local `npm install @zereight/mcp-gitlab@2.1.49` as well.
- **Exact command and config:**

  ```json
  {
    "mcp": {
      "gitlab": {
        "type": "local",
        "command": ["npx", "-y", "@zereight/mcp-gitlab"],
        "envi

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/665) · 2026-08-19 · closed · external user · 1 comment

### Broken version 2.1.48

I have this message log today:
```
2026-08-18T07:37:17.308Z [gitlab] [info] Server started and connected successfully { metadata: undefined }
2026-08-18T07:37:21.060Z [gitlab] [info] Message from client: method="initialize" id=0 params { metadata: undefined }
sh: line 1: mcp-gitlab: command not found
2026-08-18T07:37:21.230Z [gitlab] [info] Server transport closed { metadata: undefined }
2026-08-18T07:37:21.230Z [gitlab] [info] Server transport closed unexpectedly, this is likely due to the proc

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/662) · 2026-08-18 · closed · external user · 3 comments

### `list_job_artifacts` tool seems to fail with a schema validation error

Every tool call to `gitlab_list_job_artifacts` fails with the same message:
```
gitlab_list_job_artifacts [job_id=15701568935, project_id=<redacted>]
MCP error -32603: Invalid arguments: 0.mode: Expected string, received null
```
This looks similar to #281 , #485 and other validation-related issues, although I'm not very familiar with JS/TS and its ecosystem. I don't see any `mode` argument as input, so I'm guessing it's the output format that it doesn't like (?)

Installed via: `npm -g install`

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/661) · 2026-08-17 · closed · external user · 2 comments

### Create_tag returns "Invalid arguments: release: Required" although the tag is created

**Describe the bug**

`create_tag` succeeds server-side (the tag exists in GitLab) but the tool call fails with:

MCP error -32603: Invalid arguments: release: Required

Root cause looks like response-side validation, not input validation:

- `index.ts` (createTag): `return GitLabTagSchema.parse(data);`
- `schemas.ts` (GitLabTagSchema): `release` is declared `.nullable()` but not `.optional()`

Our GitLab instance omits the `release` key entirely in the `POST /projects/:id/repository/tags`
respo

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/653) · 2026-08-14 · closed · external user · 0 comments

### Invalid `MCP-Protocol-Version` header returns 200 instead of the required 400

## Summary

The Streamable HTTP transport requires a server to reject a request carrying an unusable `MCP-Protocol-Version` header:

> If the server receives a request with an invalid or unsupported `MCP-Protocol-Version`, it **MUST** respond with `400 Bad Request`.
> — [Transports § Protocol Version Header](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports#protocol-version-header)

This server accepts anything and returns `200`.

## Reproduction

```bash
curl -sS -o /dev

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/652) · 2026-08-14 · closed · outside contributor · 1 comment

### Streamable HTTP clients cannot cache `tools/list`: no `list_changed` channel (GET is 405) and no `ttlMs`/`cacheScope`

## Summary

Over Streamable HTTP, a client has **no way to know when `tools/list` has gone stale, and no hint for how long to cache it.** Both of the spec's mechanisms are unavailable:

1. **Push invalidation** — `notifications/tools/list_changed` has no delivery channel, because `GET /mcp` returns `405`.
2. **Freshness hints** — `ttlMs` / `cacheScope` are not emitted, because the server negotiates at most `2025-11-25`.

MCP has no third option. There is no ETag/`If-None-Match` revalidation in t

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/651) · 2026-08-14 · closed · outside contributor · 0 comments

### `discover_tools` can never work: server sends `tools/list_changed` without declaring `tools.listChanged`

### Environment

| | |
|---|---|
| Server version | `@zereight/mcp-gitlab` **2.1.46** (latest release; bug also present on `main`) |
| Client | Claude Code 2.1.229 — plus a raw JSON-RPC probe, below, to isolate it from the client |
| Transport | **stdio** |
| Env vars | `GITLAB_TOOLSETS=pipelines`, `GITLAB_API_URL`, `GITLAB_PERSONAL_ACCESS_TOKEN` (self-hosted GitLab) |
| Node | 22.21.1 |

`discover_tools` activates a toolset server-side and returns success, but no spec-conformant MCP client will

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/649) · 2026-08-12 · closed · external user · 0 comments

### get_file_contents corrupts binary files (PDF, images, archives): Base64 content is force-decoded to UTF-8

## Summary

`get_file_contents` irreversibly corrupts every binary file in a repository (PDF, PNG/JPG, ZIP, XLSX/DOCX, fonts, compiled artifacts). The GitLab API returns file content as Base64, but `getFileContents()` force-decodes it into a UTF-8 **string**. Any byte sequence that is not valid UTF-8 is replaced with `U+FFFD` (`EF BF BD`), so the original bytes are permanently lost before the content ever reaches the MCP client.

Reported originally as "fetching a PDF loses data" — the file is n

[Read the thread](https://github.com/zereight/gitlab-mcp/issues/648) · 2026-08-12 · closed · external user · 3 comments

The remaining reports are on [the project's issue tracker](https://github.com/zereight/gitlab-mcp/issues).
