Skip to main content
Glama
rokrokss
by rokrokss

GitLab MCP Server

New Feature: Dynamic GitLab API URL support with connection pooling! See Dynamic API URL Documentation for details.

Star History Chart

@zereight/mcp-gitlab

GitLab MCP(Model Context Protocol) Server. Includes bug fixes and improvements over the original GitLab MCP server.

Related MCP server: GitLab MR MCP

Usage

Using with Claude Code, Codex, Antigravity, OpenCode, Copilot, Cline, Roo Code, Cursor, Kilo Code, Amp Code

When using with the Claude App, you need to set up your API key and URLs directly.

Authentication Methods

The server supports two authentication methods:

  1. Personal Access Token (traditional method)

  2. OAuth2 (recommended for better security)

Using OAuth2 Authentication

OAuth2 provides a more secure authentication flow using browser-based authentication. When enabled, the server will:

  1. Open your browser to GitLab's authorization page

  2. Wait for you to approve the access

  3. Store the token securely for future use

  4. Automatically refresh the token when it expires

For detailed OAuth2 setup instructions, see OAuth Setup Guide.

Quick setup - first create a GitLab OAuth application:

  1. Go to your GitLab instance: SettingsApplications

  2. Create a new application with:

    • Name: GitLab MCP Server (or any name you prefer)

    • Redirect URI: http://127.0.0.1:8888/callback

    • Scopes: Select api (provides complete read/write access to the API)

  3. Copy the Application ID (this is your Client ID)

Then configure the MCP server with OAuth:

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "@zereight/mcp-gitlab"],
      "env": {
        "GITLAB_USE_OAUTH": "true",
        "GITLAB_OAUTH_CLIENT_ID": "your_oauth_client_id",
        "GITLAB_OAUTH_CLIENT_SECRET": "your_oauth_client_secret", // Required for Confidential apps only
        "GITLAB_OAUTH_REDIRECT_URI": "http://127.0.0.1:8888/callback",
        "GITLAB_API_URL": "your_gitlab_api_url",
        "GITLAB_PROJECT_ID": "your_project_id", // Optional: default project
        "GITLAB_ALLOWED_PROJECT_IDS": "", // Optional: comma-separated list of allowed project IDs
        "GITLAB_READ_ONLY_MODE": "false",
        "USE_GITLAB_WIKI": "false", // use wiki api?
        "USE_MILESTONE": "false", // use milestone api?
        "USE_PIPELINE": "false" // use pipeline api?
      }
    }
  }
}

Using Personal Access Token (traditional)

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "@zereight/mcp-gitlab"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "your_gitlab_token",
        "GITLAB_API_URL": "your_gitlab_api_url",
        "GITLAB_PROJECT_ID": "your_project_id", // Optional: default project
        "GITLAB_ALLOWED_PROJECT_IDS": "", // Optional: comma-separated list of allowed project IDs
        "GITLAB_READ_ONLY_MODE": "false",
        "USE_GITLAB_WIKI": "false", // use wiki api?
        "USE_MILESTONE": "false", // use milestone api?
        "USE_PIPELINE": "false" // use pipeline api?
      }
    }
  }
}

Using CLI Arguments (for clients with env var issues)

Some MCP clients (like GitHub Copilot CLI) have issues with environment variables. Use CLI arguments instead:

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": [
        "-y",
        "@zereight/mcp-gitlab",
        "--token=YOUR_GITLAB_TOKEN",
        "--api-url=https://gitlab.com/api/v4"
      ],
      "tools": ["*"]
    }
  }
}

Available CLI arguments:

  • --token - GitLab Personal Access Token (replaces GITLAB_PERSONAL_ACCESS_TOKEN)

  • --api-url - GitLab API URL (replaces GITLAB_API_URL)

  • --read-only=true - Enable read-only mode (replaces GITLAB_READ_ONLY_MODE)

  • --use-wiki=true - Enable wiki API (replaces USE_GITLAB_WIKI)

  • --use-milestone=true - Enable milestone API (replaces USE_MILESTONE)

  • --use-pipeline=true - Enable pipeline API (replaces USE_PIPELINE)

CLI arguments take precedence over environment variables.

vscode .vscode/mcp.json

Using OAuth2 (Non-Confidential - Recommended):

{
  "servers": {
    "GitLab-MCP": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@zereight/mcp-gitlab"],
      "env": {
        "GITLAB_USE_OAUTH": "true",
        "GITLAB_OAUTH_CLIENT_ID": "your_oauth_client_id",
        "GITLAB_OAUTH_REDIRECT_URI": "http://127.0.0.1:8888/callback",
        "GITLAB_API_URL": "https://gitlab.com/api/v4",
        "GITLAB_READ_ONLY_MODE": "false",
        "USE_GITLAB_WIKI": "false",
        "USE_MILESTONE": "false",
        "USE_PIPELINE": "false"
      }
    }
  }
}

Using OAuth2 (Confidential):

{
  "inputs": [
    {
      "type": "promptString",
      "id": "gitlab-oauth-secret",
      "description": "GitLab OAuth Client Secret",
      "password": true
    }
  ],
  "servers": {
    "GitLab-MCP": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@zereight/mcp-gitlab"],
      "env": {
        "GITLAB_USE_OAUTH": "true",
        "GITLAB_OAUTH_CLIENT_ID": "your_oauth_client_id",
        "GITLAB_OAUTH_CLIENT_SECRET": "${input:gitlab-oauth-secret}",
        "GITLAB_OAUTH_REDIRECT_URI": "http://127.0.0.1:8888/callback",
        "GITLAB_API_URL": "https://gitlab.com/api/v4",
        "GITLAB_READ_ONLY_MODE": "false"
      }
    }
  }
}

Using Personal Access Token:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "gitlab-token",
      "description": "GitLab Personal Access Token",
      "password": true
    }
  ],
  "servers": {
    "GitLab-MCP": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@zereight/mcp-gitlab"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "${input:gitlab-token}",
        "GITLAB_API_URL": "https://gitlab.com/api/v4",
        "GITLAB_READ_ONLY_MODE": "false",
        "USE_GITLAB_WIKI": "false",
        "USE_MILESTONE": "false",
        "USE_PIPELINE": "false"
      }
    }
  }
}

Strands Agents SDK (MCP Tools)

env_vars = {
        "GITLAB_PERSONAL_ACCESS_TOKEN": gitlab_access_token,
        "GITLAB_API_URL": gitlab_api_url,
        "USE_GITLAB_WIKI": use_gitlab_wiki
        # ......the rest of the optional parameters
}

stdio_gitlab_mcp_client = MCPClient(
        lambda: stdio_client(
            StdioServerParameters(
                command="npx",
                args=["-y", "@zereight/mcp-gitlab"],
                env=env_vars,
            )
        )
    )

Docker

Note: For Docker deployments, Personal Access Token is recommended. OAuth requires browser-based authentication and a local callback server, which does not work properly in containerized environments.

Using Personal Access Token (stdio) - Recommended:

{
  "mcpServers": {
    "gitlab": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITLAB_PERSONAL_ACCESS_TOKEN",
        "-e",
        "GITLAB_API_URL",
        "-e",
        "GITLAB_READ_ONLY_MODE",
        "-e",
        "USE_GITLAB_WIKI",
        "-e",
        "USE_MILESTONE",
        "-e",
        "USE_PIPELINE",
        "zereight050/gitlab-mcp"
      ],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "your_gitlab_token",
        "GITLAB_API_URL": "https://gitlab.com/api/v4",
        "GITLAB_READ_ONLY_MODE": "false",
        "USE_GITLAB_WIKI": "true",
        "USE_MILESTONE": "true",
        "USE_PIPELINE": "true"
      }
    }
  }
}
  • sse

docker run -i --rm \
  -e HOST=0.0.0.0 \
  -e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
  -e GITLAB_API_URL="https://gitlab.com/api/v4" \
  -e GITLAB_READ_ONLY_MODE=true \
  -e USE_GITLAB_WIKI=true \
  -e USE_MILESTONE=true \
  -e USE_PIPELINE=true \
  -e SSE=true \
  -p 3333:3002 \
  zereight050/gitlab-mcp
{
  "mcpServers": {
    "gitlab": {
      "type": "sse",
      "url": "http://localhost:3333/sse"
    }
  }
}
  • streamable-http

docker run -i --rm \
  -e HOST=0.0.0.0 \
  -e GITLAB_PERSONAL_ACCESS_TOKEN=your_gitlab_token \
  -e GITLAB_API_URL="https://gitlab.com/api/v4" \
  -e GITLAB_READ_ONLY_MODE=true \
  -e USE_GITLAB_WIKI=true \
  -e USE_MILESTONE=true \
  -e USE_PIPELINE=true \
  -e STREAMABLE_HTTP=true \
  -p 3333:3002 \
  zereight050/gitlab-mcp
{
  "mcpServers": {
    "gitlab": {
      "type": "streamable-http",
      "url": "http://localhost:3333/mcp"
    }
  }
}

Environment Variables

Authentication Configuration

  • GITLAB_PERSONAL_ACCESS_TOKEN: Your GitLab personal access token. Required in standard mode; not used when REMOTE_AUTHORIZATION=true or when using OAuth.

  • GITLAB_USE_OAUTH: Set to true to enable OAuth2 authentication instead of personal access token.

  • GITLAB_OAUTH_CLIENT_ID: The Client ID from your GitLab OAuth application. Required when using OAuth.

  • GITLAB_OAUTH_CLIENT_SECRET: The Client Secret from your GitLab OAuth application. Required only for Confidential applications.

  • GITLAB_OAUTH_REDIRECT_URI: The OAuth callback URL. Default: http://127.0.0.1:8888/callback

  • GITLAB_OAUTH_TOKEN_PATH: Custom path to store the OAuth token. Default: ~/.gitlab-mcp-token.json

  • REMOTE_AUTHORIZATION: When set to 'true', enables remote per-session authorization via HTTP headers. In this mode:

    • The server accepts GitLab PAT tokens from HTTP headers (Authorization: Bearer <token>, Private-Token: <token> or Job-Token: <token>) on a per-session basis

    • GITLAB_PERSONAL_ACCESS_TOKEN environment variable is not required and ignored

    • Only works with Streamable HTTP transport (STREAMABLE_HTTP=true) because session management was already handled by the transport layer

    • SSE transport is disabled - attempting to use SSE with remote authorization will cause the server to exit with an error

    • Each client session can use a different token, enabling multi-user support with secure session isolation

    • Tokens are stored per session and automatically cleaned up when sessions close or timeout

  • SESSION_TIMEOUT_SECONDS: Session auth token timeout in seconds. Default: 3600 (1 hour). Valid range: 1-86400 seconds (recommended: 60+). After this period of inactivity, the auth token is removed but the transport session remains active. The client must provide auth headers again on the next request. Only applies when REMOTE_AUTHORIZATION=true.

General Configuration

  • GITLAB_API_URL: Your GitLab API URL. (Default: https://gitlab.com/api/v4)

  • GITLAB_PROJECT_ID: Default project ID. If set, Overwrite this value when making an API request.

  • GITLAB_ALLOWED_PROJECT_IDS: Optional comma-separated list of allowed project IDs. When set with a single value, acts as a default project (like the old "lock" mode). When set with multiple values, restricts access to only those projects. Examples:

    • Single value 123: MCP server can only access project 123 and uses it as default

    • Multiple values 123,456,789: MCP server can access projects 123, 456, and 789 but requires explicit project ID in requests

  • GITLAB_READ_ONLY_MODE: When set to 'true', restricts the server to only expose read-only operations. Useful for enhanced security or when write access is not needed. Also useful for using with Cursor and it's 40 tool limit.

  • GITLAB_DENIED_TOOLS_REGEX: When set as a regular expression, it excludes the matching tools.

  • USE_GITLAB_WIKI: Legacy flag. Wiki features are now enabled by default. When set to 'true', ensures wiki-related tools are included even if the wiki toolset is not explicitly listed in GITLAB_TOOLSETS.

  • USE_MILESTONE: Legacy flag. Milestone features are now enabled by default. When set to 'true', ensures milestone-related tools are included even if the milestones toolset is not explicitly listed in GITLAB_TOOLSETS.

  • USE_PIPELINE: Legacy flag. Pipeline features are now enabled by default. When set to 'true', ensures pipeline-related tools are included even if the pipelines toolset is not explicitly listed in GITLAB_TOOLSETS.

  • GITLAB_TOOLSETS: Comma-separated list of toolset IDs to enable. When empty or unset, default toolsets are used. Set to "all" to enable every toolset. Available toolsets (default toolsets marked with *):

    • merge_requests* — MR operations, notes, discussions, draft notes, threads (31 tools)

    • issues* — Issue CRUD, notes, links, discussions (14 tools)

    • repositories* — Search, create, file contents, push, fork, tree (7 tools)

    • branches* — Branch creation, commits, diffs (4 tools)

    • projects* — Project/namespace info, group projects, iterations (8 tools)

    • labels* — Label CRUD (5 tools)

    • pipelines* — Pipeline and job operations (19 tools)

    • milestones* — Milestone CRUD, issues, MRs, burndown (9 tools)

    • wiki* — Wiki page CRUD (5 tools)

    • releases* — Release CRUD, evidence, asset download (7 tools)

    • users* — User info, events, markdown upload, attachments (5 tools)

    Note: execute_graphql is not in any toolset and must be added individually via GITLAB_TOOLS if needed. Exposing arbitrary GraphQL would allow bypassing toolset boundaries (e.g. querying data that the user intentionally disabled via toolsets like wiki or pipelines), which is a security and permission-containment concern. Keeping execute_graphql out of all toolsets and requiring explicit opt-in via GITLAB_TOOLS=execute_graphql is intentional, to align with that principle rather than for backward compatibility. CLI arg: --toolsets

  • GITLAB_TOOLS: Comma-separated list of individual tool names to add on top of the enabled toolsets (additive). Useful for cherry-picking specific tools without enabling an entire toolset. Example: GITLAB_TOOLS="list_pipelines,execute_graphql". CLI arg: --tools

    Combined logic: final tools = (tools from enabled toolsets) ∪ (GITLAB_TOOLS) ∪ (legacy flag overrides)

    Examples:

    # Default behavior (unchanged)
    GITLAB_PERSONAL_ACCESS_TOKEN=xxx npx @zereight/mcp-gitlab
    
    # Only issues and repositories
    GITLAB_TOOLSETS="issues,repositories" npx @zereight/mcp-gitlab
    
    # All toolsets
    GITLAB_TOOLSETS="all" npx @zereight/mcp-gitlab
    
    # Default toolsets + one extra pipeline tool
    GITLAB_TOOLS="list_pipelines" npx @zereight/mcp-gitlab
    
    # Specific toolsets + individual tools
    GITLAB_TOOLSETS="issues,merge_requests" GITLAB_TOOLS="list_pipelines,get_pipeline" npx @zereight/mcp-gitlab
    
    # Legacy flags still work (backward compatible)
    USE_PIPELINE=true npx @zereight/mcp-gitlab
  • GITLAB_AUTH_COOKIE_PATH: Path to an authentication cookie file for GitLab instances that require cookie-based authentication. When provided, the cookie will be included in all GitLab API requests.

  • SSE: When set to 'true', enables the Server-Sent Events transport.

  • STREAMABLE_HTTP: When set to 'true', enables the Streamable HTTP transport. If both SSE and STREAMABLE_HTTP are set to 'true', the server will prioritize Streamable HTTP over SSE transport.

  • GITLAB_COMMIT_FILES_PER_PAGE: The number of files per page that GitLab returns for commit diffs. This value should match the server-side GitLab setting. Adjust this if your GitLab instance uses a custom per-page value for commit diffs.

  • GITLAB_REPO_FILE_ENCODING: Encoding for repository file create/update and related commit payloads sent to the GitLab API. Use text (default) or base64. Equivalent CLI: --repo-file-encoding=text|base64.

Performance & Security Configuration

  • HOST: Server host address. Default: 127.0.0.1 (localhost only). Set to 0.0.0.0 to allow external connections (required for Docker with port forwarding).

  • MAX_SESSIONS: Maximum number of concurrent sessions allowed. Default: 1000. Valid range: 1-10000. When limit is reached, new connections are rejected with HTTP 503.

  • MAX_REQUESTS_PER_MINUTE: Rate limit per session in requests per minute. Default: 60. Valid range: 1-1000. Exceeded requests return HTTP 429.

  • PORT: Server port. Default: 3002. Valid range: 1-65535.

  • HTTP_PROXY: HTTP proxy server URL for outgoing requests. Example: http://proxy.example.com:8080. Supports HTTP/HTTPS and SOCKS proxies (URLs starting with socks:// or socks5://). CLI arg: --http-proxy

  • HTTPS_PROXY: HTTPS proxy server URL for outgoing requests. Example: https://proxy.example.com:8080. Supports HTTP/HTTPS and SOCKS proxies. CLI arg: --https-proxy

  • NO_PROXY: Comma-separated list of hosts that should bypass the proxy. Supports:

    • Exact hostname matches (e.g., localhost, gitlab.internal.com)

    • Domain suffix matches (e.g., .internal.com matches any subdomain)

    • IP addresses (e.g., 127.0.0.1, 192.168.1.1)

    • Port-specific matches (e.g., example.com:443)

    • Wildcard * to bypass proxy for all hosts

    • Example: NO_PROXY=localhost,127.0.0.1,.internal.com

    • CLI arg: --no-proxy

Monitoring Endpoints

When using Streamable HTTP transport, the following endpoints are available:

  • /health: Health check endpoint returning server status, active sessions count, and uptime.

  • /metrics: Detailed metrics including:

    • Active and total session counts

    • Authentication metrics (failures, expirations)

    • Rate limiting statistics

    • Resource usage (memory, uptime)

    • Configuration summary

Remote Authorization Setup (Multi-User Support)

When using REMOTE_AUTHORIZATION=true, the MCP server can support multiple users, each with their own GitLab token passed via HTTP headers. This is useful for:

  • Shared MCP server instances where each user needs their own GitLab access

  • IDE integrations that can inject user-specific tokens into MCP requests

Setup Example:

# Start server with remote authorization
docker run -d \
  -e HOST=0.0.0.0 \
  -e STREAMABLE_HTTP=true \
  -e REMOTE_AUTHORIZATION=true \
  -e GITLAB_API_URL="https://gitlab.com/api/v4" \
  -e GITLAB_READ_ONLY_MODE=true \
  -e SESSION_TIMEOUT_SECONDS=3600 \
  -p 3333:3002 \
  zereight050/gitlab-mcp

Client Configuration:

Your IDE or MCP client must send one of these headers with each request:

Authorization: Bearer glpat-xxxxxxxxxxxxxxxxxxxx

or

Private-Token: glpat-xxxxxxxxxxxxxxxxxxxx

The token is stored per session (identified by mcp-session-id header) and reused for subsequent requests in the same session.

Remote Authorization Client Configuration Example with Cursor

{
  "mcpServers": {
    "GitLab": {
      "url": "http(s)://<your_mcp_gitlab_server>/mcp",
      "headers": {
        "Authorization": "Bearer glpat-..."
      }
    }
  }
}

Important Notes:

  • Remote authorization only works with Streamable HTTP transport

  • Each session is isolated - tokens from one session cannot access another session's data Tokens are automatically cleaned up when sessions close

  • Session timeout: Auth tokens expire after SESSION_TIMEOUT_SECONDS (default 1 hour) of inactivity. After timeout, the client must send auth headers again. The transport session remains active.

  • Each request resets the timeout timer for that session

  • Rate limiting: Each session is limited to MAX_REQUESTS_PER_MINUTE requests per minute (default 60)

  • Capacity limit: Server accepts up to MAX_SESSIONS concurrent sessions (default 1000)

Tools 🛠️

  1. merge_merge_request - Merge a merge request in a GitLab project

  2. create_or_update_file - Create or update a single file in a GitLab project

  3. search_repositories - Search for GitLab projects

  4. create_repository - Create a new GitLab project

  5. get_file_contents - Get the contents of a file or directory from a GitLab project

  6. push_files - Push multiple files to a GitLab project in a single commit

  7. create_issue - Create a new issue in a GitLab project

  8. create_merge_request - Create a new merge request in a GitLab project

  9. fork_repository - Fork a GitLab project to your account or specified namespace

  10. create_branch - Create a new branch in a GitLab project

  11. get_merge_request - Get details of a merge request with compact deployment summary, behind-count, commit addition summary, and approval summary (Either mergeRequestIid or branchName must be provided)

  12. get_merge_request_diffs - Get the changes/diffs of a merge request (Either mergeRequestIid or branchName must be provided)

  13. list_merge_request_diffs - List merge request diffs with pagination support (Either mergeRequestIid or branchName must be provided)

  14. get_branch_diffs - Get the changes/diffs between two branches or commits in a GitLab project

  15. update_merge_request - Update a merge request (Either mergeRequestIid or branchName must be provided)

  16. create_note - Create a new note (comment) to an issue or merge request

  17. create_merge_request_thread - Create a new thread on a merge request

  18. mr_discussions - List discussion items for a merge request

  19. update_merge_request_note - Modify an existing merge request thread note

  20. create_merge_request_note - Add a new note to an existing merge request thread

  21. get_draft_note - Get a single draft note from a merge request

  22. list_draft_notes - List draft notes for a merge request

  23. create_draft_note - Create a draft note for a merge request

  24. update_draft_note - Update an existing draft note

  25. delete_draft_note - Delete a draft note

  26. publish_draft_note - Publish a single draft note

  27. bulk_publish_draft_notes - Publish all draft notes for a merge request

  28. update_issue_note - Modify an existing issue thread note

  29. create_issue_note - Add a new note to an existing issue thread

  30. list_issues - List issues (default: created by current user only; use scope='all' for all accessible issues)

  31. my_issues - List issues assigned to the authenticated user (defaults to open issues)

  32. get_issue - Get details of a specific issue in a GitLab project

  33. update_issue - Update an issue in a GitLab project

  34. delete_issue - Delete an issue from a GitLab project

  35. list_issue_links - List all issue links for a specific issue

  36. list_issue_discussions - List discussions for an issue in a GitLab project

  37. get_issue_link - Get a specific issue link

  38. create_issue_link - Create an issue link between two issues

  39. delete_issue_link - Delete an issue link

  40. list_namespaces - List all namespaces available to the current user

  41. get_namespace - Get details of a namespace by ID or path

  42. verify_namespace - Verify if a namespace path exists

  43. get_project - Get details of a specific project

  44. list_projects - List projects accessible by the current user

  45. list_project_members - List members of a GitLab project

  46. list_labels - List labels for a project

  47. get_label - Get a single label from a project

  48. create_label - Create a new label in a project

  49. update_label - Update an existing label in a project

  50. delete_label - Delete a label from a project

  51. list_group_projects - List projects in a GitLab group with filtering options

  52. list_wiki_pages - List wiki pages in a GitLab project

  53. get_wiki_page - Get details of a specific wiki page

  54. create_wiki_page - Create a new wiki page in a GitLab project

  55. update_wiki_page - Update an existing wiki page in a GitLab project

  56. delete_wiki_page - Delete a wiki page from a GitLab project

  57. get_repository_tree - Get the repository tree for a GitLab project (list files and directories)

  58. list_pipelines - List pipelines in a GitLab project with filtering options

  59. get_pipeline - Get details of a specific pipeline in a GitLab project

  60. list_pipeline_jobs - List all jobs in a specific pipeline

  61. list_pipeline_trigger_jobs - List all trigger jobs (bridges) in a specific pipeline that trigger downstream pipelines

  62. get_pipeline_job - Get details of a GitLab pipeline job number

  63. get_pipeline_job_output - Get the output/trace of a GitLab pipeline job with optional pagination to limit context window usage

  64. create_pipeline - Create a new pipeline for a branch or tag

  65. retry_pipeline - Retry a failed or canceled pipeline

  66. cancel_pipeline - Cancel a running pipeline

  67. play_pipeline_job - Run a manual pipeline job

  68. retry_pipeline_job - Retry a failed or canceled pipeline job

  69. cancel_pipeline_job - Cancel a running pipeline job

  70. list_merge_requests - List merge requests globally or in a specific GitLab project with filtering options (project_id is now optional)

  71. list_milestones - List milestones in a GitLab project with filtering options

  72. get_milestone - Get details of a specific milestone

  73. create_milestone - Create a new milestone in a GitLab project

  74. edit_milestone - Edit an existing milestone in a GitLab project

  75. delete_milestone - Delete a milestone from a GitLab project

  76. get_milestone_issue - Get issues associated with a specific milestone

  77. get_milestone_merge_requests - Get merge requests associated with a specific milestone

  78. promote_milestone - Promote a milestone to the next stage

  79. get_milestone_burndown_events - Get burndown events for a specific milestone

  80. get_users - Get GitLab user details by usernames

  81. list_commits - List repository commits with filtering options

  82. get_commit - Get details of a specific commit

  83. get_commit_diff - Get changes/diffs of a specific commit

  84. list_group_iterations - List group iterations with filtering options

  85. upload_markdown - Upload a file to a GitLab project for use in markdown content

  86. download_attachment - Download an uploaded file from a GitLab project by secret and filename

  87. list_events - List all events for the currently authenticated user

  88. get_project_events - List all visible events for a specified project

  89. list_releases - List all releases for a project

  90. get_release - Get a release by tag name

  91. create_release - Create a new release in a GitLab project

  92. update_release - Update an existing release in a GitLab project

  93. delete_release - Delete a release from a GitLab project (does not delete the associated tag)

  94. create_release_evidence - Create release evidence for an existing release (GitLab Premium/Ultimate only)

  95. download_release_asset - Download a release asset file by direct asset path

  96. approve_merge_request - Approve a merge request (requires appropriate permissions)

  97. unapprove_merge_request - Unapprove a previously approved merge request

  98. get_merge_request_approval_state - Get merge request approval details including approvers (uses approval_state when available, otherwise falls back to approvals)

Testing 🧪

The project includes comprehensive test coverage including remote authorization:

# Run all tests (API validation + remote auth)
npm test

# Run only remote authorization tests
npm run test:remote-auth

# Run all tests including readonly MCP tests
npm run test:all

# Run only API validation
npm run test:integration

All remote authorization tests use a mock GitLab server and do not require actual GitLab credentials.

Available Tools

115 tools
approve_merge_requestC

Approve a merge request. Requires appropriate permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
shaNoThe HEAD of the merge request. Optional, but used to ensure the merge request hasn't changed since you last reviewed it
project_idNoProject ID or complete URL-encoded path to project
approval_passwordNoCurrent user's password. Required if 'Require user re-authentication to approve' is enabled in the project settings
merge_request_iidNoThe IID of the merge request to approve

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 of behavioral disclosure. It only says approval requires permissions, but doesn't mention whether approval is reversible, whether it can be applied multiple times, what side effects occur, or whether passing the sha prevents approving a stale merge request.

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 two short sentences with no filler, and the main action is front-loaded. It is concise, though arguably too sparse given the absence of annotations.

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 state-changing tool with no annotations and four parameters, the description lacks important context: when approval_password is required, how sha protects against stale approvals, and how approval differs from merge or unapprove. This is not enough for confident tool 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?

The input schema already describes all four parameters with 100% coverage, so the description doesn't need to repeat them. However, the description adds no value about how parameters like sha or approval_password affect tool behavior.

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 uses a specific action verb ('Approve') and a clear resource ('merge request'), so the agent knows what operation is intended. It doesn't explicitly differentiate itself from sibling tools like merge_merge_request or unapprove_merge_request, but the core action 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 guidance on when to use this tool rather than merge_merge_request, unapprove_merge_request, or get_merge_request_approval_state. The generic 'requires appropriate permissions' note doesn't help an agent select among these closely related siblings.

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

bulk_publish_draft_notesB

Publish all draft notes for a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

TDQS

B3.2/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 reveals only that publication is performed; it does not state effects on existing notes, whether the operation is reversible, permission requirements, or failure behavior. This is a thin disclosure for a mutating 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?

The description is a single sentence with no wasted words and front-loads the action and scope. It is concise without sacrificing the core message.

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 batch mutation with no output schema and no annotations, the description is thin: it omits return behavior, side effects, and any operational context such as whether all draft notes are published atomically or whether unauthenticated callers are permitted. The simple parameter schema is covered, but the broader call context is not.

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?

The input schema already documents both parameters with 100% coverage. The description adds no extra meaning beyond 'for a merge request', so the schema does the heavy lifting and the baseline 3 is 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 states a specific verb ('Publish'), a resource ('draft notes'), and a scope ('all' for a merge request). This distinguishes it from the sibling publish_draft_note, which handles a single note, and from list/get/update/delete variants.

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 call this tool versus publish_draft_note or how to prepare (e.g., ensuring draft notes exist, merge request state). The bulk behavior is implied by 'all', but no alternatives or exclusions are named.

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

cancel_pipelineB

Cancel a running pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or URL-encoded path
pipeline_idNoThe ID of the pipeline to retry

TDQS

B3.4/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 of behavioral disclosure, but it only states the action 'Cancel a running pipeline'. It does not mention side effects (e.g., canceling associated jobs), irreversibility, permission requirements, or whether the pipeline must be in a specific state, leaving a significant transparency gap for a mutating operation.

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 with no filler. Every word earns its place and directly conveys the operation and target.

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?

The schema lists zero required parameters and the description does not state that project_id and pipeline_id are necessary to identify the target. With no annotations or output schema and a misleading pipeline_id description, the definition leaves an agent without enough operational context to invoke the tool reliably.

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 baseline is 3. The description does not add parameter-level detail; notably, the schema's pipeline_id description incorrectly says 'The ID of the pipeline to retry', and the tool description only generically clarifies that the action is cancellation. It neither corrects nor deepens the parameter semantics.

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 uses a specific verb ('Cancel') and resource ('pipeline'), and the qualifier 'running' distinguishes this from retrying a pipeline or cancelling an individual job. It clearly differentiates the tool from siblings such as retry_pipeline and cancel_pipeline_job.

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 usage context is implied: use it when a pipeline is running and you want to stop it. However, there is no explicit guidance about when not to use it, such as 'for a single job, use cancel_pipeline_job', which would help disambiguate among the many pipeline-related siblings.

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

cancel_pipeline_jobB

Cancel a running pipeline job

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce cancellation of the job
job_idNoThe ID of the job
project_idNoProject ID or URL-encoded path

TDQS

B3.2/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 disclosing behavioral traits. It only states the basic action, 'Cancel a running pipeline job,' but does not explain side effects, whether cancellation is forceful or graceful, whether it can be undone, or how the API reacts to a non-running job. This is minimal coverage for a mutating operation.

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 with no filler. Every word contributes to identifying the operation and the resource it acts on. It is concise without being overloaded.

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?

The tool is a mutating operation with no annotations, no output schema, and three parameters none of which are marked required. The description does not clarify which parameters are needed for a successful call, what the force flag actually changes, or what response the agent should expect. This leaves significant gaps for an agent attempting to use the tool 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%, and the schema already documents force, job_id, and project_id with clear descriptions. The tool description adds no additional parameter meaning beyond what the schema provides, so the baseline of 3 is 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 uses a specific verb and resource: 'Cancel a running pipeline job.' It clearly identifies the target as a pipeline job, distinguishing it from sibling tools like cancel_pipeline, which cancels an entire pipeline. This is immediately actionable and 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?

The description gives no guidance on when to use this tool versus alternatives such as cancel_pipeline, retry_pipeline_job, or play_pipeline_job. It does not mention prerequisites, such as whether a job must be in a particular state, or what to do if the job is not running. Usage context is left entirely to the agent to infer 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_branchB

Create a new branch in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoSource branch/commit for new branch
branchYesName for the new branch
project_idNoProject ID or complete URL-encoded path to project

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 burden of disclosing behavior. It only states that a branch is created, without mentioning side effects, failure modes, permission requirements, default behavior when 'ref' is omitted, or whether the operation is idempotent. This is sparse for a mutating operation.

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 sentence with no unnecessary words. It is front-loaded and efficiently communicates the core action and target resource.

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 tool with no annotations and no output schema, this description is incomplete. It does not explain what happens if the branch already exists, whether 'ref' defaults to a sensible branch, or what the API returns on success. An agent would need external knowledge to invoke this reliably in edge cases.

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. The description adds no additional meaning about parameter relationships, defaults, or format details, so the baseline score of 3 is 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 states a specific verb ('Create') and a specific resource ('a new branch in a GitLab project'), making the tool's function immediately identifiable. It is semantically distinct from sibling tools like create_repository or push_files, so a model can understand what action this tool performs.

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 tool should be used when a new branch is needed within a GitLab project, but it gives no explicit guidance about when to prefer this tool over alternatives or when not to use it. There are no stated exclusions or comparison to sibling tools.

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

create_draft_noteC

Create a draft note for a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe content of the draft note
positionNoPosition when creating a diff note
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request
resolve_discussionNoWhether to resolve the discussion when publishing
in_reply_to_discussion_idNoThe ID of a discussion the draft note replies to

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 disclose that a draft note is unpublished until explicitly published, what side effects occur, whether authentication/permissions are needed, or how this interacts with discussions.

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 clear sentence with no filler. It is appropriately concise for a top-level purpose statement, though it could have added one clause about the draft/unpublished nature without becoming bloated.

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 the complex nested position schema, six parameters, and no annotations, a one-sentence description is insufficient. It omits operational context such as requiring project_id and merge_request_iid to target a merge request, and the draft-then-publish workflow.

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 parameters including nested position fields. The description adds no parameter-level meaning beyond the schema's rich details, which puts it at baseline.

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 'Create a draft note for a merge request' identifies a specific verb, resource, and target context. It is clear, though it does not explicitly contrast with related tools like create_merge_request_note or publish_draft_note.

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 guidance on when to use this tool versus alternatives such as create_merge_request_note, publish_draft_note, or bulk_publish_draft_notes. Without exclusions or context, an agent must infer the appropriate usage from the tool name alone.

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

create_issueB

Create a new issue in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesIssue title
labelsNoArray of label names
issue_typeNothe type of issue. One of issue, incident, test_case or task.issue
project_idNoProject ID or complete URL-encoded path to project
descriptionNoIssue description
assignee_idsNoArray of user IDs to assign
milestone_idNoMilestone ID to assign

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 burden of explaining behavior. It only restates the mutation ('create a new issue') without disclosing side effects, required permissions, return behavior, or how the target project is determined. This is minimal and leaves important behavioral details unstated.

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 with no filler. It communicates the core action efficiently and nothing in it 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 seven parameters, no annotations, and no output schema, this one-line description is not enough for an agent to fully understand behavior or expected results. The schema covers parameter definitions, but the description omits return values, project resolution, and operational 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 seven parameters thoroughly. The description adds no parameter-level nuance, but because the schema carries the full load, a baseline score of 3 is 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 uses a specific verb and resource: 'Create a new issue in a GitLab project.' This clearly distinguishes it from related siblings like create_issue_note, update_issue, and delete_issue, since it is explicitly about creating a brand-new 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?

There is no guidance on when to use this tool versus alternatives such as update_issue or create_issue_note. No prerequisites, exclusions, or selection conditions are mentioned; the only usage signal is the implied meaning of 'create.'

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

create_issue_noteB

Add a new note to an existing issue thread

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe content of the note or reply
issue_iidNoThe IID of an issue
created_atNoDate the note was created at (ISO 8601 format)
project_idNoProject ID or complete URL-encoded path to project
discussion_idNoThe ID of a thread

TDQS

B3.3/5.0
Behavior2/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 disclosure burden. It indicates a create/mutation action but offers no information on side effects, permissions, notification behavior, or whether a discussion_id is required to reply within a thread. For a write operation 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?

The description is a single sentence with no filler. It front-loads the verb and resource, making the core purpose immediately visible.

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 description plus the fully covered schema is minimally sufficient to invoke the tool for a basic issue note. However, the phrase 'issue thread' is slightly ambiguous between the issue's overall comment thread and a specific discussion thread, and the unusual optional created_at backdating behavior is not contextualized. The lack of usage differentiation also weakens completeness, though schema/name cover most of the mapping.

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 are already documented in the input schema. The description adds no extra parameter-level 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.

Purpose5/5

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

The description states a specific verb ('Add'), resource ('new note'), and target ('existing issue thread'), which clearly identifies this as the issue-note creation tool. This differentiates it from the many sibling note tools such as create_merge_request_note, create_draft_note, and generic create_note without needing to open 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 Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives, and there are many note-related siblings. It does not state exclusions (e.g., 'for merge request notes, use create_merge_request_note') or mention any conditions that would route an agent to a different tool.

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

create_labelA

Create a new label in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the label
colorYesThe color of the label given in 6-digit hex notation with leading '#' sign
priorityNoThe priority of the label
project_idNoProject ID or URL-encoded path
descriptionNoThe description of the label

TDQS

A3.5/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 of behavioral disclosure. It communicates a mutation ('create') but does not mention permissions, idempotency, duplicate-label behavior, side effects, or what the response will contain.

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 compact sentence with no wasted words. The action, object, and scope are front-loaded and immediately scannable.

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?

Adequate for a simple create operation given a fully described schema, but incomplete for a mutation tool with no annotations and no output schema. It does not clarify return values, required project context, or error conditions such as duplicate label names. The phrase 'in a project' hints at project_id, yet the schema does not mark project_id as required.

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. The description adds no additional parameter-level meaning, such as how name, color, priority, project_id, and description interact or which parameters are truly required in practice.

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 ('create'), a clear resource ('label'), and the scope ('in a project'). This makes it immediately distinguishable from sibling tools like update_label, delete_label, and list_labels despite not naming 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 usage context is implied by the action and resource: when the user wants to create a label, this is the tool. However, there is no explicit guidance about when to prefer it over update_label or delete_label, and no note that project_id is effectively needed to create a label in a project.

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

create_merge_requestB

Create a new merge request in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
draftNoCreate as draft merge request
titleYesMerge request title
labelsNoLabels for the MR
squashNoIf true, squash all commits into a single commit on merge.
project_idNoProject ID or complete URL-encoded path to project
descriptionNoMerge request description
assignee_idsNoThe ID of the users to assign the MR to
reviewer_idsNoThe ID of the users to assign as reviewers of the MR
source_branchYesBranch containing changes
target_branchYesBranch to merge into
target_project_idNoNumeric ID of the target project.
allow_collaborationNoAllow commits from upstream members
remove_source_branchNoFlag indicating if a merge request should remove the source branch when merging.

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 must carry the burden of behavioral disclosure. It reveals only that a new merge request is created, with no mention of side effects, required permissions, idempotency, or what happens if branches are invalid or an MR already exists. For a mutating operation, this is insufficient transparency.

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 one clean sentence with no filler or redundancy. It front-loads the core action and resource, which is ideal for quick scanning by an agent.

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?

Despite having 13 parameters, no output schema, and no annotations, the description offers only a single high-level sentence. It does not explain key context such as which parameters are essential, how to select between project_id and target_project_id, or what the result of creation looks like. For a tool of this complexity, the description is too sparse to be fully self-sufficient.

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. The description adds no additional parameter-level meaning, such as how project_id and target_project_id relate or how draft interacts with other settings. Reaching baseline 3 is appropriate since the schema carries the load.

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?

Uses a specific verb ('Create') and resource ('merge request') scoped to a GitLab project, making the core action immediately clear. It is also distinguishable from siblings such as update_merge_request and merge_merge_request because it explicitly says 'new', so an agent can tell creation apart from modification or merging.

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 update_merge_request, merge_merge_request, or create_draft_note. The description only states what it does, not when it should be preferred or which use cases are out of scope. Given the large set of merge-request-related siblings, this gap is material.

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

create_merge_request_discussion_noteB

Add a new discussion note to an existing merge request thread

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe content of the note or reply
created_atNoDate the note was created at (ISO 8601 format)
project_idNoProject ID or complete URL-encoded path to project
discussion_idNoThe ID of a thread
merge_request_iidNoThe IID of a merge request

TDQS

B3.3/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 of behavioral disclosure. It only states the action ('Add a new discussion note') and gives no information about side effects, required permissions, failure behavior, or whether the operation is reversible.

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 one concise, front-loaded sentence with no filler. Every word adds meaning, and it communicates the core action efficiently.

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 description is minimally adequate for a simple parameterized write operation, especially with full schema coverage. However, there is no output schema and no annotation coverage, and the description does not clarify which identifiers are required in practice to target an existing thread.

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 baseline of 3 applies. The description adds little beyond the schema, but the schema already documents body, created_at, project_id, discussion_id, and merge_request_iid clearly.

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 uses a specific verb ('Add') and a specific resource ('new discussion note to an existing merge request thread'). The phrase 'existing merge request thread' helps differentiate from create_merge_request_thread, though it does not explicitly name sibling tools.

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 context is implied: this is for replying to or adding a note within an existing merge request discussion thread. However, it does not explicitly state when to choose this tool over similar siblings like create_merge_request_note, create_merge_request_thread, or create_issue_note.

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

create_merge_request_noteC

Add a new note to a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe content of the note or reply
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

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 of behavioral disclosure. It communicates that this is a write operation ('Add'), but it does not mention required permissions, response behavior, whether the note is tied to a discussion, or any side effects. 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.

Conciseness4/5

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

The description is a single sentence with no filler or redundancy, and the core action is front-loaded. It is concise, though it omits usage and behavioral details that would make it more complete.

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 no annotations, no output schema, and a large sibling set with similar note-related tools, this description is too minimal. It does not clarify relationship to discussion notes, reply semantics, or required project context, leaving an agent under-informed 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?

The input schema has 100% description coverage for all three parameters, so the schema already documents body, project_id, and merge_request_iid. The description adds no additional parameter-level meaning, which fits the baseline of 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?

The description clearly states the action ('Add') and the resource ('a new note to a merge request'), making the tool's core purpose understandable. It does not explicitly distinguish this from closely related sibling tools like create_note or create_merge_request_discussion_note, but the verb+resource pairing is specific enough for a 4.

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 provided about when to use this tool versus alternatives such as create_merge_request_discussion_note or create_note. The description gives no context for choosing this over a sibling, so an 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.

create_merge_request_threadC

Create a new thread on a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe content of the thread
positionNoPosition when creating a diff note
created_atNoDate the thread was created at (ISO 8601 format)
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

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 disclosure burden, but it only states 'Create a new thread,' which implies mutation without explaining side effects. It does not mention whether position is needed for diff comments, how this thread relates to resolvable discussions, or what the endpoint returns.

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, focused sentence with no filler or unnecessary wording. However, it closely paraphrases the tool name and provides little beyond the obvious purpose, so it is concise but not especially information-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 tool with five parameters, a deeply nested position schema, no output schema, and no annotations, the description is too thin to be contextually complete. It does not explain the thread-versus-note distinction, when position is required for diff comments, or how the tool fits into the merge request discussion workflow.

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 parameters, including the complex position object and its line_range validation rules. The tool description itself adds no parameter-level meaning, but it does not need to because the schema is comprehensive.

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 uses a specific verb ('Create') and resource ('a new thread on a merge request'), making the core purpose clear. It does not explicitly contrast with sibling tools like create_merge_request_discussion_note or create_merge_request_note, but the qualifier 'new thread' partially distinguishes it from operations that add to an existing thread.

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 when to create a discussion note in an existing thread or use a general MR note. The nested schema implies it can be used for diff comments, but the description itself does not state any conditions, 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_milestoneB

Create a new milestone in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe title of the milestone
due_dateNoThe due date of the milestone (YYYY-MM-DD)
project_idNoProject ID or complete URL-encoded path to project
start_dateNoThe start date of the milestone (YYYY-MM-DD)
descriptionNoThe description of the milestone

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 burden of behavioral disclosure. Beyond stating that it creates a milestone, it does not mention side effects, permission requirements, idempotency, or the API response. For a write operation, this is thin transparency.

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 conveys the essential operation immediately and is appropriately concise for the scope 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 mutation tool with 5 parameters and no output schema, the description is too sparse. It omits return value expectations, whether project_id is truly optional, and any caveats about creating milestones. The schema helps with parameter details, but the lack of behavioral and contextual guidance leaves an agent under-informed.

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?

The input schema covers 100% of parameters with descriptions, including date formats, so the schema already documents parameter semantics. The tool description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is 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 states a specific verb, resource, and context: 'Create a new milestone in a GitLab project.' This clearly distinguishes it from sibling tools like list_milestones, edit_milestone, and delete_milestone, with no ambiguity about the operation performed.

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 provided on when to use this tool versus alternatives. It doesn't mention that edit_milestone is for updates, list_milestones is for queries, or any prerequisites such as needing an existing project. The only signal is the verb 'create,' which is implicit rather than explicit usage guidance.

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

create_noteC

Create a new note (comment) to an issue or merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesNote content
project_idNoProject ID or namespace/project_path
noteable_iidNoIID of the issue or merge request
noteable_typeYesType of noteable (issue or merge_request)

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 of behavioral disclosure. It confirms the operation is a create action and names the target, but it does not mention required permissions, whether the note is immediately published versus a draft, how the note body is handled, or what the tool returns. For a mutation tool with no 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?

The description is a single sentence that front-loads the action and target. It contains no filler or redundant wording; every word contributes to the core meaning. While it is minimal, it is appropriately concise for what it states.

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 four parameters, no output schema, no annotations, and a large sibling list, a one-sentence description is not enough. It never explains how to identify the target when project_id and noteable_iid are optional, whether this tool overlaps with create_issue_note/create_merge_request_note, or what the agent can expect in the response. An agent could invoke it incorrectly or select the wrong sibling.

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 baseline is 3; the schema already documents all parameters and the noteable_type enum. The description adds only the clarification that a note is a comment, which is helpful but does not meaningfully expand param semantics or clarify how the optional project_id and noteable_iid are used to identify the target.

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 uses a specific verb and resource: 'Create a new note (comment) to an issue or merge request.' It clearly identifies the action and target object types. However, it does not differentiate this generic tool from sibling tools like create_issue_note or create_merge_request_note, 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?

No guidance is given about when to use this tool versus the many sibling note tools, such as create_issue_note, create_merge_request_note, or create_draft_note. There are no conditions, exclusions, or alternative recommendations provided, leaving an agent to guess which tool fits a given scenario.

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 project

ParametersJSON Schema
NameRequiredDescriptionDefault
branchYesBranch to create/update the file in
contentYesContent of the file
commit_idNoCurrent file commit ID (for update operations)
file_pathYesPath where to create/update the file
project_idNoProject ID or complete URL-encoded path to project
previous_pathNoPath of the file to move/rename
commit_messageYesCommit message
last_commit_idNoLast known file commit ID

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of disclosing side effects; it only states that a file is created or updated and does not mention that a commit is made, how conflicts are handled, or what happens when the file already exists. It also does not clarify update-specific requirements such as commit_id/last_commit_id.

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 filler or repetition. It is appropriately brief, though it is too sparse to fully substitute for missing annotations and usage guidance.

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 eight parameters, no annotations, and no output schema, the description is too thin to be complete. It omits create-versus-update conditions, the meaning of the optional move/rename parameter, and the side effect of committing changes, so an agent has to infer critical call behavior from parameter names 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 the input schema already documents all eight parameters and their roles; the description adds no parameter-level detail beyond the name of the operation. Baseline 3 is appropriate because the description does not harm and the schema carries the semantics.

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 or update') and resource ('a single file in a GitLab project'), making the core action clear. It is distinguishable from reads like get_file_contents and wiki-file tools, though it does not explicitly differentiate itself from push_files.

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 provided on when to choose this tool over alternatives such as push_files, get_file_contents, or wiki page tools. The one-sentence description implies single-file use, but it gives no exclusions, prerequisites, or routing cues.

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

create_pipelineB

Create a new pipeline for a branch or tag

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesThe branch or tag to run the pipeline on
inputsNoInput parameters for the pipeline (key-value pairs for spec:inputs)
variablesNoAn array of variables to use for the pipeline
project_idNoProject ID or URL-encoded path

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 of behavioral disclosure. It reveals only that a pipeline is created, not whether the operation is asynchronous, what side effects occur, or what is returned. This is a significant gap for a mutating 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 10-word sentence front-loads the verb and key scoping. There is no redundant text or boilerplate. Some context is absent, but what is present is efficiently structured.

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 no output schema and no annotations, the description should explain what a successful response contains and any operational consequences, but it doesn't. It also omits the project context, although the schema does document project_id. The tool is minimally recognizable but not fully contextualized.

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?

The input schema has 100% description coverage, so the schema already documents ref, inputs, variables, and project_id. The description adds no parameter-level detail beyond restating that the ref is a branch or tag. Baseline 3 is therefore 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 clear verb ('Create') and a specific resource ('a new pipeline') scoped to a branch or tag. It distinguishes the tool from read-only pipeline siblings like get_pipeline or list_pipelines, though it doesn't name them. Minor gap: no mention of project context.

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 tool is used when a new pipeline run should be triggered on a branch or tag, but it gives no explicit when-to-use or when-not-to-use guidance. It does not compare against sibling tools such as retry_pipeline or cancel_pipeline. This 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.

create_releaseC

Create a new release in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoIf a tag specified in tag_name doesn't exist, the release is created from ref and tagged with tag_name. It can be a commit SHA, another tag name, or a branch name.
nameNoThe release name
assetsNoAn array of assets links
tag_nameYesThe tag where the release is created from
milestonesNoThe title of each milestone the release is associated with. GitLab Premium customers can specify group milestones.
project_idNoProject ID or URL-encoded path
descriptionNoThe description of the release. You can use Markdown.
released_atNoDate and time for the release. Defaults to the current time. Expected in ISO 8601 format (2019-03-15T08:00:00Z). Only provide this field if creating an upcoming or historical release.
tag_messageNoMessage to use if creating a new annotated tag

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 burden of behavioral disclosure. It only says 'Create a new release' and does not mention important behaviors such as creating a new tag when tag_name does not exist, the relationship between ref and tag_name, authentication requirements, or side effects. For a mutating tool, this is a significant transparency 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?

The description is a single short sentence with no wasted words and the core action is front-loaded. It is efficient, though it is arguably too terse for a tool with nine parameters and nested asset objects. Still, conciseness itself is handled well.

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 complex creation tool with nine parameters, nested assets, no output schema, and no annotations, yet the description provides almost no operational context. It omits the key behavior that a release can be created from a ref when the tag does not exist, and it does not clarify how the tool fits into the broader release lifecycle. The schema documents parameters well, but the description leaves important behavioral context uncovered.

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 well documented in the input schema. The description itself adds no parameter-level meaning beyond what the schema provides. This meets the baseline but does not exceed it.

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 clearly states the action and resource: 'Create a new release in a GitLab project.' It identifies the primary purpose and, combined with the tool name, distinguishes it from siblings like update_release, delete_release, get_release, and list_releases. It is not a tautology, but it is brief and does not explicitly contrast with these 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?

The description gives no guidance on when to use this tool versus alternatives such as update_release, create_release_evidence, or delete_release. There are no scenarios, prerequisites, or exclusions mentioned. Usage is only implicitly derivable from the tool name and the single-line description.

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

create_release_evidenceB

Create release evidence for an existing release (GitLab Premium/Ultimate only)

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_nameYesThe Git tag the release is associated with
project_idNoProject ID or URL-encoded path

TDQS

B3.2/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of explaining side effects and behavioral details. It only says 'Create release evidence' and adds a licensing constraint; it does not disclose what evidence is generated, whether it mutates the release, any permissions needed, or expected side effects.

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 focused sentence with no filler. It front-loads the core action and includes the key licensing caveat without unnecessary elaboration.

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?

The tool has a simple two-parameter schema and no output schema, but it still lacks essential context about what release evidence is, when it should be generated, and what happens when it is created. The description is minimal and leaves the agent to infer important behavioral and usage details.

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 both parameters (tag_name and project_id) are already described in the schema. The description adds no additional parameter-level meaning, so the baseline score of 3 is 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 uses a specific verb and resource: 'Create release evidence' for an existing release. This clearly differentiates the tool from nearby siblings like create_release, update_release, and list_releases by focusing on evidence rather than release management 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?

No guidance is given about when to use this tool versus alternatives, such as after creating a release or when needing evidence snapshots. The only contextual note is the GitLab Premium/Ultimate licensing restriction, which does not help an agent choose among sibling tools.

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

create_repositoryB

Create a new GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRepository name
visibilityNoRepository visibility level
descriptionNoRepository description
initialize_with_readmeNoInitialize with README.md

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 of behavioral disclosure. It only says 'Create' and does not mention side effects such as namespace selection, default branch behavior, duplicate-name handling, or required permissions. 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.

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or redundant wording. It states the verb and object immediately, which is ideal for quick agent scanning.

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 create tool with fully documented parameters, this is minimally adequate. However, with no output schema and no annotations, the agent is left without information about what a successful response looks like, whether the operation is idempotent, or which namespace receives the project. These gaps prevent it from being 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 four parameters: name, visibility, description, and initialize_with_readme. The description adds no additional parameter-level meaning, but the baseline of 3 applies because the schema handles 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 clearly states the action ('Create') and the resource ('a new GitLab project'), making the tool's purpose unambiguous. It does not explicitly differentiate it from related creation or mutation tools like fork_repository or create_or_update_file, so it misses the top tier for sibling 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?

The description gives no guidance on when to use this tool versus alternatives, such as forking an existing repository or pushing files to an already-created project. It also does not mention prerequisites like authentication, namespace, or ownership, so the agent must infer usage context from the tool name alone.

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

create_wiki_pageB

Create a new wiki page in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the wiki page
formatNoContent format, e.g., markdown, rdoc
contentYesContent of the wiki page
project_idNoProject ID or URL-encoded path

TDQS

B3.3/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 of behavioral disclosure, but it only states the action. It does not mention permission requirements, behavior if a page with the same title already exists, or whether the operation is reversible. Mutation is implied but no additional behavioral context is provided.

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 with no redundant words. Each phrase adds useful scope: 'Create', 'wiki page', and 'GitLab project'. It is appropriately concise for the simplicity of the operation.

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 covers all parameter semantics and the tool is structurally simple, making the brief description minimally viable. However, there are no annotations or output schema, and the description leaves gaps around prerequisites, return value, and conflict behavior.

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. The description adds no parameter-level details, but the schema handles the semantics, so the 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?

The description names the specific operation ('Create'), the resource ('new wiki page'), and the scope ('in a GitLab project'). It is immediately distinguishable from sibling wiki tools like get_wiki_page, update_wiki_page, and delete_wiki_page.

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 about when to use this tool versus the sibling wiki tools, such as whether to use update_wiki_page for modifying an existing page. The agent must infer usage entirely from the tool name and operation described.

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

delete_draft_noteB

Delete a draft note

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
draft_note_idNoThe ID of the draft note
merge_request_iidNoThe IID of a merge request

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 conveys that the operation is destructive only through the verb 'Delete', but it does not state whether deletion is irreversible, whether confirmation is required, or what side effects may occur on the associated merge request or other related resources.

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 extremely concise and front-loaded, with no wasted words. While the brevity sacrifices useful context, it is appropriately sized for a simple delete operation and every word contributes to the core purpose.

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?

There is no output schema and no annotations, and the description does not explain the draft-note lifecycle or the fact that draft notes belong to merge requests. Despite the schema showing merge_request_iid, the description alone does not give an agent enough context to confidently understand when and how to use this tool versus related draft-note tools.

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: project_id, draft_note_id, and merge_request_iid. The description adds no additional parameter-level meaning, which warrants the baseline score of 3.

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 ('Delete') and a specific resource ('a draft note'), which clearly identifies the operation. It distinguishes itself from sibling tools like delete_wiki_page, publish_draft_note, and update_draft_note by combining the exact resource and action.

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 provided about when to use this tool versus alternatives such as publish_draft_note, bulk_publish_draft_notes, or update_draft_note. There is no mention of prerequisites, intended workflow, or exclusions, so an agent must rely entirely on naming conventions.

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

delete_issueA

Delete an issue from a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_iidNoThe internal ID of the project issue
project_idNoProject ID or URL-encoded path

TDQS

A3.5/5.0
Behavior3/5

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

The description clearly states the destructive action, but with no annotations it carries the full disclosure burden and does not mention irreversibility, permissions, effect on linked notes/comments, or confirmation/return behavior. It names what is destroyed without elaborating consequences.

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 short sentence with no filler; every word carries meaning, and the action/resource pair is front-loaded.

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 delete, the description plus schema is nearly sufficient, but it does not address the fact that neither parameter is required, nor what the agent should expect after deletion. It is minimally adequate but leaves behavioral 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 schema already documents issue_iid and project_id. The description adds a project context consistent with project_id but no extra semantic detail, 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.

Purpose5/5

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

The description uses a specific verb ('Delete') and resource ('an issue from a GitLab project'), which clearly identifies the operation and distinguishes it from related siblings like update_issue, get_issue, or delete_issue_link.

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 choose this tool instead of related issue operations. There is no mention of prerequisites, alternatives, or contexts where deletion should be avoided, so an 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.

delete_labelB

Delete a label from a project

ParametersJSON Schema
NameRequiredDescriptionDefault
label_idNoThe ID or title of a project's label
project_idNoProject ID or URL-encoded path

TDQS

B3.2/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 only says 'Delete a label from a project' and does not mention irreversibility, required permissions, effects on associated issues or milestones, or whether the delete is soft or hard.

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 sentence with no filler words, front-loading the verb and object. It earns its place by being maximally compact.

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?

Although the tool is simple and the schema describes both parameters, the description does not indicate that both are required, nor does it explain consequences of deletion. With no annotations and no output schema, an agent has insufficient context to call this destructive tool with confidence.

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 has a clear description, so the schema already does the heavy lifting. The description adds the project scope but no additional parameter 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 action (delete) on a specific resource (label) within a scope (project). It is immediately distinguishable from the many sibling delete tools because it uniquely targets labels.

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 guidance on when to use this tool versus alternatives like create_label or update_label, and it does not mention any prerequisites or exclusions. The usage is only implied by the action itself, with no additional context.

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

delete_merge_request_discussion_noteC

Delete a discussion note on a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idNoThe ID of a thread note
project_idNoProject ID or complete URL-encoded path to project
discussion_idNoThe ID of a thread
merge_request_iidNoThe IID of a merge request

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 of disclosing behavior, but it only restates the action 'Delete'. It does not mention that the operation is irreversible, what permissions are required, or any side effects on the discussion thread.

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 contains no filler or redundancy. For a simple delete operation, this level of brevity is appropriate.

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?

The tool is a mutation with no annotations and no output schema, and the required parameter relationships are not stated; the schema also lacks a required array. An agent would benefit from context such as 'this deletes a note within an existing discussion thread' and the need to supply all four identifiers.

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 explains all four parameters. The description adds no additional meaning about how discussion_id, note_id, project_id, and merge_request_iid combine to identify the target note.

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 the verb 'Delete' and the resource 'discussion note on a merge request', so an agent can tell what object is affected. It is clear, though it does not explicitly contrast this with the sibling delete_merge_request_note, so it falls short of fully distinguishing sibling tools.

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 about when to use this tool instead of delete_merge_request_note, update_merge_request_discussion_note, or other note-related tools. The intended context of notes inside a discussion thread must be inferred from the name and description rather than stated.

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

delete_merge_request_noteC

Delete an existing merge request note

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idNoThe ID of a thread note
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

TDQS

C2.3/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 burden, but it discloses nothing beyond the destructiveness implied by the verb "delete." It does not state that the operation is irreversible, that permissions are required (e.g., only the note author can delete), or what happens on failure (404/403); the word "existing" is the only behavioral hint, implying deletion of a missing note fails.

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?

The sentence is tight, grammatical, and front-loaded with the verb, with zero filler, so the structure itself is fine. However, the brevity is under-specification rather than disciplined editing — the description is too short to handle the sibling-disambiguation task it faces.

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, 3-parameter operation with no annotations and no output schema, too much essential context is missing: which sibling to use for threaded notes, which parameters are actually required, and what success/failure looks like. The schema at least documents parameter names, which keeps this above a 1, but the description is far from adequate 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 each parameter is already documented and the baseline is 3; the description adds no parameter-level meaning. It also does not compensate for the schema marking all three parameters as optional even though a delete call needs all of them, nor does it clarify the ambiguous phrase "ID of a thread note" used for note_id.

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

Purpose2/5

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

The description "Delete an existing merge request note" is effectively the tool name expanded into a sentence; it adds only the qualifier "existing" and no differentiating detail. It fails the most important test here: it does not distinguish this tool from the near-twin sibling delete_merge_request_discussion_note, whose plain-language meaning is nearly identical.

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 its alternatives. It never mentions that a note inside a discussion thread should go through delete_merge_request_discussion_note, nor does it contrast with delete_draft_note for unpublished notes, and it omits preconditions such as author-only deletion. With a sibling this similar, the absence of selection criteria is a serious gap.

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

delete_milestoneA

Delete a milestone from a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
milestone_idNoThe ID of a project milestone

TDQS

A3.5/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 of behavioral disclosure. It states 'Delete' but does not mention that deletion is destructive, permanent, or what happens to references to the milestone. It also omits permission requirements and possible cascade effects.

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, concise sentence with no filler. The action and object are front-loaded, and every word contributes to understanding the tool's purpose.

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, with two fully documented parameters, so basic invocation is well-defined. However, with no annotations and no output schema, the description omits what happens on success or failure, whether the operation is irreversible, and any permissions or preconditions needed.

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 milestone_id are already explained in the input schema. The description adds no additional parameter meaning, which is acceptable given the full schema coverage, so the 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?

The description states a specific verb ('Delete') and resource ('a milestone from a GitLab project'), making the tool's purpose immediately clear. It is easily distinguished from sibling commands like get_milestone, create_milestone, edit_milestone, or promote_milestone.

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 intended use is implied by the action 'Delete a milestone', but the description gives no explicit when-to-use guidance, prerequisites, or pointers to alternatives such as edit_milestone for modifications or list_milestones for finding milestone IDs. Basic usage context is clear, but no exclusions or routing are provided.

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

delete_releaseA

Delete a release from a GitLab project (does not delete the associated tag)

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_nameYesThe Git tag the release is associated with
project_idNoProject ID or URL-encoded path

TDQS

A4.1/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 burden of behavior disclosure. It does reveal one important behavioral trait—deleting the release leaves the tag intact—which prevents a common misconception. Still, it omits other behavioral details like irreversibility, permission requirements, or effects on release assets, so it is only partially transparent.

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 sentence with the action front-loaded and the key exception neatly enclosed in parentheses. Every word earns its place, with no filler, redundancy, or unnecessary detail.

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

Completeness5/5

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

For a simple 2-parameter delete operation with no output schema or nested objects, the description plus the schema provides everything an agent needs: the target resource, the required tag_name, the optional project_id, and the important boundary that the tag is preserved. No additional complexity demands more detail.

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 tag_name and project_id already explained in the input schema. The description adds no additional parameter-specific meaning beyond what the schema provides, so the baseline score of 3 is 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 uses a specific verb ('Delete') and a specific resource ('a release from a GitLab project'), and adds a clarifying boundary: '(does not delete the associated tag)'. This clearly distinguishes it from sibling release operations like create_release, update_release, and get_release, as well as other delete tools such as delete_wiki_page.

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

Usage Guidelines4/5

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

The parenthetical 'does not delete the associated tag' provides explicit context for when this tool is appropriate: when the release must be removed but the tag should remain. However, it does not explicitly name alternative tools or state 'use X instead when...', so it falls short of full routing guidance.

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

delete_wiki_pageB

Delete a wiki page from a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesURL-encoded slug of the wiki page
project_idNoProject ID or URL-encoded path

TDQS

B3.3/5.0
Behavior2/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 of behavioral disclosure. It conveys the core destructive effect but does not mention that deletion is likely permanent, any permission requirements, or impacts on related wiki content.

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 concise sentence that front-loads the operation and scope. It contains no filler or redundant information.

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 tool with no output schema, the description plus schema is nearly sufficient for making the call. However, the lack of annotations and any behavioral caveats about destructiveness leaves a meaningful gap in the agent's understanding of 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%, with both 'slug' and 'project_id' already described in the input schema. The description adds no additional parameter-level meaning, so the baseline score of 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?

The description clearly states the operation ('Delete'), the resource ('a wiki page'), and the scope ('from a GitLab project'). This makes it straightforward to distinguish from sibling tools like get_wiki_page, create_wiki_page, and update_wiki_page.

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 provided about when to use this tool versus alternatives. The agent must infer that this is the deletion counterpart to create_wiki_page/update_wiki_page; there are no explicit conditions or exclusions.

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

download_attachmentA

Download an uploaded file from a GitLab project by secret and filename. Image files (png, jpg, gif, webp, svg, bmp, ico) are returned inline as base64 image content so the AI can view them directly. Non-image files are saved to disk. Use local_path to force saving image files to disk instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
secretYesThe 32-character secret of the upload
filenameYesThe filename of the upload
local_pathNoLocal path to save the file (optional, defaults to current directory)
project_idYesProject ID or URL-encoded path of the project

TDQS

A4.3/5.0
Behavior4/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 honestly states that image files return as base64 content, non-image files are saved to disk, and local_path overrides the default behavior. It does not detail auth requirements or overwrite behavior, but the core side effects are clear.

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 three concise sentences with no filler. It front-loads the primary action, then explains the key behavioral branches, and ends with the override option. Every sentence 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?

The description explains the input mechanism and the main behavioral outcomes, but with no output schema, it never states what the tool returns for non-image files once they are saved to disk (e.g., a path or confirmation). This is a meaningful gap for an agent that needs to use the downloaded file later.

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?

Schema coverage is 100%, so the baseline is 3, and the description adds meaningful parameter behavior: local_path can force saving image files to disk. It also clarifies that secret and filename are the identifying keys for the upload, adding context beyond the raw schema field names.

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: 'Download an uploaded file from a GitLab project by secret and filename.' It also clarifies the unique mechanism (secret-based uploads) and distinguishes image from non-image handling, which separates it from sibling tools like download_release_asset or download_job_artifacts.

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

Usage Guidelines4/5

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

The description clearly explains when files are returned inline versus saved to disk, and explicitly tells the agent to use local_path when saving image files to disk is desired. It does not explicitly name alternative tools or state when not to use this tool, so it falls short of a 5.

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

download_job_artifactsA

Download the entire artifact archive (zip) for a job to a local path. Returns the saved file path.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNoThe ID of the job
local_pathNoLocal directory to save the artifact archive (defaults to current directory)
project_idNoProject ID or URL-encoded path

TDQS

A3.8/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 disclosure burden. It clearly states the operation, the object being downloaded, the destination, and the return value. However, it does not mention behaviors like overwriting existing files, creating directories, or failure behavior when the job has no artifacts.

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 sentence conveys the action, resource, destination, and return value with no filler. The most important scoping detail ('entire artifact archive') is front-loaded.

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 straightforward download tool with fully documented parameters, the description is largely complete: it explains the scope of the download and the return value. Minor gaps remain around alternative-tool routing and edge-case behavior, but nothing essential is missing for basic 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 three parameters. The description adds that the download is a zip archive and that local_path is the destination, but it does not meaningfully extend parameter semantics beyond the schema.

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 uses a specific verb ('Download'), a concrete resource ('entire artifact archive (zip) for a job'), and a clear destination ('local path'), while also stating the return value. The phrase 'entire artifact archive' distinguishes it from sibling tools like get_job_artifact_file or list_job_artifacts.

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 when to use the tool—when you need the whole job artifact archive as a zip—but it does not explicitly compare it to alternatives such as get_job_artifact_file or list_job_artifacts. There is no when-not-to-use guidance.

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

download_release_assetC

Download a release asset file by direct asset path

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_nameYesThe Git tag the release is associated with
project_idNoProject ID or URL-encoded path
direct_asset_pathYesPath to the release asset file as specified when creating or updating its link

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 must carry the behavioral burden, but it only says 'Download' without disclosing the response format (e.g., file contents vs. URL), whether authentication or project context is required, or any relevant limits. It adds almost no behavioral context beyond the tool's name.

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, grammatically compact sentence with no filler. The verb and key distinguishing detail ('direct asset path') are front-loaded, making the purpose immediately scannable.

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 download endpoint with no output schema and no annotations, the description should clarify what the caller receives (e.g., binary file content) and any prerequisites. The current description is too minimal to be fully actionable beyond the schema, particularly since project_id is optional in the schema but may be needed for the actual API call.

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?

The input schema has 100% coverage, so the parameters are already described structurally. The description's phrase 'direct asset path' reinforces the purpose of direct_asset_path but doesn't add meaningful semantics beyond what the schema already provides. 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 uses a specific verb ('Download') and resource ('release asset file') and specifies the mechanism ('by direct asset path'), so an agent can understand the core action. However, it doesn't explicitly distinguish itself from sibling download tools like download_job_artifacts or download_attachment, leaving some differentiation to the tool name and context.

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 sibling downloads or release-related tools such as get_release, list_releases, or download_job_artifacts. The description only states the action and leaves the selection criteria entirely implicit.

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

edit_milestoneC

Edit an existing milestone in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoThe title of the milestone
due_dateNoThe due date of the milestone (YYYY-MM-DD)
project_idNoProject ID or complete URL-encoded path to project
start_dateNoThe start date of the milestone (YYYY-MM-DD)
descriptionNoThe description of the milestone
state_eventNoThe state event of the milestone
milestone_idNoThe ID of a project milestone

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 of behavioral disclosure for a mutating tool. It discloses nothing about partial-update semantics (all 7 params are optional), the side effects of state_event close/activate, whether the milestone must already exist, or error behavior. This is a significant transparency gap for a write 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 seven-word sentence with zero filler, front-loaded with the action verb and resource. It is efficiently minimal, though arguably too sparse for a 7-parameter mutation tool; that under-specification is penalized under contextual completeness rather than conciseness.

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 7 parameters, a state-transition enum (close/activate), no annotations, and no output schema, a single sentence leaves critical information undisclosed: whether omitted parameters are left unchanged, what state_event does, and what the response looks like on success or failure. The description is not sufficient for confident invocation by an agent.

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 already has a clear description in the schema, so the baseline of 3 applies. The tool description itself adds no parameter-level meaning beyond the generic 'edit' verb, but no compensation is needed because the schema fully documents all 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?

The description uses a specific verb ('edit') with a clear resource ('milestone') and scope ('GitLab project'). The phrase 'existing milestone' implicitly contrasts with create_milestone, delete_milestone, and the read-only milestone siblings, but it never names them or explicitly differentiates behavior, leaving some 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?

No guidance is given on when to use this tool versus create_milestone, delete_milestone, or get_milestone. With seven milestone-related siblings in the toolset, the description provides no context, exclusions, or alternative routing — the agent must infer the use case entirely from the word 'edit'.

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

fork_repositoryB

Fork a GitLab project to your account or specified namespace

ParametersJSON Schema
NameRequiredDescriptionDefault
namespaceNoNamespace to fork to (full path)
project_idNoProject ID or complete URL-encoded path to project

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 bears the full burden of behavioral disclosure. 'Fork a GitLab project' conveys the basic mutation but does not disclose GitLab-specific behaviors such as idempotency, what happens if the namespace is invalid, permissions required, or whether forking is synchronous. There is no contradiction, but meaningful transparency is missing.

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 with no filler. Every word earns its place for a simple 2-parameter 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 description covers the essential action and destination, making the tool minimally callable. However, with no annotations, no output schema, and no usage guidance, details like default namespace behavior when namespace is omitted and error/response expectations are left unspecified.

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?

The input schema already documents both parameters with descriptions, so the baseline is 3. The description's mention of 'account or specified namespace' loosely reinforces the namespace parameter but adds no syntax, default behavior, or format details 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 states a specific verb ('Fork'), the resource ('GitLab project'), and the destination ('your account or specified namespace'), making the core purpose clear. However, it does not explicitly distinguish itself from sibling tools like create_repository or get_project, so it stops short of full differentiation.

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 about when to choose fork_repository over alternatives such as create_repository, nor any mention of prerequisites like permissions on the target namespace. The description implies usage but does not state conditions or exclusions.

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

get_branch_diffsB

Get the changes/diffs between two branches or commits in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesThe target branch or commit SHA to compare to
fromYesThe base branch or commit SHA to compare from
straightNoComparison method: false for '...' (default), true for '--'
project_idNoProject ID or complete URL-encoded path to project
excluded_file_patternsNoArray of regex patterns to exclude files from the diff results. Each pattern is a JavaScript-compatible regular expression that matches file paths to ignore. Examples: ["^vendor/", "^test/mocks/", "\.spec\.ts$", "package-lock\.json"]

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 of behavioral disclosure. It only says 'Get' and names the object, without stating read-only safety explicitly, what the returned diff contains, comparison direction semantics, or any project-context requirements beyond what the schema already provides.

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 tight sentence that front-loads the verb and object. There is no filler, repetition, or unnecessary detail.

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 purpose and all parameters are adequately documented, making a basic invocation possible. However, with no annotations and no output schema, the description leaves gaps around when project_id may be needed and what the returned diff payload looks like, making it minimally sufficient 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?

The input schema covers all 5 parameters with descriptive text, including the nuanced 'straight' comparison method and excluded_file_patterns examples, so the baseline is 3. The description only reinforces the from/to pairing and adds no meaning 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 states a clear action ('Get') and a specific resource ('changes/diffs between two branches or commits in a GitLab project'), so an agent can infer this tool is for comparing refs. It does not explicitly contrast with sibling tools like get_commit_diff or get_merge_request_diffs, so it stops just short of full differentiation.

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 guidance about when to use this tool versus the many diff-related siblings, nor any noted exclusions or prerequisites. The only usage signal is implied by the purpose statement, which is not enough to reliably route an agent among tools like get_commit_diff and get_merge_request_diffs.

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

get_commitC

Get details of a specific commit

ParametersJSON Schema
NameRequiredDescriptionDefault
shaYesThe commit hash or name of a repository branch or tag
statsNoInclude commit stats
project_idNoProject ID or complete URL-encoded path to project

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 only says 'Get details' and does not disclose whether the operation is strictly read-only, what fields are returned, how errors are handled, or how optional parameters affect the response. The agent lacks important 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.

Conciseness5/5

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

The description is a single concise sentence with no filler. It front-loads the core action and resource clearly, making it easy for an agent to scan and process quickly.

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 output schema and no annotations, the description provides insufficient context about what 'details' includes or how to expect the response. The agent cannot determine the return shape or whether stats is included by default, making this incomplete for a tool with three parameters.

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 sha, stats, and project_id are already documented in the schema. The description adds no additional semantic meaning or relationships between parameters, so the baseline score of 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 clear action and resource: 'Get details of a specific commit.' It is not a tautology and the agent can tell it is a retrieval operation. However, it does not differentiate from closely related siblings like get_commit_diff or list_commits, so the specific meaning of 'details' is ambiguous.

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 guidance about when to use this tool versus alternatives such as get_commit_diff or list_commits. It does not mention contexts, exclusions, or preferred conditions, so the agent has 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_commit_diffC

Get changes/diffs of a specific commit

ParametersJSON Schema
NameRequiredDescriptionDefault
shaYesThe commit hash or name of a repository branch or tag
full_diffNoWhether to return the full diff or only first page (default: false)
project_idNoProject ID or complete URL-encoded path to project

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 of behavioral disclosure. It implies a read operation via 'Get' but does not explain the return format, whether the diff is truncated by default, what happens for empty diffs, or any permissions required. This thin description leaves an agent without critical behavioral expectations.

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, scannable sentence with no filler words. The phrase 'changes/diffs' is mildly redundant and could be more precise, but overall it is efficiently structured and front-loaded.

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 output schema and no annotations, the description should explain what a caller actually receives—such as a list of file changes, patch text, or stats—and how full_diff affects the result. The current text is too sparse to fully prepare an agent, especially given the large number of diff-related sibling tools.

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?

The input schema fully describes all three parameters with meaningful details, so the baseline is 3. The description itself adds little parameter-level meaning and even slightly contradicts the schema by implying sha is only a commit hash when the schema explicitly allows branch or tag names.

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 uses a clear verb ('Get') and identifies the resource ('changes/diffs of a specific commit'), so an agent can tell it fetches diff-related data for a single commit. It doesn't explicitly differentiate from sibling tools like get_branch_diffs or get_merge_request_diffs, and 'changes/diffs' is a bit redundant, but the core 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?

There is no guidance on when to use this tool versus alternatives such as get_branch_diffs, get_commit, or get_merge_request_diffs. The description also narrows sha to 'a specific commit' while the schema permits branch or tag names, which could mislead an agent about acceptable inputs.

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

get_deploymentB

Get details of a specific deployment in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or URL-encoded path
deployment_idNoThe ID of the deployment

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 of behavioral disclosure. 'Get details' implies a read operation, but the description does not state side-effect-freedom, access/permission requirements, error behavior for missing deployments, or what the returned details include.

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, focused sentence with no redundant words or filler. It is front-loaded with the action and resource, making it easy for an agent to parse quickly.

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 description plus the fully documented schema provides a minimally viable definition. However, there is no output schema and the description does not clarify what 'details' includes, nor does it note that both parameters are effectively needed to identify a specific deployment.

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 documented as 'Project ID or URL-encoded path' and deployment_id as 'The ID of the deployment'. The description adds no additional parameter meaning beyond what the schema already provides, so the baseline score of 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 clear action ('Get details') and a specific resource ('a specific deployment in a GitLab project'), which makes the tool's purpose immediately understandable. It does not explicitly contrast itself with sibling list_deployments, but the phrase 'specific deployment' conveys the distinction between fetching one deployment versus listing many.

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 guidance on when to use this tool over alternatives such as list_deployments or get_environment. Usage is only implied by the tool name and the idea of getting a 'specific' deployment; there are no explicit conditions, prerequisites, or exclusions.

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

get_draft_noteB

Get a single draft note from a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
draft_note_idNoThe ID of the draft note
merge_request_iidNoThe IID of a merge request

TDQS

B3.3/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 disclosure burden. 'Get' implicitly signals a read-only operation, but the description does not disclose error behavior (e.g., 404 when the draft note is not found), authentication requirements, or how draft notes relate to the merge request lifecycle. For a no-annotation tool, this is thin 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 10-word sentence that states the operation with zero filler. The core scoping ('single draft note from a merge request') is front-loaded and 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?

The tool is a simple get-by-ID operation and all parameters are documented in the schema, so a brief description is acceptable. However, with no annotations and no output schema, the description does not clarify the return value, failure semantics, or how a draft note differs from a regular merge request note. 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 all three parameters (project_id, draft_note_id, merge_request_iid) already described in the input schema. The tool description adds no parameter-level information, but per the baseline rule, the schema does the heavy lifting and a 3 is 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 uses a specific verb ('Get'), a specific resource ('draft note'), and scopes it to 'a merge request.' The modifier 'single' clearly distinguishes it from the sibling list_draft_notes, so an agent can tell them apart without opening schema definitions.

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 guidance is given on when to use this tool versus alternatives such as list_draft_notes (for multiple drafts), get_merge_request_note (for published notes), or publish_draft_note. The word 'single' only weakly implies a contrast with listing. An agent must infer the usage context entirely from the tool name and sibling list.

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

get_environmentA

Get details of a specific environment in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or URL-encoded path
environment_idNoThe ID of the environment

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description must carry the safety and behavior burden. 'Get details' clearly signals a read-only retrieval operation, which is transparent about the main behavior. However, it does not mention potential errors, authentication needs, rate limits, or what the returned details contain.

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 one short, focused sentence with no redundant wording. It is concise and front-loaded with the core action and 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?

For a simple read tool with two fully documented parameters, the description is mostly adequate. However, there is no output schema and the description does not clarify what 'details' are returned or how this differs from list_environments. An agent could invoke it correctly but might not know whether it returns full environment data, status, or only a subset.

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 explains both project_id and environment_id. The description adds no additional parameter semantics beyond the phrase 'specific environment,' which weakly reinforces the need for environment_id. Baseline 3 applies because the schema does the heavy lifting.

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 uses a specific verb-resource combination: 'Get details of a specific environment in a GitLab project.' It clearly distinguishes this from the sibling list_environments tool by emphasizing 'specific environment' versus listing environments. An agent can accurately identify what this tool does without guessing.

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 explicit guidance on when to use this tool versus alternatives like list_environments. It only implies usage by saying 'specific environment,' which suggests the caller should already have an environment ID. No prerequisites, exclusions, or alternative routing are provided.

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

get_file_contentsC

Get the contents of a file or directory from a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoBranch/tag/commit to get contents from
pathNoAlias of file_path
file_pathNoPath to the file or directory. Takes precedence over 'path' when both are provided
project_idNoProject ID or URL-encoded path (optional; falls back to env)

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 burden of behavioral disclosure. It indicates a read operation, but does not describe return format, error conditions, size limits, authentication requirements, or how directory contents are presented. The description adds little beyond the basic purpose.

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 concise sentence with no wasted words, and it front-loads the core purpose. It is appropriately terse, though it is sparse enough that some behavioral context is missing; that shortfall is more relevant to other dimensions.

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 four optional parameters, no annotations, no output schema, and a large set of sibling tools, the description is too minimal to fully guide correct invocation. It does not clarify when it should be preferred over related tools, how directory versus file contents are returned, or what the agent should expect from the response.

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 parameters are already fully documented. The description does not add meaningful information about parameter interactions, like the precedence of file_path over path or the use of ref, beyond what the schema already states. A baseline score of 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 clearly states that the tool retrieves contents of a file or directory from a GitLab project, identifying both the action and the target resource. However, it does not explicitly distinguish itself from the similar sibling tool get_repository_tree, which also handles repository structure/content retrieval.

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 about when to use this tool instead of alternatives like get_repository_tree or how it differs from them. The description provides no context on preferred use cases, exclusions, or fallback behavior.

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

get_issueA

Get details of a specific issue in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_iidNoThe internal ID of the project issue
project_idNoProject ID or URL-encoded path

TDQS

A3.7/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. 'Get details' signals a read-only retrieval and is not misleading, but it does not mention response format, error behavior, permission needs, or what 'details' includes. This is adequate for a simple getter but lacks depth.

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, compact sentence with the action and resource front-loaded. It contains no filler or redundant phrasing.

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 getter, this is near-minimum viable. It identifies the target resource but does not describe what the returned details contain or that issue_iid and project_id are effectively required for a specific lookup, especially since the schema marks 0 required parameters.

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%: both issue_iid and project_id have descriptions. The tool description adds no additional meaning beyond what the schema already provides, so the baseline 3 is 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 uses a specific verb ('Get') and a specific resource ('details of a specific issue in a GitLab project'). This clearly distinguishes it from siblings like list_issues, which operate on multiple issues, and get_issue_link, which targets a different relationship.

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 a single-issue lookup through the word 'specific', but it does not explicitly state when to use this tool versus alternatives such as list_issues, create_issue, or get_issue_link. No exclusions or alternative conditions are provided; the guidance is implicit only.

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

get_job_artifact_fileA

Get the content of a single file from a job's artifacts by its path within the archive

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNoThe ID of the job
project_idNoProject ID or URL-encoded path
artifact_pathYesPath to the file within the artifacts archive

TDQS

A3.8/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 burden of behavioral disclosure. It clearly indicates a read-only operation by saying 'Get the content', but it does not mention encoding, size limits, error behavior, or authentication requirements. For a simple getter, the basic behavior is transparent, though richer caveats are absent.

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 with no filler. Every word contributes to identifying the action, target, and scope, making it highly scannable for an agent.

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 single-file retrieval tool, the description is largely complete: it names the action and target, and the schema fully documents parameters. There is no output schema, so the description's use of 'content' serves as the return explanation. It could be improved by clarifying that job_id and project_id are contextually necessary even though only artifact_path is marked as required.

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?

The input schema provides 100% coverage with clear descriptions for all three parameters: job_id, project_id, and artifact_path. The description adds marginal context by tying artifact_path to 'path within the archive', but it does not meaningfully extend beyond what the schema already states.

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 ('Get'), a precise resource ('content of a single file from a job's artifacts'), and the addressing mechanism ('by its path within the archive'). This clearly differentiates it from siblings like list_job_artifacts and download_job_artifacts, which handle listing or bulk retrieval.

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 when to use this tool: when you need the content of one specific file inside a job's artifacts. However, it does not explicitly mention alternatives or conditions for when not to use it, such as using list_job_artifacts to discover paths or download_job_artifacts to fetch the full archive.

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

get_labelC

Get a single label from a project

ParametersJSON Schema
NameRequiredDescriptionDefault
label_idNoThe ID or title of a project's label
project_idNoProject ID or URL-encoded path
include_ancestor_groupsNoInclude ancestor groups

TDQS

C2.9/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full burden of behavioral disclosure. 'Get' implies a read-only operation and is unlikely to be destructive, but nothing is said about permissions, error behavior, ancestor-group scoping, or whether the label is matched by ID or title. The description adds minimal behavioral context beyond the operation name.

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 short sentence with no filler or redundancy. It is front-loaded with the key action and resource. It is slightly too sparse to be excellent, but it is appropriately concise for a simple getter.

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 no annotations and no output schema, the description should explain more than just the base operation. It omits the meaning of include_ancestor_groups, the need for label_id/project_id, and any return or error expectations. The available schema and sibling context fill some gaps, but the description itself is incomplete for safe autonomous 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 three parameters. The description itself adds no parameter-specific meaning, which matches the baseline of 3. However, it does not clarify whether label_id and project_id are effectively required despite the schema listing zero required parameters, which is a notable semantic 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 ('Get') and resource ('a single label from a project'), which distinguishes it from label-list and label-mutation siblings like list_labels, create_label, update_label, and delete_label. It could be slightly stronger by explicitly noting the label_id-based lookup, but the basic purpose 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 guidance on when to choose this tool over alternatives such as list_labels, nor any mention of exclusions or prerequisites. The only implicit signal is the word 'Get', which suggests retrieval, but the description does not help an agent decide between single-label retrieval and label listing or other label operations.

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

get_merge_requestA

Get details of a merge request with compact deployment, commit addition, and approval summaries (Either mergeRequestIid or branchName must be provided)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
source_branchNoSource branch name
merge_request_iidNoThe IID of a merge request

TDQS

A3.6/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 of behavioral disclosure. It does add useful context by indicating the response includes compact summaries of deployments, commit additions, and approvals. However, it does not clarify read-only behavior, authentication needs, or any potential side effects, though 'get' strongly implies a read operation.

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 with no filler. It efficiently communicates the tool's purpose and the key requirement. The only flaw is the parameter-name mismatch, but that is an accuracy issue rather than a conciseness/structure issue.

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?

The tool has no annotations, no output schema, and the schema marks zero parameters as required. The description attempts to fill the gap with an either/or requirement, but the wrong parameter names and omission of whether project_id is also required leave the invocation conditions unclear. An agent could easily produce an invalid call.

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?

The schema already covers all three parameters fully (100% coverage), so the baseline is appropriately 3. The description adds a meaningful either/or constraint beyond the schema, but it uses incorrect parameter names ('mergeRequestIid' vs 'merge_request_iid' and 'branchName' vs 'source_branch'), which could confuse an agent selecting parameters.

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 clearly states the operation: 'Get details of a merge request' with a specific focus on 'compact deployment, commit addition, and approval summaries.' This differentiates it from related siblings like get_merge_request_approval_state or get_merge_request_diffs by emphasizing the summary nature of the response.

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 provides a precondition: 'Either mergeRequestIid or branchName must be provided,' which is useful operational guidance. However, it does not explicitly say when to prefer this tool over alternatives, nor does it mention any cases where it should not be used. The guidance is implied rather than explicit.

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

get_merge_request_approval_stateB

Get merge request approval details including approvers (uses approval_state when available, falls back to approvals endpoint)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of the merge request

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 burden of behavioral disclosure. It does reveal useful behavior: it tries approval_state first and falls back to the approvals endpoint. However, it does not clarify possible response differences between those endpoints, authentication needs, or any limitations, leaving 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.

Conciseness5/5

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

The description is a single well-structured sentence. It front-loads the core purpose, then adds the endpoint fallback detail in a parenthetical without wasting words. Every part 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?

The tool is relatively simple, but there is no output schema, so the description should convey the return shape. It says 'approval details including approvers' but does not specify whether the result includes approval status, rules, or which fields appear. The fallback behavior also introduces variability that is not fully explained. This is adequate but has 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 project_id and merge_request_iid are already documented in the schema. The description adds no parameter-specific meaning beyond restating that this is about a merge request. This matches the baseline expected when the schema already covers 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?

The description uses a specific verb and resource: 'Get merge request approval details including approvers.' It clearly indicates this tool is about reading approval state, distinguishing it from mutation siblings like approve_merge_request and unapprove_merge_request. However, it does not explicitly differentiate itself from other get_merge_request_* read tools, 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?

The description gives no explicit guidance on when to use this tool versus alternatives such as get_merge_request, get_merge_request_conflicts, or approve_merge_request. Mentioning the endpoint fallback gives a technical implementation detail, but not a usage rule or scenario-based recommendation.

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

get_merge_request_conflictsA

Get the conflicts of a merge request in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of the merge request

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries the burden of behavioral disclosure, but it only states the action without describing side effects, return value shape, error conditions, or permissions. The word 'Get' weakly implies a read operation, but no substantive behavioral context is provided beyond that.

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 with no filler or redundant detail. Every word contributes to conveying the tool's core purpose.

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 2-parameter read tool with full schema coverage, the description is minimally sufficient. However, with no output schema and no annotations, some context about what the returned conflicts look like or how they are represented would improve completeness.

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 merge_request_iid are already well-documented in the input schema. The description adds no additional parameter-level meaning, which is acceptable given the schema's completeness.

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 uses a specific verb ('Get') and a specific resource ('conflicts of a merge request in a GitLab project'), making the tool's intent immediately clear. It also naturally differentiates this tool from related siblings like get_merge_request, get_merge_request_diffs, and get_merge_request_approval_state.

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 when to use the tool—when conflicts for a merge request are needed—but it provides no explicit guidance on when not to use it or what distinguishes it from closely related siblings. There are no alternative tool references or preconditions mentioned.

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

get_merge_request_diffsB

Get the changes/diffs of a merge request (Either mergeRequestIid or branchName must be provided)

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoDiff view type
project_idNoProject ID or complete URL-encoded path to project
source_branchNoSource branch name
merge_request_iidNoThe IID of a merge request
excluded_file_patternsNoArray of regex patterns to exclude files from the diff results. Each pattern is a JavaScript-compatible regular expression that matches file paths to ignore. Examples: ["^vendor/", "^test/mocks/", "\.spec\.ts$", "package-lock\.json"]

TDQS

B3.1/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 of behavioral disclosure. 'Get' clearly implies a read-only operation, and the note about required identifiers adds some context, but the description does not disclose output format, pagination, or how excluded_file_patterns affects results.

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 concise sentence with no filler. However, the parenthetical constraint is not perfectly aligned with the actual schema parameter names, which slightly reduces the structural quality.

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, no output schema, and no annotations, the description should do more to ensure correct invocation. It attempts to convey a required-identifier constraint that the schema leaves implicit, but the naming mismatch undermines that guidance, and no alternative tools or return behavior are mentioned.

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 100%, so the baseline would be 3, but the description introduces parameter names ('mergeRequestIid', 'branchName') that do not exist in the schema; the actual properties are 'merge_request_iid' and 'source_branch'. This mismatch is misleading and could cause an agent to construct an invalid invocation.

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 clearly states the action and resource: get the changes/diffs of a merge request. However, it does not differentiate this tool from siblings like list_merge_request_diffs or get_branch_diffs, and the parameter names used in the description do not match the schema exactly.

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 provides a clear invocation constraint: either mergeRequestIid or branchName must be provided. It does not, however, explain when to prefer this tool over alternatives such as get_branch_diffs or list_merge_request_diffs, leaving the usage context only implied.

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

get_merge_request_noteA

Get a specific note for a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
note_idNoThe ID of a thread note
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

TDQS

A3.6/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. The verb 'Get' signals a read-only operation, which is a useful behavioral signal, but the description does not mention response shape, error cases, or any prerequisites such as needing a thread note ID. For a simple getter this is adequate but not rich.

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 with no filler or redundancy. Every word contributes to identifying the action and the resource.

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?

This is a low-complexity read tool with fully documented parameters and no nested objects. The description plus schema is enough to understand what the tool retrieves, though it would be slightly better if it explicitly distinguished itself from draft notes or listed-notes endpoints and mentioned the response is a single note.

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?

The input schema already provides 100% coverage with descriptions for note_id, project_id, and merge_request_iid. The description adds no additional parameter meaning beyond the schema, so the baseline score of 3 is 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 uses a specific verb ('Get'), identifies the resource ('a specific note'), and scopes it to a merge request. The word 'specific' differentiates it from the sibling list operation get_merge_request_notes, so an agent can understand the core function immediately.

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 guidance about when to choose this tool over alternatives such as get_merge_request_notes, get_draft_note, or the discussion-note variants. It implies single-note retrieval by saying 'specific', but it never names the alternative or states the distinguishing condition.

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

get_merge_request_notesB

List notes for a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
sortNoThe sort order of the notes
order_byNoThe field to sort the notes by
per_pageNoNumber of items per page
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

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 burden of behavioral disclosure. The verb 'List' implies a read-only operation, but the description does not disclose pagination behavior, return format, whether system notes are included, or any filtering semantics beyond what the schema already shows.

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 with no wasted words. 'List notes for a merge request' fully captures the core operation in minimal space.

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 output schema and no annotations, the description is too thin to fully contextualize the call. It does not describe the return shape, note the pagination behavior despite page and per_page parameters, or clarify that project_id and merge_request_iid are needed for a meaningful request even though they are not marked required.

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 has a meaningful schema description. The tool description itself adds no parameter-level meaning, so the baseline of 3 applies. It does not compensate for anything missing because the schema already documents all six parameters.

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 notes for a merge request.' The plural 'notes' and verb 'List' clearly distinguish this from the sibling get_merge_request_note, which fetches a single note. Even without naming alternatives, the operation 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 guidance on when to use this tool versus alternatives. The description does not mention that it should be used for retrieving all notes as opposed to a single note, nor does it compare with list_draft_notes or other note-related tools. Usage context 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.

get_merge_request_versionC

Get a specific version of a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
unidiffNoPresent diffs in the unified diff format. Default is false. Introduced in GitLab 16.5.
project_idNoProject ID or complete URL-encoded path to project
version_idNoThe ID of the merge request diff version
merge_request_iidNoThe internal ID of the merge request

TDQS

C2.3/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 of behavioral disclosure. It only says 'get', which is already implied by the tool name, and gives no information about response behavior, authorization needs, or how versions relate to MR diffs.

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?

The description is one short sentence with no filler, so it is concise. However, it is under-specified for a 4-parameter tool with no annotations, and the sentence mostly expands the tool name rather than adding substantive 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?

There is no output schema and no annotation context. The description does not explain that project_id, merge_request_iid, and version_id are needed to identify a specific version, nor how to discover valid version IDs from sibling tools.

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, version_id, merge_request_iid, and unidiff. The description adds no parameter-specific meaning, but the baseline of 3 applies because the schema already does the heavy lifting.

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

Purpose2/5

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

The description restates the tool name almost verbatim: 'Get a specific version of a merge request' adds no new information about what a version is. It does not distinguish this from siblings like get_merge_request_diffs or list_merge_request_versions.

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 alternative version/diff endpoints. An agent is not told that version_id would typically come from list_merge_request_versions, nor given any exclusions.

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

get_milestoneB

Get details of a specific milestone

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
milestone_idNoThe ID of a project milestone

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations present, the description carries the disclosure burden. 'Get details' conveys a read-only operation, which is the main behavioral trait, but it does not disclose potential 404 behavior, required permissions, or what fields the returned details include. This is adequate but not rich.

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 word earns its place, and the core intent is immediately visible.

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 no annotations and no output schema, one generic sentence leaves the agent without guidance on return contents, required parameter combination, or how to disambiguate from the many milestone-related siblings. More context about what 'details' includes would make this 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?

Input schema coverage is 100%, and the schema already documents project_id and milestone_id clearly. The description adds no parameter-level meaning beyond 'specific milestone', so it earns 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?

The description clearly states the operation ('Get details') and the resource ('a specific milestone'), making it evident this is a singular read. However, it does not explicitly distinguish itself from related milestone tools such as get_milestone_issue or get_milestone_merge_requests, 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 Guidelines3/5

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

The word 'specific' implies use when the agent already has a milestone_id and wants one milestone rather than a list, which is a weak signal toward list_milestones as the alternative. There is no explicit when-to-use, when-not-to-use, or alternative routing, so guidance is only implied.

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

get_milestone_burndown_eventsC

Get burndown events for a specific milestone

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or complete URL-encoded path to project
milestone_idNoThe ID of a project milestone

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 must carry behavioral disclosure, and it only says 'Get', which is a read verb. It does not state return format, event contents, pagination behavior, or any endpoint limits, leaving the agent to infer safety and outcomes.

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?

One terse 8-word description with no filler and the core resource is front-loaded. It is concise, though it is arguably under-specified for context-heavy decisions.

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?

No annotations and no output schema, so description needs to supply context. It fails to mention required parameter relationships, pagination defaults, or what 'burndown events' entails, making it incomplete for reliable 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 covers all four parameters, so baseline is 3. Description adds no additional meaning to parameters, but it does indicate the milestone-specific scope that aligns with milestone_id. It does not explain the relationship between project_id and milestone_id.

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 clear verb-resource pair ('Get burndown events') and scope ('for a specific milestone'), making its intent distinct from general milestone GETs. However, it does not name or contrast sibling tools such as get_milestone or get_milestone_merge_requests, so differentiation is left 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?

No guidance on when to use this tool vs alternatives like get_project_events or list_milestones. There are no prerequisites, exclusions, or hints about required context (e.g., that both project_id and milestone_id are needed) despite zero required parameters.

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

get_milestone_issueB

Get issues associated with a specific milestone

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
milestone_idNoThe ID of a project milestone

TDQS

B3.2/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 disclosing behavior. It only states 'Get issues', which implies a read operation, but does not mention return format, pagination, whether closed issues are included, or any filtering behavior. This is a minimal disclosure for a tool with no annotation support.

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 sentence with no wasted words. The verb and object are front-loaded, and the scope ('associated with a specific milestone') is included without redundancy.

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?

The tool has no output schema and no annotations, yet the description does not clarify whether both parameters are required, what the response looks like, or how issues are associated with the milestone. The schema's 'required' list is empty, which is likely a gap, and the description does not compensate for this ambiguity.

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 both project_id and milestone_id have clear descriptions. The tool description adds no additional meaning beyond what the schema already provides, so the baseline score of 3 is 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 uses a specific verb ('Get') and resource ('issues associated with a specific milestone'), clearly distinguishing it from siblings like get_milestone (returns the milestone itself) and get_issue (returns a single issue). It is concise and unambiguous about what the tool does.

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 such as list_issues or get_milestone_merge_requests. The description merely states the action without offering context, exclusions, or references to sibling tools, leaving the agent to infer appropriate usage.

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

get_milestone_merge_requestsA

Get merge requests associated with a specific milestone

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or complete URL-encoded path to project
milestone_idNoThe ID of a project milestone

TDQS

A3.7/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 burden of conveying behavior. The verb 'Get' indicates a read-only operation, but the description does not mention pagination behavior, whether project_id and milestone_id are effectively required despite schema marking them optional, or how the response is structured.

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 with no filler, repetition, or unnecessary detail. It communicates the verb, resource, and scope efficiently.

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, but with no annotations and no output schema, the description leaves some gaps. It does not clarify that project_id and milestone_id are semantically required for the operation, nor does it describe the response format, pagination defaults, or edge cases.

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 well documented in the schema. The description adds no meaningful parameter detail beyond reinforcing that the milestone is 'specific,' so a baseline score of 3 is 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 uses a specific verb ('Get') and a specific resource ('merge requests associated with a specific milestone'), making the tool's purpose immediately clear. It is readily distinguished from sibling tools like get_milestone_issue or list_merge_requests by the explicit milestone-MR relationship.

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 when to use this tool: when you need merge requests tied to one milestone. However, it provides no explicit guidance about when not to use it or which sibling tool to prefer in alternative scenarios, such as listing all MRs or getting a single MR.

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

get_namespaceB

Get details of a namespace by ID or path

ParametersJSON Schema
NameRequiredDescriptionDefault
namespace_idNoNamespace ID or full path

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 of behavioral disclosure. It only restates the action 'Get details' and adds no information about read-only behavior, error responses, authentication, or return shape. It does not contradict any annotations because none exist.

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 concise sentence that immediately communicates the action and the key parameter. There is no filler or redundant wording.

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 one-parameter getter, this is minimally adequate. However, the description does not clarify what 'details' includes, and the schema marks the parameter as optional while the description implies a namespace identifier is needed, which could lead to incorrect 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?

The input schema already documents the only parameter with 100% coverage: 'Namespace ID or full path'. The description adds little beyond restating that the lookup is by ID or path, so it meets the baseline but does not add extra semantic value.

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 a specific resource, 'namespace', plus the lookup key ('by ID or path'). This makes the basic purpose clear and helps distinguish it from list_namespaces and verify_namespace, though it does not explicitly name those 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?

There is no guidance about when to use this tool versus siblings like list_namespaces or verify_namespace. The phrase 'by ID or path' implies a precondition, but no explicit context, alternative routing, 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.

get_pipelineB

Get details of a specific pipeline in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or URL-encoded path
pipeline_idNoThe ID of the pipeline

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 full responsibility for behavioral disclosure. It only says 'Get details', which strongly implies a non-mutating read, but it does not describe what details are returned, access requirements, or possible error behavior. The description adds little beyond the verb itself.

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 clear sentence with no filler. The action, resource, and scope are front-loaded, making it easy to parse quickly.

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?

This is a simple 2-parameter read tool, but with no annotations and no output schema, the agent must infer what 'details' means and that both parameters are required in practice. The description is minimally viable but leaves meaningful 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 project_id and pipeline_id are already fully documented. The description adds no meaningful parameter semantics beyond 'specific pipeline', which is acceptable since the schema carries the burden.

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 details of a specific pipeline in a GitLab project'. It naturally distinguishes itself from list_pipelines and get_pipeline_job, though it does not explicitly name 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?

There is no guidance on when to use this tool versus alternatives like list_pipelines for enumerating pipelines or get_pipeline_job for job-level details. The phrase 'specific pipeline' implies you already have a pipeline ID, but no exclusions or alternative routing are provided.

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

get_pipeline_jobC

Get details of a GitLab pipeline job number

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of lines to return from the end of the log (default: 1000)
job_idNoThe ID of the job
offsetNoNumber of lines to skip from the end of the log (default: 0)
project_idNoProject ID or URL-encoded path

TDQS

C2.6/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 of behavioral disclosure, and it does not meet that burden. It claims to return job 'details' while the schema's limit/offset parameters describe skipping lines from the end of a log — an internal inconsistency that the agent cannot resolve. Nothing discloses that output is paginated, that all parameters are optional, or whether the response contains job metadata, log trace, or both.

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 one compact sentence with no filler, which keeps it appropriately short. The word 'number' is awkward ('a GitLab pipeline job number') and the sentence is too terse to add distinguishing value, but it is not bloated.

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 output schema, the agent has no way to know what the tool returns. The log-line limit/offset semantics are unexplained at the description level, there is no mention that zero parameters are required, and the relationship to get_pipeline_job_output is unspecified. For a four-parameter tool with an internal semantic mismatch, this is too thin.

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 baseline of 3 applies — the schema already documents all four parameters clearly. The description itself adds no parameter-level meaning and does not reconcile the log-oriented limit/offset parameters with the 'details' framing, but the structured data is adequate.

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

Purpose3/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 details of a GitLab pipeline job'), so the headline intent is readable and not a tautology. However, it does not distinguish this tool from the sibling get_pipeline_job_output, and the phrase 'job number' is imprecise. The schema's limit/offset parameters describe retrieving log lines, which suggests the tool returns more than 'details' — leaving the actual scope ambiguous.

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 zero guidance on when to use this tool versus overlapping siblings such as list_pipeline_jobs, get_pipeline_job_output, or get_pipeline. An agent must infer the log-tail behavior from the schema alone, and 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_pipeline_job_outputA

Get the output/trace of a GitLab pipeline job with optional pagination to limit context window usage

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of lines to return from the end of the log (default: 1000)
job_idNoThe ID of the job
offsetNoNumber of lines to skip from the end of the log (default: 0)
project_idNoProject ID or URL-encoded path

TDQS

A3.7/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 burden of behavioral disclosure. It does reveal the pagination capability and its motivation (context-window management), and 'Get' implies a read operation, but it omits what the response looks like (raw log lines), the fact that offset/limit are counted from the END of the log, and whether this is a safe idempotent read. Decent but not rich 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.

Conciseness5/5

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

A single sentence that front-loads the core action and resource, then appends the pagination nuance. Every word earns its place; there is no filler, boilerplate, or repetition of schema 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 4-parameter tool with no output schema and no annotations, the description is adequate but incomplete. It does not explain the notable fact that zero parameters are required even though job_id and project_id are logically necessary to locate a job's trace, nor does it describe the return format. The core concept and pagination are covered, but an agent could not fully infer correct invocation from the description 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 the schema already documents all four parameters (limit, job_id, offset, project_id). Baseline 3 applies. The description adds only a mild value-add by tying limit/offset to the context-window purpose; it does not clarify the atypical semantics that offset counts from the end of the log.

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 uses a specific verb-resource pairing, 'Get the output/trace of a GitLab pipeline job,' which clearly identifies what this tool does. It is implicitly distinguishable from close siblings like get_pipeline_job (job metadata), get_job_artifact_file (artifact files), and list_pipeline_jobs (job listings), though it does not 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 Guidelines4/5

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

The phrase 'with optional pagination to limit context window usage' gives clear contextual guidance: an agent should use this tool when it needs job trace output and can control how much log content it reads to protect the conversation context. It does not, however, state exclusions or name alternatives for cases where the agent needs job details rather than trace output.

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

get_projectC

Get details of a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or URL-encoded path

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description is the only behavioral signal. 'Get' implies a read-only operation and no destructive side effects, but it does not disclose error behavior for unknown project IDs, required authentication, response format, or that project_id is effectively required even though the schema marks it optional.

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?

One short sentence with no filler, front-loaded with the action. It is efficient, but it is also terse enough that it doesn't add meaningful guidance beyond the tool name, keeping it just below 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?

For a simple one-parameter getter, the description plus schema is minimally workable: an agent can infer to pass project_id and expect project details. However, the missing required flag in the schema and the lack of return or error expectations leave a gap, especially since no output schema or annotations exist to fill 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?

The schema fully documents project_id ('Project ID or URL-encoded path'), so the description doesn't need to repeat it. The description adds no further parameter semantics—for example, it doesn't clarify requiredness—so the baseline of 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 the core operation ('Get details') and the resource ('a specific project') in one clear sentence. It is distinguishable from list_projects because of 'specific', and from get_project_events because of the resource 'project', but 'details' is generic and doesn't say which aspects of the project are returned, 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?

No explicit usage conditions or alternatives are provided. It doesn't mention that list_projects should be used to find the project_id first, nor when get_project_events or other getters are more appropriate. The only guidance is implicit from the name and verb.

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

get_project_eventsB

List all visible events for a specified project. Note: before/after parameters accept date format YYYY-MM-DD only

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoReturns the specified results page. Default: 1
sortNoDirection to sort the results by creation date. Default: desc
afterNoIf defined, Returns events created after the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use after=2025-08-28
actionNoIf defined, returns events with the specified action type
beforeNoIf defined, Returns events created before the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use before=2025-08-30
per_pageNoNumber of results per page. Default: 20
project_idNoProject ID or URL-encoded path
target_typeNoIf defined, returns events with the specified target type

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 behavioral disclosure burden. It signals a read-only listing operation and adds the 'visible' scoping concept, but it does not define what visibility means, what permissions are required, or how pagination interacts with 'all visible events.'

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 with no filler. It immediately states the action and scope, then adds a useful formatting note. 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 an 8-parameter tool with no output schema and no annotations, this description is somewhat thin. The schema covers the parameters well, but the description leaves the return shape, definition of 'visible,' and relationship to list_events unexplained. It is functional 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 input schema already documents every parameter, including the YYYY-MM-DD format and the off-by-one date examples. The description's date-format note adds no new information beyond the schema, meriting the baseline score.

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 ('List'), a specific resource ('events'), and a scope ('for a specified project'). It is understandable on its own, but it does not explicitly distinguish itself from the sibling tool list_events, which likely serves a broader events-listing 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 guidance is given about when to use this tool versus list_events or other event-related tools. The phrase 'for a specified project' implies the project-scoped use case, but it never states an exclusion such as 'for cross-project events, use list_events instead.'

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

get_releaseC

Get a release by tag name

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_nameYesThe Git tag the release is associated with
project_idNoProject ID or URL-encoded path
include_html_descriptionNoIf true, a response includes HTML rendered Markdown of the release description.

TDQS

C2.9/5.0
Behavior2/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 of behavioral disclosure. It only implies a read operation via 'Get' and does not disclose behaviors such as error handling for unknown tags, authentication requirements, or whether include_html_description alters the response. This is a minimal disclosure at best.

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 concise, front-loaded sentence with no filler words. Every word contributes to identifying the operation.

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 leaves important context unaddressed. It does not explain the role of project_id (marked optional but likely necessary in practice), the effect of include_html_description on the response, or what a caller should do if the tag does not exist. The description is too sparse for a tool with three parameters and no behavioral metadata.

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 baseline is 3. The description reinforces that tag_name is the primary lookup key but adds no additional meaning beyond the schema's own parameter descriptions.

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 ('a release') with a clear selection criterion ('by tag name'), distinguishing it from sibling tools like list_releases, create_release, and update_release. It does not explicitly differentiate from get_milestone or get_issue, but the resource name 'release' and tag-based lookup make the purpose 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 guidance is provided on when to use this tool versus alternatives such as list_releases or download_release_asset. The description does not mention how to discover tag names, when project_id should be supplied, or any exclusions.

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

get_repository_treeC

Get the repository tree for a GitLab project (list files and directories)

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoThe name of a repository branch or tag. Defaults to the default branch.
pathNoThe path inside the repository
per_pageNoNumber of results to show per page
recursiveNoBoolean value to get a recursive tree
page_tokenNoThe tree record ID for pagination
paginationNoPagination method (keyset)
project_idNoThe ID or URL-encoded path of the project

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 burden of behavioral disclosure. It only restates the basic read action and output concept; it does not mention pagination behavior, recursion effects, default branch handling, or that this is a read-only operation beyond the verb 'get'.

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 clean sentence with no filler. It front-loads the core purpose and adds a clarifying parenthetical that explains the result type without redundancy.

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?

The tool has seven parameters, no annotations, and no output schema. The description does not explain the return shape, pagination semantics, or practical usage context such as which parameters matter for common cases. An agent would need to infer too much.

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. The description does not add extra meaning beyond 'list files and directories', which is consistent with the schema. Baseline 3 is appropriate because 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 clear verb and resource: 'Get the repository tree for a GitLab project' and clarifies the result as 'list files and directories'. It is distinguishable from siblings like get_file_contents and search_repositories, 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?

No guidance is given about when to use this tool versus alternatives such as get_file_contents or search_repositories. The intended use is implied by the name and description, but there are no explicit conditions, exclusions, or routing hints.

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

get_usersA

Get GitLab user details by usernames

ParametersJSON Schema
NameRequiredDescriptionDefault
usernamesYesArray of usernames to search for

TDQS

A3.5/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 offers only the verb 'Get' to imply a read. It does not disclose whether the operation is strictly read-only, how unknown usernames are handled, what fields are returned, or any authentication/rate-limit considerations.

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 word earns its place, and the essential lookup mechanism ('by usernames') appears in the description.

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 one-parameter lookup tool the description and schema allow invocation, but with no output schema and no annotations, the agent is left without a clear idea of what 'user details' will contain or how failures/partial matches behave. Some additional context on return shape would make it 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?

The schema describes the 'usernames' array fully (100% coverage), so the description adds little beyond restating that lookup is by usernames. No additional parameter semantics, formats, or constraints are needed, but none are provided beyond the schema.

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'), resource ('GitLab user details'), and method ('by usernames'). It is clearly distinct from all sibling tools, which target projects, merge requests, pipelines, issues, milestones, releases, wiki pages, etc., and no other sibling targets users.

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 usage context is only implied: call this when you need user details and have usernames. There is no explicit when-to-use/when-not-to-use guidance and no mention of alternatives, though no sibling provides the same user-detail function.

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

get_wiki_pageB

Get details of a specific wiki page

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesURL-encoded slug of the wiki page
project_idNoProject ID or URL-encoded path

TDQS

B3.1/5.0
Behavior2/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure. 'Get details of a specific wiki page' essentially restates the tool name and does not disclose read-only behavior, auth expectations, error behavior for missing pages, or what 'details' includes. The only inference is that 'Get' implies a safe read 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?

The description is a single, front-loaded sentence with no filler words. It is efficient and immediately states the action and object. It is slightly under-specified in content, but as a concise statement of purpose it earns a high score for conciseness and structure.

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 should compensate by explaining return values, failure modes, or required context, but it does none of this. An agent knows it can fetch a wiki page but not what 'details' means, what happens if the page does not exist, or whether project_id is needed for disambiguation. This is a meaningful completeness gap.

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 both slug and project_id. The description adds no new semantic detail about the parameters beyond the schema, but it does reinforce that the tool targets a single page rather than a list. This meets the baseline for schema-covered parameters.

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 clearly identifies the action ('Get') and the specific resource ('details of a specific wiki page'), which distinguishes it from sibling tools like list_wiki_pages (list) and create/update/delete_wiki_page (write operations). No ambiguity remains about what operation this tool performs.

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 about when to use this tool versus alternatives. The description does not mention that list_wiki_pages should be used to discover pages, nor does it state prerequisites like needing the slug or the optional project_id context. Usage context must be inferred entirely from the tool name and parameter schema.

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

list_commitsC

List repository commits with filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoRetrieve every commit from the repository
pageNoPage number for pagination (default: 1)
pathNoThe file path
orderNoList commits in order
sinceNoOnly commits after or on this date are returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ
untilNoOnly commits before or on this date are returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ
authorNoSearch commits by commit author
per_pageNoNumber of items per page (max: 100, default: 20)
ref_nameNoThe name of a repository branch, tag or revision range, or if not given the default branch
trailersNoParse and include Git trailers for every commit
project_idNoProject ID or complete URL-encoded path to project
with_statsNoStats about each commit are added to the response
first_parentNoFollow only the first parent commit upon seeing a merge commit

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 only says 'List repository commits with filtering options' and does not disclose pagination behavior, default branch fallback, response shape, or any side effects. The schema documents parameters, but the description itself adds little behavioral transparency beyond the tool's name.

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 sentence with no wasted words and the verb-plus-resource structure is front-loaded. It is concise, though arguably too sparse to carry much contextual value.

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?

This is a moderately complex list tool with 13 optional parameters, no annotations, and no output schema, so more contextual guidance would help. However, the schema fully documents each parameter, making the description adequate but not complete for high-level usage context like defaults or how filters combine.

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?

The schema covers 100% of the 13 parameters with descriptions, so the baseline is 3 even without parameter information in the description. The phrase 'filtering options' adds no specific semantic detail beyond what the schema already 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?

The description states a clear operation ('List') and a clear resource ('repository commits'), and 'filtering options' signals that this is a list-with-filters tool. It is distinguishable from siblings like get_commit or get_commit_diff, 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 alternatives such as get_commit for a single commit or get_commit_diff for diffs. The description implies a listing use case but provides no exclusions, prerequisites, or alternative routing.

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

list_deploymentsC

List deployments in a GitLab project with filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoFilter by ref
shaNoFilter by commit SHA (if supported by your GitLab version)
pageNoPage number for pagination (default: 1)
sortNoSort deployments
statusNoFilter by deployment status
order_byNoOrder deployments by
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or URL-encoded path
environmentNoFilter by environment name
updated_afterNoReturn deployments updated after the specified date
updated_beforeNoReturn deployments updated before the specified date

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 only restates that this lists deployments; it does not disclose pagination behavior, default ordering, required access, or what the response contains. For a read-only listing tool this is less risky than a mutation, but behavioral detail is still minimal.

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 focused sentence with no wasted words. The action and resource are front-loaded, and the mention of filtering options is concise.

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 11 parameters, no output schema, and no annotations, this one-line description is too thin. It does not indicate that project_id is likely needed even though it is not marked required, does not explain how filters combine, and does not describe the response format. An agent would have to infer too much.

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 parameter schema already documents each argument and its meaning. The description's 'filtering options' phrase adds no meaningful detail beyond what the schema provides, so the baseline score 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 clear verb (List), a specific resource (deployments), and the scope (a GitLab project). It is distinguishable from the sibling get_deployment because 'list' implies a collection operation, though it does not explicitly call out that differentiation.

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 get_deployment or other list-oriented tools. It implies usage by naming the resource but provides no context, prerequisites, or exclusions.

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

list_draft_notesC

List draft notes for a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

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 of behavioral disclosure. It only says 'List' and gives no information about read-only guarantees, pagination, ordering, permissions, or what happens if no draft notes 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?

The description is a single, front-loaded sentence with no filler or redundant wording. It is appropriately concise for a simple list operation, though a little more context about related tools would have made it stronger.

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 operation is simple and both parameters are fully described in the schema, so the description is minimally viable. However, with no annotations, no output schema, and no note about pagination or how draft notes compare to regular MR notes, the context is only partially 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 both project_id and merge_request_iid are already documented in the input schema. The tool description adds no additional parameter semantics, making the baseline score of 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 uses a specific verb ('List') and a clear resource ('draft notes for a merge request'), so the operation is identifiable. However, it does not explicitly distinguish itself from sibling tools such as get_draft_note or get_merge_request_notes, so it stops short of a top score.

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 the many note-related siblings, such as get_draft_note, get_merge_request_notes, or publish_draft_note. The agent must infer the intended use solely from the name and one-line description.

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

list_environmentsC

List environments in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoReturn environments with this exact name
pageNoPage number for pagination (default: 1)
searchNoSearch environments by name
statesNoFilter environments by state
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or URL-encoded path

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description must carry the behavioral disclosure burden. 'List' implies a read-only operation, but the description does not mention pagination behavior, default states, whether results are ordered, or any rate-limit or authorization considerations beyond the schema.

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?

The description is a single concise sentence with no fluff, which is good. However, it is so minimal that it provides little beyond the tool name itself, making it less useful than a more structured description that front-loads key behavior.

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?

The tool has 6 parameters including filters, pagination, and project scoping, plus no output schema and no annotations. A one-line description that only says 'List environments in a GitLab project' leaves out important context such as which parameters are required in practice, how filtering works, and what the response contains.

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 all 6 parameters. The description adds no additional parameter semantics, but the baseline of 3 applies because the schema already handles parameter documentation.

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 action ('List') and resource ('environments') scoped to a GitLab project. It does not explicitly differentiate from the sibling tool 'get_environment', though the list-vs-get distinction is partially implicit.

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 guidance on when to use this tool versus alternatives such as 'get_environment' or 'list_deployments'. There is no mention of search, filtering, or pagination as use cases, and no exclusions or alternatives are named.

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

list_eventsB

List all events for the currently authenticated user. Note: before/after parameters accept date format YYYY-MM-DD only

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoReturns the specified results page. Default: 1
sortNoDirection to sort the results by creation date. Default: desc
afterNoIf defined, Returns events created after the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use after=2025-08-28
scopeNoInclude all events across a user's projects
actionNoIf defined, returns events with the specified action type
beforeNoIf defined, Returns events created before the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use before=2025-08-30
per_pageNoNumber of results per page. Default: 20
target_typeNoIf defined, returns events with the specified target type

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 full burden. It adds the user-scoping boundary and a strict date-format restriction (YYYY-MM-DD only), which is genuinely useful input-constraint context. However, the date note largely duplicates the schema's existing parameter descriptions, and the description omits pagination defaults, potential result size, or auth requirements, leaving behavioral disclosure partial.

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?

Two short sentences with the core purpose front-loaded; no filler or wasted words. The second sentence's date-format note is somewhat redundant with the schema but sharpens the constraint with 'only', so it earns its place. Appropriately sized for an 8-parameter list 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?

For a simple filtered-list tool with no annotations and no output schema, the description is functional but thin. It establishes what is listed and for whom, but misses sibling differentiation (get_project_events), pagination behavior, and any hint about the returned shape. With 8 parameters and a close sibling, an agent would benefit from more routing and 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 description coverage is 100%, so the baseline of 3 applies — all 8 parameters are already documented in the schema, including the off-by-one date semantics for before/after. The description adds only the sharper 'only' restriction on date format, a marginal strengthening of what the schema already states. This is adequate but adds little meaning beyond the structured data.

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), resource (events), and scope (for the currently authenticated user), making the tool's function immediately understandable. This implicitly separates it from the sibling get_project_events, which is project-scoped rather than user-scoped. However, it omits the filtering capabilities visible in the schema and doesn't explicitly name the sibling, so it stops short of full differentiation.

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 guidance on when to use this tool versus alternatives. The sibling list contains get_project_events, a close relative for project-scoped event queries, yet the description never acknowledges it or states conditions that would route an agent to one over the other. The 'currently authenticated user' phrase gives implied context but no explicit when/when-not instruction.

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

list_group_iterationsA

List group iterations with filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
stateNoReturn opened, upcoming, current, closed, or all iterations.
searchNoReturn only iterations with a title matching the provided string.
group_idNoGroup ID or URL-encoded path
per_pageNoNumber of items per page (max: 100, default: 20)
search_inNoFields in which fuzzy search should be performed with the query given in the argument search. The available options are title and cadence_title. Default is [title].
updated_afterNoReturn only iterations updated after the given datetime. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
updated_beforeNoReturn only iterations updated before the given datetime. Expected in ISO 8601 format (2019-03-15T08:00:00Z).
include_ancestorsNoInclude iterations for group and its ancestors. Defaults to true.
include_descendantsNoInclude iterations for group and its descendants. Defaults to false.

TDQS

A3.6/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It only says 'List group iterations with filtering options,' which conveys that the operation is read-only, but it does not mention important behaviors such as default ancestor inclusion, pagination behavior, output shape, or permission 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?

The description is a single, front-loaded sentence with no wasted words. It is appropriately concise for a straightforward list tool, though it is terse and does not preview the richer parameter schema below.

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 has ten optional parameters, no annotations, and no output schema, so the description alone is somewhat thin. However, the input schema thoroughly explains every parameter, making the definition adequate for invocation. Missing output and behavioral context prevent a higher score.

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 all ten parameters with types, defaults, and allowed values. The description adds no parameter-level meaning beyond the generic phrase 'with filtering options,' so the baseline of 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?

The description clearly states the verb ('List'), the resource ('group iterations'), and the general capability ('with filtering options'). It is unambiguous and distinct from all sibling tools, which target different resources such as milestones, issues, releases, or projects.

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

Usage Guidelines4/5

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

The description makes the intended use case clear: use this tool when you need to list group iterations. It does not explicitly name alternatives or when-not-to-use conditions, but no sibling tool competes for this exact purpose, so the context is sufficiently clear.

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 projects in a GitLab group with filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
sortNoSort direction
searchNoSearch term to filter projects
starredNoFilter by starred projects
archivedNoFilter for archived projects
group_idNoGroup ID or path
order_byNoField to sort by
per_pageNoNumber of items per page (max: 100, default: 20)
statisticsNoInclude project statistics
visibilityNoFilter by project visibility
min_access_levelNoFilter by minimum access level
include_subgroupsNoInclude projects from subgroups
with_issues_enabledNoFilter projects with issues feature enabled
with_security_reportsNoInclude security reports
with_custom_attributesNoInclude custom attributes
with_programming_languageNoFilter by programming language
with_merge_requests_enabledNoFilter projects with merge requests feature enabled

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 of behavioral disclosure. It only states the basic function and does not reveal that group_id is effectively required, how pagination behaves, whether access permissions filter results, 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.

Conciseness5/5

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

The description is a single sentence with no wasted words, front-loading the action and resource. It is appropriately concise for a straightforward list operation.

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 17 parameters, no annotations, and no output schema, the description leaves too much unspecified. It does not mention required inputs, defaults, response shape, or how this tool differs from the many sibling list tools, making the definition incomplete for reliable 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%, with every parameter documented in the input schema. The description adds no parameter-level detail beyond the generic phrase 'filtering options,' so the baseline score of 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 ('List'), a resource ('projects in a GitLab group'), and mentions filtering options. It distinguishes itself from sibling list_projects by scoping to a group, though it does not explicitly contrast itself 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?

No guidance is given on when to use this tool versus alternatives like list_projects or search_repositories. There are no exclusions, prerequisites, or conditions that would help an agent decide between them.

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

list_issue_discussionsB

List discussions for an issue in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
per_pageNoNumber of items per page (max: 100, default: 20)
issue_iidNoThe internal ID of the project issue
project_idNoProject ID or URL-encoded path

TDQS

B3.3/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 of behavioral disclosure, but it only restates the read-only 'List' operation and object scope. It does not disclose pagination behavior, response shape, ordering, or access requirements, leaving the tool's runtime characteristics under-specified.

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 with no filler or redundancy. Every word contributes to identifying the operation and scope.

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 list operation, the parameter schema plus the one-line description is minimally viable. However, with no output schema or annotations, the description omits return-value shape, pagination details, and any caveats, so it is 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?

All 4 parameters are already fully documented in the schema (100% coverage), so the description need not repeat them. It adds no additional relational or semantic context beyond what 'for an issue in a GitLab project' already implies.

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 uses a precise verb ('List') and identifies the specific resource ('discussions for an issue in a GitLab project'). It clearly differentiates from sibling note/discussion tools by scoping to issue discussions rather than merge request discussions.

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 provided about when to use this tool versus alternatives such as mr_discussions, get_merge_request_notes, or create_issue_note. There are no exclusions, prerequisites, or preferred context, so the agent must infer usage from the tool name alone.

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

list_issuesA

List issues (default: created by current user only; use scope='all' for all accessible issues)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
scopeNoReturn issues from a specific scope
stateNoReturn issues with a specific state
labelsNoArray of label names
searchNoSearch for specific terms
due_dateNoReturn issues that have the due date
per_pageNoNumber of items per page (max: 100, default: 20)
author_idNoReturn issues created by the given user ID
milestoneNoMilestone title
issue_typeNoFilter to a given type of issue. One of issue, incident, test_case or task
project_idNoProject ID or URL-encoded path (optional - if not provided, lists issues across all accessible projects)
assignee_idNoReturn issues assigned to the given user ID. user id or none or any
confidentialNoFilter confidential or public issues
iteration_idNoReturn issues assigned to the given iteration ID. None returns issues that do not belong to an iteration. Any returns issues that belong to an iteration.
created_afterNoReturn issues created after the given time
updated_afterNoReturn issues updated after the given time
created_beforeNoReturn issues created before the given time
updated_beforeNoReturn issues updated before the given time
author_usernameNoReturn issues created by the given username
assignee_usernameNoReturn issues assigned to the given username
with_labels_detailsNoReturn more details for each label

TDQS

A3.5/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 burden of behavioral disclosure. It does reveal a non-obvious default filter (created_by_me) and how to expand to all accessible issues, which is valuable. It does not mention pagination behavior, ordering, read-only nature, or response shape, leaving some behavioral gaps.

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 states the core action and the most important behavioral caveat. There is no filler, and every clause contributes useful 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?

Given a 21-parameter tool, no annotations, and no output schema, a one-sentence description is insufficient for fully correct invocation. It addresses scope defaults but omits return structure, pagination/ordering details, date format expectations, and how the many filter parameters interact.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by specifying the default scope behavior and showing how to override it with scope='all'. This is real additional semantic value, though it only covers one of 21 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?

The description clearly states the verb and resource ('List issues') and conveys a key scoping behavior: by default only issues created by the current user are returned. It does not explicitly distinguish itself from siblings like my_issues or get_issue, so it stops short of full sibling differentiation.

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 provides useful usage context for the scope parameter, noting the default and how to get all accessible issues ('use scope=\'all\''). However, it gives no guidance about when to choose this tool over related siblings such as my_issues or get_issue, so tool selection is left mostly to inference.

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

list_job_artifactsA

List artifact files in a job's artifacts archive. Returns file names, paths, types, and sizes.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoDirectory path within the artifacts archive (defaults to root)
job_idNoThe ID of the job
recursiveNoWhether to list artifacts recursively
project_idNoProject ID or URL-encoded path

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations present, the description is the only disclosure of behavior; it states the operation returns a list of artifact file metadata, which is useful. However, it does not clarify whether the result includes directories, how recursion behaves, or whether pagination exists, and it does not describe the response structure beyond the four fields. The absence of an output schema increases the need for such detail, so this is only partially transparent.

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 sentence that front-loads the primary action and resource, then appends the return fields. Every word adds information, with no 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?

The tool is a simple list operation, but with no output schema and no annotations, the description carries the full burden for both return shape and behavioral expectations. It conveys the returned fields but omits any guidance on required parameter combinations (e.g., job_id plus project_id) and does not note that this tool complements download_job_artifacts by enumerating what can be fetched. It is minimally complete but has clear gaps for an agent unfamiliar with the API.

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?

The input schema already documents all four parameters with descriptions, achieving 100% coverage, so the baseline is 3. The description adds no further parameter-level details, such as the relationship between job_id and project_id or how path and recursive interact. It does not need to repeat schema content, but it also does not enrich it.

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 ('List'), a specific resource ('artifact files in a job's artifacts archive'), and the returned fields (file names, paths, types, sizes). This clearly distinguishes it from sibling tools like download_job_artifacts or get_job_artifact_file, which retrieve content rather than enumerate it.

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 tool is for inspecting the contents of an artifact archive before download, but it does not explicitly state when to prefer this over sibling tools such as download_job_artifacts or get_job_artifact_file. There is no direct mention of alternatives or exclusions, so usage context is inferred rather than spelled out.

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

list_labelsB

List labels for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoKeyword to filter labels by
project_idNoProject ID or URL-encoded path
with_countsNoWhether or not to include issue and merge request counts
include_ancestor_groupsNoInclude ancestor groups

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 burden of behavioral disclosure. It only says 'List labels' and does not mention pagination, result shape, read-only guarantees, or any other behavioral traits.

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 with no wasted words. It directly communicates the core operation without filler or repetition.

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 one-line description is too thin to fully equip an agent. It does not explain what a successful response looks like, whether results are paginated, or what the behavioral implications of the optional parameters are beyond their schema descriptions.

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 four parameters well. The description itself adds no parameter-level meaning beyond the implicit 'project' scope, which is already captured by project_id.

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 labels for a project. It clearly distinguishes this from sibling CRUD tools like get_label, create_label, update_label, and delete_label by focusing on the plural listing action.

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 guidance is provided about when to use this tool versus alternatives such as get_label or list_milestones. The intended context must be inferred entirely from the tool name and the words 'for a project'.

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

list_merge_request_diffsC

List merge request diffs with pagination support (Either mergeRequestIid or branchName must be provided)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
unidiffNoPresent diffs in the unified diff format. Default is false. Introduced in GitLab 16.5.
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or complete URL-encoded path to project
source_branchNoSource branch name
merge_request_iidNoThe IID of a merge request

TDQS

C2.7/5.0
Behavior2/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 of behavioral disclosure. It adds modest context by mentioning pagination support and an input constraint, but it does not describe pagination defaults, unified diff behavior, precedence when both identifying parameters are supplied, or the return format. The parameter-name mismatch further reduces transparency about what the tool expects.

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 sentence that front-loads the verb and resource, with no filler. The parenthetical is concise but slightly inaccurate due to parameter naming, which prevents a perfect score. Overall it is well-sized and structurally clear.

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 six parameters, zero required fields, no output schema, no annotations, and several closely related siblings, the description is insufficiently complete. It does not explain the return shape, which parameters actually matter beyond the misnamed pair, or how this differs from get_merge_request_diffs and get_branch_diffs. An agent would need additional inference to invoke it confidently.

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 100%, so the baseline is 3. However, the description actively confuses parameter semantics by referring to 'mergeRequestIid' and 'branchName' instead of the schema's merge_request_iid and source_branch. This undermines the otherwise useful hint that one of these identifying parameters is expected, and adds negative value.

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 clearly states the action ('List') and the resource ('merge request diffs'), and mentions pagination support, making the core purpose unambiguous. It does not explicitly differentiate from the sibling get_merge_request_diffs, but the word 'List' and the pagination hint imply a paged retrieval. The parenthetical introduces parameter names, but the overall purpose remains 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?

The description gives a precondition ('Either mergeRequestIid or branchName must be provided') but provides no guidance on when to prefer this tool over siblings like get_merge_request_diffs or get_branch_diffs. The precondition is also misleading because mergeRequestIid and branchName are not actual parameter names in the schema; the schema uses merge_request_iid and source_branch.

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

list_merge_requestsA

List merge requests. Without project_id, lists MRs assigned to the authenticated user by default (use scope='all' for all accessible MRs). With project_id, lists MRs for that specific project.

ParametersJSON Schema
NameRequiredDescriptionDefault
wipNoFilter merge requests against their wip status
pageNoPage number for pagination (default: 1)
sortNoReturn merge requests sorted in ascending or descending order
scopeNoReturn merge requests from a specific scope
stateNoReturn merge requests with a specific state
labelsNoArray of label names
searchNoSearch for specific terms
order_byNoReturn merge requests ordered by the given field
per_pageNoNumber of items per page (max: 100, default: 20)
author_idNoReturns merge requests created by the given user ID (integer). Mutually exclusive with author_username.
milestoneNoMilestone title
project_idNoProject ID or URL-encoded path (optional - if not provided, lists all merge requests the user has access to)
assignee_idNoReturn MRs assigned to the given user ID (integer), 'none', or 'any'. Mutually exclusive with assignee_username.
reviewer_idNoReturns merge requests which have the user as a reviewer. Must be an integer, 'none', or 'any'. Mutually exclusive with reviewer_username.
created_afterNoReturn merge requests created after the given time
source_branchNoReturn merge requests from a specific source branch
target_branchNoReturn merge requests targeting a specific branch
updated_afterNoReturn merge requests updated after the given time
created_beforeNoReturn merge requests created before the given time
updated_beforeNoReturn merge requests updated before the given time
author_usernameNoReturns merge requests created by the given username. Mutually exclusive with author_id.
assignee_usernameNoReturns merge requests assigned to the given username. Mutually exclusive with assignee_id.
reviewer_usernameNoReturns merge requests which have the user as a reviewer by username. Mutually exclusive with reviewer_id.
with_labels_detailsNoReturn more details for each label

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It meaningfully reveals the default scope behavior — assigned to authenticated user without project_id, all accessible MRs with scope='all', and project-scoped listing with project_id. It does not mention read-only expectations, pagination defaults, or error behavior, but the core behavioral nuance is present.

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 two succinct sentences with no fluff. It front-loads the operation and packs the scoping nuance into a compact, easy-to-parse structure. Every clause 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?

For a tool with 24 optional parameters and no output schema, the description provides enough for an agent to call it correctly at the default level and to select project-specific scope. It does not describe the return shape, but the list semantics and resource name make that inferable. The main gap is the absence of read-only or output format detail, though this is partially covered by the term 'List' and the rich parameter schema.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the interaction between project_id and scope and the default assignment behavior. Notably, the schema's project_id description says 'lists all merge requests the user has access to' while the tool description clarifies the assigned-to-user default, which is useful disambiguation.

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 opens with a clear verb-resource pair, 'List merge requests,' and then clarifies the two invocation modes: without project_id it defaults to MRs assigned to the authenticated user, and with project_id it lists MRs for a specific project. This makes the tool immediately distinguishable from singular get_merge_request or creation-focused siblings.

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

Usage Guidelines4/5

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

The description gives concrete situational guidance: when to omit project_id (defaults to assigned MRs) and when to include it (project-specific), plus the scope='all' hint for broader access. It does not explicitly name alternative tools or state when not to use this tool, but the context is clear enough for selection.

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

list_merge_request_versionsC

List all versions of a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe internal ID of the merge request

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 of behavioral disclosure. 'List all versions' only implies a read-style operation; it does not mention ordering, pagination, response shape, or the scope of what counts as a version. For a tool with zero annotation coverage, this is a bare-minimum 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, complete, front-loaded sentence with no wasted words. It is efficient, though it is so terse that behavioral context (pagination, ordering) could have been added in one extra clause without harming conciseness.

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?

Adequate for a simple two-parameter list tool with self-describing inputs, but the absence of an output schema and annotations leaves return format, ordering, and pagination unaddressed. Notably, both parameters are marked not required in the schema, and the description offers no clarification of what happens when they are omitted.

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 both parameters are already well-documented in the schema (project_id as ID or URL-encoded path, merge_request_iid as internal MR ID). The description adds no parameter-level 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 ('List') and resource ('versions of a merge request'), making the core action unambiguous. The plural 'versions' hints at the distinction from the singular sibling get_merge_request_version, though it never names that 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 guidance on when to use this tool versus the closely related siblings get_merge_request_version, get_merge_request_diffs, or list_merge_request_diffs. No context is given about what scenario calls for listing all versions rather than fetching one.

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

list_milestonesA

List milestones in a GitLab project with filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
iidsNoReturn only the milestones having the given iid
pageNoPage number for pagination (default: 1)
stateNoReturn only active or closed milestones
titleNoReturn only milestones with a title matching the provided string
searchNoReturn only milestones with a title or description matching the provided string
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or complete URL-encoded path to project
updated_afterNoReturn milestones updated after the specified date (ISO 8601 format)
updated_beforeNoReturn milestones updated before the specified date (ISO 8601 format)
include_ancestorsNoInclude ancestor groups

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral transparency burden. 'List' conveys that this is a non-mutating read operation, and 'filtering options' signals parameterized retrieval. However, it does not disclose pagination behavior, return shape, or the practical need for a project identifier, though nothing contradicts the read-only implication.

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 concise sentence with the action front-loaded and no redundant filler. Every word contributes to identifying the tool's purpose and scope.

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 10 parameters, no annotations, and no output schema, the description is too thin. It does not mention that project_id is effectively required despite the schema listing zero required parameters, nor does it clarify pagination defaults or how this listing relates to get_milestone. The schema explains parameter meanings but not operational prerequisites.

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 10 parameters are already individually documented with meaningful descriptions. The tool description only adds the generic phrase 'filtering options' and does not provide additional per-parameter semantics, so it remains at the schema-driven baseline.

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 opens with a specific verb, 'List', names the resource, 'milestones', and scopes it to a GitLab project with filtering options. This clearly distinguishes it from sibling tools like get_milestone, create_milestone, edit_milestone, and delete_milestone, making the plural enumeration intent obvious.

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 verb 'List' and the mention of filtering options, but there is no explicit guidance about when to use this tool versus alternatives such as get_milestone for a single milestone or list_issues for other project items. No when-not-to-use conditions or sibling routing are provided.

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

list_namespacesB

List all namespaces available to the current user

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
ownedNoFilter for namespaces owned by current user
searchNoSearch term for namespaces
per_pageNoNumber of items per page (max: 100, default: 20)

TDQS

B3.4/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 of behavioral disclosure. It only reveals the current-user scope; it does not disclose read-only behavior, pagination semantics, filtering behavior, or how results are returned. A list operation is implicitly non-destructive, but the description offers minimal behavioral detail beyond that.

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 with no filler. Every word contributes to the core meaning, making it highly scannable and easy to parse for an AI agent.

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 no annotations and no output schema, the description leaves important gaps: it does not explain pagination behavior, the shape of returned namespace objects, or how search/owned filters affect results. The schema documents parameters, but the description alone is too sparse for an agent to fully understand the tool's runtime behavior.

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 (page, owned, search, per_page) are already fully documented in the schema. The description adds no extra meaning about these parameters, such as how filtering or pagination interact, so the baseline score of 3 is 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 states a specific verb (List), a resource (namespaces), and a clear scope (available to the current user). This clearly distinguishes it from siblings like get_namespace (single namespace) and verify_namespace (validation), so an agent can identify the right tool.

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 when to use it: when you need all namespaces accessible to the current user. However, it does not explicitly mention alternatives like get_namespace for retrieving a single namespace, nor does it provide exclusion criteria. The usage context is clear but routing guidance to other tools is absent.

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

list_pipeline_jobsC

List all jobs in a specific pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
scopeNoThe scope of jobs to show
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or URL-encoded path
pipeline_idNoThe ID of the pipeline
include_retriedNoWhether to include retried jobs

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 burden of behavioral disclosure. It claims to list 'all jobs' but does not mention pagination, filtering via scope, how retried jobs are handled, or that results are likely paginated despite the word 'all'. This is a notable transparency 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?

The description is a single, front-loaded sentence with no filler. Every word contributes to the core meaning, making it highly concise 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?

For a tool with six parameters, no required fields listed, no annotations, and no output schema, this description is too thin. It does not clarify that a pipeline must be identified, how pagination works, which filter scopes exist, or how this differs from list_pipeline_trigger_jobs. An agent would need additional context to invoke it reliably.

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 six parameters. The description adds no additional parameter meaning beyond the schema, matching the baseline of 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?

The description clearly states a specific verb and resource: list jobs within a pipeline. However, it does not distinguish itself from the similar sibling tool list_pipeline_trigger_jobs, so it earns a 4 rather than 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 guidance on when to use this tool versus alternatives such as list_pipeline_trigger_jobs, get_pipeline_job, or list_pipelines. It only states the core action, leaving the agent to infer usage context 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_pipelinesA

List pipelines in a GitLab project with filtering options

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoThe ref of pipelines
shaNoThe SHA of pipelines
pageNoPage number for pagination (default: 1)
sortNoSort pipelines
scopeNoThe scope of pipelines
statusNoThe status of pipelines
order_byNoOrder pipelines by
per_pageNoNumber of items per page (max: 100, default: 20)
usernameNoThe username of the user who triggered pipelines
project_idNoProject ID or URL-encoded path
yaml_errorsNoReturns pipelines with invalid configurations
updated_afterNoReturn pipelines updated after the specified date
updated_beforeNoReturn pipelines updated before the specified date

TDQS

A3.7/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 disclosure burden. 'List' clearly signals a read-only collection operation, and 'with filtering options' hints at flexible querying. However, it does not mention pagination behavior, response shape, or any project-context requirements, leaving non-obvious behavior to the schema.

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 names the action, resource, scope, and capability with zero filler. It is concise while still giving an agent the essential operation and 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?

For a list operation with a fully documented schema, the sentence is mostly sufficient. But with no output schema and no annotations, the agent gets no information about response shape, pagination behavior, or whether project_id is effectively required, and sibling differentiation remains 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 the schema already documents all 13 parameters in detail. The description adds only the generic phrase 'with filtering options' and contributes no semantic meaning beyond the parameter descriptions.

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 uses a specific verb ('List'), names the resource ('pipelines'), and scopes it to a GitLab project. This clearly distinguishes it from sibling tools that create, get, cancel, or retry a single pipeline.

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 intended use case is implied: listing pipelines for a project. However, there is no explicit guidance on when to prefer this over get_pipeline for a single pipeline or list_pipeline_jobs for jobs, and no when-not-to-use or alternative routing is provided.

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

list_pipeline_trigger_jobsA

List all trigger jobs (bridges) in a specific pipeline that trigger downstream pipelines

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
scopeNoThe scope of trigger jobs to show
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or URL-encoded path
pipeline_idNoThe ID of the pipeline

TDQS

A3.7/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. 'List' clearly signals a read-only operation, and the scoping to a specific pipeline is transparent. However, it does not disclose pagination behavior, response format, or clarify that this operation does not actually trigger downstream pipelines despite the 'trigger' terminology.

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 with no filler. Every phrase earns its place: the verb, the resource, the parenthetical clarification, and the scope qualifier.

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 description is adequate for a simple filtered-list tool, especially with the input schema covering all five parameters. Still, there is no output schema or annotations, and the description does not mention the scope filter or pagination, leaving some context gaps for an agent deciding how to invoke 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 baseline is 3. The description adds minimal semantic value beyond the schema—it reinforces that the tool targets a specific pipeline, but it does not elaborate on scope, page, per_page, or project_id/pipeline_id usage.

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 opens with a specific verb ('List'), identifies the resource ('trigger jobs (bridges)'), and scopes it clearly to a specific pipeline that triggers downstream pipelines. This distinguishes it from sibling tools like list_pipeline_jobs, which handles regular pipeline jobs.

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 intended use case is implied: call this when you need bridge/trigger jobs for a specific pipeline. However, the description does not explicitly say when to prefer this over list_pipeline_jobs or other pipeline-related siblings, nor does it mention any exclusions.

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 members of a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
queryNoSearch for members by name or username
per_pageNoNumber of items per page (default: 20, max: 100)
user_idsNoFilter by user IDs
project_idYesProject ID or URL-encoded path
skip_usersNoUser IDs to exclude
include_inheritanceNoInclude inherited members. Defaults to false.

TDQS

B3.3/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 of behavioral disclosure. It reveals only that the tool lists members; it does not mention pagination behavior, the default exclusion of inherited members, filtering semantics, or any side effects.

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 concise sentence with no redundant or unnecessary words. It front-loads the core operation 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 read-only list operation with comprehensive schema coverage, the description is usable. However, given the lack of annotations and any behavioral or usage context, an agent gets only the minimal information needed to select the 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 input schema already documents all seven parameters. The description adds no additional semantic detail, but the baseline of 3 is appropriate because the schema carries the weight.

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 clear, specific operation: 'List members of a GitLab project'. It names both the resource (members) and scope (project), which distinguishes it from sibling tools like list_projects and get_users.

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 guidance on when to use this tool versus alternatives. The sibling list includes get_users, which could be a related but different lookup, and no distinction or exclusion is made.

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

list_projectsC

List projects accessible by the current user

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
sortNoReturn projects sorted in ascending or descending order
ownedNoFilter for projects owned by current user
searchNoSearch term for projects
simpleNoReturn only limited fields
archivedNoFilter for archived projects
order_byNoReturn projects ordered by field
per_pageNoNumber of items per page (max: 100, default: 20)
membershipNoFilter for projects where current user is a member
visibilityNoFilter by project visibility
min_access_levelNoFilter by minimum access level
search_namespacesNoNeeds to be true if search is full path
with_issues_enabledNoFilter projects with issues feature enabled
with_merge_requests_enabledNoFilter projects with merge requests feature enabled

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 burden of behavioral disclosure. It establishes that this is a read operation scoped to the current user, but it does not disclose pagination behavior, whether public projects are included in 'accessible', or any interaction between filters like search and search_namespaces — behaviors an agent would want to know before calling.

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 six-word sentence with no filler — verb, resource, and scope are all front-loaded and every word earns its place. It is appropriately compact for a list operation, though it is on the sparse side for a tool with 14 parameters; that is a completeness issue rather than a conciseness defect.

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 14 optional parameters, no annotations, and no output schema, the one-sentence description is insufficient. It never defines the meaning of 'accessible' (membership-only vs. including public projects), does not surface default per_page=20 and max=100 pagination limits, and leaves filter interactions unexplained, forcing an agent to infer calling context from parameter names.

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 baseline of 3 applies; all 14 parameters are already documented with descriptions and enums. The description's 'accessible by the current user' framing loosely aligns with the owned and membership filters but adds no meaning beyond what the schema already 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?

The description states a specific verb ('List'), a resource ('projects'), and a scope qualifier ('accessible by the current user'), which gives an agent a clear sense of what the tool does. The scope qualifier implicitly differentiates it from siblings like search_repositories and list_group_projects, though it does not explicitly name or contrast any 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 guidance is given on when to use this tool versus alternatives. It does not mention list_group_projects for group-scoped listings, my_issues for user-centric views, or search_repositories for cross-repository search, so an agent must infer the appropriate context entirely from the tool name and the sibling list.

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

list_releasesC

List all releases for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
sortNoThe direction of the order. Either desc (default) for descending order or asc for ascending order.
order_byNoThe field to use as order. Either released_at (default) or created_at.
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or URL-encoded path
include_html_descriptionNoIf true, a response includes HTML rendered Markdown of the release 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 transparency burden. It only restates the listing action and does not disclose pagination, default ordering, the read-only nature of the call, or what the response contains. The word 'all' may even mislead because the API returns one page at a time by default.

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 concise sentence with no filler, and the core purpose is front-loaded. It is slightly too sparse to earn a 5, but it is not bloated or repetitive.

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 output schema and no annotations, the description leaves important context uncovered: it does not mention that results are paginated, that project_id is central to the call, or what a successful response looks like. The schema covers parameters, but the description alone does not give an agent enough context to confidently invoke the 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 input schema fully documents all six parameters including defaults and enums. The description adds no parameter semantics beyond the schema, so the baseline score 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 clearly states the action ('List') and the resource ('all releases for a project'), which distinguishes it from singular get_release and mutation tools like create_release. However, it does not explicitly name or differentiate from sibling tools, and 'all' is slightly misleading given the paginated default 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?

The description provides no guidance on when to use this tool versus get_release, create_release, or delete_release. There are no exclusions, prerequisites, or alternative tool references, leaving usage entirely 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.

list_wiki_pagesC

List wiki pages in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or URL-encoded path
with_contentNoInclude content of the wiki pages

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 of behavioral disclosure. It signals a read-only listing operation but adds no detail about response shape, whether content is included by default, pagination behavior beyond the schema, or required access. It essentially restates the tool name.

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 with no filler. Every word contributes to the core purpose, and it is appropriately sized for a simple list operation.

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?

The description is complete enough to identify the operation but not complete enough to invoke it reliably: there is no output schema, no clarification that project_id is needed to scope the request (the schema marks no parameters as required), and no mention of what fields are returned. The with_content option hints at varying output, but the description does not explain its impact.

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 (page, per_page, project_id, with_content) are already documented clearly. The description adds no additional parameter context, which matches the baseline of 3 for well-covered schemas.

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 uses a specific verb ('List') and resource ('wiki pages') and scopes it to a GitLab project, so the core purpose is clear. However, it does not explicitly contrast itself with get_wiki_page or mention that it returns multiple pages, so it stops short of full sibling differentiation.

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 about when to use this tool instead of get_wiki_page, create_wiki_page, update_wiki_page, or delete_wiki_page. The only usage signal is the word 'List,' which leaves the agent to infer the appropriate context.

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

merge_merge_requestC

Merge a merge request in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
squashNoSquash commits into a single commit when merging
auto_mergeNoIf true, the merge request merges when the pipeline succeeds.
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request
merge_commit_messageNoCustom merge commit message
squash_commit_messageNoCustom squash commit message
should_remove_source_branchNoRemove source branch after merge
merge_when_pipeline_succeedsNoIf true, the merge request merges when the pipeline succeeds.in GitLab 17.11. Use

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 of behavioral disclosure, but it only restates the action. It omits important behavioral details such as the merge being a state-changing operation, potential pipeline triggers, failure conditions like conflicts, or side effects like source branch deletion.

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 clear sentence with no wasted words and the core action is front-loaded. However, it is so terse that it sacrifices useful behavioral context, though conciseness itself is well handled.

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 8 parameters, no annotations, no output schema, and a large sibling set, a one-sentence description is insufficient. It lacks guidance on side effects, when merging is allowed, what responses to expect, and how auto-merge behavior differs from immediate merge, leaving the agent under-informed.

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 eight parameters are documented at the schema level. The description itself adds no parameter-level meaning, but the schema already explains squash, auto_merge, commit messages, and branch removal, earning the baseline score.

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 ('Merge') and resource ('a merge request') with the scope 'in a GitLab project'. It clearly identifies the core operation and is distinct from siblings like approve_merge_request or get_merge_request, though it does not explicitly differentiate itself from those 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 usage guidance is provided. The description does not state when to use this tool versus approve_merge_request, unapprove_merge_request, or merge_when_pipeline_succeeds, leaving the agent to infer the appropriate context from the operation name alone.

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

mr_discussionsC

List discussion items for a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
per_pageNoNumber of items per page (max: 100, default: 20)
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

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 of behavioral disclosure. The verb 'List' implies a read-only operation, but the description says nothing about return format, pagination behavior, ordering, authentication needs, or how the discussion items are structured. This is minimal disclosure for a tool that could have variants in 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?

The description is a single concise sentence with no filler, wasted words, or redundant restatement of the tool name. It is front-loaded with the action verb and states the resource directly.

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 no output schema and no annotations, the one-sentence description is not enough for an agent to fully understand what will be returned or how to successfully invoke the tool. Although the parameter descriptions in the schema help, the description does not even hint that project_id and merge_request_iid are likely essential context, especially since the schema marks all parameters as optional.

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 baseline is 3 even though the description adds no parameter details. The pagination parameters and identifiers are documented in the schema, and the description does not contribute additional semantic meaning beyond what is already there.

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 clearly states the action ('List') and the resource ('discussion items for a merge request'), so an agent can understand the core purpose. However, it does not distinguish this from closely related sibling tools such as get_merge_request_notes or create_merge_request_thread, so it misses the differentiation needed for 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 provides no guidance on when to use this tool versus alternatives like get_merge_request_notes or list_draft_notes. It only states the basic purpose and does not mention exclusions, prerequisites, or selection criteria.

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

my_issuesA

List issues assigned to the authenticated user (defaults to open issues)

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
stateNoReturn issues with a specific state (default: opened)
labelsNoArray of label names to filter by
searchNoSearch for specific terms in title and description
per_pageNoNumber of items per page (default: 20, max: 100)
milestoneNoMilestone title to filter by
project_idNoProject ID or URL-encoded path (optional when GITLAB_PROJECT_ID is set)
created_afterNoReturn issues created after the given time (ISO 8601)
updated_afterNoReturn issues updated after the given time (ISO 8601)
created_beforeNoReturn issues created before the given time (ISO 8601)
updated_beforeNoReturn issues updated before the given time (ISO 8601)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations present, the description carries the full behavioral disclosure burden. It does disclose the open-state default, which is genuinely useful and not derivable from the tool name, but it omits other behavioral traits such as pagination behavior and return format. No contradiction exists since no annotations were provided.

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 13-word sentence that front-loads the verb and resource, with the default-state behavior in a parenthetical. Every word earns its place with zero 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 an 11-parameter tool, the schema is exceptionally well documented, but with no annotations and no output schema, the description is the only source for behavioral context. It covers the core purpose and default state but says nothing about response shape, pagination consequences, or auth prerequisites beyond what 'authenticated user' implies.

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% — all 11 parameters have descriptions in the schema itself. The description adds no parameter-level detail beyond what the schema already documents, so the baseline of 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?

The description uses a specific verb ('List') with a clearly bounded resource ('issues assigned to the authenticated user'), which precisely differentiates it from siblings like list_issues (project-wide) and get_issue (single issue by ID). The scope qualifier leaves no ambiguity about what this tool returns.

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 'assigned to the authenticated user' qualifier implies when to use this tool, but no alternatives are explicitly named and no when-not-to-use guidance is given. Given the large sibling set including list_issues, explicit routing would be valuable.

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

play_pipeline_jobC

Run a manual pipeline job

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNoThe ID of the job
project_idNoProject ID or URL-encoded path
job_variables_attributesNoCustom job variables to use when running the job

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. 'Run a manual pipeline job' implies a mutating action but does not disclose side effects, prerequisites, failure modes, or what happens after the job is triggered.

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 filler. It is appropriately concise, though it does little beyond restating the core action.

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 pipeline operation with no annotations and no output schema, the description omits important context: when to use it, what prerequisites must be met, and what effects triggering the job will have. It is not complete enough for confident agent use.

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% and each parameter has a description, so the schema does the heavy lifting. The tool description adds no parameter-level detail, so a baseline score of 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 clear verb ('Run') and resource ('manual pipeline job'), so an agent can tell this triggers a job. However, it does not explicitly differentiate it from sibling tools like retry_pipeline_job or create_pipeline.

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 about when to use this tool versus alternatives such as retry_pipeline_job, cancel_pipeline_job, or create_pipeline. The agent is left to infer the appropriate context.

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

promote_milestoneC

Promote a milestone to the next stage

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
milestone_idNoThe ID of a project milestone

TDQS

C2.6/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 burden of behavioral disclosure. 'Promote' implies a state-changing mutation, but nothing discloses side effects, reversibility, required permissions, or behavior when the milestone is already at the final stage, leaving post-conditions and failure modes completely unknown.

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 six-word sentence with zero wasted words, front-loading the action verb. It is clean and efficiently sized, though the brevity is what creates the semantic vagueness penalized in other dimensions.

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 output schema and no annotations, the description is the sole source of behavioral context, yet it leaves the core semantics of 'next stage' undefined and never mentions what the tool returns on success or failure. For a state-changing operation, an agent is missing enough information to call it correctly with confidence.

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 and milestone_id each documented in the input schema, so the baseline of 3 applies. The description adds no parameter detail, which is acceptable given the schema; the notable quirk is that zero parameters are marked required even though both are presumably necessary for the operation.

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

Purpose3/5

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

The description names a specific verb ('promote') and resource ('milestone'), which sets it apart from sibling CRUD verbs like create_milestone, edit_milestone, and delete_milestone. However, 'to the next stage' is undefined — an agent cannot tell what stages exist, what promotion changes about the milestone, or what observable effect it has versus edit_milestone.

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 invoke this tool versus alternatives. Siblings include create_milestone, edit_milestone, delete_milestone, and list_milestones, but the description never states which condition selects promote_milestone over edit_milestone, nor any prerequisites such as the milestone needing to exist or belong to a project.

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

publish_draft_noteC

Publish a single draft note

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
draft_note_idNoThe ID of the draft note
merge_request_iidNoThe IID of a merge request

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 of behavioral disclosure. 'Publish a single draft note' indicates an action but does not explain what publishing does to the draft note, whether it is reversible, what permissions are required, or what side effects occur.

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 filler. It is concise though somewhat terse, which keeps clarity high without wasting tokens.

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?

The description is too minimal for a mutation tool with no annotations and no output schema. It does not explain that all three parameters likely need to be used together, what a successful publish returns, or how this differs from simply creating or updating a draft note.

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 parameter-level meaning, but the schema already carries the weight, making the baseline score 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: 'Publish a single draft note.' It is clear and distinguishable from the sibling bulk_publish_draft_notes through the word 'single,' though it does not explicitly name 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?

No guidance is given about when to use this tool versus alternatives such as bulk_publish_draft_notes, create_draft_note, or update_draft_note. The word 'single' implies use for one draft note, but no explicit context, prerequisites, 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.

push_filesB

Push multiple files to a GitLab project in a single commit

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesArray of files to push
branchYesBranch to push to
project_idNoProject ID or complete URL-encoded path to project
commit_messageYesCommit message

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 burden of behavioral disclosure. It reveals that this is a write operation producing a single commit, but it does not mention file overwrite semantics, branch requirements, permissions, or failure behavior—material side effects for a repository-mutating 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?

The description is a single, front-loaded sentence with no filler or redundancy. Every word contributes directly to identifying the tool's action, scope, and commit behavior.

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 mutating tool with no output schema and no annotations, so the description alone must provide enough operational context. It covers the core action but omits expected return behavior, error conditions, and side-effect details, leaving an 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 the input schema already documents all parameters and properties. The description adds no additional parameter-level meaning beyond reinforcing the 'multiple files' concept, which maps naturally to the files array.

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 clearly states the action ('Push multiple files'), the target resource ('to a GitLab project'), and the key qualifier ('in a single commit'). This distinguishes it from single-file siblings like create_or_update_file without needing to inspect schemas.

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' implies when this tool should be used, and 'single commit' suggests the batching intent. However, there is no explicit guidance about when not to use it or which sibling alternatives exist, so the agent must infer the boundary against tools like create_or_update_file.

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

resolve_merge_request_threadC

Resolve a thread on a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
resolvedYesWhether to resolve the thread
project_idNoProject ID or complete URL-encoded path to project
discussion_idNoThe ID of a thread
merge_request_iidNoThe IID of a merge request

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 of behavioral disclosure. It only restates the operation name and doesn't disclose side effects, permissions, or the fact that the 'resolved' boolean allows toggling between resolved and unresolved states. The schema parameter hints at this, but the description adds no behavioral context beyond the tool name.

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 concise sentence with no filler. It is clear and front-loaded, though it is also somewhat under-specified, which prevents a perfect score.

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 doesn't state that the thread must already exist, that 'resolved=false' unresolves the thread, or provide any operational context. An agent can assemble a call from the schema but lacks behavioral and contextual guidance needed for confident use.

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 are already documented in the schema. The description itself adds no parameter-level meaning beyond what is available, which meets the baseline for well-covered schemas.

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 uses a clear verb ('resolve') and a specific resource ('a thread on a merge request'), distinguishing it from sibling tools like create_merge_request_thread and mr_discussions. The only notable gap is that it doesn't explicitly mention that the tool can also unresolve a thread when 'resolved' is false.

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 guidance on when to use this tool versus alternatives. It does not mention that it should be used for existing threads only, nor does it reference siblings such as create_merge_request_thread or mr_discussions.

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

retry_pipelineA

Retry a failed or canceled pipeline

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or URL-encoded path
pipeline_idNoThe ID of the pipeline to retry

TDQS

A3.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 burden of disclosing behavior. It truthfully conveys that retrying applies only to failed or canceled pipelines, but it does not describe side effects such as creating a new pipeline run, re-triggering jobs, or permission requirements.

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 with no redundant words. It efficiently communicates the action and the precondition without 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?

The description is sufficient for selecting the tool and understanding its basic purpose, but because there is no output schema or annotations, the agent is left without information about return values, retry behavior details, or authorization 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?

Input schema coverage is 100%, and both parameters (project_id, pipeline_id) already have clear descriptions. The tool description adds no parameter-specific meaning, which is acceptable because the schema fully documents them.

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 uses a specific verb ('Retry') with a clear resource ('pipeline') and narrows scope to 'failed or canceled' pipelines. This distinguishes it from sibling tools like retry_pipeline_job, which target individual jobs rather than the whole pipeline.

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

Usage Guidelines4/5

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

The description clearly states the applicable condition: pipelines that are 'failed or canceled.' This gives the agent a practical trigger for use, but it does not explicitly mention alternatives or when not to use the tool, such as preferring retry_pipeline_job for single-job retries.

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

retry_pipeline_jobB

Retry a failed or canceled pipeline job

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNoThe ID of the job
project_idNoProject ID or URL-encoded path

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states the retry action but does not mention side effects such as creating a new job attempt, whether permissions are required, or what happens if the job is not in a retryable state.

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 concise sentence that states the action and the qualifying conditions with no wasted words. It is front-loaded and easy to parse for an agent.

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 tool, the schema and description provide enough to make a basic call. However, with no annotations and no output schema, the description leaves out behavioral and comparative context that would help an agent choose and invoke this tool reliably among many pipeline-related siblings.

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 documented in the input schema. The description adds no additional meaning about how job_id or project_id should be formatted or used, making the baseline score of 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 clearly states a specific action ('Retry') and resource ('failed or canceled pipeline job'), making the tool's purpose immediately understandable. It does not explicitly differentiate from the sibling tool 'retry_pipeline', though the qualifiers and resource noun do most of the disambiguation work.

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 tool should be used when a pipeline job is failed or canceled, which is a useful condition. However, it gives no explicit guidance on when to prefer this over related siblings like retry_pipeline, play_pipeline_job, or cancel_pipeline_job.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
searchYesSearch query
per_pageNoNumber of items per page (max: 100, default: 20)

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 burden of behavioral disclosure but only states the literal function. It does not confirm this is a read-only search operation, describe pagination behavior despite the page/per_page parameters, specify what fields the search matches against, or indicate anything about the response format.

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 that front-loads the essential function with zero filler. It is appropriately concise and free of redundancy, though it errs on the side of being too terse to carry behavioral or usage guidance.

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 3-parameter tool with no output schema and no annotations, the one-sentence description leaves meaningful gaps: no return-value information, no search scoping details, and no relationship to sibling read tools. An agent would not know what results look like or how this differs from list_projects in practice.

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 search, page, and per_page with descriptions. The description adds no extra meaning beyond the schema — such as what the query searches against (name, description, README) or how pagination interacts with search results — so it stays at the schema-covered baseline of 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?

The description states a specific verb ('Search') and resource ('GitLab projects'), clearly identifying the core function. However, it does not differentiate from sibling tools like list_projects, get_project, or list_group_projects — the distinction between query-based discovery and straightforward enumeration is only implied by the tool 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?

The description offers no guidance on when to use this tool versus siblings such as list_projects, list_group_projects, or get_project. An agent must infer from the name alone that this is for query-based project discovery rather than enumeration, direct lookup, or scoped listing.

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

unapprove_merge_requestA

Unapprove a previously approved merge request. Requires appropriate permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of the merge request to unapprove

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden. It does state the permission requirement and the precondition that the merge request was previously approved, which adds some behavioral context. It does not mention idempotency, failure behavior, or what occurs if the merge request was not previously approved.

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 brief and front-loaded: the core action is stated first, followed by a short permission note. It contains no redundant filler, though the first sentence is somewhat close to restating the tool 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 simple two-parameter mutation, the description is minimally sufficient: it identifies the action, the target object, and a permission requirement. However, it lacks guidance relative to the closely related approve_merge_request tool and does not disclose edge-case behavior, making it adequate but not 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?

The input schema already documents both parameters clearly, including the distinction between project_id and merge_request_iid. Schema description coverage is 100%, so the baseline of 3 applies; the description adds no additional parameter-level meaning but does not need to.

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 ('unapprove') and a specific resource ('previously approved merge request'), clearly identifying the operation. This distinguishes it from the sibling approve_merge_request tool without requiring an explicit comparison.

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 'previously approved' implies the condition under which this tool should be used, and 'Requires appropriate permissions' signals a prerequisite. However, it does not explicitly contrast with approve_merge_request or explain when not to use it.

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

update_draft_noteC

Update an existing draft note

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoThe content of the draft note
positionNoPosition when creating a diff note
project_idNoProject ID or complete URL-encoded path to project
draft_note_idNoThe ID of the draft note
merge_request_iidNoThe IID of a merge request
resolve_discussionNoWhether to resolve the discussion when publishing

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations available, the description must disclose behavioral traits itself, but it only states the mutation. It omits whether this is a partial update, which identifiers are needed, or how resolve_discussion behaves, leaving the agent to infer behavior from the schema.

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?

The sentence is short and front-loaded with the core verb and object, with no filler. However, for a tool with six parameters and a deeply nested position schema, this is under-specification rather than ideal concision.

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?

The description does not explain the GitLab merge-request draft-note context, the identifiers needed to target a draft note, or how updating relates to publishing drafts. Given the complex input schema and absence of annotations or an output schema, an agent is left with too much unresolved 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%, and the schema thoroughly documents all six parameters plus the nested position object. The description adds no parameter-level meaning, which is acceptable because the schema carries that burden.

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 clearly identifies the operation as updating an existing draft note, naming both the action and the resource. It does not differentiate this from sibling draft-note tools like create_draft_note, publish_draft_note, or delete_draft_note, so it gets a 4 rather than 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 update versus create, publish, delete, or list draft notes, and no mention of alternatives. The word 'existing' only implies that the draft note must already have been created; it does not provide conditions or exclusions.

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

update_issueC

Update an issue in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoThe title of the issue
labelsNoArray of label names
weightNoWeight of the issue (0-9)
due_dateNoDate the issue is due (YYYY-MM-DD)
issue_iidNoThe internal ID of the project issue
issue_typeYesthe type of issue. One of issue, incident, test_case or task.
project_idNoProject ID or URL-encoded path
descriptionNoThe description of the issue
state_eventNoUpdate issue state (close/reopen)
assignee_idsNoArray of user IDs to assign issue to
confidentialNoSet the issue to be confidential
milestone_idNoMilestone ID to assign
discussion_lockedNoFlag to lock discussions

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 of behavioral disclosure. 'Update' only implies mutation; it doesn't reveal partial-update semantics, the need to supply both project_id and issue_iid to identify the target, the unusual requirement that issue_type be provided on an update, 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?

The description is a single seven-word sentence with no wasted words, and the verb-object-scope structure is front-loaded. It is concise, though the brevity results from under-specification rather than deliberate pruning.

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 13-parameter mutation tool with no annotations and no output schema, one sentence is far from complete. The schema covers parameter names, but the description fails to convey update semantics, how the target issue is identified, and expected outcomes.

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 with descriptions and enums, establishing the baseline of 3. The tool description adds no parameter-level information, but the schema carries the load adequately.

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 ('an issue in a GitLab project'), which is enough to separate it from obvious siblings like create_issue, get_issue, and delete_issue. However, it doesn't explicitly differentiate itself from close relatives such as update_issue_note, and it omits any mention of which attributes are updatable.

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. With over 100 siblings including create_issue, get_issue, delete_issue, and update_issue_note, the agent receives no routing help, prerequisites, or exclusions to direct it correctly.

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

update_issue_noteC

Modify an existing issue thread note

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoThe content of the note or reply
note_idNoThe ID of a thread note
resolvedNoResolve or unresolve the note
issue_iidNoThe IID of an issue
project_idNoProject ID or complete URL-encoded path to project
discussion_idNoThe ID of a thread

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 burden of behavioral disclosure, and it only restates the mutation action. It does not reveal whether 'resolved' can be toggled independently of 'body', whether note_id and discussion_id are alternatives or jointly required, what happens when the note does not exist, or any permission/context 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 six-word sentence, front-loaded with the verb and containing zero filler. It is structurally efficient, though so terse that it sacrifices the informational substance a 6-parameter, annotation-free tool definition would benefit 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?

The tool has 6 parameters, none required, no output schema, and no annotations, so the description must supply substantial context. It provides none beyond naming the operation: an agent cannot determine the minimal viable invocation, the expected return value, or how this note update differs from the many sibling note/discussion tools.

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 baseline of 3 applies even though the tool description adds no parameter-level meaning. Each parameter already has a clear schema description (e.g., 'resolved' = resolve or unresolve the note), so the description need not compensate; however, the interaction between parameters remains unresolved.

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 ('Modify') with a specific resource ('existing issue thread note'), and the 'issue' qualifier distinguishes this from note tools targeting merge requests (e.g., update_merge_request_note). It is not a tautology, though 'modify' largely echoes the 'update' already in the tool name, so the differentiation is modest.

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 about when to use this tool versus siblings such as create_issue_note (new notes) or the various merge-request note tools. The description also provides no hint about parameter combinations, which matters here because all 6 parameters are optional and the relationship between note_id, discussion_id, issue_iid, and project_id is unexplained.

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

update_labelB

Update an existing label in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
colorNoThe color of the label given in 6-digit hex notation with leading '#' sign
label_idNoThe ID or title of a project's label
new_nameNoThe new name of the label
priorityNoThe new priority of the label
project_idNoProject ID or URL-encoded path
descriptionNoThe new description of the label

TDQS

B3.1/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full burden of behavioral disclosure. It does not mention that all parameters are optional, whether this is a partial update, what happens to unspecified fields, required permissions, or any error/edge-case 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?

The single-sentence description is compact, front-loaded, and contains no filler words. It is appropriately concise for a purpose statement, though slightly under-sized relative to the number of parameters and the lack of annotations.

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 six parameters, no annotations, and no output schema, a one-sentence description is insufficient. It lacks critical context such as partial-update semantics, how to identify the label, and what happens if the target label does not exist.

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 parameters clearly. The description adds no additional parameter meaning beyond the schema, which is why the baseline score of 3 is 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 clearly states a specific action ('Update') on a specific resource ('existing label in a project'), which immediately distinguishes it from sibling label tools like create_label, delete_label, get_label, and list_labels. No ambiguity remains about the core operation.

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 guidance is given about when to use this tool versus alternatives such as create_label or delete_label. The phrase 'existing label' only implies that creation should be handled elsewhere, but it does not state conditions, exclusions, or alternative tool references.

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 a merge request (Either mergeRequestIid or branchName must be provided)

ParametersJSON Schema
NameRequiredDescriptionDefault
draftNoWork in progress merge request
titleNoThe title of the merge request
labelsNoLabels for the MR
squashNoSquash commits into a single commit when merging
project_idNoProject ID or complete URL-encoded path to project
descriptionNoThe description of the merge request
state_eventNoNew state (close/reopen) for the MR
assignee_idsNoThe ID of the users to assign the MR to
reviewer_idsNoThe ID of the users to assign as reviewers of the MR
source_branchNoSource branch name
target_branchNoThe target branch
merge_request_iidNoThe IID of a merge request
remove_source_branchNoFlag indicating if the source branch should be removed

TDQS

C2.6/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 of disclosing behavior. It only says 'update' and repeats an identification constraint; it does not explain side effects, whether state changes are immediate, how state_event interacts, or what happens when multiple mutable fields are supplied.

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?

The description is very short and front-loaded, which is good for conciseness. However, the parenthetical does not earn its place because it references a nonexistent parameter and could mislead an agent into looking for 'branchName'.

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?

Despite having 13 parameters and no annotations or output schema, the description provides almost no contextual guidance about required combinations, how to target a merge request within a project, or how this update differs from merge actions on the same resource. The misleading identification note makes it incomplete for safe invocation.

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?

The schema covers 100% of parameters, so the baseline is 3, but the description adds a misleading constraint: it names 'mergeRequestIid' and 'branchName', while the schema has 'merge_request_iid' and no 'branchName' parameter at all. This actively undermines parameter understanding instead of adding value.

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 ('Update a merge request'), which is sufficient to distinguish it from creation or merging operations in the sibling list. However, the parenthetical about 'mergeRequestIid or branchName' introduces a name not present in the schema, causing mild ambiguity.

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 usage guidance is an identification requirement ('Either mergeRequestIid or branchName must be provided'), but 'branchName' is not a real parameter, and it gives no guidance on when to use this tool versus alternatives like merge_merge_request, approve_merge_request, or update_merge_request_note.

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_noteC

Update a discussion note on a merge request

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoThe content of the note or reply
note_idNoThe ID of a thread note
resolvedNoResolve or unresolve the note
project_idNoProject ID or complete URL-encoded path to project
discussion_idNoThe ID of a thread
merge_request_iidNoThe IID of a merge request

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 must disclose behavior on its own. 'Update' only signals mutation and gives no information about side effects, authorization requirements, whether the note can be resolved/unresolved via the resolved parameter, or how the tool interacts with the discussion thread. This is a significant 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.

Conciseness4/5

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

The description is a single sentence with no filler, and the subject-verb-object structure is front-loaded and easy to scan. It is concise, although the brevity contributes to the missing guidance captured in other dimensions.

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 six parameters, no annotations, and no output schema, the description is too thin. It doesn't explain the required relationships among discussion_id, note_id, and merge_request_iid, nor what happens on success or failure. An agent would need more context to invoke this tool reliably.

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. The description adds no parameter-level detail beyond the generic 'update a discussion note' phrase, keeping it at the baseline.

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 ('Update') and a specific resource ('a discussion note on a merge request'), which maps directly to the tool name and distinguishes it from non-discussion note tools. It doesn't explicitly contrast with update_merge_request_note, but the 'discussion note' qualifier makes its scope reasonably 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?

There is no guidance about when to use this tool versus siblings such as update_merge_request_note, update_draft_note, or create_merge_request_discussion_note. The phrase 'discussion note' implies a context, but the description never states conditions, exclusions, or alternatives.

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

update_merge_request_noteC

Modify an existing merge request note

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe content of the note or reply
note_idNoThe ID of a thread note
project_idNoProject ID or complete URL-encoded path to project
merge_request_iidNoThe IID of a merge request

TDQS

C2.8/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 disclosure burden, but it only states that the note is modified. It does not say whether the body is fully replaced, whether identifiers are required even though they are optional in the schema, what permissions are needed, or what happens to the existing note.

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?

The phrasing is tight and readable, but it mostly restates the tool name and contains no concrete details about what 'modify' entails. It is minimal rather than usefully concise.

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 omits update semantics, selection among several note-related sibling tools, and any caveats about project/merge-request/note identifiers; an agent would have to infer or guess several call conditions.

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 baseline is 3 and the schema already documents body, note_id, project_id, and merge_request_iid. The description adds no parameter-level meaning 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?

Uses a clear action ('modify') and resource ('existing merge request note'), so an agent can tell it apart from create/delete note tools. It does not, however, distinguish it from closely named siblings such as update_merge_request_discussion_note or update_draft_note.

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 guidance on when this tool should be chosen instead of create_merge_request_note, delete_merge_request_note, update_merge_request_discussion_note, or draft-note variants. Usage context is only implied by the word 'existing'.

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

update_releaseC

Update an existing release in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe release name
tag_nameYesThe Git tag the release is associated with
milestonesNoThe title of each milestone to associate with the release. GitLab Premium customers can specify group milestones. To remove all milestones from the release, specify [].
project_idNoProject ID or URL-encoded path
descriptionNoThe description of the release. You can use Markdown.
released_atNoThe date when the release is/was ready. Expected in ISO 8601 format (2019-03-15T08:00:00Z).

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 must carry the behavioral burden. It only states that an existing release is updated, but does not disclose whether fields are overwritten partially or fully, whether the operation is reversible, what authentication or permissions are needed, or what the response will contain.

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 with no filler. It communicates the core action and resource immediately and is appropriately sized for the tool's simplicity.

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?

Despite complete parameter schema coverage, the tool has no annotations, no output schema, and no usage guidance. For a mutating operation, an agent would benefit from knowing update semantics, required identification via tag_name, and any side effects; the current description leaves those 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 input schema fully documents all six parameters. The description adds no additional parameter-level meaning, such as the significance of tag_name as the release identifier, but the baseline of 3 applies because 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 uses a clear verb-resource pair: 'Update an existing release' in a GitLab project. The word 'existing' differentiates it from create_release, and the update action separates it from get/list/delete release tools, though it does not explicitly name sibling 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?

There is no guidance on when to use this tool versus create_release, delete_release, or get_release. The description implies an existing release must be modified, but it does not state prerequisites, such as requiring the release's tag, or when to prefer another tool.

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

update_wiki_pageA

Update an existing wiki page in a GitLab project

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesURL-encoded slug of the wiki page
titleNoNew title of the wiki page
formatNoContent format, e.g., markdown, rdoc
contentNoNew content of the wiki page
project_idNoProject ID or URL-encoded path

TDQS

A3.5/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 disclosure responsibility. It only states that an update occurs, without explaining overwrite/merge semantics, partial-update behavior, permission requirements, or side effects.

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 concise sentence that communicates the tool's purpose without redundancy. It is appropriately front-loaded and contains no wasted information.

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 straightforward update operation with fully documented parameters, the description is minimally viable. However, with no annotations and no output schema, it leaves return behavior and partial-update semantics to inference, which is a real but not severe gap.

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 are already documented in the schema. The description adds no parameter-level meaning beyond the schema, so the baseline score of 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?

Clearly identifies the action (update), the resource (existing wiki page), and the system (GitLab project). The word 'existing' and verb 'update' distinguish it from sibling tools like create_wiki_page, delete_wiki_page, get_wiki_page, and list_wiki_pages.

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 for modifying already-created pages via the word 'existing', but it does not explicitly name alternatives or state when not to use this tool. No exclusions or prerequisite conditions are provided.

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

upload_markdownB

Upload a file to a GitLab project for use in markdown content

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesPath to the file to upload
project_idYesProject ID or URL-encoded path of the project

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 must carry the full behavioral burden, but it only states the action. It does not disclose side effects, response type, upload constraints, or permission requirements, which leaves an agent without a clear model of what the call will do or return.

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 short, front-loaded sentence with no filler; the verb and object appear immediately. However, the brevity is so severe that it omits behavioral context, so it is not fully 'appropriately sized' for a tool with no annotations or output 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 only two well-schema'd parameters and a low-complexity operation, the minimum needed for invocation is mostly present. But the lack of any return-value or behavior hint matters because there is no output schema and no annotations, making the description adequate for selection but incomplete for understanding the full outcome.

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?

The schema covers 100% of the parameters with clear descriptions for project_id and file_path, so the baseline is 3. The description adds no extra parameter-level meaning, such as whether file_path is a local source path or a destination path in the repository.

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 concrete action ('Upload a file') and a target resource ('a GitLab project'), with an explicit purpose ('for use in markdown content'). It is distinguishable from file-commit tools like create_or_update_file or push_files, though it does not explicitly contrast 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?

The intended use is implied by 'for use in markdown content,' giving some context for when an agent would choose this tool. It provides no explicit when-to-use/when-not-to-use guidance or alternatives, and given the large set of sibling file and repository tools, routing is left largely to inference.

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

verify_namespaceC

Verify if a namespace path exists

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesNamespace path to verify

TDQS

C2.9/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full behavioral disclosure burden, but it only restates the core action. It does not disclose what happens when the path does not exist (error vs. false), the return shape, or whether path semantics cover parent namespaces — all critical for a verify-style 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 six-word sentence with no wasted words, and the core verb is front-loaded. It is appropriately sized for the content, though the brevity contributes to gaps scored in other dimensions.

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 output schema and no annotations, the description should clarify what 'verify' returns and how failures are signaled, but it does neither. For a simple one-parameter tool it is minimally usable, yet the central return-value behavior is left unspecified.

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 already describes path as 'Namespace path to verify.' The description adds no format, syntax, or scope details beyond what the schema provides, so it meets the baseline but does not exceed it.

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 uses a specific verb and resource: 'Verify if a namespace path exists.' It clearly communicates a lightweight existence check, which is distinct in intent from siblings like get_namespace or list_namespaces, though it doesn't 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?

No guidance is given on when to use this tool versus closely related siblings such as get_namespace or list_namespaces. Intended use is only implied by the tool name and the single phrase; there are no exclusions, prerequisites, or alternative routing provided.

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. 115 tool updatesv2.0.35
    • First observedapprove_merge_request
    • First observedbulk_publish_draft_notes
    • First observedcancel_pipeline
    • First observedcancel_pipeline_job
    • First observedcreate_branch
    • First observedcreate_draft_note
    • First observedcreate_issue
    • First observedcreate_issue_link
    • First observedcreate_issue_note
    • First observedcreate_label
    • First observedcreate_merge_request
    • First observedcreate_merge_request_discussion_note
    • First observedcreate_merge_request_note
    • First observedcreate_merge_request_thread
    • First observedcreate_milestone
    • First observedcreate_note
    • First observedcreate_or_update_file
    • First observedcreate_pipeline
    • First observedcreate_release
    • First observedcreate_release_evidence
    • First observedcreate_repository
    • First observedcreate_wiki_page
    • First observeddelete_draft_note
    • First observeddelete_issue
    • First observeddelete_issue_link
    • First observeddelete_label
    • First observeddelete_merge_request_discussion_note
    • First observeddelete_merge_request_note
    • First observeddelete_milestone
    • First observeddelete_release
    • First observeddelete_wiki_page
    • First observeddownload_attachment
    • First observeddownload_job_artifacts
    • First observeddownload_release_asset
    • First observededit_milestone
    • First observedfork_repository
    • First observedget_branch_diffs
    • First observedget_commit
    • First observedget_commit_diff
    • First observedget_deployment
    • First observedget_draft_note
    • First observedget_environment
    • First observedget_file_contents
    • First observedget_issue
    • First observedget_issue_link
    • First observedget_job_artifact_file
    • First observedget_label
    • First observedget_merge_request
    • First observedget_merge_request_approval_state
    • First observedget_merge_request_conflicts
    • First observedget_merge_request_diffs
    • First observedget_merge_request_note
    • First observedget_merge_request_notes
    • First observedget_merge_request_version
    • First observedget_milestone
    • First observedget_milestone_burndown_events
    • First observedget_milestone_issue
    • First observedget_milestone_merge_requests
    • First observedget_namespace
    • First observedget_pipeline
    • First observedget_pipeline_job
    • First observedget_pipeline_job_output
    • First observedget_project
    • First observedget_project_events
    • First observedget_release
    • First observedget_repository_tree
    • First observedget_users
    • First observedget_wiki_page
    • First observedlist_commits
    • First observedlist_deployments
    • First observedlist_draft_notes
    • First observedlist_environments
    • First observedlist_events
    • First observedlist_group_iterations
    • First observedlist_group_projects
    • First observedlist_issue_discussions
    • First observedlist_issue_links
    • First observedlist_issues
    • First observedlist_job_artifacts
    • First observedlist_labels
    • First observedlist_merge_request_diffs
    • First observedlist_merge_request_versions
    • First observedlist_merge_requests
    • First observedlist_milestones
    • First observedlist_namespaces
    • First observedlist_pipeline_jobs
    • First observedlist_pipeline_trigger_jobs
    • First observedlist_pipelines
    • First observedlist_project_members
    • First observedlist_projects
    • First observedlist_releases
    • First observedlist_wiki_pages
    • First observedmerge_merge_request
    • First observedmr_discussions
    • First observedmy_issues
    • First observedplay_pipeline_job
    • First observedpromote_milestone
    • First observedpublish_draft_note
    • First observedpush_files
    • First observedresolve_merge_request_thread
    • First observedretry_pipeline
    • First observedretry_pipeline_job
    • First observedsearch_repositories
    • First observedunapprove_merge_request
    • First observedupdate_draft_note
    • First observedupdate_issue
    • First observedupdate_issue_note
    • First observedupdate_label
    • First observedupdate_merge_request
    • First observedupdate_merge_request_discussion_note
    • First observedupdate_merge_request_note
    • First observedupdate_release
    • First observedupdate_wiki_page
    • First observedupload_markdown
    • First observedverify_namespace

TDQS

C2.6/5.0

Scored across 115 tools

Disambiguation2/5

While most tools target specific resources, several boundaries are unclear: create_note overlaps with create_issue_note and create_merge_request_note, get_merge_request_diffs overlaps with list_merge_request_diffs, and get_file_contents overlaps with get_repository_tree for directory listings. The note/discussion/thread/draft family and list_issues vs my_issues also create real misselection risk.

Naming Consistency3/5

The core verb_noun pattern is recognizable and mostly readable, but there are notable deviations: mr_discussions and my_issues don't follow the verb pattern, get_merge_request_notes is actually a list operation, create_or_update_file bundles two verbs, and bulk_publish_draft_notes uses an adverb prefix. These inconsistencies make the set feel mixed rather than systematic.

Tool Count1/5

At 115 tools this is an extreme tool count for an agent-facing server, far beyond the typical well-scoped 3-15 range. Even for GitLab's broad domain, the surface is overwhelming and selection cost is high.

Completeness3/5

The server covers a remarkably wide surface: MRs, issues, pipelines, releases, milestones, wiki, labels, environments, and file operations. However, several lifecycle gaps remain: no delete_file, delete_branch, delete_project, or delete_merge_request, and environments/deployments are read-only. These are notable dead ends for common workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with GitLab repositories, manage merge requests, review code diffs, post comments, and handle issues directly through natural language.
    28 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with GitLab repositories, allowing them to manage merge requests and issues including listing projects, fetching MR details and diffs, adding comments, and updating MR titles and descriptions.
    28 npm
    94
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to interact with GitLab repositories, monitor documentation changes, manage issues and merge requests, and search across projects with comprehensive file and commit operations.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with GitLab for managing projects, branches, issues, and merge requests. It provides tools for searching code and performing file operations like reading and writing directly within repositories.
    4 npm
    MIT