GitLab MCP Server
Supports core Git operations including committing file changes, managing branches, and forking repositories while preserving commit history.
Provides a comprehensive suite of tools for interacting with the GitLab API, enabling project management, file operations, branch creation, issue tracking, and merge request handling.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitLab MCP ServerCreate an issue in project 'web-app' for a bug in the login flow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π¦ GitLab MCP Server
π MCP Server for the GitLab API, enabling project management, file operations, and more.
β¨ Features
πΏ Automatic Branch Creation: When creating/updating files or pushing changes, branches are automatically created if they don't exist
π‘οΈ Comprehensive Error Handling: Clear error messages for common issues
π Git History Preservation: Operations maintain proper Git history without force pushing
π¦ Batch Operations: Support for both single-file and multi-file operations
π§ Tools
create_or_update_fileCreate or update a single file in a project
Inputs:
project_id(string): Project ID or URL-encoded pathfile_path(string): Path where to create/update the filecontent(string): Content of the filecommit_message(string): Commit messagebranch(string): Branch to create/update the file inprevious_path(optional string): Path of the file to move/rename
Returns: File content and commit details
push_filesPush multiple files in a single commit
Inputs:
project_id(string): Project ID or URL-encoded pathbranch(string): Branch to push tofiles(array): Files to push, each withfile_pathandcontentcommit_message(string): Commit message
Returns: Updated branch reference
search_repositoriesSearch for GitLab projects
Inputs:
search(string): Search querypage(optional number): Page number for paginationper_page(optional number): Results per page (default 20)
Returns: Project search results
create_repositoryCreate a new GitLab project
Inputs:
name(string): Project namedescription(optional string): Project descriptionvisibility(optional string): 'private', 'internal', or 'public'initialize_with_readme(optional boolean): Initialize with README
Returns: Created project details
get_file_contentsGet contents of a file or directory
Inputs:
project_id(string): Project ID or URL-encoded pathfile_path(string): Path to file/directoryref(optional string): Branch/tag/commit to get contents from
Returns: File/directory contents
create_issueCreate a new issue
Inputs:
project_id(string): Project ID or URL-encoded pathtitle(string): Issue titledescription(optional string): Issue descriptionassignee_ids(optional number[]): User IDs to assignlabels(optional string[]): Labels to addmilestone_id(optional number): Milestone ID
Returns: Created issue details
create_merge_requestCreate a new merge request
Inputs:
project_id(string): Project ID or URL-encoded pathtitle(string): MR titledescription(optional string): MR descriptionsource_branch(string): Branch containing changestarget_branch(string): Branch to merge intodraft(optional boolean): Create as draft MRallow_collaboration(optional boolean): Allow commits from upstream members
Returns: Created merge request details
get_merge_request_raw_diffGet a merge request information of the difference in a raw format
Inputs:
project_id(string): Project ID or URL-encoded pathmerge_request_id(string): ID of the merge request
Returns: The difference of the merge request in a raw format
fork_repositoryFork a project
Inputs:
project_id(string): Project ID or URL-encoded pathnamespace(optional string): Namespace to fork to
Returns: Forked project details
create_branch
Create a new branch
Inputs:
project_id(string): Project ID or URL-encoded pathbranch(string): Name for new branchref(optional string): Source branch/commit for new branch
Returns: Created branch reference
get_job_logs
Retrieve the logs from a job
Inputs:
project_id(string): Project ID or URL-encoded pathjob_id(string): ID of the job
Returns: The logs of the job
βοΈ Setup
π Personal Access Token
Create a GitLab Personal Access Token with appropriate permissions:
Go to User Settings > Access Tokens in GitLab
Select the required scopes:
apifor full API accessread_apifor read-only accessread_repositoryandwrite_repositoryfor repository operations
Create the token and save it securely
π» Usage with Claude Desktop
Add the following to your claude_desktop_config.json:
π³ Docker
{
"mcpServers": {
"gitlab": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"GITLAB_PERSONAL_ACCESS_TOKEN",
"-e",
"GITLAB_API_URL",
"mcp/gitlab"
],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4" // Optional, for self-hosted instances
}
}
}
}π¦ NPX
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-gitlab"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4" // Optional, for self-hosted instances
}
}
}
}ποΈ Build
Docker build:
docker build -t vonwig/gitlab:mcp -f src/gitlab/Dockerfile .π Environment Variables
GITLAB_PERSONAL_ACCESS_TOKEN: Your GitLab personal access token (required)GITLAB_API_URL: Base URL for GitLab API (optional, defaults tohttps://gitlab.com/api/v4)
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/martijndormans/mcp-gitlab'
If you have feedback or need assistance with the MCP directory API, please join our Discord server