Server has 10 tools with consistent naming (verb_noun pattern) and visible input schemas via Zod. However, descriptions are generic and lack LLM-optimization guidance. Parameter descriptions exist but are minimal (avg ~40 chars, below 72-char baseline). Output schemas are defined in code but not documented in tool registration. Error handling is basic (generic 'GitLab API error' messages). No tool annotations (readOnlyHint/destructiveHint). Missing idempotency guidance for write operations. Composition is sound, tools are single-responsibility and chainable via IDs.
Create a new branch in a GitLab project
Create a commit with multiple file operations in a GitLab project
Create a new issue in a GitLab project
Create a new merge request in a GitLab project
Create or update a file in a GitLab project repository
Create a new GitLab project/repository
Create a tree (multiple files) in a GitLab project repository
Generic error messages lack recovery guidance. All tools throw 'GitLab API error: {statusText}' without indicating whether the error is retryable, user-fixable, or fatal. LLMs cannot determine next steps.
Write operations (fork_project, create_branch, create_issue, create_merge_request, create_or_update_file, create_tree, create_commit, create_repository) lack idempotency guidance and confirmation patterns. No dry-run or confirmation step before destructive actions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Fork a GitLab project to the authenticated user's namespace or a specified namespace
Get the contents of a file or directory from a GitLab project
Search for GitLab projects by query string
Tool descriptions are under 100 characters and lack context on WHEN to use each tool vs alternatives. E.g., 'Create a new branch in a GitLab project' does not explain when to use create_branch vs create_commit. Descriptions should be 50-200 chars with selection guidance.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) in tool registration. LLMs cannot infer which tools are safe to retry, which modify state, or which are read-only without explicit hints.
Output schemas are defined in schemas.ts but not documented in tool descriptions. LLMs cannot see what fields to expect from responses, forcing them to guess or make extra discovery calls.