Skip to main content
Glama

GitLab MCP Server (@sumirati/mcp-gitlab)

A robust, developer-ready, modular, and LLM-ergonomic Model Context Protocol (MCP) server for both self-hosted GitLab Community Edition (CE) and GitLab Enterprise Edition (EE).

npm version License: MIT GitHub GitLab


Mission

MCP-gitlab provides high-signal, LLM-optimized access to GitLab instances. Rather than dumping raw API payloads, it focuses on context efficiency, developer ergonomics, and native AI pair-programming workflows for codebase management, task coordination, CI/CD observability, project governance, wiki documentation, and release delivery.


Related MCP server: Context Guardian

Core Pillars & Capabilities

1. Repository & Project Governance

  • Full Project Lifecycle: Create, inspect, update (name, description, default branch, visibility, topics), and safely delete repositories (with explicit safety confirmation).

  • Group & Namespace Hierarchy: Support for group namespaces (e.g. buggycode/project-name), automatic group name/path resolution (resolveNamespaceId), group project search, and group metadata inspection.

  • Branch Management: List branches with commit status, inspect branches, create branches, and delete stale feature branches (with default-branch deletion protection).

  • Project Members & Permissions: Add, list, inspect, and remove project collaborators with full role mapping (Guest, Reporter, Developer, Maintainer, Owner).

  • Files & Batch Commits: Read file/directory trees, update single files, or commit batches across multiple files atomically.

2. Task & Project Planning

  • Full Issue Lifecycle: CRUD operations, filtering by state, milestone, label, author, and assignee with clean summaries.

  • Smart Milestone Management: Full CRUD with automatic resolution of human-readable milestone_title to internal numeric IDs (including inherited group milestones).

  • Task Dependencies (issue_links): First-class tracking of blocks, is_blocked_by, and relates_to relationships for AI roadmap planning and dependency graphs.

  • Discussions & Progress Tracking (issue_notes): Post progress logs, test results, or design rationale directly to issues without modifying descriptions.

3. CI/CD, Observability & Environment Variables

  • CI/CD Project Variables: Full lifecycle (create, list, inspect, update, delete) for pipeline variables (env_var and file) with protected, masked, and scoped environment configurations.

  • Pipelines & Job Inspection: Query pipelines by branch, commit SHA, or execution status (running, failed, success), and inspect detailed job metrics, durations, and runners.

  • Safe Job Log Tailing (get_job_trace): Safely tail test/build logs (tail_lines) so agents can inspect stack traces directly without token overflow.

  • Artifacts Inspection (get_job_artifact_file): Read and inspect generated build artifacts, test summaries, and reports directly from job runs.

  • JUnit Test Reports (get_pipeline_test_report): High-level test suite breakdowns (total, passed, failed, failure messages).

4. Merge Request Code Reviews & Diff Discussions

  • Token-Efficient Diff Inspection (get_merge_request_changes): Two-stage review (manifest first, diffs on demand), lockfile pruning (package-lock.json, poetry.lock), single-file diff filtering, and line truncation safeguards.

  • Inline Code Review Discussions (create_diff_discussion): Post comments targeting specific lines in the diff with automatic SHA coordinate resolution (head_sha, base_sha, start_sha).

  • Discussion Thread Replies (reply_merge_request_discussion): Enable contributors and reviewers to reply directly into active inline threads without requiring maintainer privileges.

  • Discussion Notes Editing (update_merge_request_discussion_note): Update and refine review feedback inline.

  • Resolution Lifecycle (list_merge_request_discussions, resolve_merge_request_discussion): Filter unresolved discussions to audit blocking feedback, and resolve threads upon verification.

  • Full Merge Delivery (accept_merge_request): Merge approved MRs with squash and branch cleanup flags.

5. Wiki Documentation & Token Slicing

  • Token-Efficient Wiki Exploration: Inspect page outlines using toc_only: true before loading large documentation pages.

  • Targeted Section Extraction: Jump directly to a topic using section or anchor notation (page#topic) to retrieve only the relevant lines.

  • Full Wiki Authoring: Separate, explicit create_wiki and update_wiki operations.

6. Snippets & Code Templates

  • Project Snippets: Manage shared code snippets, configuration files, and script templates with list_snippets, get_snippet, create_snippet, and update_snippet.

7. User & Identity Context

  • Current User Discovery (get_current_user): Check the authenticated identity, username, ID, and administrative privileges.

  • Group & Project Membership (list_my_groups, get_group, list_group_projects, list_my_projects): Discover all accessible groups, group projects, and owned or contributed repositories.

8. Git Commits & Diffs

  • Commit History (list_commits): Query commit logs with author, date, and clean message summaries.

  • Commit Inspection (get_commit): View file modification manifests and token-capped diffs with optional single-file filtering (file_path).


Architecture & Codebase Design

The server is built with a modular, maintainable architecture under src/:

MCP-gitlab/
├── index.js                  # Lightweight entry point (< 85 lines)
├── src/
│   ├── client.js             # HTTP client with rate-limiting, auth, read-only guard & pagination
│   ├── schemas.js            # Shared base schemas & Zod 4 JSON Schema converter
│   ├── helpers.js            # Token-saving payload summarizers, namespace & milestone resolvers
│   └── tools/                # 13 domain-specific tool implementations
│       ├── repositories.js   # 9 repository & project management tools
│       ├── branches.js       # 4 branch lifecycle tools
│       ├── members.js        # 5 project member & role tools
│       ├── variables.js      # 5 CI/CD project variable tools
│       ├── issues.js         # 8 issue, note & link tools
│       ├── milestones.js     # 6 milestone & label tools
│       ├── pipelines.js      # 8 pipeline, job, log & artifact tools
│       ├── releases.js       # 5 release & tag tools
│       ├── merge-requests.js # 12 merge request review, diff & discussion tools
│       ├── wikis.js          # 4 wiki tools with TOC & section slicing
│       ├── snippets.js       # 4 snippet lifecycle tools
│       ├── user.js           # 5 user, group & project context tools
│       └── commits.js        # 2 commit history & diff tools

LLM-First Architectural Principles

  • Context Token Economy: Lean response payloads by default returning high-signal summaries instead of thousands of lines of raw GitLab API metadata.

  • Smart Auto-Resolution: Transparently resolves paths (e.g. 'group/project-name' vs numeric 31), milestone titles, user roles/access levels, and label strings/arrays.

  • Self-Hosted & CE First: Zero dependencies on GitLab Duo or enterprise licenses; connects over standard v4 REST using a Personal Access Token (PAT).

  • 3-Tier Read-Only Defense (GITLAB_READ_ONLY=true): Complete safety guarantee when allowing AI agents to diagnose codebases. Filters mutating tools from ListTools (saving thousands of context tokens), intercepts tool invocation at the dispatch layer, and blocks non-GET/HEAD HTTP methods in the network client.


Quickstart & Installation

Option 1: Run with npx (No installation needed)

npx -y @sumirati/mcp-gitlab

Option 2: Install Globally

npm install -g @sumirati/mcp-gitlab
mcp-gitlab

Option 3: Local Clone

git clone https://github.com/sumirati/mcp-gitlab.git
# Or from GitLab.com:
# git clone https://gitlab.com/sumirati/mcp-gitlab.git

cd mcp-gitlab
npm install
node index.js

Environment Configuration

Configure the following environment variables (or copy .env.example to .env):

Variable

Required

Default

Description

GITLAB_PERSONAL_ACCESS_TOKEN

Yes

—

Personal access token with api scope.

GITLAB_API_URL

No

https://gitlab.com/api/v4

Base API URL of your GitLab CE/EE or cloud instance.

GITLAB_READ_ONLY

No

false

Enable Read-Only safety mode (true, 1, yes). Filters out mutating tools and strictly blocks write/modify HTTP requests.


Client Configuration

Google Antigravity / Claude Desktop / Cursor

Add to your MCP configuration file (mcp_config.json or claude_desktop_config.json):

Using npm / npx:

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "@sumirati/mcp-gitlab"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "<your-gitlab-token>",
        "GITLAB_API_URL": "https://gitlab.example.com/api/v4"
      }
    }
  }
}

Using local repository:

{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": ["/path/to/MCP-gitlab/index.js"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "<your-gitlab-token>",
        "GITLAB_API_URL": "https://gitlab.example.com/api/v4"
      }
    }
  }
}

Complete Tools Reference

The server exposes 77 tools organized across 13 functional domains (41 read-only, 36 mutating):

1. Repository & Project Management (9 tools)

Tool

Description

Mutating?

search_repositories

Search projects and repositories by query with pagination (supports group filter)

No

get_project

Get comprehensive project metadata, description, default branch, and statistics

No

create_repository

Create a new GitLab project/repository (supports groups/namespaces and empty repos)

Yes

update_project

Update project metadata (description, name, default branch, visibility, topics)

Yes

delete_project

Delete a project/repository (requires explicit name confirmation for safety)

Yes

get_file_contents

Read file or directory content from a repository

No

create_or_update_file

Create or update a single file with commit message

Yes

push_files

Commit multiple files in a single atomic commit

Yes

fork_repository

Fork a project into a user or group namespace

Yes

2. Branch Management (4 tools)

Tool

Description

Mutating?

list_branches

List repository branches with commit details, default flag, and protected status

No

get_branch

Get specific branch details, commit SHA, and protection rules

No

create_branch

Create a new branch from a commit, tag, or branch

Yes

delete_branch

Delete a branch from a project repository (blocks default branch deletion)

Yes

3. Project Members & Permissions (5 tools)

Tool

Description

Mutating?

list_project_members

List project members and collaborators with access levels and roles

No

get_project_member

Get details for a specific project member by user ID or username

No

add_project_member

Add a user to a project with specified role/access level

Yes

update_project_member

Update a project member's access level role or expiration date

Yes

remove_project_member

Remove a user/collaborator from a project

Yes

4. CI/CD Project Variables (5 tools)

Tool

Description

Mutating?

list_project_variables

List CI/CD project variables with keys, types, protected/masked flags

No

get_project_variable

Get specific CI/CD variable details and value by key

No

create_project_variable

Create a new CI/CD project variable (env_var or file)

Yes

update_project_variable

Update an existing CI/CD project variable's value or configuration

Yes

delete_project_variable

Delete a CI/CD project variable by key

Yes

5. Issues & Notes (8 tools)

Tool

Description

Mutating?

list_issues

List and filter issues (state, milestone, labels, assignee)

No

get_issue

Get details for an issue by project-scoped IID (#<iid>)

No

create_issue

Create an issue with title, description, milestone, and labels

Yes

update_issue

Update issue title, state, milestone, labels, or assignees

Yes

list_issue_notes

List discussions, comments, and activity log on an issue

No

create_issue_note

Post a comment or progress/verification note to an issue

Yes

list_issue_links

List related, blocking, or blocked-by issue dependencies

No

create_issue_link

Create an issue dependency (relates_to, blocks, is_blocked_by)

Yes

6. Milestones & Labels (6 tools)

Tool

Description

Mutating?

list_milestones

List project milestones with start and due dates (supports ancestor groups)

No

get_milestone

Get details for a milestone by numeric ID

No

create_milestone

Create a project milestone with due dates

Yes

update_milestone

Update milestone title, dates, description, or state

Yes

list_labels

List labels available in the project (supports ancestor groups)

No

create_label

Create a project label with color hex and description

Yes

7. CI/CD Pipelines, Jobs & Artifacts (8 tools)

Tool

Description

Mutating?

list_pipelines

List CI/CD pipelines filtered by branch, tag, status, or SHA

No

get_pipeline

Get pipeline status, duration, and commit information

No

create_pipeline

Trigger a new CI/CD pipeline execution for a branch/tag

Yes

list_pipeline_jobs

List all jobs (build, test, deploy) and status in a pipeline

No

get_job

Get comprehensive details about a CI/CD job (duration, runner, artifacts)

No

get_job_trace

Inspect terminal output log of a job with safe tail_lines

No

get_job_artifact_file

Download and read a specific file from a job's build artifacts archive

No

get_pipeline_test_report

Get JUnit test report summary (passed/failed suites, error traces)

No

8. Releases & Tags (5 tools)

Tool

Description

Mutating?

list_releases

List published releases and changelogs

No

get_release

Get release details by tag name

No

create_release

Publish a formal release with tag, changelog, and milestones

Yes

list_tags

List Git tags in the repository

No

create_tag

Create a Git tag pointing to a branch or commit

Yes

9. Merge Requests & Code Reviews (12 tools)

Tool

Description

Mutating?

list_merge_requests

List merge requests filtered by state, branches, milestone, labels

No

get_merge_request

Get merge request details and status by IID (!<iid>)

No

create_merge_request

Create a merge request between branches

Yes

update_merge_request

Update MR title, description, state, milestone, or labels

Yes

get_merge_request_changes

Inspect code diffs in an MR (supports token-saving summary, file filtering, and lockfile pruning)

No

list_merge_request_discussions

List inline code review discussions and threads on an MR (supports unresolved_only filter)

No

create_diff_discussion

Post an inline code review comment on a specific line and file (resolves SHAs automatically)

Yes

reply_merge_request_discussion

Post a reply comment into an existing MR code review discussion thread

Yes

update_merge_request_discussion_note

Update or edit the text of an existing review comment in an MR discussion thread

Yes

resolve_merge_request_discussion

Resolve or unresolve a code review discussion thread on an MR

Yes

accept_merge_request

Merge an approved MR with squash and branch cleanup flags

Yes

create_merge_request_note

Post a general review comment or note on a merge request

Yes

10. Wiki Documentation (4 tools)

Tool

Description

Mutating?

list_wikis

List all wiki pages in a GitLab project (slugs, titles, and formats)

No

get_wiki

Get wiki page content with toc_only outline or section extraction

No

create_wiki

Create a new wiki page with title, markdown content, and format

Yes

update_wiki

Update an existing wiki page's title or markdown content

Yes

11. Snippets & Templates (4 tools)

Tool

Description

Mutating?

list_snippets

List code snippets in a project with titles and visibility

No

get_snippet

Get snippet details and full raw content

No

create_snippet

Create a new code snippet with file name, description, and visibility

Yes

update_snippet

Update an existing code snippet's title, file name, or content

Yes

12. User & Identity Context (5 tools)

Tool

Description

Mutating?

get_current_user

Get authenticated user profile, username, ID, and admin status

No

list_my_groups

List groups the authenticated user belongs to with access level

No

get_group

Get comprehensive group details, metadata, visibility, and description by ID or path

No

list_group_projects

List all projects and repositories belonging to a specific group or organization

No

list_my_projects

List projects owned by or accessible to the current user

No

13. Commits & Diffs (2 tools)

Tool

Description

Mutating?

list_commits

List repository commit logs filtered by branch/ref, path, or date

No

get_commit

Get commit details with file manifest and token-capped diffs (file_path filter)

No


Roadmap

Delivered in v2.0.0

  • Modular Codebase Architecture: Domain-driven layout under src/tools/ (< 85-line index.js).

  • Context Token Economy: Lean response summaries and Zod 4 JSON Schema engine.

  • 3-Tier Read-Only Safety Mode (GITLAB_READ_ONLY=true): Tool list filtering, dispatch-layer blocking, and HTTP client method interception.

  • Project Wiki Documentation: Full authoring, Table of Contents outline (toc_only), and chapter slicing.

  • Project Code Snippets: Full lifecycle (list, get, create, update).

  • Branch Governance: Complete branch management (list, get, create, delete with default-branch protection).

  • Project Members & Permissions: Add, list, inspect, update, and remove collaborators with role name mapping.

  • CI/CD Project Variables: Full lifecycle for pipeline variables with masked secret redaction.

  • CI/CD Observability & Artifacts: Detailed job inspection and safe file reading from build artifact archives.

  • Inline MR Diff Reviews & Discussions: Full 6-tool suite for authors, contributors, reviewers, and maintainers with automatic SHA coordinate resolution.

  • Group & Namespace Hierarchy: Support for group namespaces, auto-resolving group paths, group search, and group-inherited milestones/labels.

Future Deliverables (Priority Backlog)

Tier 2: DevOps & Platform Setup

  • Protected Branch Access Rules: Query and configure branch protection rules (list_protected_branches, protect_branch, unprotect_branch) to automate push/merge permissions.

  • Container & Package Registry: Inspect published Docker image tags and packages (npm, Maven, generic) hosted in GitLab's built-in registry (list_registry_repositories, list_packages).

  • Deploy Keys & Deploy Tokens: Manage read/write deploy tokens and deploy keys for automated CI/CD runners and external staging environments (list_deploy_keys, create_deploy_token).

  • Issue Kanban Boards: Query visual issue boards and list columns (list_boards, list_board_lists) for sprint and backlog tracking.

Tier 3: Integrations & Administration

  • Project Webhooks & Integrations: List and configure project webhooks (list_project_hooks, create_project_hook) for event notifications.

Transport & Deployment

  • Streamable HTTP / SSE Remote Transport: Support running as a remote/hosted MCP service alongside the default local stdio transport.


Upcoming Sibling Project: @sumirati/mcp-github

To enable seamless cross-platform AI synchronization across public edge repositories (GitHub.com, GitLab.com) and authoritative self-hosted GitLab masters, a dedicated sibling project @sumirati/mcp-github is planned. It will share the exact same architectural DNA as @sumirati/mcp-gitlab:

  • Lightweight, zero-dependency Node.js runtime (npx @sumirati/mcp-github).

  • Context token economy (manifest-first diff inspection, automatic lockfile filtering).

  • 3-Tier Read-Only safety mode (GITHUB_READ_ONLY=true).

  • Complete symmetry for PR diff discussions and GitHub Actions workflow log tailing.


Acknowledgements & Third-Party Lineage

This project incorporates architectural concepts, schemas, and patterns from:

  • @modelcontextprotocol/server-gitlab (MIT License) — Copyright (c) 2024 Anthropic, PBC / GitLab, PBC. Baseline repository and file schema patterns.

  • @modelcontextprotocol/sdk (MIT License) — Copyright (c) Anthropic, PBC.

  • zod (MIT License) — Colin McDonnell.

  • GitLab REST API v4 — GitLab, PBC.

  • Architectural patterns evaluated from Vijay-Duke/mcp-gitlab and zereight/gitlab-mcp.

See NOTICE for complete third-party attribution details.


License

This project is licensed under the MIT License — Copyright (c) 2026 sumirati@buggycode.net.

Available Tools

77 tools
accept_merge_requestB

Merge an approved merge request into the target branch

ParametersJSON Schema
NameRequiredDescriptionDefault
squashNoSquash commits during merge
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
commit_messageNoCustom commit message for the merge commit
merge_request_iidYesMerge request IID to merge into target branch
should_remove_source_branchNoDelete source branch after merge

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It reveals the precondition (approved MR) and the destination (target branch), but says nothing about required permissions, that the operation mutates the repository irreversibly, that the source branch handling / squash options exist, or how failures (conflicts, unapproved state) surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though arguably terse enough that a little more substance could be added without hurting readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a consequential mutation with no annotations and no output schema, one sentence is thin: it does not cover permission needs, failure modes, or what state changes result beyond the merge itself. The schema covers the options, but the behavioral envelope is only partially described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters including squash, commit_message, and should_remove_source_branch are already documented in the schema. The description adds no parameter meaning beyond that, which is the correct baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (merge) and resource (merge request) plus the scope (into the target branch, only approved MRs). An agent can distinguish it from update_merge_request by the merge semantics, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'approved' implies the precondition that the MR must already be approved, which is useful routing information. However, there is no explicit when-to-use vs when-not guidance, no mention of alternatives like update_merge_request, and no note about what to do on a rejected merge.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_project_memberC

Add a user to a project with specified role/access level

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesUser numeric ID or username to add
expires_atNoOptional membership expiration date (YYYY-MM-DD)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
access_levelYesGitLab access level: 'guest' (10), 'reporter' (20), 'developer' (30), 'maintainer' (40), 'owner' (50)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and delivers little: it doesn't state the permission level required to add members, whether re-adding an existing member is idempotent or errors, whether access is granted immediately, or what happens on failure. 'Add' conveys mutation but nothing about consequences or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is appropriately sized for the information it contains, though that information is thin rather than dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter write operation with no annotations and no output schema, the definition is under-specified: it says nothing about required permissions, the semantics of the optional expires_at membership window, or error behavior. The schema covers parameter details but the description leaves the mutation's contract largely unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so user_id, project_id, access_level and expires_at are already fully documented in the schema, including GitLab access-level values. The description only restates role/access level and adds no syntax or formatting detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Add'), resource ('user to a project') and the key payload ('role/access level'), so an agent can distinguish it from update_project_member and remove_project_member at a glance. It stops short of explicitly naming those siblings or the boundary conditions that separate add from update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not guidance. The agent must infer from the verb alone that this creates a membership rather than modifying one, and nothing tells it whether to prefer this over update_project_member for an existing member or what preconditions must hold.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_branchB

Create a new branch from a commit, tag, or branch

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesSource branch, tag, or commit SHA to branch from (default: HEAD)HEAD
branchYesName of the new branch to create (e.g. 'feature/upgrade-java')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the creation action but omits any behavioral context: whether the branch must not already exist, required permissions, or the default HEAD behavior. A one-line description leaves significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero redundancy and every word earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-required-parameter mutation tool with no annotations and no output schema, the description is minimally adequate but omits the behavioral and usage context an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents ref, branch, and project_id. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource ('Create a new branch') with the source specified ('from a commit, tag, or branch'). It distinguishes itself reasonably from siblings like create_tag or fork_repository, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this over create_tag, fork_repository, or push_files. The 'from a commit, tag, or branch' clause implies the source ref usage but offers no exclusions, prerequisites, or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_diff_discussionA

Post an inline code review comment on a specific line and file in an MR (resolves SHAs automatically)

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMarkdown review comment or suggestion
lineYesLine number in the file to attach the review comment to
file_pathYesPath to the file being reviewed (e.g. 'src/client.js')
line_typeYesWhether the line is in the new version ('new') or old version ('old') of the diff (default: new)new
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
merge_request_iidYesMerge request IID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose one genuinely useful behavioral trait: 'resolves SHAs automatically,' which explains the diff-position bookkeeping. It omits other relevant behavior for a mutation tool such as required permissions, what is returned (e.g. a discussion/note ID), and failure modes when the line is not in the diff.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that names the action, the anchor point, and a key behavioral aside with zero filler. Nothing is wasted and the most important information comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutation tool with no annotations and no output schema, the description is minimal but the schema fully documents inputs. It leaves gaps around authorization, the return value (discussion identifier), and error behavior, so it is adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already documented in the schema, including the line_type enum and the project_id dual-format. The description adds no parameter-level meaning beyond that, so it sits at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Post an inline code review comment') with the exact target objects ('a specific line and file in an MR'), which clearly separates it from the general-purpose sibling create_merge_request_note. It stops short of naming that sibling or other discussion tools explicitly, so it is clear but not fully differentiated from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'inline code review comment' framing implies when this is used (line-anchored review feedback rather than a general MR note), giving implied usage. However, it never states when to prefer it over create_merge_request_note, reply_merge_request_discussion, or resolve tools, and lists no prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_issueC

Create a new issue with milestone (by title or ID), labels, assignees, and due date

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesIssue title summarizing the task, bug, or story
labelsNoLabels as an array (['backend', 'p1']) or comma-separated string ('backend, p1')
due_dateNoDue date in YYYY-MM-DD format (e.g. '2026-11-30')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionNoDetailed markdown description, requirements, or checklist
assignee_idsNoArray of numeric user IDs to assign
confidentialYesMark issue as confidential
milestone_idNoNumeric milestone ID to associate with
milestone_titleNoMilestone title (e.g. 'Phase 2: Security Hardening'). Auto-resolved if provided.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden for a write/mutation tool. It says nothing about required permissions, what happens on duplicate titles, how milestone resolution failures are surfaced, or what the response returns. The only behavioral hint is the parenthetical 'by title or ID', which is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with zero filler, and the core action plus supported facets are front-loaded. It is a fragment rather than a full sentence, but nothing needs removing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is rich and fully annotated, and required fields (project_id, title, confidential) are marked there, so parameter-level completeness is adequate. However, for a nine-parameter mutation tool with no annotations and no output schema, the description supplies no behavioral or usage context, leaving a real gap for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters are already documented in the schema, including the labels string-or-array flexibility and the milestone_id/milestone_title split. The description restates a subset of these fields (milestone, labels, assignees, due date) without adding format or constraint details beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a new issue') and enumerates the optional facets it supports (milestone, labels, assignees, due date), which distinguishes it from create_issue_note, create_issue_link, and update_issue. It stops short of explicitly naming which sibling to use instead in ambiguous cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites (e.g. project access, whether the project must already exist), and no contrast with the sibling create_issue_link/create_issue_note tools. The agent must infer everything from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_issue_noteC

Post a comment or progress/verification note to an issue

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMarkdown content for the note / comment (progress update, test verification, etc.)
issue_iidYesThe project-scoped issue number (e.g. 14 for #14)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and falls short. It implies a mutation (a note is created) but does not disclose permission requirements, whether notes can be edited or deleted afterward, or any rate/side-effect behavior — significant gaps for a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is appropriately tight, though arguably it is terse enough that some useful context was dropped.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter tool with full schema coverage and no output schema, the description covers the core concept. However, with zero annotation coverage on a mutation tool, it omits the behavioral grounding an agent would need, leaving it only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents project_id, issue_iid, and body in detail. The description adds the notion of 'progress/verification note' as content intent but no syntax or format beyond the schema — baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Post') and resource ('comment or progress/verification note to an issue'), which distinguishes it from create_issue, list_issue_notes, and create_merge_request_note by scope. It is clear but never explicitly contrasts itself with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (posting comments/progress notes) but gives no explicit when-to-use guidance and no alternatives. It doesn't tell the agent when to prefer this over create_issue or list_issue_notes, leaving routing entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_labelC

Create a project label with color and description

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the label (e.g. 'qa-verified' or 'high-priority')
colorYesColor hex code starting with # (e.g. '#4287f5' or '#e11d48')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionNoExplanation of what this label represents

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden for a mutation tool. It doesn't disclose whether creation is idempotent, what happens on a duplicate label name, what permissions are required, or what the call returns when it succeeds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundancy. It is appropriately sized, though it is arguably too terse to be fully useful rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter create tool with full schema coverage and no output schema, the description is minimally viable: the parameters are covered by the schema. The gaps are behavioral (duplicate handling, permissions, success response), which matter more given there are no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (including format examples for color hex and project_id) are already documented in the schema. The description names color and description but adds no syntax or constraint detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Create') and resource ('project label') and names the attributes involved, so an agent can distinguish it from the sibling list_labels without opening the schema. It doesn't explicitly note that it is the write counterpart of list_labels, but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no reference to alternates such as list_labels or how to proceed if the label already exists. The agent is left to infer that this is the creation path for labels.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_merge_requestC

Create a merge request between branches with description and options

ParametersJSON Schema
NameRequiredDescriptionDefault
draftYesCreate as draft / WIP merge request
titleYesMerge request title
labelsNoLabels to apply
squashYesSquash commits upon merge
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionNoDetailed description of changes and test verification
milestone_idNoMilestone ID to associate with
source_branchYesBranch containing your commits
target_branchYesBranch to merge changes into (e.g. 'main')
milestone_titleNoMilestone title to associate with
remove_source_branchYesDelete source branch upon merge

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It says nothing about permissions required, whether creating the MR triggers pipelines or notifications, what the draft/squash/remove_source_branch flags actually do at creation time, or what happens on failure (e.g. duplicate open MR for the same branch pair). 'Update' is implied mutation but nothing about side effects or reversibility is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence, which is good for front-loading, but the second half ('with description and options') is vague padding that consumes space without adding information. Nothing is left ambiguous by length alone, but little value is delivered per word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is an 11-parameter, 7-required mutation tool with no annotations and no output schema, and the description is one shallow sentence. It should at minimum state prerequisites and mutation side effects; given the complexity, the definition is inadequate for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 11 parameters including defaults and format examples for project_id. The description's phrase 'with description and options' adds no meaning beyond what the schema provides, so the baseline 3 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a merge request') and adds scoping detail ('between branches'), which separates it from sibling tools like update_merge_request, get_merge_request, and accept_merge_request purely on reading the name. The trailing 'with description and options' is filler that dilutes rather than sharpens the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites (e.g. push access, branch must exist), and no routing to alternatives for the closely related operations in the sibling list (accept_merge_request, update_merge_request, list_merge_requests). The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_merge_request_noteB

Post a general review comment or note on a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesReview comment or sign-off message in markdown
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
merge_request_iidYesMerge request IID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Post' implies a write/mutation, but it says nothing about required permissions, whether the note notifies participants, or whether it can be edited afterward. For a mutation tool with zero annotation coverage this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. Every word contributes to identifying the action and target resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (three required, fully documented params, no output schema), but as a mutation with no annotations the definition should at least note that it writes data and what kind of note it creates. Adequate but with clear gaps in behavioral context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented in the schema, including markdown formatting for body. The description adds only the notion that the body is a 'review comment or sign-off message,' which lightly overlaps existing schema text. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Post) and resource (note on a merge request), and the word 'general' hints it is not a line-level or threaded comment. However it does not name the neighboring siblings create_diff_discussion or reply_merge_request_discussion, so the agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no alternatives named despite several closely related note tools in the sibling list. The agent gets no explicit routing signal between this tool and create_diff_discussion or reply_merge_request_discussion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_milestoneC

Create a project milestone with due dates and roadmap scope

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesMilestone title (e.g. 'Phase 3: Code Modernization')
due_dateNoDue date in YYYY-MM-DD format (e.g. '2026-12-31')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
start_dateNoStart date in YYYY-MM-DD format (e.g. '2026-10-15')
descriptionNoMilestone scope and objectives description

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it supplies almost none of it: it doesn't say what permissions are required, whether duplicate titles are rejected, whether the milestone is immediately active, or what is returned. "With due dates and roadmap scope" gestures at fields, not behavior. For a mutation tool with zero annotation coverage this is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler and the verb front-loaded. It is efficient, though its brevity here reflects under-specification rather than disciplined concision, which caps it below 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents all five parameters and two required fields, so an agent can construct a valid call. But with no annotations and no output schema, nothing tells the agent about failure modes, permission requirements, or the returned milestone — the description should have covered that ground.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (including date formats and project_id namespace handling) are already fully documented in the schema. The description's mention of "due dates and roadmap scope" loosely maps to due_date/start_date and description but adds no format or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ("Create") and resource ("project milestone"), so the agent can distinguish it from list_milestones, get_milestone, and update_milestone in the sibling list. However, it never explicitly frames itself as the write counterpart to those read/update siblings, so differentiation is inferable rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus the sibling create/update tools, no prerequisites (project must exist, permission level needed), and no exclusions. The agent is left to infer that this is the creation path from the verb alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_or_update_fileC

Create or update a single file in a GitLab repository

ParametersJSON Schema
NameRequiredDescriptionDefault
branchYesBranch to commit to (e.g. 'main' or 'feature/auth')
contentYesFull content of the file to write
file_pathYesFile path to create or update (e.g. 'docs/roadmap.md')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
previous_pathNoIf renaming or moving a file, specify the old path
commit_messageYesClear Git commit message describing the change

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the entire burden of behavioral disclosure, and it says nothing about authentication requirements, conflict handling (e.g., stale-commit detection on update), whether the branch is auto-created, or what happens when the file already exists. The implicit upsert semantics are the only behavioral signal, which is thin for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is arguably under-specified rather than concise, but there is no wasted text to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating repository write with no annotations and no output schema, the description omits essential context: that it returns a commit reference, whether branches must pre-exist, and how conflicts are surfaced. An agent could invoke it, but not confidently predict its effects or failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with per-parameter examples (branch formats, project ID forms, file paths, previous_path for renames), so the schema already does the explanatory work. The description adds nothing beyond that, which matches the baseline of 3 when the schema is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb pair (create or update) and resource (a single file in a GitLab repository), making the operation immediately identifiable. However, it offers no differentiation from the sibling push_files, which also writes files, so an agent cannot tell the two apart from description text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this over push_files or create_branch, nor any mention of prerequisites such as the branch existing or the project being writable. The 'create or update' phrasing hints at upsert behavior but stops short of stating it as a usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_pipelineA

Trigger a new CI/CD pipeline execution for a branch or tag

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesBranch or tag name to run the pipeline on
variablesNoOptional CI/CD variables to pass to the pipeline execution
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the trigger action and target ref, which implies a write/mutation, but says nothing about permissions required, side effects (e.g., resource consumption), rate limits, or whether the call is idempotent. For a mutation tool with zero annotations, this is a partial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-formed sentence that front-loads the action and resource with no wasted words. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers the core purpose but omits important context: permissions needed, side effects, and what the response returns. The 100% schema coverage mitigates some gaps, but behavioral context is thin for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (ref, project_id, variables) including examples and enum values. The description adds no parameter-level detail beyond restating that ref is a branch or tag, which the schema also states. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Trigger') and resource ('CI/CD pipeline execution') with scope ('for a branch or tag'). It clearly distinguishes from read-oriented siblings like get_pipeline or list_pipelines, though it doesn't name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (triggering an execution on a branch/tag) but offers no explicit guidance on when to use this vs. alternatives like list_pipelines or get_pipeline, nor any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_project_variableC

Create a new CI/CD project variable (env_var or file)

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesVariable key/name (e.g. 'DATABASE_URL')
rawYesIf true, variable value is not expanded
valueYesVariable value
maskedYesIf true, variable value is masked in job logs
protectedYesIf true, variable is only passed to pipelines running on protected branches/tags
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionNoOptional description of the variable purpose
variable_typeYesVariable type: 'env_var' or 'file' (default: env_var)env_var
environment_scopeYesEnvironment scope for the variable (default: '*')*

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and fails to. It does not mention required permission level (e.g. maintainer), whether duplicate keys are rejected or overwritten, or any side effects of the protected/masked flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with no filler; the purpose is front-loaded. It is perhaps too terse for an 8-required-parameter mutation, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, 8 required parameters, and no output schema, the description should say more about permissions, failure modes, and side effects. It leaves too much unstated for the complexity involved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented, and the description's mention of 'env_var or file' merely restates the variable_type enum. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create') and resource ('CI/CD project variable') and even names the two supported variable kinds. It is clearly distinguishable from siblings like update_project_variable or delete_project_variable, though it does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus update_project_variable, no mention of prerequisites, and no note about what happens if the key already exists. Usage must be inferred entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_releaseC

Publish a formal release with tag, description/changelog, and associated milestones

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoBranch name or commit SHA to create the tag from if it doesn't exist yet
nameYesRelease title (e.g. 'Release 2.0.0 - Service Modernization')
tag_nameYesGit tag name (e.g. 'v2.0.0'). If the tag does not exist, ref is required to create it.
milestonesNoArray of milestone titles to associate with this release
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionYesMarkdown release notes, changelog, and migration guidance

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it says almost nothing. 'Publish' implies a write, but there is no disclosure of required permissions, duplicate-tag behavior, or failure modes. The one genuinely useful behavioral fact - that ref is needed when the tag does not yet exist - lives only in the schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity is partly the source of the behavioral gaps rather than a virtue in itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is too thin: it never mentions permissions, what happens on a conflicting tag, or how milestones are resolved. The rich input schema covers parameters, but nothing compensates for the missing behavioral and usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters thoroughly, including the ref/tag_name dependency. The description restates a subset of them (tag, changelog, milestones) without adding syntax or constraint information, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (publish a formal release) and names the artifacts it bundles: tag, changelog, milestones. It is clear what the tool does, but it never contrasts itself with the nearby create_tag tool, so an agent must infer whether a release is a superset of a tag.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as create_tag or get_release/list_releases. The most important routing question - create_release vs create_tag - is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_repositoryC

Create a new GitLab project/repository (supports groups/namespaces and empty repos)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRepository / Project name (e.g. 'mcp-github' or 'my-new-service')
pathNoRepository path/slug (e.g. 'mcp-github'). Defaults to name if omitted.
namespaceNoNamespace / Group name, path, or ID (e.g. 'buggycode' or 3) to create the project in. If omitted, creates in personal namespace.
visibilityYesVisibility levelinternal
descriptionNoShort project description
default_branchNoDefault branch name (e.g. 'main')
initialize_with_readmeYesInitialize the new project with a README.md file (default: false for empty repos)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it discloses little. 'Create' implies a mutation, but there is no mention of required permissions/token scopes, irreversibility, error behavior on duplicate names, or what response is returned. The '(supports groups/namespaces and empty repos)' clause adds mild context but not enough for a 7-param mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is well-sized, though the parenthetical capability note is somewhat terse relative to the complexity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no annotations and no output schema, the description is materially thin. An agent gets no information about permissions, namespace resolution, failure modes, or the created resource, leaving significant gaps that structured fields do not fill.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters including enumeration and defaults. The description only loosely alludes to the namespace and initialize_with_readme parameters, adding no syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a new GitLab project/repository') and adds scope hints (groups/namespaces, empty repos), which clearly distinguishes it from create_release, create_tag, and create_branch. It does not, however, explicitly differentiate itself from a sibling like fork_repository, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and no alternatives. It never says when to prefer creating over forking, whether the target namespace must already exist, or what happens on a name collision. The parenthetical hints at capability, not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_snippetC

Create a new code snippet in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesSnippet title summarizing the snippet
contentYesCode or text content of the snippet
file_nameYesFile name with extension (e.g. 'auth-interceptor.js' or 'setup.sh')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
visibilityYesSnippet visibility levelinternal
descriptionNoOptional description of the snippet

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not state that this is a mutating operation requiring write permissions, how the visibility default ('internal') affects exposure, or what happens on duplicate titles.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It is appropriately terse, though that brevity comes at the cost of the behavioral details noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-required-parameter mutation tool with no annotations and no output schema, the description is under-specified. It omits permission requirements, the effect of the visibility default, and what a successful call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already documented in the schema, including the project_id format and visibility enum. The description adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create) and resource (code snippet) scoped to a GitLab project, which is clear. However it does not distinguish itself from siblings like update_snippet, get_snippet, or list_snippets beyond the create verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus update_snippet or push_files, and no prerequisites or context about which project setups apply. The agent must infer usage entirely from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_tagC

Create a git tag pointing to a branch or commit

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesBranch name or commit SHA that the tag points to (e.g. 'main')
messageNoAnnotated tag message
tag_nameYesName of the tag to create (e.g. 'v2.0.0')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet 'Create a git tag' omits key traits: whether it produces a lightweight or annotated tag, whether the tag is pushed to the remote, whether an existing tag name errors or is overwritten, and what permissions are needed. It adds only the targeting concept.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the resource and target front-loaded and zero filler. It is efficient, though it is arguably under-specified rather than perfectly sized for a mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, the schema is fully documented, and the missing return value is excusable given a straightforward create operation. Still, with no annotations and no output schema, the description should have covered whether a message makes the tag annotated and whether the tag is pushed — gaps that matter for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (including examples for ref, tag_name, project_id) are already documented in the schema. The description's 'pointing to a branch or commit' marginally reinforces the ref semantics but adds nothing beyond it; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a git tag') plus the target ('pointing to a branch or commit'), which cleanly separates it from list_tags and the release/snippet siblings. It stops short of naming a sibling or scoping the operation to a project, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to reach for this tool versus create_release (which also creates tags) or how it relates to list_tags. No prerequisites, no conditions, no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_wikiC

Create a new wiki page in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesWiki page title (e.g. 'Deployment Architecture')
formatYesWiki format (default: markdown)markdown
contentYesMarkdown content for the new wiki page
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden and supplies almost nothing. For a mutation tool it does not disclose whether it fails on a duplicate title, whether it overwrites, what permissions are required, or whether the slug is derived from the title. Only the bare 'create' semantic is conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler and no redundancy. It is efficient, though its brevity reflects under-specification rather than deliberate tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Four required parameters, no annotations, and no output schema means the description is the only place to explain creation semantics, and it explains none of them. An agent cannot tell from this text what happens on conflicting titles, what a successful response contains, or whether the page is immediately visible.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: title, format (with enum and default), content, and project_id (with accepted ID/path forms) are all documented in the schema, so the baseline is 3. The description adds no format hints, content-sizing limits, or title-uniqueness constraints beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Create') with a specific resource ('new wiki page in a GitLab project'), so the agent immediately knows this is the creation counterpart to list_wikis/get_wiki/update_wiki. It stops short of explicitly naming or contrasting with those siblings, but the verb alone distinguishes it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus update_wiki (e.g. when a page already exists) or how it relates to create_or_update_file. No prerequisites, no exclusions, no context about the wiki namespace or project scoping is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_branchA

Delete a branch from a project repository (blocks accidental deletion of default branch)

ParametersJSON Schema
NameRequiredDescriptionDefault
branchYesName of the branch to delete
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses one behavioral trait beyond the schema, namely that deletion of the default branch is blocked, but omits permissions required, irreversibility of the delete, and whether the action is recoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and resource first, followed by a compact parenthetical caveat. No filler or redundant restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive tool with no annotations and no output schema, the description should ideally state permission requirements and whether the delete is permanent. The default-branch guard is a good start but leaves the safety context incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'branch' and 'project_id' are already well documented in the schema, including the ID-or-namespace-path formats. The description adds no parameter-level meaning beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ('Delete') with a precise resource ('a branch from a project repository'), so an agent can immediately tell this apart from sibling mutators like delete_project or delete_project_variable without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the operation itself; there is no explicit statement of when to use this versus get_branch/list_branches or any precondition like 'branch must be merged'. The parenthetical is a safety constraint, not routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_projectB

Delete a project/repository (requires explicit name confirmation for safety)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
confirm_project_nameYesExplicit safety confirmation: must match project name, path, or path_with_namespace to confirm deletion

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden for a destructive mutation. It never states that deletion is irreversible, what cascades (issues, pipelines, members) are removed, or what permissions are required; the only trait it mentions, the confirmation requirement, is already documented in the schema's confirm_project_name parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the verb and resource with no filler. It is efficient, though the brevity is partly what leaves behavioral gaps unaddressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and a destructive operation, the definition is only marginally complete. The parameters are well covered by the schema, but an agent gets no signal about irreversibility, permission requirements, or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the schema itself, including the ID/namespace formats and the confirmation-matching rule. The description adds no meaning beyond that, meriting the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Delete a project/repository") that unambiguously identifies the operation and separates it from siblings like delete_branch or delete_project_variable. There is no competing sibling over the same resource, so no explicit differentiation is needed, but it also makes no reference to alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical notes a prerequisite (explicit name confirmation), which implies a safety-gated usage context. However, it gives no when-to-use vs when-not guidance and does not point the agent to alternatives such as update_project or archiving.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_project_variableC

Delete a CI/CD project variable by key

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesVariable key/name to delete
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
filter_environment_scopeNoEnvironment scope of the variable to delete

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden for a destructive operation. It never states that deletion is irreversible, what permissions are required, or what happens when filter_environment_scope is omitted. "Delete" conveys the mutation, but nothing beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though arguably too terse for a destructive tool, which is a completeness concern rather than a conciseness one.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, annotation-free tool with no output schema, the description leaves important gaps: reversibility, permission requirements, and the effect of the optional environment-scope filter. An agent can call it, but not with full confidence about consequences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented in the schema, including the URL-encoding note for project_id. The description only echoes the key parameter with "by key" and adds nothing about filter_environment_scope, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Delete a CI/CD project variable") plus a scoping detail ("by key"). An agent can distinguish it from update_project_variable or get_project_variable by the verb alone, though the description never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as update_project_variable (which might be what the agent actually wants). Usage is only implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fork_repositoryC

Fork a project into a user or group namespace

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew project name for the fork
pathNoNew project path/slug for the fork
namespaceNoTarget namespace name, path, or ID to fork into (defaults to your personal namespace)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose that forking is a mutating, permission-gated operation, whether it is synchronous, whether the source project must be readable, or what defaults apply when namespace is omitted (the schema hints at a personal-namespace default, but the description adds nothing).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification for a four-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is the only source of behavioral context, yet it omits permissions, error conditions, naming defaults, and what the fork returns. For a create-style operation this leaves substantial gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of the four parameters documented (name, path, namespace, project_id). The description's 'user or group namespace' phrasing duplicates the namespace parameter's documented default rather than adding new semantics, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fork) and resource (project) plus the target scope (user or group namespace), which cleanly distinguishes it from create_repository and update_project. It does not, however, explicitly differentiate itself from sibling repository-creation tools beyond the word 'fork'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to fork versus call create_repository, no prerequisites such as required access level on the source project, and no mention of what happens if the fork name or path collides. The agent must infer all usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_branchB

Get specific branch details, commit SHA, and protection rules

ParametersJSON Schema
NameRequiredDescriptionDefault
branchYesBranch name (e.g. 'main' or 'feature/user-auth')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. 'Get' implies a read-only, non-destructive operation and it usefully discloses the return content (commit SHA, protection rules), but it says nothing about required permissions, access scope, or error behavior for a private-project read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource is named immediately and the returned fields follow. Nothing to trim, though it is sparse rather than rich.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no output schema and no annotations, the description covers purpose and partial return content but omits usage context, permissions, and error handling. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both project_id and branch fully documented including format examples. The description adds no parameter-level detail, so the baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('branch') and enumerates what the call returns: details, commit SHA, and protection rules. It clearly reads as the singular counterpart to list_branches, but it never names or explicitly contrasts with that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives such as list_branches (to enumerate) or create_branch/delete_branch. An agent must infer usage purely from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_commitB

Get commit details, author info, stats, changed file list, and selective file diffs

ParametersJSON Schema
NameRequiredDescriptionDefault
shaYesCommit SHA or short commit hash to inspect
file_pathNoFilter diffs to only this specific file (prevents token blowout on large multi-file commits)
with_diffYesIf true, includes file diffs for the commit
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
max_diff_linesYesMaximum lines of diff text to return per file (default: 500)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, but it discloses only returned content. It does not state that this is a read-only operation, whether authentication or specific permissions are needed, how max_diff_lines truncation behaves, or what happens when with_diff is false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that names the tool and its outputs without filler. Every element earns its place by telling the agent what data the call returns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description usefully enumerates the return components: commit details, author info, stats, changed files, and diffs. It does not explain the diff truncation behavior or the effect of with_diff=false, but those are covered by the fully documented input schema, so only minor gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters, including the token-blowout warning on file_path and the max_diff_lines default, are already documented in the schema. The description adds only the phrase 'selective file diffs,' which vaguely maps to file_path but supplies no syntax or semantics beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Get) and resource (commit) and enumerates the returned data: details, author info, stats, changed file list, and selective diffs. It clearly distinguishes the tool from generic content access, but it does not explicitly differentiate from sibling list_commits or otherwise name an alternative, so it is clear without sibling routing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what the tool returns but gives no guidance on when to use it versus alternatives such as list_commits or get_file_contents. There are no when-to-use conditions, no exclusions, and no prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_userA

Get the profile and identity of the authenticated user (username, ID, name, email)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the behavioral burden, and it does partially by enumerating the returned fields (username, ID, name, email). It does not disclose that the call requires a valid auth token or what happens when authentication is absent, which is the main behavioral trait left uncovered for this read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence naming the action and the subject, followed by a compact field list. Nothing is wasted and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully names the fields returned, and the zero-parameter contract is fully conveyed by the schema. Only the auth/error behavior is left implicit, a minor gap for a tool of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The parentheses listing return fields is a bonus rather than parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get), a specific resource (profile/identity), and scopes it to the authenticated user, which cleanly separates it from lookups like get_project_member or get_group that target other entities. An agent can tell immediately what it retrieves without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use statement, and no alternative is named. However, the phrase 'authenticated user' implicitly routes the agent: use this for your own identity, not another actor's. Adequate but implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_file_contentsC

Read file or directory content from a project repository

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoBranch name, tag, or commit SHA (default: default branch / HEAD)
file_pathYesPath to the file or directory in repo (e.g. 'pom.xml' or 'docs/README.md')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. 'Read' weakly implies a non-mutating operation, but nothing is disclosed about authentication/permission requirements, whether the ref defaults to HEAD, rate limits, pagination for directory listings, or how binary/large files are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste, but it is arguably too terse for a 3-parameter repository-read tool, leaving no room for the usage or behavior context the tool needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description should at least indicate what is returned (raw text vs. directory listing) and any size or binary constraints. The schema covers the inputs fully, but the description leaves the return semantics entirely to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (project_id, file_path, ref) are well documented in the schema itself, including examples and the default-branch behavior of ref. The description adds nothing beyond that, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read file or directory content from a project repository') with the helpful nuance that it accepts both files and directories. An agent can distinguish it from mutation siblings like create_or_update_file, but the description never names an alternative or scope boundary explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus siblings such as get_commit, get_branch, or search_repositories, and no mention of preconditions (e.g., needing a valid project_id). Usage is only implied by the verb 'Read'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_groupB

Get comprehensive group details, metadata, visibility, and description by group ID or path

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYesGroup numeric ID or full path (e.g. 'buggycode' or 3)
with_projectsYesInclude project details in the group response

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden alone. It discloses the returned content surface (details, metadata, visibility, description), implying a read-only lookup, but says nothing about auth requirements, permission scoping, or behavior when the group is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is efficient, though the enumerated detail list borders on padding for a two-parameter lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description is the only source for return shape, and it gives a partial one (metadata, visibility, description) while omitting the effect of with_projects and any error behavior. Adequate but with clear gaps for an unannotated tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented in the schema. The description only restates the 'by group ID or path' lookup form and adds no syntax or format detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: retrieves group details by ID or path. The enumerated payload (metadata, visibility, description) further pins down what a 'group' fetch returns. It does not explicitly distinguish itself from list_my_groups or list_group_projects, so not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what the tool does but gives no when-to-use guidance, no prerequisites, and no routing to alternatives such as list_group_projects or get_project. With a large sibling set, this leaves the agent to infer the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issueA

Get comprehensive details for a specific issue by its IID (#)

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_iidYesThe project-scoped issue number as seen in UI (e.g. 14 for #14, NOT the global database id)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, but 'Get' clearly signals a read-only, non-destructive lookup. It adds that the response is 'comprehensive details', partially compensating for the absent output schema, yet says nothing about permissions, missing-issue errors, or pagination/large-field behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the verb, resource, and identifying key front-loaded, and zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no output schema, an agent has enough to invoke it correctly, and 'comprehensive details' hints at return breadth. However, with no annotations and no output schema, it could say more about the returned payload or failure modes for a missing/unreadable IID.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both params are already documented by the schema, including the IID-vs-global-id distinction. The description only restates the IID as '#<iid>' and adds no syntax or format meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('issue') and pins the lookup key to the project-scoped IID, which implicitly separates it from list_issues/create_issue/update_issue. It stops short of explicitly naming a sibling or the scope boundary, so it's clear but not fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use, when-not-to-use, or alternative routing. Usage is only implied: fetch one issue when you already know its IID, rather than enumerating with list_issues. Adequate but left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobB

Get comprehensive details about a CI/CD job (duration, runner, failure reason, artifacts list)

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesNumeric ID of the build or test job
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read operation but never states read-only/side-effect-free behavior, permission or auth requirements, or whether the job must be in a terminal state before details are meaningful. Listing returned fields adds some value but is not behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with zero filler; the parenthetical inventory of returned data is efficient and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool the scope is adequately covered, and the field inventory partly compensates for the absent output schema. But with no annotations to convey safety or side-effect profile, the definition leaves behavioral context thinner than ideal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: job_id and project_id are both fully documented in the schema, including the namespace-path alternative and automatic URL encoding. The description adds nothing about parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get comprehensive details about a CI/CD job') and enumerates the returned fields (duration, runner, failure reason, artifacts list), which is concrete enough to distinguish the tool's scope. However, it never names or contrasts with adjacent siblings like get_job_trace, get_job_artifact_file, or list_pipeline_jobs, so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, nor any mention of alternatives. With several sibling tools operating on jobs (traces, artifact files, pipeline job lists, test reports), the description gives no routing signal for choosing this one over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_artifact_fileC

Download and read a specific file from a job's build artifacts archive

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesNumeric ID of the job that generated the artifact
max_lengthYesMaximum character length to return (default: 10000, 0 for unlimited)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
artifact_pathYesRelative path to the file in the artifact archive (e.g. 'coverage/report.json' or 'dist/index.html')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only download but says nothing about truncation behavior (max_length), binary vs text handling, encoding, or what happens on a missing path. For a no-annotation tool this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no waste. It is efficient, though it is arguably too terse given the missing behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 100% schema coverage the inputs are well covered, but there is no output schema, so the description should ideally explain what is returned (raw file content, truncated text) and the effect of max_length. As written it is minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters including the artifact_path example and max_length default. The description adds no parameter meaning beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'Download and read a specific file from a job's build artifacts archive'. The scoping ('job's build artifacts archive') implicitly distinguishes it from get_file_contents (repo files) and get_job_trace, though it doesn't explicitly name a sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no alternatives are mentioned. The agent must infer that this is the right tool when a file lives inside a job's artifact archive rather than the repository.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_traceA

Get the terminal output log of a build/test job (supports tailing to diagnose test failures)

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesNumeric ID of the build or test job
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
tail_linesYesNumber of trailing lines from log to return (prevents overflowing context, default: 250, 0 for all)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that this returns a log and that tailing is supported, but omits permissions, whether jobs must be finished, and whether the log is server-truncated. Adequate but with clear gaps for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler; the core action comes first and the parenthetical adds only useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should convey more about the return shape (e.g., full vs tailed log, ordering, size). It names the resource but leaves return-value expectations largely to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so job_id, project_id, and tail_lines are already documented in the schema. The description adds no syntax, format, or constraint detail beyond it, matching the baseline for fully-covered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the terminal output log of a build/test job'), which clearly separates it from siblings like get_job (metadata) and get_job_artifact_file (artifacts). It does not name a sibling outright, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(supports tailing to diagnose test failures)' implies a usage context but gives no explicit when-to-use/when-not guidance or alternatives. An agent must infer that this is for log inspection rather than job metadata.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_merge_requestB

Get details and status of a merge request by IID (!)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
merge_request_iidYesThe project-scoped merge request number (e.g. 5 for !5)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read operation via 'Get' and mentions 'details and status', but discloses nothing about return shape, pagination, permission requirements, or error behavior for a missing IID.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the verb and resource front-loaded and no filler. Efficient, though minimally informative as a result.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter lookup with 100% schema coverage this is nearly adequate, but with no output schema and no annotations the description leaves the agent guessing about what 'details and status' actually returns. Small gap for a low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented, establishing the baseline of 3. The description restates the IID concept and adds the '!<iid>' notation hint, which marginally reinforces the schema's own example but adds no new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get details and status of a merge request') and scopes it as a single-item lookup by IID. This distinguishes it implicitly from list_merge_requests and the many mutation siblings like update_merge_request or accept_merge_request, though it does not name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the 'by IID' phrasing (retrieve one specific MR), but there is no explicit when-to-use guidance or routing to alternatives such as list_merge_requests for browsing or get_merge_request_changes for the diff. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_merge_request_changesB

Inspect code diffs and modified files in an MR (supports token-saving summary, file filtering, and lockfile pruning)

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNoFilter diffs to a specific single file path
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
summary_onlyYesIf true, returns only the manifest of changed files without raw diff strings (saves tokens)
max_diff_linesYesMaximum lines of diff per file to return before truncating (default: 500)
ignore_lockfilesYesIf true, automatically filters out dependency lockfiles (e.g. package-lock.json, poetry.lock)
merge_request_iidYesMerge request IID (e.g. 5 for !5) to get diffs for

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose useful behavioral traits (token-saving summary mode, file filtering, lockfile pruning) and 'Inspect' implies a read operation, but it says nothing about return format, truncation semantics, or pagination behavior beyond what the schema already encodes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the capabilities are packed into one compact parenthetical. Efficient, though the parenthetical is a slight feature dump rather than prose that prioritizes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, 5-required read tool with no output schema, the description is thin: it never describes the shape of the returned diffs/manifest or how filtering, truncation, and pruning interact. The fully documented schema compensates for parameters, but return-value expectations are left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema. The description's parenthetical (summary, file filtering, lockfile pruning) merely restates those parameters without adding syntax, formats, or interaction rules, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Inspect code diffs and modified files in an MR'), which an agent can clearly separate from siblings like get_merge_request or list_merge_request_discussions. It stops short of explicitly naming the sibling it complements, so it is clear but not sibling-differentiating in the strongest sense.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource (viewing an MR's diffs) and the parenthetical hints at the token-saving path, but there is no explicit when-to-use vs alternative (e.g. get_merge_request, create_diff_discussion) or any prerequisite guidance. Adequate but with clear gaps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_milestoneC

Get details for a specific milestone by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
milestone_idYesThe milestone numeric database ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it adds nothing beyond the purpose sentence. It does not confirm this is a read-only operation, describe permission requirements, or state what happens when the milestone or project does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single brief sentence with no filler, front-loaded with the verb and resource. It is appropriately sized for a simple getter, though 'by ID' adds little value beyond the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no output schema, the essentials are present and the schema fills in parameter detail. However, the ambiguity of 'by ID' when two IDs are required and the absence of any error or scope behavior leaves modest gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both project_id (numeric ID or namespace path) and milestone_id are fully documented in the schema. The phrase 'by ID' is actually slightly reductive, since two identifiers are required, but the schema resolves it, warranting the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (milestone) constrained to one item by ID, which is clear on its own. It does not distinguish itself from siblings like list_milestones or get_release, leaving the agent to infer that this is the single-item counterpart to the list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and names no alternatives. An agent must infer on its own that this is for fetching one known milestone rather than enumerating milestones via list_milestones.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pipelineB

Get detailed status, duration, and commit info for a pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
pipeline_idYesNumeric ID of the pipeline

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. 'Get' implies a safe read and it discloses what information is returned, but it says nothing about authentication, rate limits, error behavior for unknown IDs, or whether the call is idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with a specific verb and enumerated return content. It is efficient, though terse enough to leave gaps in usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with fully documented schema and no output schema, the description adequately conveys what the call returns. The main shortfall is lack of usage/alternative context, which is minor for such a straightforward lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with project_id accepting numeric ID or namespace path and pipeline_id documented as numeric, so the schema does the heavy lifting. The description adds no parameter detail beyond what the schema already states, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Get) plus resource (pipeline) and even enumerates the returned fields (status, duration, commit info). It clearly distinguishes a single-pipeline lookup from sibling list_pipelines, though it does not explicitly reference any sibling by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_pipelines or get_job. The usage is only implied by the 'get detail for a pipeline' framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pipeline_test_reportB

Get JUnit test report summary (total, passed, failed test suites and error details)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
pipeline_idYesNumeric ID of the pipeline to fetch test results for

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose the return shape at a high level (counts plus error details), but says nothing about permissions, what happens when no test report exists, or pagination/truncation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and the returned fields are stated up front. Slightly terse given the behavioral gaps, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-param read tool with full schema coverage and no output schema, the description is adequate: it conveys the key returned fields. It falls short on edge-case behavior (missing reports, empty results) that an agent would want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both project_id and pipeline_id are fully documented in the schema, including the string-or-numeric namespace format and URL-encoding note. The description adds no parameter-level detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (JUnit test report summary), and even enumerates what the summary contains (total, passed, failed suites, error details). This distinguishes it from generic get_pipeline, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no alternatives named. An agent must infer that this is only relevant for pipelines that generate JUnit reports, and nothing says whether the pipeline must have completed or contain test artifacts. Pure statement of purpose with no routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectB

Get comprehensive project metadata, description, default branch, and statistics

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
statisticsYesInclude project repository and storage statistics

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Get' implies a read-only operation and the field list hints at the response shape, but nothing is said about authentication requirements, error behavior for invalid project IDs, or the cost/side effects of requesting statistics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It is efficient, though it spends its limited words restating return fields rather than adding routing or constraint context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read getter with no output schema, the description usefully enumerates the returned fields, giving the agent a sense of the response. It lacks any note on auth or failure modes, but for this complexity level it is close to adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both project_id and statistics are already fully documented in the schema, including ID format and boolean semantics. The description merely echoes 'statistics' in its output list and adds no syntax or behavioral detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and resource ('project') and enumerates the fields returned (metadata, description, default branch, statistics), so an agent knows exactly what this tool produces. It does not, however, distinguish itself from siblings like update_project, delete_project, or list_my_projects, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g. required permissions or project access), and no mention of alternatives such as list_my_projects or get_group. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_memberC

Get details for a specific project member by user ID or username

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesUser numeric ID or username
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a read via 'Get' but discloses nothing about required permissions, behavior when the user is not a member, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and lookup key come first. Efficient, though it leaves behavioral detail entirely unaddressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read lookup with fully documented schema and no output schema, the description is minimally adequate. It omits error/permission behavior, but the core operation is clear enough to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both project_id and user_id are already documented in the schema. The description repeats the user_id lookup options ('by user ID or username') without adding new syntax or constraints, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('details for a specific project member'), clearly distinguishing it from the plural sibling list_project_members. It does not explicitly name any sibling, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_project_members or get_current_user, nor any stated prerequisites. The singular 'a specific project member' only implicitly signals single-record lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_variableC

Get specific CI/CD variable details and value by key

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesVariable key/name (e.g. 'DEPLOY_TOKEN')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
filter_environment_scopeNoOptional environment scope filter (e.g. 'production' or '*')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it covers very little. It reveals the return includes the variable 'value', which is useful for a secrets-oriented resource, but says nothing about required permissions, whether masked/protected values are returned in plaintext, or failure behavior when the key or environment scope does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single clause, front-loaded with the verb and resource, with no filler or redundancy. It is arguably too terse for the behavioral gaps it leaves, but as written every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter read tool with fully documented parameters, the description is close to sufficient, and the absence of an output schema is partly compensated by the phrase 'details and value'. What is missing is the safety/permission context that annotations would normally supply for a tool that reads secret material.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: each parameter is documented in the schema, including key format, project_id forms, and the environment-scope filter. The description only reinforces the key lookup ('by key') and adds no format or behavioral detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get ... CI/CD variable ... by key') and even discloses the payload ('details and value'), so the agent knows exactly what comes back. It is distinguishable from list/create/update/delete_project_variable by the singular 'specific ... by key' phrasing, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives such as list_project_variables for discovering keys. The only hint is the implicit 'specific ... by key' phrasing, which weakly implies the caller already knows the key but leaves the list-vs-get decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_releaseB

Get release details by tag name

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_nameYesTag name associated with the release (e.g. 'v1.0.0')
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It omits what happens if the tag does not exist, whether the read requires specific project access, and what the response contains — notable gaps for a tool with no output schema and no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, which is appropriate for a simple two-parameter getter. It is slightly under-specified rather than padded, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read with a fully documented schema, the description is minimally viable. It lacks any statement about return contents or error behavior, and with no output schema and no annotations that information is not available anywhere else.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both tag_name and project_id are already documented in the schema, including the ID-or-namespace-path format. The description's 'by tag name' merely restates the schema's own framing and adds no syntax or format detail beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get'), resource ('release details'), and lookup key ('by tag name'), which separates it from list_releases and create_release. It does not explicitly name or differentiate itself from those siblings, but the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'By tag name' implies usage as a single-release lookup rather than a listing, so the intended context is inferable. However, there is no explicit when-to-use guidance, no mention of list_releases as the alternative for enumerating releases, and no prerequisites (e.g. read permissions).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_snippetB

Get code snippet details and raw file content by snippet ID

ParametersJSON Schema
NameRequiredDescriptionDefault
rawYesIf true, also fetches the raw code content of the snippet
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
snippet_idYesNumeric snippet ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Get' implies a read operation, but the description omits permission requirements, whether the call has side effects, error behavior, and how the raw boolean affects the response. It only states that raw file content may be returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It states the core action and scope immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter read tool with full schema coverage, the description is minimally adequate: it names the resource and mentions raw content. However, with no annotations and no output schema, it should do more to cover read-only behavior, permission expectations, and the raw parameter's effect on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema. The description adds no meaning beyond restating that retrieval is by snippet ID and may include raw content; baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (code snippet details and raw file content) and indicates lookup by snippet ID. It does not explicitly differentiate from sibling list_snippets, but the singular ID-based retrieval is clear enough for an agent to distinguish.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no when-to-use guidance, prerequisites, or alternatives. An agent must infer that this is for retrieving a single snippet and that list_snippets should be used for browsing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_wikiA

Get wiki page content, structured Table of Contents (toc_only), or a specific chapter/section by heading

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesWiki page slug or title (e.g. 'home' or 'architecture#database-schema')
sectionNoOptional chapter/heading title or anchor (e.g. 'Data Model' or '#data-model') to extract only that section
toc_onlyYesIf true, returns only the structured Table of Contents (saves thousands of tokens)
max_lengthNoOptional max character length to truncate full content to
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does add genuinely useful behavioral context—toc_only 'saves thousands of tokens' and section extracts only that portion—which tells the agent about output size/cost. But it says nothing about error behavior for missing pages, permissions required, or pagination/truncation semantics beyond what the schema already notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that names the resource first and then the optional modes. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter read tool with rich schema descriptions, the description covers the core mode-selection semantics an agent needs. The lack of an output schema is a minor gap since the description does indicate what each mode returns (content, TOC, section), though it does not describe the return shape itself.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (slug, section, toc_only, max_length, project_id) is already documented in the schema. The description meaningfully links the parameters to the tool's modes, but adds no syntax or format detail beyond what the schema provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (wiki page content) plus the three distinct retrieval modes it supports: full content, toc_only, and a specific section. This clearly differentiates it from sibling tools like list_wikis, create_wiki, and update_wiki.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the usage context by enumerating the three selectable modes, so an agent can infer that toc_only is for structure and section is for targeted extraction. However, it never explicitly says when to choose this tool over list_wikis or how the modes relate to required parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_branchesB

List repository branches with commit details, default flag, and protected status

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage number for pagination (default: 1)
searchNoSearch query to filter branch names (e.g. 'feature')
per_pageYesNumber of branches per page (default: 20, max: 100)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It helpfully discloses what each item contains (commit details, default flag, protected status), but says nothing about the read-only/safe nature, pagination behavior, or any auth requirements beyond what the schema already implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every clause carries information about scope and return content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated list tool with no output schema, the description covers the returned fields adequately, but omits pagination behavior, result ordering, and read-only guarantees that an agent would benefit from knowing before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, search, and project_id are already documented in the schema with defaults and formats. The description adds no additional parameter meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List repository branches') and even summarizes the returned fields (commit details, default/protected flags), so the operation is unambiguous. It does not differentiate itself from siblings like get_branch, create_branch, or delete_branch, leaving that inference to the agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only states what it lists; it gives no when-to-use context, no mention of when to prefer the single-branch get_branch, and no prerequisite/auth notes. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commitsC

List commit history for a project, branch, or specific file path

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
pathNoFile path to filter commit history for (e.g. 'src/auth.js')
sinceNoOnly commits after or on this date (ISO 8601 or YYYY-MM-DD)
untilNoOnly commits before or on this date
per_pageYes
ref_nameNoBranch name, tag, or commit range (default: default branch / HEAD)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and largely fails it. 'List' implies a read operation, but the description says nothing about pagination behavior (despite page/per_page params), result ordering, rate limits, or required permissions for private projects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tightly-scoped sentence with no filler, and the resource and its scoping dimensions are front-loaded. Nothing here is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with no annotations and no output schema, the one-line description leaves significant gaps: the return shape (is the history paged? sorted how?) and the safety/permission profile are undocumented. The schema covers most inputs, but the description does too little for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, so most parameters (path, since, until, ref_name, project_id) are already documented in the schema, and page/per_page carry sensible defaults. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('commit history') plus its scoping axes (project, branch, file path), so the agent knows exactly what it returns. It does not, however, distinguish itself from the sibling get_commit, which is the natural confusion point for an agent choosing between listing history and fetching one commit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no prerequisites, and never mentions the alternative get_commit. The agent must infer that this is the multi-commit view versus the single-commit sibling purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_group_projectsC

List all projects and repositories belonging to a specific group or organization

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
searchNoSearch query within group projects
group_idYesGroup numeric ID or path (e.g. 'buggycode' or 3)
per_pageYes
visibilityNoFilter by project visibility
include_subgroupsYesInclude projects in subgroups (default: true)

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no mention of pagination behavior, no note on whether shared/inherited projects appear, no auth or permission requirements, and no indication of how include_subgroups changes results. "List" implies a safe read, but that is inference rather than disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is tight, though its brevity comes at the cost of the guidance and behavioral detail noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter listing tool with no annotations and no output schema, the description omits pagination semantics, return shape expectations, and subgroup/visibility interaction. An agent has the minimum needed to attempt a call but not enough to call it confidently or interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with page and per_page carrying no descriptions at all, and the description adds no parameter meaning of its own — it never explains filtering, search, or visibility behavior. The schema does document group_id, search, visibility, and include_subgroups, so some of the work is done, but the description contributes nothing to close the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ("List all projects and repositories") and scopes it to a specific group or organization, so an agent can tell what the tool returns. It does not, however, distinguish itself from close siblings like list_my_projects, search_repositories, or get_group, so the agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use, when-not-to-use, or named alternative. The only implied guidance is that a group context is needed, which leaves the agent to figure out on its own when to prefer this over list_my_projects or search_repositories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issue_notesC

List discussions, comments, and activity log on an issue

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
sortYesSort direction for commentsasc
order_byYescreated_at
per_pageYes
issue_iidYesThe project-scoped issue number (e.g. 14 for #14)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses the semantic scope (discussions + comments + activity log) that 'notes' covers, but omits the read-only character, pagination behavior, auth needs, and return shape; the required page/per_page params make pagination disclosure relevant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, appropriately compact for a listing tool. It is arguably too terse given the six required parameters, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with six required params, no output schema, and no annotations, a one-line description is insufficient. It leaves pagination semantics, ordering behavior, and the response structure unexplained, which an agent needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, so the description should compensate, yet it names none of the six parameters. It adds no meaning for sort, order_by, page, or per_page beyond what the partially-documented schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) plus the resource (issue notes) and disambiguates what 'notes' means by enumerating discussions, comments, and activity log. It distinguishes itself reasonably from create_issue_note, but does not explicitly differentiate from get_issue, which may also surface notes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as get_issue or create_issue_note. Usage must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issuesB

List and filter issues by state, milestone, label, assignee, or search with clean summaries

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage number for pagination
sortYesSort directiondesc
stateYesFilter by issue state (default: all)all
labelsNoFilter by label names (comma-separated or array)
searchNoSearch query matching issue title or description
verboseYesIf true, returns full raw GitLab objects instead of clean summaries
order_byYesField to sort bycreated_at
per_pageYesItems per page (default: 20, max: 100)
author_idNoFilter by author user ID
milestoneNoFilter by milestone title, or 'None' for issues without milestones, or 'Any'
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
assignee_idNoFilter by assignee user ID
milestone_idNoFilter by numeric milestone ID

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It hints at output format with 'clean summaries,' but does not state that this is a read-only operation, whether authentication or specific permissions are required, rate-limit behavior, or pagination defaults.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence states the verb, resource, filter categories, and output style with no wasted words. Every phrase contributes to identifying or understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is comprehensive and covers all parameters, so the description does not need to repeat them. It clearly communicates the tool's purpose and main filtering capabilities, though it omits some detail about output beyond 'clean summaries' and gives no usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 13 parameters thoroughly. The description lists several filter axes (state, milestone, label, assignee, search), but adds no syntax, format, or behavioral meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List and filter issues.' It also names the primary filter dimensions and the output style, which clearly separates this tool from get_issue, create_issue, and update_issue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives, how to choose between filters and search, or when to use pagination or verbose mode. The intended usage is implied by the verb 'List,' but no explicit context or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_labelsC

List labels available in the project

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
searchNoSearch query to filter labels
per_pageYes
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
include_ancestor_groupsYesInclude labels from ancestor groups (default: true)

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and falls short. It implies a read-only list, but says nothing about pagination, result volume, authentication/scope requirements, or default ancestor-group inclusion — all relevant since page/per_page and include_ancestor_groups exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the resource and scope front-loaded and zero waste. Being this terse is a limitation on substance, not a structural flaw.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter list tool with no annotations and no output schema, the description is too thin. It omits pagination behavior, search filtering, and ancestor-group defaults — the very parameters an agent must reason about to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 60%, with page and per_page undocumented entirely in both schema and description. The description adds no parameter meaning at all — no explanation of search semantics, pagination conventions, or project_id formats — so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (labels) with the scope qualified as 'in the project'. It's immediately distinguishable from create_label in the sibling list, but the description does nothing to differentiate beyond the verb — no mention of search, pagination, or ancestor-group behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no reference to alternatives such as create_label or any filtered variant. The agent must infer from the name alone that this is the read-side counterpart to label creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_merge_request_discussionsC

List inline code review discussions and threads on an MR (supports unresolved_only filter)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
per_pageYes
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
unresolved_onlyYesIf true, returns only unresolved discussions that need attention
merge_request_iidYesMerge request IID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'List' implies a read operation, but the description discloses nothing about pagination behavior, return format, or result structure. The only behavioral note, the unresolved_only filter, merely restates a schema field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no waste. It is appropriately sized, though it leans toward under-specification rather than genuine density of information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five parameters, no annotations, and no output schema, the description is thin. It omits pagination guidance and any hint of what is returned, leaving gaps an agent would need to fill by trial and error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is a middling 60%, with page and per_page left undocumented and the description adding no syntax or format detail for any parameter. The mention of 'unresolved_only filter' duplicates the schema rather than extending it, leaving the undocumented pagination parameters unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (inline code review discussions and threads on an MR), which is clear and distinct from the mutation siblings like create_diff_discussion and resolve_merge_request_discussion. It does not explicitly name an alternative tool, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'supports unresolved_only filter' implies a usage context (filtering to discussions needing attention), but there is no explicit when-to-use guidance or any named alternative to route the agent toward. Usage is only loosely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_merge_requestsC

List merge requests filtered by state, branches, milestone, or labels

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
stateYesFilter MRs by stateopened
labelsNoFilter by labels
searchNoSearch query for title and description
per_pageYes
milestoneNoFilter by milestone title
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
source_branchNoFilter by source branch
target_branchNoFilter by target branch

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It implies a read-only listing but says nothing about pagination behavior, result limits, ordering, or authorization requirements — gaps that matter for a 9-parameter list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is tight, though arguably too terse for a tool carrying nine parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With nine parameters (four required), no annotations, and no output schema, the one-line description is thin. It omits pagination/defaults, the project scope requirement, and any indication of what a result contains, leaving meaningful gaps for an agent invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 78%, with most filter parameters already documented in the schema, so the baseline of 3 applies. The description names state, branches, milestone, and labels but adds no syntax, format, or combination semantics beyond what the schema fields already say, and it omits search, page, per_page, and project_id entirely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List merge requests') plus the filter facets it accepts, so the agent knows this is a filtered-list operation. It doesn't explicitly distinguish itself from the sibling get_merge_request or list_merge_request_discussions, but the 'list + filtered by' framing makes the intent clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not guidance, no mention of alternatives like get_merge_request, and no note about pagination or default page size. The filter list implies a browsing use case but leaves routing between siblings to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_milestonesC

List project milestones (active, closed, all) with start and due dates

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
stateYesFilter by state: active, closed, or all (default: active)active
searchNoSearch query to filter milestones by title
per_pageYes
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
include_ancestor_groupsYesInclude milestones from ancestor groups (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not state whether this is a read operation, how pagination behaves, or what the response format is for a list operation with page and per_page parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single compact sentence, front-loaded with the verb and resource. No wasted words, though it is arguably too terse given the parameter count.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter paginated list tool with no annotations and no output schema, the description is insufficient. It omits pagination defaults, search behavior, the ancestor-groups implication, and any return-shape expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, so the schema documents state, project_id, and include_ancestor_groups, but page, per_page, and search have no descriptions. The description adds the state options and the start/due date return concept but does not compensate for the undocumented pagination and search parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb (List) and resource (project milestones), with scope modifiers (active, closed, all) and returned fields (start and due dates). It is distinguishable from sibling get_milestone and create/update_milestone, though it does not explicitly name siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The agent must infer that this is the read equivalent of get_milestone, and no prerequisites or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_groupsB

List groups the authenticated user is a member or owner of

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
ownedNoIf true, limits to groups explicitly owned by the current user
searchNoSearch query to filter group names/paths
per_pageYes
min_access_levelNoMinimum access level in the group

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden, and it does clarify the inclusion criterion (member OR owner), which is real behavioral information. However it says nothing about pagination behavior, result ordering, whether private/subgroups are included, or permission requirements, so a read-only list tool remains only partially characterized.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the resource and scope front-loaded and no filler. It is efficient, though the extreme brevity leaves several gaps that a slightly longer description could have closed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read-only listing the description covers the essential 'what you get' question, but with no annotations, no output schema, and 40% of parameters undocumented, an agent lacks detail on pagination and result scoping that the definition should supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60% (page and per_page are undocumented), and the description adds no parameter-level detail at all. 'Member or owner' loosely gestures at the owned parameter, but search, min_access_level, and pagination are left entirely to the schema, so the description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (List) and resource (groups) and adds a meaningful scope qualifier: groups where the authenticated user is a member or owner. That distinguishes it from get_group (single group) and list_group_projects (projects within a group), though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no alternative tool is named. The phrase 'the authenticated user' implies a personal-scope listing, but the agent must infer that it should pick this over list_my_projects or get_group on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_my_projectsB

List projects the authenticated user participates in, owns, or has starred

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
sortYesdesc
ownedNoIf true, limits to projects owned by the current user (e.g. personal namespace)
searchNoSearch query to filter project names or descriptions
starredNoIf true, limits to starred projects
order_byYeslast_activity_at
per_pageYes
membershipYesIf true, limits to projects the current user is explicitly a member of (default: true)
visibilityNoFilter by project visibility
min_access_levelNoMinimum access level in the project

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It does disclose the meaningful scope semantics (membership/ownership/starring are unioned), which is real context, but it omits pagination behavior, the fact that membership defaults to true (so the default call is NOT the broad list implied by the description), and any auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with no filler and the scope constraint front-loaded. Nothing is wasted, though there is room for a brief second clause on defaults.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with 5 required params, no annotations, and no output schema, one sentence is thin. The important defaults (membership=true, per_page=20, sort=desc, order_by=last_activity_at) and the resulting default behavior are never surfaced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60%, so the baseline is 3. The description loosely maps to the membership/owned/starred parameters by framing them as alternative sources of projects, but it adds no syntax, format, or precedence detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb (List) and resource (projects) with an explicit user-scope: projects the authenticated user participates in, owns, or has starred. This distinguishes it reasonably from siblings like list_group_projects, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance or prerequisites are given, and no sibling is named. An agent cannot tell from the description when to prefer this over list_group_projects, search_repositories, or get_project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pipeline_jobsB

List all jobs (build, test, lint, deploy) and their status in a pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoFilter jobs by execution status
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
pipeline_idYesNumeric ID of the pipeline

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether the operation is read-only (though strongly implied), nor does it cover pagination, authentication requirements, rate limits, or the shape of the response beyond mentioning job status. This is a notable gap for an unannotated list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence that front-loads the verb and resource, with a parenthetical enumerating job types. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter list tool with no annotations and no output schema, the description mentions the returned status but omits pagination behavior, potential authentication needs, and how results are ordered or limited. It is minimally adequate given the rich schema, but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters including the scope enum and project_id formats. The description adds no parameter-level detail beyond the resource name. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('jobs') with scope ('in a pipeline'), and clarifies that jobs include build, test, lint, and deploy types. It distinguishes itself from the single-job sibling get_job implicitly, but does not explicitly name or contrast with it. Clear enough for selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like get_job or list_pipelines. The listing action is implied by the verb and pipeline scope, but there are no explicit conditions, exclusions, or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pipelinesC

List CI/CD pipelines filtered by branch, tag, status, or commit SHA

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoFilter pipelines by branch or tag name
shaNoFilter pipelines by commit SHA
pageYesPage number for pagination (default: 1)
statusNoFilter pipelines by execution status
per_pageYesNumber of pipelines per page (default: 20, max: 100)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and discloses almost nothing beyond the filter axes: no mention of pagination behavior, result ordering, default page size, or authorization scope. Enum statuses are visible in the schema, so the description adds no behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the resource name and filter axes front-loaded; nothing is wasted. It is arguably too terse for a 6-parameter listing tool, but it is not padded or poorly structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description should carry more weight than it does — return shape is not explained, though that is expected without an output schema, and pagination defaults are covered by the schema. For a filtered-list tool it is minimally adequate but leaves behavioral questions open.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters are already well documented (including enum values, defaults, and the project_id dual format). The description restates the filter dimensions already covered by the schema, adding no syntax or format detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (CI/CD pipelines) plus the available filter dimensions, which lets an agent know exactly what comes back. It does not, however, distinguish itself from close siblings such as get_pipeline or list_pipeline_jobs, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names possible filters but gives no guidance on when to use this tool versus get_pipeline (single pipeline), create_pipeline, or list_pipeline_jobs. No prerequisites, no exclusion criteria, no alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_membersB

List project members and collaborators with access levels and roles

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage number for pagination (default: 1)
queryNoFilter members by username or name
per_pageYesNumber of members per page (default: 20, max: 100)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
include_inheritedYesInclude members inherited from parent groups (default: true)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet it only implies a read via 'List'. It does not state permission requirements, whether inherited members are included by default, or anything about pagination behavior beyond what the schema already declares.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that wastes no words while still conveying the resource and the returned fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with a fully documented schema and no output schema, the description is adequate and even previews returned fields, but it omits usage context and behavioral notes that would make it complete under zero annotation coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (page, per_page, query, project_id, include_inherited) is already documented in the schema. The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (project members and collaborators) and even names the returned fields (access levels and roles). It contrasts implicitly with single-member tools like get_project_member, but never names a sibling or draws an explicit boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites, and no alternatives (e.g. get_project_member for a single member, or add/update_project_member for mutations). The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_variablesB

List CI/CD project variables with keys, types, protected/masked flags, and environment scopes

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage number for pagination (default: 1)
per_pageYesNumber of variables per page (default: 50, max: 100)
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'List' implies a safe read operation and the description usefully names the returned fields (keys, types, protected/masked flags, environment scopes), but it omits pagination behavior, permissions, and any ordering or total-count semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that conveys the core action and returned data with zero filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description does well to name the key return fields. It is nearly complete for a simple list tool, though it could add a note on pagination behavior or expected result ordering to fully compensate for the missing output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents project_id, page, and per_page with defaults and max values. The description adds no parameter-level detail beyond what the schema already provides, which is the expected baseline when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('CI/CD project variables') and enumerates the returned fields, clearly distinguishing collection retrieval from singular get_project_variable. However, it does not explicitly name the sibling it is not, so the differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only states what the tool does, with no when-to-use guidance, no conditions, and no mention of alternatives like get_project_variable or search. An agent must infer usage entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_releasesC

List published project releases and version changelogs

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
per_pageYes
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It says 'published' releases, which implies a filter, but does not disclose pagination behavior, ordering, return shape, or what 'published' excludes. For a read-only list with zero annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with no waste. The key scope constraint ('published') is front-loaded and the resource is named immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, three required parameters (two undocumented), and no pagination or return-format guidance, the description is insufficient for an agent to call this tool confidently. It should explain what pagination looks like and what a 'published release' includes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 33%. project_id is documented in the schema with format details, but page and per_page have no descriptions in either schema or description. The description does not compensate for this gap by explaining pagination semantics. Baseline 3 reflects that the schema does partial work, but the description adds nothing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (published project releases and version changelogs). This clearly distinguishes it from siblings like get_release (singular fetch) and create_release (mutation). It could be sharper about scope (e.g., published only vs. all), but the purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this versus get_release or create_release. The word 'published' hints at a filter but no exclusions or alternatives are named, leaving the agent to infer usage from the sibling list alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_snippetsC

List code snippets in a GitLab project with visibility and author details

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
per_pageYes
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it only hints at the returned fields ('visibility and author details'). It says nothing about pagination behavior despite page/per_page parameters, permissions required, or the read-only nature of the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single focused sentence with the operation and scope front-loaded; there is no filler or redundancy. It is efficient, though its brevity is partly why other dimensions are thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter listing tool with no annotations and no output schema, the description omits pagination semantics, permission requirements, and result fields it later alludes to. An agent can identify the tool but lacks what it needs to call it well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% – project_id is documented in the schema while page and per_page carry no descriptions. The description mentions the project implicitly but adds no meaning about pagination or accepted ID formats, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb+resource ('List code snippets') scoped to a GitLab project, which separates it from get_snippet, create_snippet, and update_snippet. It stops short of explicitly naming those siblings or stating what makes this the list variant, so it lands just below the top.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no explicit routing to alternatives like get_snippet for a single snippet or create_snippet. The list-vs-get distinction is only implied by the verb and must be inferred by the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsC

List git tags in the repository

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes
searchNoSearch query to filter tag names
per_pageYes
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not disclose that this is a read-only paginated operation, how results are ordered, or what happens when page/per_page limits are exceeded — significant gaps for a list tool with three required parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though the brevity borders on under-specification rather than true conciseness for a four-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four parameters (three required), 50% schema coverage, no annotations, and no output schema, the description leaves too much unspecified: pagination behavior, result shape, ordering, and search semantics are all absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: project_id and search are documented in the schema, while page and per_page have only defaults and no description. The description adds nothing about any parameter, so it fails to compensate for the undocumented pagination inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('git tags') with scope ('in the repository'). The verb distinguishes it from the sibling create_tag, but there is no explicit differentiation from other listing tools or clarification of repository vs project scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as create_tag, nor any mention of prerequisites, pagination expectations, or how the required 'search' filtering should be applied. The agent must infer all usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_wikisB

List all wiki pages in a GitLab project (slugs, titles, and formats)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
with_contentYesIf true, includes full wiki content for each page

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the return shape (slugs, titles, formats) and the fact that it returns ALL pages, but omits pagination, result limits, and permission requirements that matter for a project-wide listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and resource first and the return contents as a compact parenthetical. No filler and nothing wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only list tool with a fully documented schema and no output schema, the description adequately covers purpose and return fields. The only meaningful gap is pagination/result-size behavior, which an agent would need for large projects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both project_id and with_content are already documented in the schema, including ID formats and the default for with_content. The description adds no parameter-level meaning beyond the schema, which is the expected baseline here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (List) plus resource (wiki pages) and scope (in a GitLab project), and even enumerates the returned fields (slugs, titles, formats). It clearly reads as the collection-level counterpart to get_wiki/create_wiki, though it doesn't name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives such as get_wiki for a single page. For a simple list tool the intent is largely implied by the verb, but nothing resolves the choice between this and its wiki siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

push_filesB

Commit multiple files in a single atomic commit

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesArray of files to create/update in this single commit
branchYesTarget branch to push to
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
commit_messageYesGit commit message for the batch commit

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does make one genuine, non-obvious disclosure — atomicity, meaning all files commit together or not at all — which is real value the schema does not provide. However, it omits required permissions, whether the branch must pre-exist, and whether the commit is pushed to the remote.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly written sentence with the atomicity guarantee front-loaded. No filler, no redundancy, nothing that could be cut without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a four-required-parameter mutation tool with no annotations and no output schema, so the description should compensate by covering write semantics and return behavior. It gives one sentence about atomicity and says nothing about success/failure outcomes, the returned commit identifier, or branch requirements, leaving the agent under-informed for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (project_id, branch, commit_message, files) are already documented in the schema, including the nested file_path/content fields. The description adds no parameter-level syntax or format detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Commit multiple files') plus a scope qualifier ('single atomic commit'). It implicitly contrasts with the single-file sibling create_or_update_file, but never names it, so sibling disambiguation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'multiple files...single atomic commit' implies when to reach for this tool (batched writes that must succeed together), but there is no explicit when-to-use statement, no exclusions, and no named alternative among the large set of sibling commit/file tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_project_memberC

Remove a user/collaborator from a project

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesUser numeric ID or username to remove from project
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does not disclose that this is a destructive, likely irreversible operation, what permissions are required, what happens to the member's other contributions, or whether it errors on the last owner. For a mutating membership tool this is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the action front-loaded and zero filler. It is efficient, though almost too terse given what the operation entails.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-annotation, no-output-schema tool, the definition is under-specified: nothing about reversibility, required role/permission, or success/failure behavior. The parameters are fully covered by the schema, but the behavioral picture is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema documents both project_id formats (numeric or namespace path) and user_id (numeric or username), so the description adds nothing beyond it. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Remove') and resource ('a user/collaborator from a project'), making it easily separable from siblings like add_project_member and update_project_member. It stops short of explicitly naming those alternatives, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus update_project_member (which likely changes a role) or when removal is even permitted. No prerequisites, no exclusions, and no mention of irreversibility are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reply_merge_request_discussionB

Post a reply comment into an existing MR code review discussion thread

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesMarkdown reply comment
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
discussion_idYesThe discussion thread ID to reply to
merge_request_iidYesMerge request IID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full behavioral burden. It does not say whether the reply requires write access, whether it reopens or affects discussion resolution state, whether edited/deleted later, or what the call returns. For a mutation tool with zero annotation coverage this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and target lead. It is arguably too terse, which is an underspecification issue rather than a structure problem.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, no annotations, and four required parameters. The description covers the core action but omits any note on permissions, side effects on thread state, or error conditions (e.g. nonexistent discussion_id), leaving gaps an agent would want filled for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (project_id accepting both numeric ID and namespace path, discussion_id, merge_request_iid, body as Markdown) are already fully documented in the schema. The description adds no parameter-level detail beyond 'existing thread', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Post a reply comment') and a precise target ('existing MR code review discussion thread'), which cleanly separates it from create_diff_discussion, create_merge_request_note, and update_merge_request_discussion_note. It stops short of naming the sibling it differs from, so an agent must still infer the boundary from the resource wording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'existing' implies this is only for adding to a thread that already exists, and the required discussion_id echoes that. But there is no explicit when-to-use guidance, no mention that new threads need create_diff_discussion, and no stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_merge_request_discussionB

Resolve or unresolve a code review discussion thread on an MR

ParametersJSON Schema
NameRequiredDescriptionDefault
resolvedYesSet to true to resolve the thread, false to unresolve
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
discussion_idYesThe discussion thread ID to resolve or unresolve
merge_request_iidYesMerge request IID

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the bidirectional resolve/unresolve effect, which is the key behavioral trait, but says nothing about permissions, idempotency, error conditions, or what happens to the thread on resolution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single ten-word sentence that front-loads the action and resource with zero filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation tool with no annotations and no output schema, the description is adequate but thin: it covers the core action yet omits permission requirements, idempotency, and any indication of the return behavior, leaving gaps an agent might need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including the resolve/unresolve semantics of the 'resolved' flag. The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (resolve/unresolve) and the exact resource (code review discussion thread on an MR). It is distinguishable from siblings like reply_merge_request_discussion and list_merge_request_discussions, though it doesn't name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as reply_merge_request_discussion or update_merge_request_discussion_note. The agent must infer the context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_repositoriesC

Search for GitLab projects and repositories (optionally filtered by group)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage number for pagination (default: 1)
groupNoOptional group ID or path (e.g. 'buggycode' or 3) to filter repositories strictly within that group
searchNoSearch query to filter project names/descriptions (e.g. 'my-service')
per_pageYesNumber of results per page (default: 20, max: 100)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it discloses almost nothing: it does not confirm the operation is read-only, does not mention authentication or scope requirements, and does not describe pagination behavior beyond what the schema defaults imply. For an unannotated search tool this is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, and the core purpose is front-loaded so an agent can read it in one glance. It is efficient but arguably too terse given four parameters and multiple sibling list tools it must be separated from.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, and with several overlapping list/search siblings, the description should at minimum clarify scope differences and whether results are paginated. It does neither, leaving the agent to guess how this differs from list_group_projects or list_my_projects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, per_page, group, and search are all fully documented in the schema, including the group ID-or-path format and the per_page max. The description's "optionally filtered by group" adds no syntax or meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Search") and resource ("GitLab projects and repositories"), so the agent knows it is a discovery tool rather than a mutation. However, it does not distinguish itself from close siblings such as list_group_projects, list_my_projects, or get_project, and the phrase "projects and repositories" is redundant in GitLab where the two are the same object.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only contextual hint is the parenthetical "optionally filtered by group", which is a restatement of a parameter rather than guidance. There is no statement of when to prefer this over list_group_projects/list_my_projects, nor when-not to use it. The agent must infer routing from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_issueC

Update issue title, description, state (close/reopen), milestone, labels, or assignees

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoUpdated issue title
labelsNoSet labels (replaces all existing labels)
due_dateNoDue date in YYYY-MM-DD format
issue_iidYesThe project-scoped issue number (e.g. 14 for #14)
add_labelsNoAdd labels without removing existing ones
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionNoUpdated issue description markdown
state_eventNoChange issue status to closed or reopened
assignee_idsNoArray of user IDs to assign (replaces existing assignees)
milestone_idNoMilestone ID to assign (pass 0 to unassign)
remove_labelsNoRemove specific labels from the issue
milestone_titleNoMilestone title to assign (auto-resolved to ID)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It hints that state means close/reopen, but ignores the destructive semantics that the schema encodes – that labels replaces all existing labels, that assignee_ids replaces existing assignees, and how milestone_id=0 unassigns. For a bare mutation tool these are meaningful gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that enumerates the capabilities with no filler. It is efficient, though the field list would carry more value if it distinguished replace-vs-add behavior rather than just naming fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with no annotations and no output schema, the description covers most mutable fields but omits due_date and the add/remove/replace label distinction, and says nothing about permissions, side effects, or reversibility. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already fully documented in the schema and the baseline is 3. The description lists fields but adds no syntax, format, or replace-vs-append meaning beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (issue) and enumerates the mutable fields, so an agent can distinguish it from create_issue, get_issue and list_issues without opening a schema. It does not explicitly name or contrast a sibling, which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no routing to alternatives, even though the schema exposes overlapping operations (labels vs add_labels vs remove_labels, milestone_id vs milestone_title) that clearly warrant disambiguation. The reader is left to infer usage entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_merge_requestC

Update MR title, description, state (close/reopen), target branch, milestone, or labels

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoUpdated MR title
labelsNoSet labels (replaces existing)
add_labelsNoAdd labels
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionNoUpdated MR description
state_eventNoClose or reopen the merge request
milestone_idNoMilestone ID (0 to unassign)
remove_labelsNoRemove labels
target_branchNoChange destination target branch
milestone_titleNoMilestone title to associate
merge_request_iidYesMerge request IID (e.g. 5 for !5)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies mutation but does not disclose permission requirements, whether unspecified fields are left untouched, whether close/reopen is reversible, or what the response looks like. For an 11-parameter mutation tool this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words that quickly tells the agent the tool's scope. It is appropriately sized for a definition that leans on a fully documented schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 100% schema coverage and no output schema, the field-level detail is adequately covered. However, as a mutation tool with zero annotations, the definition omits behavioral context (auth, partial-update semantics, side effects) that an agent needs to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter (including the labels-replaces-existing vs add_labels/remove_labels distinction and milestone_id=0 to unassign). The description merely repeats the field names and adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (MR) and enumerates the mutable fields (title, description, state, target branch, milestone, labels). It is clearly distinguishable from siblings like accept_merge_request or create_merge_request, though it does not explicitly name a sibling to contrast against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives (e.g., accept_merge_request, update_merge_request_discussion_note) and no prerequisites such as required permissions or MR state. The field list only implies that it modifies an existing MR.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_merge_request_discussion_noteB

Update or edit the text of an existing review comment in an MR discussion thread

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesNew markdown body for the comment
note_idYesThe note numeric ID to edit
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
discussion_idYesThe discussion thread ID
merge_request_iidYesMerge request IID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It says the tool updates text, but it does not disclose permission requirements, whether edits are reversible, whether any user can edit any note, or other operational constraints for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted text. 'Update or edit' is slightly redundant, but the statement remains efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and five required parameters, the description is too sparse to fully orient an agent. It identifies the operation but omits behavioral, permission, and side-effect context that structured fields do not cover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all five parameters, including body, note_id, project_id, discussion_id, and merge_request_iid. The description adds no parameter-specific meaning beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: updating/editing the text of an existing review comment in an MR discussion thread. It clearly distinguishes editing an existing note from creating or replying, but it does not explicitly name sibling alternatives to differentiate further.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'existing review comment,' indicating this tool is for modifying a note that already exists. However, there is no explicit guidance on when to use this versus reply_merge_request_discussion, create_merge_request_note, or resolve_merge_request_discussion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_milestoneC

Update milestone dates, title, description, or state (close/activate)

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoUpdated milestone title
due_dateNoDue date in YYYY-MM-DD format
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
start_dateNoStart date in YYYY-MM-DD format
descriptionNoUpdated description
state_eventNoClose or re-activate the milestone
milestone_idYesThe milestone numeric ID to update

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden, and it only implies mutation. It doesn't disclose whether unspecified fields are preserved, what permissions are required, whether closing is reversible, or what the response looks like. For a mutation tool with zero annotation coverage this is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single front-loaded sentence with no waste; the updateable fields are surfaced immediately. Slight under-specification rather than over-verbosity keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Parameter documentation is fully covered by the schema and there is no output schema to explain. However, as a 7-parameter mutation with no annotations, the description omits behavioral context (permissions, partial-update semantics) an agent would want before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter including formats (YYYY-MM-DD, enum values). The description names the field groups but adds no syntax or constraints beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (milestone) and enumerates the updateable fields: dates, title, description, state. An agent can tell it apart from create_milestone/list_milestones/get_milestone by the verb, though the description never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance. It doesn't say to use get_milestone first, whether this requires edit permissions, or how it relates to create_milestone or update_project. Usage is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_projectC

Update project metadata (description, name, default branch, visibility, topics)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew project name
topicsNoArray of project topic tags
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
visibilityNoUpdated visibility level
descriptionNoUpdated project description
default_branchNoNew default branch (e.g. 'main')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it falls short: it never states whether omitted fields are preserved (partial vs. full update), what permission level is required, whether a visibility change is reversible, or what the response contains. 'Update' implies mutation but nothing about safety or side effects is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the verb and field list front-loaded; no wasted words. It is arguably too terse for a mutation tool, but structurally it is clean and appropriately sized for what it chooses to say.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with zero annotations, no output schema, and no statement of partial-update semantics or required permissions. The description omits exactly the behavioral details an agent needs before executing a write, so it is not complete enough given the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter is documented in the schema (including the project_id path/ID dual format and the visibility enum). The description only re-lists field names, adding no syntax, format, or constraint detail beyond the structured schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Update project') and enumerates the mutable fields (description, name, default branch, visibility, topics). It is clearly distinguishable from read-oriented siblings like get_project, though it does not explicitly contrast with the other update_* tools in the family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives. The agent is left to infer that this is the tool for changing existing project settings rather than creating or deleting one (create_repository, delete_project).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_memberC

Update a project member's access level role or expiration date

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesUser numeric ID or username
expires_atNoUpdated expiration date (YYYY-MM-DD) or empty to remove
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
access_levelYesUpdated access level: 'guest' (10), 'reporter' (20), 'developer' (30), 'maintainer' (40), 'owner' (50)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden for a write operation. It says nothing about required authorization, whether lowering your own access is permitted, whether the update is idempotent, or what the response contains. This is a meaningful gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It names the resource and both updatable fields immediately, which is exactly the right shape for a short definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with no annotations and no output schema, the description is too thin. It omits permission requirements, partial-update semantics, and any confirmation of what changes on success, leaving the agent under-informed before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter, including the access-level mapping and the YYYY-MM-DD expiry format. The description only restates 'access level role or expiration date' and adds no syntax or edge-case detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Update) and resource (a project member) plus the two mutable fields, so an agent can tell this is a mutation of an existing membership rather than add/remove. It does not explicitly contrast with sibling tools like add_project_member or remove_project_member, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g. required role/permission to change another member's access), and no mention of alternatives such as remove_project_member for revocation. The agent must infer all routing decisions from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_variableC

Update an existing CI/CD project variable's value or configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesVariable key/name to update
rawNoRaw value status
valueNoNew variable value
maskedNoMasked status in job logs
protectedNoProtected status
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
descriptionNoVariable description
variable_typeNoVariable type
environment_scopeNoEnvironment scope filter

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Update an existing...' implies mutation and an existence precondition, but it says nothing about required permissions, whether omitted fields are preserved or reset, whether the `key` itself is mutable, or what the response looks like. For a 9-parameter mutation with zero annotation coverage this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the verb and resource front-loaded, and no wasted clauses. It is appropriately sized, though brevity here partly reflects under-specification rather than tight writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 9 parameters, no annotations, and no output schema, the description is too thin. It omits permission requirements, partial-update behavior, and the fact that `project_id` and `key` together identify the target, leaving the agent to reconstruct operating conditions from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented in the schema, which sets the baseline at 3. The phrase 'value or configuration' loosely gestures at the value/masked/protected/raw/description/environment_scope fields but adds no syntax, mutual-exclusion, or partial-update semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update') and resource ('existing CI/CD project variable') plus the scope of change ('value or configuration'). It distinguishes itself reasonably from siblings like create_project_variable and delete_project_variable, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus create_project_variable or delete_project_variable, and no note that the variable must already exist or that at least one mutable field should be supplied. The agent must infer all invocation conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_snippetC

Update an existing code snippet's content, title, file name, or visibility

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoUpdated snippet title
contentNoUpdated code or text content
file_nameNoUpdated file name
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.
snippet_idYesNumeric ID of the snippet to update
visibilityNoUpdated visibility level
descriptionNoUpdated description

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies mutation but omits whether partial updates are supported, what happens to unchanged fields, permission requirements, or reversibility. Notably it also omits the 'description' field from its field list, even though that field is updatable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence that is front-loaded with verb and resource. It earns its place but is so terse it leaves no room for the guidance a mutation tool needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with zero annotations and no output schema, the description is too thin. It should explain partial-update semantics, required vs optional fields, permission constraints, and that description is also updatable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with each of the 7 parameters documented, so the schema does the heavy lifting. The description lists four of the mutable fields, adding little beyond the schema and actually under-counting the updatable fields (description is omitted). Baseline 3 applies given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update) and resource (existing code snippet), and enumerates the mutable fields (content, title, file name, visibility). It is clearly distinguishable from create_snippet, get_snippet, and list_snippets, though it does not name any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no when-to-use guidance, no prerequisites (e.g., needed permissions or ownership), and does not mention alternatives such as get_snippet to read before updating. An agent must infer all context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_wikiB

Update an existing wiki page's content or title in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug of the existing wiki page to edit
titleNoOptional new title if renaming the wiki page
formatNoWiki format
contentYesNew markdown content for the wiki page
project_idYesProject numeric ID (e.g. 31) or namespace path (e.g. 'group/project-name'). URL-encoding is handled automatically.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: it does not say whether the supplied content fully replaces existing content, what permissions are needed, or what happens on a bad slug. For a mutation tool with zero annotation coverage this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, and the key scoping word ('existing') is front-loaded. It is efficient, though very terse for a tool of this complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given five parameters, a mutation semantic, no annotations, and no output schema, the description is too thin: it never states that content likely overwrites the page, how renaming via title interacts with slug, or any failure/authorization behavior. An agent has enough to guess an invocation but not to predict the effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (including the format enum and the project_id ID/path formats) are already documented in the schema. The description only echoes 'content or title' and adds no syntax, defaults, or interaction details beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Update') and resource ('an existing wiki page'), and scopes it to 'content or title', which cleanly distinguishes it from create_wiki and get_wiki in the sibling list. It stops short of naming those siblings explicitly, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'existing' implies the page must already exist, which is a minimal usage condition, but there is no explicit when-to-use, no statement of when to prefer create_wiki instead, and no prerequisites. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 77 tool updatesv2.0.0
    • First observedaccept_merge_request
    • First observedadd_project_member
    • First observedcreate_branch
    • First observedcreate_diff_discussion
    • First observedcreate_issue
    • First observedcreate_issue_link
    • First observedcreate_issue_note
    • First observedcreate_label
    • First observedcreate_merge_request
    • First observedcreate_merge_request_note
    • First observedcreate_milestone
    • First observedcreate_or_update_file
    • First observedcreate_pipeline
    • First observedcreate_project_variable
    • First observedcreate_release
    • First observedcreate_repository
    • First observedcreate_snippet
    • First observedcreate_tag
    • First observedcreate_wiki
    • First observeddelete_branch
    • First observeddelete_project
    • First observeddelete_project_variable
    • First observedfork_repository
    • First observedget_branch
    • First observedget_commit
    • First observedget_current_user
    • First observedget_file_contents
    • First observedget_group
    • First observedget_issue
    • First observedget_job
    • First observedget_job_artifact_file
    • First observedget_job_trace
    • First observedget_merge_request
    • First observedget_merge_request_changes
    • First observedget_milestone
    • First observedget_pipeline
    • First observedget_pipeline_test_report
    • First observedget_project
    • First observedget_project_member
    • First observedget_project_variable
    • First observedget_release
    • First observedget_snippet
    • First observedget_wiki
    • First observedlist_branches
    • First observedlist_commits
    • First observedlist_group_projects
    • First observedlist_issue_links
    • First observedlist_issue_notes
    • First observedlist_issues
    • First observedlist_labels
    • First observedlist_merge_request_discussions
    • First observedlist_merge_requests
    • First observedlist_milestones
    • First observedlist_my_groups
    • First observedlist_my_projects
    • First observedlist_pipeline_jobs
    • First observedlist_pipelines
    • First observedlist_project_members
    • First observedlist_project_variables
    • First observedlist_releases
    • First observedlist_snippets
    • First observedlist_tags
    • First observedlist_wikis
    • First observedpush_files
    • First observedremove_project_member
    • First observedreply_merge_request_discussion
    • First observedresolve_merge_request_discussion
    • First observedsearch_repositories
    • First observedupdate_issue
    • First observedupdate_merge_request
    • First observedupdate_merge_request_discussion_note
    • First observedupdate_milestone
    • First observedupdate_project
    • First observedupdate_project_member
    • First observedupdate_project_variable
    • First observedupdate_snippet
    • First observedupdate_wiki

TDQS

C2.9/5.0

Scored across 77 tools

Disambiguation4/5

Most tools target distinct resource+action pairs, and descriptions clarify boundaries well (e.g., get_job vs get_job_trace vs get_job_artifact_file). However, the merge-request comment tools (create_diff_discussion, reply_merge_request_discussion, create_merge_request_note) and multiple project/member listing tools require careful reading, creating some misselection risk.

Naming Consistency4/5

Almost all tools follow a predictable snake_case verb_noun pattern (list_issues, get_project, create_branch, delete_project_variable). Minor deviations include create_or_update_file, push_files, accept_merge_request, and remove_project_member instead of delete_project_member, but the overall convention is clear.

Tool Count1/5

77 tools is an extreme count for an MCP server, far exceeding practical limits and imposing heavy selection burden on an agent. Even though GitLab is a broad platform, this surface likely needs consolidation into fewer, higher-level tools.

Completeness3/5

Core development workflows (issues, merge requests, pipelines, commits) are reasonably covered, but many resources lack full CRUD: labels have only list/create, tags only list/create, and wikis, snippets, releases, and milestones lack delete or full update operations. Group management and pipeline/job cancel/retry operations are also missing, creating dead ends for common administrative tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A meta-server that aggregates multiple MCP servers into a single interface, reducing token usage by 98%+ through progressive tool discovery and direct code execution that processes data between tools without consuming context window space.
    16 npm
    10
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that cuts cloud LLM costs 36-42% by indexing context locally and giving agents precision retrieval tools instead of raw context dumps.
    8 npm
    7
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Agent-optimized MCP server that replaces built-in file, search, exec, and git tools with compact, structured JSON equivalents. Benchmarked 20–45% token savings for AI coding agents.
    20
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A token-optimized Git MCP server that reduces context window tokens by 59% while preserving full functionality, enabling AI assistants to interact with Git repositories using only 5 grouped tool operations.
    12 npm
    MIT