MCP server for GitLab automation — manage groups, projects, variables, and access tokens via AI.
1.6K
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
CreateOrUpdateProjectVariable: replaced the unsupported standalone hidden request field with masked_and_hidden (the correct GitLab API field per docs). When isHidden = true the request now sends masked=true and masked_and_hidden=true. The Hidden property on GitLabVariable DTO is unchanged — GitLab still returns hidden in response bodies.CreateOrUpdateProjectVariable: isHidden = true now automatically promotes isMasked to true (GitLab requires a variable to be masked before it can be hidden).ProjectClient.SearchProjects: find projects by partial name/namespace (paginated) or by exact numeric ID.
search (partial name/namespace), id (exact ID), page, perPage (1–100), searchNamespaces (default true).Result<PagedResult<GitLabProject>> with Items, Page, PerPage, TotalItems, TotalPages populated from GitLab X-Total / X-Total-Pages response headers.PagedResult<T> DTO: generic paginated wrapper reusable across future paged endpoints.path_with_namespace field added to GitLabProject DTO (e.g. group/my-project).gitlab_search_projects: accepts search, id, page, perPage, searchNamespaces; returns structured paginated JSON.garrardkitchen/gitlab-mcp now ships manifests for both linux/amd64 and linux/arm64 (Apple Silicon / AWS Graviton).SearchProjects (by ID, by name, pagination, empty results, API failure, invalid domain, no criteria).COPY LICENSE ./ so the LICENSE asset referenced in Garrard.GitLab.csproj is present during Docker builds.ProjectClient.CreateProjectAccessToken: creates a project access token via the GitLab API.
GL_TOKEN, default scope WriteRepository, default access level Maintainer (40), default expiry one year from creation.ProjectAccessTokenScope flags enum with 14 scopes (Api, ReadApi, WriteRepository, ReadRegistry, WriteRegistry, ReadPackageRegistry, WritePackageRegistry, CreateRunner, ManageRunner, AiFeatures, K8sProxy, ReadObservability, WriteObservability).AccessLevel enum: NoAccess(0), Minimal(5), Guest(10), Reporter(20), Developer(30), Maintainer(40), Owner(50).GitLabProjectAccessToken DTO: Id, Name, Token (creation only), Scopes[], AccessLevel, ExpiresAt, CreatedAt, Revoked, Active.gitlab_create_project_access_token.isHidden parameter on CreateOrUpdateProjectVariable (both library and MCP tool): sends the hidden field to the GitLab API, defaults to true. Hidden variable values are not retrievable after creation.
GitLabVariable DTO updated with Hidden property.garrardkitchen/gitlab-mcp): MCP server published on every semver tag via .github/workflows/docker.yml.
docker run --rm -i -e GL_PAT=... -e GL_DOMAIN=... garrardkitchen/gitlab-mcp:latestdocker run --rm -p 8080:8080 -e MCP_TRANSPORT=http -e MCP_API_KEY=... -e GL_PAT=... -e GL_DOMAIN=... garrardkitchen/gitlab-mcp:latestGarrard.GitLab.Library.Enums namespace introduced for AccessLevel and ProjectAccessTokenScope.CreateOrUpdateProjectVariable signature: isHidden = true inserted before Action<string>? onMessage (non-breaking for named-parameter callers).src/Garrard.GitLab.McpServer): new ASP.NET Core + console hybrid server exposing all 25 library operations as Model Context Protocol tools.
stdio (default, for Claude Desktop) and http transports via MCP_TRANSPORT env var.Authorization: Bearer <MCP_API_KEY>).pat/gitlabDomain parameter overrides with fallback to GL_PAT/GL_DOMAIN env vars.ModelContextProtocol 1.0.0 SDK.AddGarrardGitLab() extension method and IGitLabHttpClientFactory abstraction for testability.tests/Garrard.GitLab.Tests): 36 tests using xUnit v3 + Moq covering all library operations and DI types.tests/Garrard.GitLab.McpServer.Tests): 14 tests covering ApiKeyMiddleware and ToolHelper.actions/checkout@v4 + actions/setup-dotnet@v4, added NuGet cache, test result publishing via EnricoMi/publish-unit-test-result-action@v2, code coverage reporting via irongut/[email protected], PR coverage comments, and a coverage threshold gate.v*) rather than main push; includes test gate before publish; uses nuget-production GitHub Environment.Repository structure: all source projects moved into src/; tests in tests/.
Solution file updated to reference new paths.
Library version bumped to 1.0.0.
CI no longer builds/packs against old root paths.
Updated version to 0.0.21
Content type
Image
Digest
sha256:18ac600aa…
Size
92.5 MB
Last updated
7 months ago
docker pull garrardkitchen/gitlab-mcp