Skip to main content
Glama
kopiloto

gitlab-mcp-server

by kopiloto

mcp-gitlab-server

⚠️ Development Stage Notice
This project is currently in development stage. Features and APIs may change without notice. Use with caution in production environments.

GitLab MCP server based on python-gitlab.

Install

Using Personal Access Token (Most Common)

{
  "mcpServers": {
    "GitLab": {
      "command": "uvx",
      "args": [
        "gitlab-mcp-server"
      ],
      "env": {
        "GITLAB_TOKEN": "<your GitLab personal access token>",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

Using OAuth2 Token

{
  "mcpServers": {
    "GitLab": {
      "command": "uvx",
      "args": [
        "gitlab-mcp-server"
      ],
      "env": {
        "GITLAB_OAUTH_TOKEN": "<your GitLab OAuth2 token>",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

For self-hosted GitLab instances, set GITLAB_URL to your GitLab instance URL (e.g., https://gitlab.example.com). If not set, it defaults to https://gitlab.com.

Related MCP server: GitLab MR MCP

Authentication

This MCP server supports two authentication methods:

  1. Create a GitLab Personal Access Token:

    • Go to GitLab → User Settings → Access Tokens

    • Create a token with read_api scope (minimum required)

  2. Set the GITLAB_TOKEN environment variable to your token value

Method 2: OAuth2 Token (For OAuth2 applications)

  1. If you have an OAuth2 token from a GitLab OAuth2 application flow

  2. Set the GITLAB_OAUTH_TOKEN environment variable to your OAuth2 token value

To create an OAuth2 application:

  1. Go to GitLab → User Settings → Applications

  2. Create a new application with appropriate scopes (read_api minimum)

  3. Use the OAuth2 flow to obtain an access token

  4. Use that token as GITLAB_OAUTH_TOKEN

Environment Variables

  • GITLAB_TOKEN - Your GitLab Personal Access Token (if using personal token auth)

  • GITLAB_OAUTH_TOKEN - Your GitLab OAuth2 Token (if using OAuth2 auth)

  • GITLAB_URL - GitLab instance URL (defaults to https://gitlab.com)

Note: The server will first check for GITLAB_OAUTH_TOKEN, and if not found, will use GITLAB_TOKEN. You only need to set one of these.

Tools

Repository & Project Management

  • list_projects - List GitLab projects accessible to the authenticated user (supports filtering by owned/starred and pagination)

  • list_groups - List GitLab groups accessible to the authenticated user

  • list_group_projects - List all projects within a specific GitLab group

  • get_user_info - Get information about the authenticated user

  • search_repositories - Search for GitLab repositories by name, description, or keywords

  • get_repository_details - Get detailed information about a specific repository

Code Access

  • read_repository_code - Read the complete code structure and content of a repository with filtering options

  • read_repository_file - Read the content of a specific file from a repository

Merge Request Analytics

  • list_merge_requests - List merge requests for a repository with filtering by state, ordering, and pagination

  • get_merge_request_analytics - Calculate comprehensive merge request lifetime statistics including average time from creation to merge

Repository Code Reading Features

The MCP server provides powerful code reading capabilities:

read_repository_code

Reads the entire repository structure and file contents with advanced filtering:

  • Selective Reading: Include/exclude files using glob patterns (e.g., *.py,*.js or exclude *.log,node_modules/*)

  • Size Limits: Control maximum files to read and file size limits to prevent overwhelming responses

  • Branch/Tag Support: Read from any branch, tag, or commit SHA

  • Directory Filtering: Focus on specific directories within the repository

  • Smart Filtering: Automatically excludes common build artifacts, logs, and binary files

Example Usage:

  • Read only Python files: include_patterns: "*.py"

  • Exclude tests: exclude_patterns: "*test*,*spec*"

  • Read specific directory: path: "src/"

  • Different branch: ref: "develop"

read_repository_file

Reads individual files from a repository:

  • Single File Access: Get content of specific files quickly

  • Metadata Included: File size, encoding, last commit info

  • Binary Detection: Safely handles binary files

  • Flexible References: Works with branches, tags, or commit SHAs

Limits & Safety:

  • Default: Max 50 files, 100KB per file

  • Configurable limits to prevent timeouts

  • Automatic binary file detection

  • Graceful error handling for large repositories

Merge Request Analytics Features

The MCP server provides comprehensive merge request analytics capabilities:

list_merge_requests

Lists merge requests with advanced filtering and sorting:

  • State Filtering: Filter by state (opened, closed, merged, all)

  • Flexible Sorting: Order by creation date, update date, or title

  • Rich Metadata: Includes author, assignees, reviewers, labels, and voting info

  • Pagination Support: Control number of results returned

get_merge_request_analytics

Calculates detailed merge request lifetime statistics:

  • Lifetime Analysis: Average, median, min/max time from creation to merge

  • Statistical Distribution: 25th, 75th, and 90th percentile analysis

  • Time Period Control: Analyze MRs from the last N days (default: 90 days)

  • Detailed Breakdown: Individual MR details with exact lifetime calculations

  • Multiple Time Units: Results provided in both hours and days

Example Questions You Can Answer:

  • "What is the average lifetime of an MR in the acapulco repository?"

  • "How long do merge requests typically take to get merged?"

  • "What's the distribution of merge request lifetimes?"

  • "Which merge requests took the longest to merge?"

Analytics Output:

  • Average, median, min, max merge times

  • Percentile analysis (25th, 75th, 90th)

  • Sample merge requests with individual lifetimes

  • Complete dataset for further analysis

Development

# Clone the repository
git clone <repo-url>
cd gitlab-mcp-server

# Install dependencies
uv sync

# Run in development mode
uv run python -m mcp_gitlab_server

Testing Configuration

For development and testing purposes, you can use a local wheel file installation:

MCP Configuration for Testing:

{
  "mcpServers": {
    "GitLab": {
      "command": "uvx",
      "args": [
        "--from", "/path/to/your/gitlab-mcp-server/dist/mcp_gitlab_server-0.1.0-py3-none-any.whl",
        "gitlab-mcp-server"
      ],
      "env": {
        "GITLAB_TOKEN": "your-gitlab-token-here",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

Build and Test Steps:

# Build the wheel file
uv build

# Test with MCP client (like Claude Desktop)
# Update your MCP configuration with the local wheel path
# The wheel file will be in ./dist/ directory

# For quick testing, verify the server starts:
uv run python -m mcp_gitlab_server

Available Tools

10 tools
get_merge_request_analyticsB

Calculate merge request lifetime analytics for a GitLab repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID or path (e.g., 'username/repo-name')
days_backNoNumber of days back to analyze (default: 90)
per_pageNoNumber of merge requests to fetch per page (max 100)

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 burden. It only says 'calculate... analytics' without disclosing read-only nature, rate limits, or output format. Minimal behavioral disclosure.

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

Conciseness4/5

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

The description is a single sentence, front-loaded with the verb and resource. It is concise with no wasted words, though a bit more detail would be beneficial without sacrificing brevity.

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 output schema exists, so the description should explain what the return value contains (e.g., average time to merge, distribution). It lacks this information, making it incomplete for a calculation 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 coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema's parameter descriptions, which already document all three parameters (project_id, days_back, per_page).

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 tool calculates merge request lifetime analytics, specifying the verb 'calculate' and the resource 'merge request analytics'. It distinguishes from siblings like list_merge_requests by focusing on analytics rather than listing.

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?

No explicit guidance on when to use this tool versus alternatives. Usage is implied by the description (for analytics), but there is no mention of when not to use it or of sibling tools like list_merge_requests as an alternative.

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

get_repository_detailsC

Get detailed information about a specific GitLab repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID or path (e.g., 'username/repo-name')

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits (e.g., permissions required, side effects, or what 'detailed information' encompasses). This leaves agents uninformed about potential access restrictions or return value scope.

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 that directly states the tool's purpose. While it lacks structure, it is efficient and saves the agent's attention, earning a high score for 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?

Given the tool's simplicity (one parameter, no output schema), the description is minimally adequate but incomplete. It lacks details on return values, error handling, or the scope of 'detailed information,' which could lead to incorrect usage.

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 with a single parameter (project_id) fully described. The description adds no extra meaning beyond what the schema provides, so 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 the tool retrieves detailed information about a GitLab repository using the verb 'get' and specific resource 'repository details'. However, it does not distinguish itself from sibling tools like read_repository_code or list_projects, which could cause confusion.

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 vs alternatives, such as when 'detailed information' is needed versus listing projects or reading a file. There are no explicit usage 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_user_infoA

Get information about the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

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

Without annotations, the description carries the burden of behavioral disclosure. It only says 'Get', implying a read operation, but omits details like authentication requirements, rate limits, or the scope of returned information.

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 extraneous words, earning its place efficiently.

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 read tool with no parameters and no output schema, the description is adequate but could hint at what specific information is returned (e.g., email, name).

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?

There are no parameters. Schema coverage is 100% (empty). The description adds no param information, but for zero-parameter tools, the baseline is 4.

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 'Get information about the authenticated user' uses a specific verb ('Get') and resource ('authenticated user'), clearly distinguishing it from sibling tools focused on merge requests, repositories, groups, etc.

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 does not explicitly state when to use this tool or provide exclusions. However, the context implies it is for retrieving user info, and siblings cover other domains, so usage is reasonably inferred.

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

list_group_projectsB

List all projects within a specific GitLab group.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_idYesThe group ID or path
per_pageNoNumber of projects to return (max 100)

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description only states the action without disclosing behavioral traits such as pagination behavior, authentication requirements, or error handling. It carries the full burden but falls short.

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 fluff. While efficient, it could benefit from slightly more context, but it earns a high score for being front-loaded and to the point.

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 tool, the description is adequate but missing context about pagination (though per_page parameter exists) and return format. An output schema is absent, so more description would help.

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 clear parameter descriptions. The tool description does not add significant meaning beyond the schema; 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 'List all projects within a specific GitLab group', specifying verb (list) and resource (projects) with scope (within a specific group). It effectively distinguishes from sibling tools like list_projects and list_groups.

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 listing projects under a group but provides no explicit guidance on when to use this tool versus alternatives like list_projects, nor any prerequisites or context.

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

list_groupsA

List GitLab groups accessible to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownedNoOnly list groups owned by the authenticated user
per_pageNoNumber of groups to return (max 100)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description partially carries the burden of behavioral disclosure. It indicates that the tool is a read operation by implying listing, but it does not disclose pagination behavior, rate limits, or any side effects. The mention of 'accessible to the authenticated user' adds minimal 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 a single sentence with no redundant words. It conveys the essential purpose efficiently without any waste.

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

Completeness3/5

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

Given the tool's simplicity (0 required params, no output schema), the description is barely adequate. It omits details about return format, pagination limits, or common use cases. However, the schema covers parameters, and the purpose is clear, so it achieves a minimal 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 the schema already explains both parameters adequately. The description adds no additional context or constraints beyond what the schema provides, thus meeting the baseline 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 clearly states the verb 'List' and the resource 'GitLab groups' with a specific scope 'accessible to the authenticated user'. This distinguishes it from sibling tools that list different entities, such as list_projects or list_merge_requests.

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 list_group_projects. It does not mention prerequisites, constraints, or exclusions. For a list operation, it lacks explicit context 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_requestsC

List merge requests for a GitLab repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID or path (e.g., 'username/repo-name')
stateNoState of merge requests (opened, closed, merged, all)all
per_pageNoNumber of merge requests to return (max 100)
order_byNoOrder by field (created_at, updated_at, title)created_at
sortNoSort order (asc, desc)desc

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 disclose behavioral traits. It only states 'list merge requests', missing details on pagination, permissions, rate limits, or output structure. Does not clarify that it returns a list of merge request objects.

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?

Extremely concise: a single sentence with no redundancy. However, it could be slightly expanded to mention key parameters (state, order) without losing efficiency.

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, the description should at least hint at the return value (list of MRs). It lacks completeness for a list endpoint. The schema covers parameters but the tool's overall context is underspecified.

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

Parameters3/5

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

Schema coverage is 100%, so the parameters are fully documented in the schema. The description adds no additional meaning beyond what the schema provides (e.g., no examples, constraints, or relations).

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?

Clearly states the action ('List merge requests') and the resource ('GitLab repository'). Differentiates from siblings like get_merge_request_analytics or get_repository_details. Lacks specificity about filtering and sorting options, but the verb-resource pair 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?

No usage guidance provided. Does not indicate when to use this tool versus alternatives (e.g., when to use get_merge_request_analytics), nor when not to use it. No prerequisites or context are mentioned.

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

list_projectsB

List GitLab projects accessible to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownedNoOnly list projects owned by the authenticated user
starredNoOnly list starred projects
per_pageNoNumber of projects to return (max 100)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description should disclose pagination, rate limits, or ordering behavior. It only states the basic function, leaving significant behavioral aspects unspecified.

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?

Single, straightforward sentence without unnecessary words. Efficient and to the point.

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?

Lacks information about output structure, pagination details, or how results are ordered. In the context of multiple list/search siblings and no output schema, the description is insufficient.

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 clear parameter explanations. The tool description adds no extra meaning beyond what the schema already provides, so 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 clearly states the action ('List'), the resource ('GitLab projects'), and the scope ('accessible to the authenticated user'), distinguishing it from sibling tools like list_group_projects.

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 on when to use this tool versus alternatives such as list_group_projects or search_repositories. The description only implies a scope but does not provide decision criteria.

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

read_repository_codeB

Read the complete code structure and content of a repository with filtering options.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID or path (e.g., 'username/repo-name')
refNoBranch, tag, or commit SHAmain
pathNoSpecific directory path to read (leave empty for root)
max_filesNoMaximum number of files to read (default: 50)
max_file_sizeNoMaximum file size in bytes to read (default: 100KB)
include_patternsNoComma-separated file patterns to include (e.g., '*.py,*.js')
exclude_patternsNoComma-separated file patterns to exclude (e.g., '*.log,*.tmp')*.log,*.tmp,*.lock,node_modules/*,__pycache__/*,*.pyc,*.pyo,*.pyd,.git/*

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only states 'Read' and mentions filtering options. It does not explain recursion, limits, or how the 'complete code structure' is returned.

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 unnecessary words. It is concise but could be slightly more structured (e.g., bullet points for options).

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 7 parameters and no output schema, the description is too brief. It doesn't explain what 'complete code structure' entails, how output is formatted, or the impact of filtering 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 baseline is 3. The description adds little beyond the schema—'filtering options' is generic and doesn't clarify parameter 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 uses a specific verb ('Read') and resource ('complete code structure and content'), clearly distinguishing it from sibling tools like read_repository_file (single file) and get_repository_details (metadata).

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 read_repository_file, nor does it specify prerequisites or preferred use cases.

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

read_repository_fileB

Read the content of a specific file from a GitLab repository.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID or path (e.g., 'username/repo-name')
file_pathYesPath to the file to read
refNoBranch, tag, or commit SHAmain

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It states the action ('Read') but misses behavioral details such as file size limits, encoding, binary support, required permissions, or error conditions. This lack of depth limits the agent's ability to anticipate 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, front-loaded sentence that conveys the essential purpose with no extraneous words. It is appropriately sized for a simple read operation 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?

Given the tool has 3 parameters, no output schema, and no annotations, the description provides minimal context. It states the basic action but does not cover common usage patterns, return format, or edge cases. While the tool is low complexity, the description leaves gaps that could confuse 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?

The input schema has 100% parameter description coverage, so the description does not add meaning beyond what the schema already provides. A baseline of 3 is appropriate; no additional value is given by the description.

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 clear verb ('Read') and specifies the resource ('content of a specific file from a GitLab repository'). It is distinct from sibling 'read_repository_code' by specifying 'file' vs 'code', and no other sibling reads file content. The purpose is immediately understandable.

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, no prerequisites, no exclusion criteria, and no mention of when not to use it. The agent gets no contextual help for decision-making.

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

search_repositoriesB

Search for GitLab repositories by name, description, or keywords.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchYesSearch term to find repositories by name, description, or content
per_pageNoNumber of repositories to return (max 100)

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, so the description is the sole source of behavioral disclosure. It does not mention pagination behavior, rate limits, authentication requirements, or how search matching works (e.g., exact match vs. fuzzy).

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 redundant words. It is front-loaded with the core action and resource, and every word earns its place.

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 that there are no annotations and no output schema, the description is too minimal. It does not explain the return format, error handling, or how to interpret results. For a tool with two parameters and no output schema, more contextual detail is expected.

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%, so both parameters are documented in the schema. The description adds a slight nuance by mentioning 'keywords' versus the schema's 'content', but does not provide significant additional meaning beyond the schema 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 clearly specifies the verb 'search', the resource 'GitLab repositories', and the search scope 'by name, description, or keywords'. It distinguishes this tool from siblings like list_projects (which lists all projects) and get_repository_details (which retrieves details of a specific repository).

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_projects or get_repository_details. There are no statements about when not to use it or what prerequisites are needed.

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. Dates show when Glama detected each change.

  1. 10 tool updatesv0.1.0
    • First observedget_merge_request_analytics
    • First observedget_repository_details
    • First observedget_user_info
    • First observedlist_group_projects
    • First observedlist_groups
    • First observedlist_merge_requests
    • First observedlist_projects
    • First observedread_repository_code
    • First observedread_repository_file
    • First observedsearch_repositories

TDQS

A3.5/5.0
Disambiguation5/5

Each tool targets a distinct resource or aspect: user info, groups, projects, merge requests, code reading, and search. There is no functional overlap between tools.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (e.g., get_, list_, read_, search_), making it predictable for an agent to infer behavior.

Tool Count5/5

With 10 tools covering user, group, project, merge request, and code reading operations, the set is well-scoped for a GitLab-focused server without being overwhelming.

Completeness2/5

The tool set is read-only and lacks any mutation capabilities (create, update, delete, merge) for repositories, groups, or merge requests, which are essential for GitLab workflows.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kopiloto/mcp-gitlab-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server