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
š¦ NPX
šļø Build
Docker build:
š 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)