A Model Context Protocol server for GitLab integration, providing tools to manage projects, merge requests, repositories, branches, pipelines, jobs, users, groups, variables, and deployments
This server has 8 tools with mixed quality. Most tools have descriptions (7/8), but several parameters lack descriptions or have incomplete schemas. Tool naming is generally action-oriented (verb_noun pattern), but parameter documentation is inconsistent. No output schemas are documented for any tool. Error handling is not visible in the source. The server exposes tool definitions but does not provide comprehensive guidance for LLM usage. Average parameter count is ~6 per tool, within baseline (p10=1, p90=8). Critical gap: no output schema documentation for ANY tool, violating pattern:tool requirement.
Create a new Git Flow branch (release, feature, or hotfix)
Finish a Git Flow branch by creating merge requests
List Git Flow branches (feature, release, hotfix)
List all deploy tokens (requires administrator access)
List all users in a GitLab group
List GitLab groups accessible to the user
NO OUTPUT SCHEMAS DOCUMENTED. The server defines input schemas for all tools but provides ZERO documentation of return types, field names, or data structures. LLMs cannot plan downstream tool calls or extract necessary data (e.g., user_id, token_id) for follow-up operations. This violates the critical pattern:tool requirement.
list_all_deploy_tokens uses a dummy 'random_string' parameter (type string, description 'Dummy parameter for no-parameter tools') instead of accepting zero parameters. This is a workaround for protocol limitations and indicates the tool definition is incomplete or the framework does not support parameterless tools.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Manage branch protection for GitLab projects: protect, unprotect, list, get_protection
Manage deploy tokens for projects or groups. Supports list, get, create, and delete operations.
MISSING ERROR HANDLING GUIDANCE. Source code does not show recovery instructions for common failures (e.g., 'User not found, call search_users()'), error categorization (retryable vs. fatal), or actionable error messages. This violates pattern:recovery-guide.
PARAMETER DESCRIPTIONS MISSING OR VAGUE in 3 tools. 'list_group_users' has only 1 parameter with minimal description. 'list_groups' search and min_access_level parameters have terse descriptions that don't explain intent or constraints. LLMs cannot reliably infer usage without explicit, complete parameter docs.
PAGINATION NOT VISIBLE. Tools like 'list_all_deploy_tokens', 'list_groups', and 'list_group_users' are list tools but do not expose page, offset, or limit parameters in their schemas. Large result sets will blow context windows without pagination. Violates pattern:paginated-result.
CONFIRMATION FIELDS NOT STANDARDIZED. Tools 'manage_branch_protection', 'manage_deploy_tokens', 'gitflow_create_branch', and 'gitflow_finish_branch' have 'confirmed' parameters, but the server does not document how confirmation is enforced (e.g., does the tool refuse execution if confirmed=false?). Pattern:confirmation-request requires explicit dry-run or confirmation handling.
NESTED OBJECT PARAMETERS LACK CLARITY. 'manage_branch_protection' has 'protection_options' (object with 7 sub-fields), 'manage_deploy_tokens' has 'scope', 'token_id', and 'create_options' (deeply nested). Descriptions do not clarify required vs. optional sub-fields, default behavior, or when each is used. LLMs struggle with nested object construction.
ENUM VALUES NOT DOCUMENTED IN DESCRIPTIONS. Several parameters (e.g., 'manage_branch_protection' action enum: protect, unprotect, list, get_protection; 'manage_deploy_tokens' scope.type enum: project, group) use enums, but the descriptions do NOT explain what each enum value does or when to use it. Descriptions should include: 'Action to perform: protect (enable branch protection), unprotect (disable), list (show all protected branches), get_protection (fetch current settings for one branch).'