add_issue_comment
Add a comment to an issue in a GitLab project
Open a merge request, run an issue through its labels and milestones, and merge it — with group milestones handled alongside project ones.
LABSCO SUMMARY
Planning that spans repositories tends to live on group milestones, and here list_group_milestones, create_group_milestone, update_group_milestone and delete_group_milestone sit beside the project equivalents instead of being absent; list_group_milestones also filters by containing_date, include_ancestors and include_descendants, which is what makes a roadmap query answerable in a call. Beyond that it is a working issue-and-merge-request client with the write side intact — files, branches, forks, labels and merges. One behaviour worth knowing before you filter: list_issues is documented to fetch every page automatically unless you ask for a specific one, so a broad filter returns the whole set rather than the first screen of it.
A GitLab client of 30 tools covering project and group search, file writes, branches, issues, merge requests, labels, and milestones at both project and group level.
A GitLab personal access token in GITLAB_PERSONAL_ACCESS_TOKEN, and the API base URL of the instance it should talk to in GITLAB_API_URL.
One command plus a key — npx @therealchristhomas/gitlab-mcp-server, then supply credentials
USE CASES
Branch from the ref you want, write the file with its commit message, open the merge request, and merge it when the pipeline says so.
Pull the issues matching the filter across every page, retag and reassign them, and leave a note explaining the decision.
Create the milestone on the group rather than on one project, then check it against the dates and the ancestor and descendant groups it should cover.
Create the branch, push the whole set in one commit rather than file by file, and open the merge request against the target.
List what exists, add what is missing with its colour and priority, rename the ones that drifted, and drop the duplicates.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
add_issue_commentAdd a comment to an issue in a GitLab project
add_merge_request_commentAdd a comment to a merge request in a GitLab project
create_branchCreate a new branch in a GitLab project
create_group_milestoneCreate a new milestone in a GitLab group
create_issueCreate a new issue in a GitLab project
create_labelCreate a new label in a GitLab project
create_merge_requestCreate a new merge request in a GitLab project
create_milestoneCreate a new milestone in a GitLab project
create_or_update_fileCreate or update a single file in a GitLab project
create_repositoryCreate a new GitLab project
delete_group_milestoneDelete a milestone from a GitLab group
delete_labelDelete a label from a GitLab project
delete_milestoneDelete a milestone from a GitLab project
fork_repositoryFork a GitLab project to your account or specified namespace
get_file_contentsGet the contents of a file or directory from a GitLab project
list_group_milestonesList all milestones in a GitLab group
list_issuesList issues in a GitLab project. By default fetches ALL issues automatically across all pages. Only specify 'page' parameter if you need a specific page for manual pagination.
list_labelsList all labels in a GitLab project
list_merge_requestsList all merge requests in a GitLab project
list_milestonesList all milestones in a GitLab project
merge_merge_requestMerge a merge request in a GitLab project
push_filesPush multiple files to a GitLab project in a single commit
search_groupsSearch for GitLab groups
search_issuesSearch for issues in a GitLab project
search_repositoriesSearch for GitLab projects
update_group_milestoneUpdate an existing milestone in a GitLab group
update_issueUpdate an existing issue in a GitLab project
update_labelUpdate an existing label in a GitLab project
update_merge_requestUpdate an existing merge request in a GitLab project
update_milestoneUpdate an existing milestone in a GitLab project
BEFORE YOU INSTALL
30 tools when we connected. With only read_api scope, create, update, delete and merge tools stay listed but GitLab refuses them.
All 4 documented clients run the server on your machine.
CONTEXT COST
Rated by the size of the 30 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx @therealchristhomas/gitlab-mcp-server{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": [
"-y",
"@therealchristhomas/gitlab-mcp-server"
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}{
"servers": {
"gitlab": {
"command": "npx",
"args": [
"-y",
"@therealchristhomas/gitlab-mcp-server"
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}