gitlab-mcp-server
Provides integration with GitLab, enabling management of projects, groups, merge requests, and repository code reading via MCP tools.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gitlab-mcp-serverlist merge requests in my-group/my-project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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:
Method 1: Personal Access Token (Recommended for most users)
Create a GitLab Personal Access Token:
Go to GitLab → User Settings → Access Tokens
Create a token with
read_apiscope (minimum required)
Set the
GITLAB_TOKENenvironment variable to your token value
Method 2: OAuth2 Token (For OAuth2 applications)
If you have an OAuth2 token from a GitLab OAuth2 application flow
Set the
GITLAB_OAUTH_TOKENenvironment variable to your OAuth2 token value
To create an OAuth2 application:
Go to GitLab → User Settings → Applications
Create a new application with appropriate scopes (
read_apiminimum)Use the OAuth2 flow to obtain an access token
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 tohttps://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,*.jsor 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_serverTesting 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_serverAvailable Tools
10 toolsget_merge_request_analyticsB
Calculate merge request lifetime analytics for a GitLab repository.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID or path (e.g., 'username/repo-name') | |
| days_back | No | Number of days back to analyze (default: 90) | |
| per_page | No | Number of merge requests to fetch per page (max 100) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID or path (e.g., 'username/repo-name') |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group_id | Yes | The group ID or path | |
| per_page | No | Number of projects to return (max 100) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| owned | No | Only list groups owned by the authenticated user | |
| per_page | No | Number of groups to return (max 100) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID or path (e.g., 'username/repo-name') | |
| state | No | State of merge requests (opened, closed, merged, all) | all |
| per_page | No | Number of merge requests to return (max 100) | |
| order_by | No | Order by field (created_at, updated_at, title) | created_at |
| sort | No | Sort order (asc, desc) | desc |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| owned | No | Only list projects owned by the authenticated user | |
| starred | No | Only list starred projects | |
| per_page | No | Number of projects to return (max 100) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID or path (e.g., 'username/repo-name') | |
| ref | No | Branch, tag, or commit SHA | main |
| path | No | Specific directory path to read (leave empty for root) | |
| max_files | No | Maximum number of files to read (default: 50) | |
| max_file_size | No | Maximum file size in bytes to read (default: 100KB) | |
| include_patterns | No | Comma-separated file patterns to include (e.g., '*.py,*.js') | |
| exclude_patterns | No | Comma-separated file patterns to exclude (e.g., '*.log,*.tmp') | *.log,*.tmp,*.lock,node_modules/*,__pycache__/*,*.pyc,*.pyo,*.pyd,.git/* |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The project ID or path (e.g., 'username/repo-name') | |
| file_path | Yes | Path to the file to read | |
| ref | No | Branch, tag, or commit SHA | main |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| search | Yes | Search term to find repositories by name, description, or content | |
| per_page | No | Number of repositories to return (max 100) |
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v0.1.0- First observed
get_merge_request_analytics - First observed
get_repository_details - First observed
get_user_info - First observed
list_group_projects - First observed
list_groups - First observed
list_merge_requests - First observed
list_projects - First observed
read_repository_code - First observed
read_repository_file - First observed
search_repositories
TDQS
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.
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.
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.
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
GitLab MCP — wraps the GitLab REST API v4 (BYO API key)
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
GitLab Public MCP — wraps the GitLab REST API v4 (public endpoints, no auth)
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with GitLab repositories through secure OAuth 2.0 authentication. Supports comprehensive GitLab operations including merge requests, issues, file management, commits, and branch operations through natural language.21MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.4894MIT
- FlicenseNot gradedqualityDmaintenanceEnables GitLab integration through MCP, supporting code review and project management via natural language.11-
- AlicenseNot gradedqualityDmaintenanceIntegrates AI assistants with GitLab API to manage projects, issues, merge requests, files, and more through MCP tools and resources.25ISC
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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