eshan1347/gitlab-agent-mcp
3.3
If you are the rightful owner of gitlab-agent-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This is a Gitlab MCP Server specifically designed for Agents like Pydantic AI, providing compatibility with frameworks such as pydantic and LLMs like Google-Gemini.
Tools
5
Resources
0
Prompts
0
Gitlab MCP Server for Agents
Overview
This is a Gitlab MCP Server specifically for Agents (eg: Pydantic AI). This was developed due to incompatibility of the various other gitlab mcp servers , including the official one with pydantic & llms like google-gemini. This is a wrapper around gitlab-mcp & provides access to all of the tools present (62 !)
Key Features
- Compatible: Compatible with the latest frameworks & tools like pydantic , google-gemini .
- Extensive Toolset: Access a wide range of tools for CRUD operations on Merge requests, files, repositories, branches, notes, issues, namespaces, projects ,labels, commits, events.
- Validation: Improved validation for Tool inputs, properties & JSON schemas.
Project Structure
.
āāā server.py # wrapper class around @zereight/mcp-gitlab to manage it's runtime, async context, list & call tools.
āāā server2.py # low level mcp server re-packaging the modified tools.
āāā requirements.txt # Python package requirements
āāā utils.py # Code for replacing references in the json tool input schema with the actual attributes.
āāā utils2.py # Code for further modifying the tool input schema (remove nested dicts, arrays, other not supported keys).
āāā app.py # Example code for how to run the mcp server with a pydantic ai agent.
āāā README.md # This file
Usage
Local usage
- Clone the repository:
git clone https://github.com/eshan1347/gitlab-agent-mcp.git cd gitlab-agent-mcp
- Install requirements :
pip install -r requirements.txt
- Run the mcp server :
server = pydantic_ai.mcp.MCPServerStdio( command='python', args=[ 'server2.py' ], env={ 'GITLAB_ACCESS_TOKEN': "your_gitlab_token", 'GITLAB_PROJECT_ID': "your_project_id" //Optional } )
Environment Variables :
GITLAB_PERSONAL_ACCESS_TOKEN
: Your GitLab personal access token.GITLAB_API_URL
: Your GitLab API URL. (Default: https://gitlab.com/api/v4)GITLAB_PROJECT_ID
: Default project ID. If set, Overwrite this value when making an API request.GITLAB_ALLOWED_PROJECT_IDS
: Optional comma-separated list of allowed project IDs. When set with a single value, acts as a default project (like the old "lock" mode). When set with multiple values, restricts access to only those projects.Single
value 123: MCP server can only access project 123 and uses it as defaultMultiple
values 123,456,789: MCP server can access projects 123, 456, and 789 but requires explicit project ID in requestsGITLAB_READ_ONLY_MODE
: When set to 'true', restricts the server to only expose read-only operations. Useful for enhanced security or when write access is not needed. Also useful for using with Cursor and it's 40 tool limit.GITLAB_DENIED_TOOLS_REGEX
: When set as a regular expression, it excludes the matching tools.USE_GITLAB_WIKI
: When set to 'true', enables the wiki-related tools (list_wiki_pages, get_wiki_page, create_wiki_page, update_wiki_page, delete_wiki_page). By default, wiki features are disabled.USE_MILESTONE
: When set to 'true', enables the milestone-related tools (list_milestones, get_milestone, create_milestone, edit_milestone, delete_milestone, get_milestone_issue, get_milestone_merge_requests, promote_milestone, get_milestone_burndown_events). By default, milestone features are disabled.USE_PIPELINE
: When set to 'true', enables the pipeline-related tools (list_pipelines, get_pipeline, list_pipeline_jobs, list_pipeline_trigger_jobs, get_pipeline_job, get_pipeline_job_output, create_pipeline, retry_pipeline, cancel_pipeline, play_pipeline_job, retry_pipeline_job, cancel_pipeline_job). By default, pipeline features are disabled.GITLAB_AUTH_COOKIE_PATH
: Path to an authentication cookie file for GitLab instances that require cookie-based authentication. When provided, the cookie will be included in all GitLab API requests.GITLAB_COMMIT_FILES_PER_PAGE
: The number of files per page that GitLab returns for commit diffs. This value should match the server-side GitLab setting. Adjust this if your GitLab instance uses a custom per-page value for commit diffs.
Tools :
merge_merge_request
- Merge a merge request in a GitLab projectcreate_or_update_file
- Create or update a single file in a GitLab projectsearch_repositories
- Search for GitLab projectscreate_repository
- Create a new GitLab projectget_file_contents
- Get the contents of a file or directory from a GitLab projectpush_files
- Push multiple files to a GitLab project in a single commitcreate_issue
- Create a new issue in a GitLab projectcreate_merge_request
- Create a new merge request in a GitLab projectfork_repository
- Fork a GitLab project to your account or specified namespacecreate_branch
- Create a new branch in a GitLab projectget_merge_request
- Get details of a merge request (Either mergeRequestIid or branchName must be provided)get_merge_request_diffs
- Get the changes/diffs of a merge request (Either mergeRequestIid or branchName must be provided)list_merge_request_diffs
- List merge request diffs with pagination support (Either mergeRequestIid or branchName must be provided)get_branch_diffs
- Get the changes/diffs between two branches or commits in a GitLab projectupdate_merge_request
- Update a merge request (Either mergeRequestIid or branchName must be provided)create_note
- Create a new note (comment) to an issue or merge requestcreate_merge_request_thread
- Create a new thread on a merge requestmr_discussions
- List discussion items for a merge requestupdate_merge_request_note
- Modify an existing merge request thread notecreate_merge_request_note
- Add a new note to an existing merge request threadget_draft_note
- Get a single draft note from a merge requestlist_draft_notes
- List draft notes for a merge requestcreate_draft_note
- Create a draft note for a merge requestupdate_draft_note
- Update an existing draft notedelete_draft_note
- Delete a draft notepublish_draft_note
- Publish a single draft notebulk_publish_draft_notes
- Publish all draft notes for a merge requestupdate_issue_note
- Modify an existing issue thread notecreate_issue_note
- Add a new note to an existing issue threadlist_issues
- List issues (default: created by current user only; use scope='all' for all accessible issues)my_issues
- List issues assigned to the authenticated user (defaults to open issues)get_issue
- Get details of a specific issue in a GitLab projectupdate_issue
- Update an issue in a GitLab projectdelete_issue
- Delete an issue from a GitLab projectlist_issue_links
- List all issue links for a specific issuelist_issue_discussions
- List discussions for an issue in a GitLab projectget_issue_link
- Get a specific issue linkcreate_issue_link
- Create an issue link between two issuesdelete_issue_link
- Delete an issue linklist_namespaces
- List all namespaces available to the current userget_namespace
- Get details of a namespace by ID or pathverify_namespace
- Verify if a namespace path existsget_project
- Get details of a specific projectlist_projects
- List projects accessible by the current userlist_project_members
- List members of a GitLab projectlist_labels
- List labels for a projectget_label
- Get a single label from a projectcreate_label
- Create a new label in a projectupdate_label
- Update an existing label in a projectdelete_label
- Delete a label from a projectlist_group_projects
- List projects in a GitLab group with filtering optionslist_wiki_pages
- List wiki pages in a GitLab projectget_wiki_page
- Get details of a specific wiki pagecreate_wiki_page
- Create a new wiki page in a GitLab projectupdate_wiki_page
- Update an existing wiki page in a GitLab projectdelete_wiki_page
- Delete a wiki page from a GitLab projectget_repository_tree
- Get the repository tree for a GitLab project (list files and directories)list_pipelines
- List pipelines in a GitLab project with filtering optionsget_pipeline
- Get details of a specific pipeline in a GitLab projectlist_pipeline_jobs
- List all jobs in a specific pipelinelist_pipeline_trigger_jobs
- List all trigger jobs (bridges) in a specific pipeline that trigger downstream pipelinesget_pipeline_job
- Get details of a GitLab pipeline job numberget_pipeline_job_output
- Get the output/trace of a GitLab pipeline job with optional pagination to limit context window usagecreate_pipeline
- Create a new pipeline for a branch or tagretry_pipeline
- Retry a failed or canceled pipelinecancel_pipeline
- Cancel a running pipelineplay_pipeline_job
- Run a manual pipeline jobretry_pipeline_job
- Retry a failed or canceled pipeline jobcancel_pipeline_job
- Cancel a running pipeline joblist_merge_requests
- List merge requests in a GitLab project with filtering optionslist_milestones
- List milestones in a GitLab project with filtering optionsget_milestone
- Get details of a specific milestonecreate_milestone
- Create a new milestone in a GitLab projectedit_milestone
- Edit an existing milestone in a GitLab projectdelete_milestone
- Delete a milestone from a GitLab projectget_milestone_issue
- Get issues associated with a specific milestoneget_milestone_merge_requests
- Get merge requests associated with a specific milestonepromote_milestone
- Promote a milestone to the next stageget_milestone_burndown_events
- Get burndown events for a specific milestoneget_users
- Get GitLab user details by usernameslist_commits
- List repository commits with filtering optionsget_commit
- Get details of a specific commitget_commit_diff
- Get changes/diffs of a specific commitlist_group_iterations
- List group iterations with filtering optionsupload_markdown
- Upload a file to a GitLab project for use in markdown contentdownload_attachment
- Download an uploaded file from a GitLab project by secret and filenamelist_events
- List all events for the currently authenticated userget_project_events
- List all visible events for a specified project