Skip to content

Commit c5b1e29

Browse files
committed
Added gitlab mcp server
1 parent 7b8f3f0 commit c5b1e29

9 files changed

Lines changed: 1580 additions & 9 deletions

File tree

.pre-commit-config.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ ci:
88

99
repos:
1010
- repo: https://github.com/pre-commit/pre-commit-hooks
11-
rev: v5.0.0
11+
rev: v6.0.0
1212
hooks:
1313
- id: check-added-large-files
1414
- id: check-ast
1515
- id: check-yaml
1616
- id: check-toml
1717
- id: check-json
18-
- id: check-byte-order-marker
18+
- id: fix-byte-order-marker
1919
exclude: .gitignore
2020
- id: check-merge-conflict
2121
- id: detect-private-key
@@ -27,7 +27,7 @@ repos:
2727
hooks:
2828
- id: black
2929
- repo: https://github.com/astral-sh/ruff-pre-commit
30-
rev: v0.11.4
30+
rev: v0.12.9
3131
hooks:
3232
- id: ruff
3333
types_or: [ python, pyi, jupyter ]

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
Pythonic GitLab API Library
2626

27+
GitLab MCP Server for Agentic AI!
28+
2729
Includes a large portion of useful API calls to GitLab and SQLAlchemy Models to handle loading API calls directly to a database!
2830

2931
This repository is actively maintained - Contributions are welcome!
@@ -244,6 +246,23 @@ if __name__ == "__main__":
244246

245247
```
246248

249+
Use with Agentic AI
250+
251+
252+
253+
```json
254+
{
255+
"mcpServers": {
256+
"gitlab": {
257+
"command": "gitlab-mcp"
258+
}
259+
}
260+
}
261+
262+
```
263+
264+
```
265+
247266
</details>
248267
249268
<details>

gitlab_api/__init__.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22
# coding: utf-8
33
from gitlab_api.version import __version__, __author__, __credits__
4-
from gitlab_api.gitlab_api import Api
4+
from gitlab_api.gitlab_api_mcp import main
55
from gitlab_api.gitlab_input_models import (
66
BranchModel,
77
CommitModel,
@@ -22,6 +22,7 @@
2222
WikiModel,
2323
)
2424
from gitlab_api.gitlab_response_models import (
25+
Response,
2526
DeployToken,
2627
Rule,
2728
AccessControl,
@@ -194,9 +195,16 @@
194195

195196
__all__ = [
196197
"upsert",
198+
"bulk_upsert",
197199
"create_table",
198200
"pydantic_to_sqlalchemy",
201+
"pydantic_to_sqlalchemy_fallback",
202+
"save_model",
203+
"load_model",
204+
"run_migrations",
199205
"Api",
206+
"main",
207+
"Response",
200208
"BranchModel",
201209
"CommitModel",
202210
"DeployTokenModel",
@@ -206,6 +214,7 @@
206214
"PackageModel",
207215
"PipelineModel",
208216
"ProjectModel",
217+
"MergeRequestRuleSettingsModel",
209218
"ProtectedBranchModel",
210219
"MergeRequestModel",
211220
"MergeRequestRuleModel",
@@ -246,6 +255,7 @@
246255
"Runner",
247256
"Job",
248257
"Pipeline",
258+
"ClusterAgent",
249259
"PipelineSchedule",
250260
"PackageLink",
251261
"PackageVersion",
@@ -309,6 +319,7 @@
309319
"RunnerDBModel",
310320
"EpicDBModel",
311321
"IssueDBModel",
322+
"ClusterAgentDBModel",
312323
"JobDBModel",
313324
"DeployableDBModel",
314325
"LastDeploymentDBModel",

gitlab_api/__main__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/usr/bin/python
2+
# coding: utf-8
3+
4+
from .gitlab_api_mcp import main
5+
6+
if __name__ == "__main__":
7+
main()

gitlab_api/gitlab_api.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,6 @@ def _fetch_all_pages(
186186
model.max_pages = total_pages
187187

188188
if model.max_pages > 1:
189-
pages_per_header = max(1, (model.max_pages - 1) // len(headers_to_use))
190189

191190
with ThreadPoolExecutor(max_workers=len(headers_to_use)) as executor:
192191
future_to_page = {}
@@ -1925,7 +1924,9 @@ def get_project_merge_request(self, **kwargs) -> Union[Response, requests.Respon
19251924
# Merge Rules API #
19261925
####################################################################################################################
19271926
@require_auth
1928-
def get_project_level_rules(self, **kwargs) -> Union[Response, requests.Response]:
1927+
def get_project_level_merge_request_rules(
1928+
self, **kwargs
1929+
) -> Union[Response, requests.Response]:
19291930
"""
19301931
Get project-level merge request approval rules.
19311932
@@ -1952,7 +1953,9 @@ def get_project_level_rules(self, **kwargs) -> Union[Response, requests.Response
19521953
return response
19531954

19541955
@require_auth
1955-
def get_project_level_rule(self, **kwargs) -> Union[Response, requests.Response]:
1956+
def get_project_level_merge_request_rule(
1957+
self, **kwargs
1958+
) -> Union[Response, requests.Response]:
19561959
"""
19571960
Get details of a specific project-level merge request approval rule.
19581961

0 commit comments

Comments
 (0)