A Model Context Protocol server for GitLab that provides tools to interact with GitLab projects, merge requests, issues, commits, pipelines, and files
The server registers 10 tools with explicit schemas and descriptions via the MCP SDK. All tools have input schemas with JSON Schema structure and type declarations. However, several issues prevent a higher score: (1) Output schemas are completely undocumented, the handler functions return results but no schema is declared to help LLMs understand what fields to expect; (2) Parameter descriptions are present but often minimal (10-30 chars), below the 72-char baseline for A+ tools; (3) Two tools (gitlab_create_MR_note, gitlab_create_mr) are write operations but lack explicit destructive/confirmation patterns; (4) No error handling guidance is evident in the code, error responses are likely unstructured; (5) Tool names are adequate but not optimally descriptive (e.g., 'gitlab_create_MR_note' uses inconsistent capitalization 'MR' instead of 'mr', and 'create_mr' would be clearer than 'create_MR'); (6) Missing required parameters like 'ref' default to None in gitlab_list_commits, risking unintended behavior. The server meets minimum thresholds for schema presence and naming conventions but falls short of production patterns for output documentation, error messaging, and confirmation workflows.
Create a comment on a merge request
Create a new merge request. Cannot create MR to or from master/test branches.
Get the content of a file from a GitLab repository
Get detailed information about a merge request
Get details of a GitLab project
List commits in a GitLab project
Output schemas completely undocumented. No tool declares what fields the response contains, forcing LLMs to guess structure and waste tokens parsing untyped results. Rubric requires 100% of A+ tools document return types.
Write operations (gitlab_create_MR_note, gitlab_create_mr) lack explicit confirmation or dry-run patterns. No tool description indicates these are irreversible or suggests a confirmation step. Agents may execute destructively without safeguards.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 46 | - | v1 |
List issues in a GitLab project
List merge requests in a GitLab project
List pipelines in a GitLab project
List GitLab projects for authenticated user
Parameter descriptions are consistently minimal (10 - 30 characters), far below the 72-character baseline for A+ tools. E.g., 'The project ID or path' (24 chars) lacks detail on acceptable formats or examples. Descriptions should state format constraints and common usage patterns explicitly.
Tool name 'gitlab_create_MR_note' uses inconsistent capitalization ('MR' vs 'mr'). Prefer lowercase 'mr' (gitlab_create_mr_note) or, better, rename to 'gitlab_add_mr_comment' for clarity. LLMs may conflate inconsistent naming.
No evidence of error handling guidance in handler code (internal/mcp/server.go excerpt incomplete, but no error recovery messages visible). LLMs need actionable error messages: 'Project not found. Try gitlab_list_projects() to see available projects.' instead of raw HTTP codes or stack traces.
gitlab_list_commits has 'ref_name' as optional but its omission likely defaults to HEAD, which may not match user intent. Parameter description lacks constraints: is it a branch, tag, or commit hash? LLM may pass invalid values.
List tools (gitlab_list_projects, gitlab_list_mrs, gitlab_list_issues, gitlab_list_pipelines, gitlab_list_commits) accept 'per_page' but no documentation of max limits, default values, or pagination total counts. Without pagination metadata, LLMs cannot reliably retrieve large result sets.
Parameters like 'state' in gitlab_list_mrs and gitlab_list_issues lack enum declarations. Description says '(opened, closed, merged, all)' as a list, not a formal enum. LLMs may invent values like 'pending' or 'archived' not in the API.