GitLab MCP Server
Interacts with a GitLab server, providing tools for managing projects, issues, notes, searches, todos, and wiki pages.
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 my projects"
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.
GitLab MCP Server
interact with a GitLab server.
This is a TypeScript-based MCP server that interacts with a self-hosted GitLab instance. The server provides tools to fetch and manage GitLab data, specifically projects, issues, and issue notes (comments). The available tools are: list_projects, get_issues, get_issue_notes, search, get_issue, get_todos, get_wiki_page, and list_wiki_pages.
Features
This GitLab MCP server provides the following tools:
list_projects: Lists all projects accessible to the user.get_issues: Gets issues for a specific project, with basic filtering.get_issue_notes: Gets notes (comments) for a specific issue.search: Searches for projects and issues based on a search term.get_issue: Retrieves a specific issue from a project using its ID and IID.get_todos: Retrieves a list of to-do items with optional filters.get_wiki_page: Retrieves a specific wiki page by project ID and slug.list_wiki_pages: Retrieves all wiki pages for a given project.
Related MCP server: gitlab-mcp
Development
Install dependencies:
npm installBuild the server:
npm run buildFor development with auto-rebuild:
npm run watchInstallation
To use with Claude Desktop, add the server config:
{
"mcpServers": {
"gitlab-server": {
"command": "/path/to/gitlab-server/build/index.js",
"env": {
"GITLAB_API_TOKEN": "<Gitlab API Token >",
"GITLAB_HOST": "<GitLab Host URL>"
}
}
}
}Debugging
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspectorThe Inspector will provide a URL to access debugging tools in your browser.
GitLab API Documentation
https://gitlab.com/gitlab-org/gitlab/-/tree/master/doc/api https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/rest/_index.md https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/rest/authentication.md https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/projects.md https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/issues.md https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/notes.md https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/issue_links.md https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/search.md https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/wikis.md
Available Tools
16 toolsgitlab_create_branchCreate BranchC
Create a new branch in the project
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | Branch name or commit SHA to create branch from | |
| branch | Yes | Name for the new branch | |
| projectId | Yes | The ID or URL-encoded path of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It only states the action without explaining side effects, failure conditions (e.g., if branch already exists), permissions required, or the return value.
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 redundant words. It is front-loaded with the action and resource, making it easy to scan.
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 annotations and no output schema, the description is incomplete. It does not describe the return value, potential error cases, or any side effects, leaving the agent with insufficient context for a mutation 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?
The input schema covers all three parameters with clear descriptions, so the description adds no extra semantic meaning. The baseline of 3 applies since schema coverage is 100%.
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 (create) and the resource (a new branch in the project). It is distinct from sibling tools like create_issue or create_merge_request, though it does not explicitly differentiate itself by naming alternatives.
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. There is no mention of prerequisites, such as the ref being an existing branch or commit SHA, nor any context like when creating a branch is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_issueCreate IssueA
Create a new issue in a project
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The title of an issue | |
| labels | No | Comma-separated label names for an issue | |
| projectId | Yes | The ID or URL-encoded path of the project | |
| description | No | The description of an issue | |
| assignee_ids | No | The IDs of the users to assign the issue to | |
| confidential | No | Set an issue to be confidential | |
| milestone_id | No | The global ID of a milestone to assign issue to |
TDQS
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 'Create a new issue in a project' without detailing permissions required, whether the action is reversible, what response to expect, or other side effects. The create operation is implied, but important contextual behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (7 words), front-loaded with the core action. Every word earns its place, and there is no fluff or redundancy. It 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal but combined with a fully self-documenting schema (100% parameter coverage), it provides adequate context for a straightforward create operation. However, with no output schema and no behavioral details (e.g., return value, permissions), the description is not fully complete for a mutation 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?
The input schema provides 100% coverage of all 7 parameters with descriptions, so the description does not need to explain them. The phrase 'new issue in a project' adds minimal context about projectId being required, but it does not add meaning beyond what the schema already provides. Baseline 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 'Create a new issue in a project' uses a specific verb ('Create') and resource ('new issue in a project'), clearly distinguishing this tool from siblings like gitlab_get_issues, gitlab_edit_issue, and gitlab_create_merge_request. It unambiguously states the tool's core function.
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 when creating an issue but does not explicitly state when to use this tool over alternatives or provide exclusions. There is no mention of sibling tools or when-not-to-use guidance, so the context is clear but only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_issue_noteCreate Issue NoteB
Create a new note/comment on an issue
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The content of the note/comment | |
| internal | No | The internal flag of a note. Overrides confidential. Default is false. | |
| issueIid | Yes | The internal ID of a project's issue | |
| projectId | Yes | The ID or URL-encoded path of the project | |
| created_at | No | Date time string, ISO 8601 formatted. Example: 2016-03-11T03:45:40Z | |
| confidential | No | Deprecated: Scheduled to be removed in GitLab 16.0. Use 'internal' instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the agent knows this is a write operation. The description adds no extra behavioral context, such as permission requirements, that creating a note is non-idempotent (each call adds a new note), or that it appends to the issue. Since it adds nothing beyond annotations, the score is low.
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 with no wasted words. It is concise and easy to parse. However, it is so terse that it misses opportunities to include meaningful guidance, which keeps it from a perfect score.
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 moderate complexity (6 parameters, 3 required) and the rich schema descriptions, the minimal description is functional but leaves gaps. It does not mention return values, typical use cases, or the significance of parameters like 'created_at' or 'internal'. The schema and annotations compensate partially, but the description alone is not fully complete.
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 descriptions for each parameter (e.g., 'body' as 'The content of the note/comment'). The tool description itself does not mention any parameter details, so it relies on the schema. This meets the baseline of 3, as the schema already provides the necessary meaning.
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's action with a specific verb ('Create') and a specific resource ('a new note/comment on an issue'). This distinguishes it from sibling tools like gitlab_edit_issue_note (edit an existing note) and gitlab_get_issue_notes (list notes).
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. It does not mention scenarios (e.g., 'Use this to add a comment to an issue') or exclude cases where other tools are more appropriate. It is a bare definition with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_create_merge_requestCreate Merge RequestC
Create a new merge request
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Title of MR | |
| projectId | Yes | The ID or URL-encoded path of the project | |
| assignee_id | No | Assignee user ID | |
| description | No | Description of MR (e.g., 'Closes #123') | |
| source_branch | Yes | The source branch | |
| target_branch | Yes | The target branch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. It implies a mutation (creating an MR) but provides no details about return values, permissions needed, side effects, or error behavior. This is a significant gap for a state-changing operation.
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 short sentence, making it concise. However, it is under-specified and largely redundant with the tool name, so the brevity comes at the cost of substantive content. It is not overly verbose, but it also does not earn its place by adding value.
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?
The tool has 6 parameters and no output schema, yet the description provides no additional context about what the tool returns, when it might fail, or how it behaves. The description is too sparse to be considered complete for a create operation of this complexity.
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% description coverage for all parameters, so the schema already documents each field. The description itself adds no parameter-specific information, which is acceptable given the high schema coverage per 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 states a specific verb ('create') and resource ('merge request'), clearly distinguishing it from siblings like 'gitlab_edit_merge_request'. However, it is extremely minimal and adds little beyond the tool's name and title.
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. It does not mention prerequisites, common use cases, or exclusions. The description only restates the action without any contextual direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_edit_issueEdit IssueB
Edit an existing issue in a project
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | The title of an issue | |
| labels | No | Comma-separated label names for an issue | |
| issueIid | Yes | The internal ID of a project's issue | |
| projectId | Yes | The ID or URL-encoded path of the project | |
| description | No | The description of an issue | |
| state_event | No | State event for an issue (close or reopen) | |
| assignee_ids | No | The IDs of the users to assign the issue to | |
| confidential | No | Set an issue to be confidential |
TDQS
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 'Edit an existing issue' without explaining whether updates are partial or full, what permissions are needed, or any side effects. It does not disclose the mutation behavior beyond the act of editing.
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 with no redundant content. Every word adds value, making it efficient and easy to parse.
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 an 8-parameter mutation tool with no annotations and no output schema, the description is too sparse. It does not explain behavior, required context (e.g., issue must exist), return values, or when to use it relative to other issue tools. More context is needed for an agent to invoke it correctly.
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 baseline is 3. The description adds no additional parameter semantics beyond what the schema already provides, but it does not need to since all parameters are documented.
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 ('Edit') and clearly identifies the resource ('existing issue in a project'), distinguishing it from sibling tools like create_issue, get_issue, and edit_issue_note. It unambiguously states the core action.
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. The context is only implied by the name and description; there is no explicit mention of prerequisites, exclusions, or when to prefer this over create_issue or get_issue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_edit_issue_noteEdit Issue NoteB
Edit an existing note/comment on an issue
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The content of the note/comment | |
| noteId | Yes | The ID of the note/comment | |
| issueIid | Yes | The internal ID of a project's issue | |
| projectId | Yes | The ID or URL-encoded path of the project |
TDQS
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 'edit', with no information on permissions, idempotency, side effects, or whether the change 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately conveys the purpose. No filler or redundant information.
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?
The tool is a simple mutation with no output schema and no annotations. The description clarifies purpose but omits return value, error behavior, or authorization requirements, leaving some gaps for a complete understanding.
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 covers all 4 parameters with descriptions (100% coverage), so the description need not add parameter details. It does not provide any additional semantic context beyond the schema.
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 states a specific verb and resource: 'Edit an existing note/comment on an issue'. It clearly differentiates from sibling tool gitlab_create_issue_note by noting 'existing' and 'edit'.
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?
Usage is implied rather than explicit. It says 'existing note', which suggests it's not for creation, but there is no mention of alternatives, prerequisites, or 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.
gitlab_edit_merge_requestEdit Merge RequestC
Update an existing merge request
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Title of MR | |
| projectId | Yes | The ID or URL-encoded path of the project | |
| assignee_id | No | Assignee user ID | |
| description | No | Description of MR | |
| state_event | No | State event for the MR (close or reopen) | |
| target_branch | No | The target branch | |
| merge_request_iid | Yes | The internal ID of the merge request |
TDQS
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 'update' without any details on side effects, required permissions, whether the update is partial or full replacement, or what happens with fields like state_event. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded and to the point. It wastes no words, though it is almost too terse given the tool's complexity. Still, for what it communicates, it is appropriately compact.
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 7 parameters, no annotations, and no output schema, the description is insufficient. It does not explain key aspects like how state_event works, whether unspecified fields are left unchanged or reset, or what the return value signifies. The minimal description leaves too much to inference for such a parameter-rich 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?
The schema provides descriptions for all 7 parameters (e.g., title, assignee_id, state_event), achieving 100% coverage. The description adds no additional parameter context beyond what the schema already states, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update an existing merge request' clearly states the verb 'update' and the resource 'merge request', and the word 'existing' serves to distinguish it from the sibling tool gitlab_create_merge_request. While it doesn't enumerate updatable fields, the schema covers that, and the 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. It does not mention that this is for modifying existing MRs only, nor does it provide any preconditions or exclusions. The word 'existing' implies it is not for creation, but no explicit alternative or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_issueGet IssueA
Get a specific issue from a project
| Name | Required | Description | Default |
|---|---|---|---|
| issueIid | Yes | The internal ID of a project's issue | |
| projectId | Yes | The ID or URL-encoded path of the project owned by the authenticated user |
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 states that the tool gets an issue, without disclosing what fields are returned, whether notes are included, authentication requirements, or any side effects. The minimal phrasing leaves the agent without a clear picture of the tool's 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, clear sentence with no redundant phrasing. It is appropriately sized for its simplicity, though perhaps too brief for full transparency.
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 get operation with two well-documented parameters, the description covers the basic purpose. However, without an output schema or additional context about the return value, the agent lacks a complete picture of what to expect. The description is minimally sufficient but not richly informative.
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 schema descriptions already cover both parameters at 100% coverage (projectId and issueIid). The tool description adds no additional semantic information about how parameters relate or are used, so it provides no value beyond the schema.
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 ('Get') and resource ('issue') with a scope ('from a project'). It clearly differentiates from sibling tools like gitlab_get_issues (plural) and gitlab_get_issue_notes by focusing on a single issue.
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 when a single issue is needed, but provides no explicit guidance on when to use this tool versus alternatives like gitlab_get_issues or gitlab_get_issue_notes. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_issue_notesGet Issue NotesB
Get notes for an issue (paginated)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| issueIid | Yes | Issue IID | |
| projectId | Yes | Project ID |
TDQS
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 only 'paginated' as behavioral context, but doesn't disclose the structure of returned notes, ordering, potential empty results, or any read-only confirmation 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.
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 core understanding.
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 full schema coverage, the description is minimally adequate: it names the resource and pagination. However, it lacks explicit usage alternatives and any return-behavior details, which a no-annotation tool would benefit from.
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?
All three parameters (page, issueIid, projectId) are already described in the schema with 100% coverage. The description's mention of pagination aligns with the 'page' parameter but adds no extra parameter-specific meaning beyond the schema.
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 ('Get') and the resource ('notes for an issue'), with a useful qualifier ('paginated'). It implicitly differentiates from sibling tools like gitlab_get_issue (single issue) and gitlab_create_issue_note (creation), though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 siblings. It doesn't mention that it is appropriate for reading issue comments, nor how it relates to creating/editing notes or retrieving the issue itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_issuesGet IssuesA
Get issues for a project or globally (paginated)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| type | No | The type of to-do item. | |
| state | No | The state of the to-do item. | |
| action | No | The action to be filtered. | |
| group_id | No | The ID of a group | |
| author_id | No | The ID of an author | |
| project_id | No | The ID of a project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It discloses that results are paginated, which is useful, and indicates a read-only operation via 'Get'. However, it does not mention default behavior when no project is specified, authorization requirements, or response format. It adds some value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core purpose and pagination behavior without extraneous wording. 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 moderate complexity (7 optional parameters, no output schema, no annotations), the description is minimal but serviceable. It mentions pagination and scope, but does not clarify default behavior, sort order, or what fields each returned issue contains. The schema covers parameters, but the lack of output schema means the description could add more value by describing return expectations.
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 schema already provides full semantics for all 7 parameters. The description adds only a high-level scope hint ('project or globally') that maps to the optional project_id parameter, but no additional parameter-level detail beyond what the schema provides.
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 ('Get') with a clear resource ('issues') and scope ('for a project or globally'), plus a pagination hint. It distinguishes itself from siblings like 'get_issue' (singular) and 'get_todos' by indicating a list-oriented, potentially global query.
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 phrase 'for a project or globally' implies when to use the tool (e.g., when wanting all issues across projects vs. a single project), but it does not explicitly state when not to use it or mention alternatives like 'get_issue' for a single issue. Usage context is implied rather than directly prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_todosGet TodosB
Get a list of to-do items (paginated)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| type | No | The type of to-do item. | |
| state | No | The state of the to-do item. | |
| action | No | The action to be filtered. | |
| group_id | No | The ID of a group | |
| author_id | No | The ID of an author | |
| project_id | No | The ID of a project |
TDQS
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 mentions 'paginated,' which is a minimal hint about response chunking. It omits critical context such as whether the to-dos belong to the current user, how pagination works (e.g., default page size), or any authentication requirements, leaving significant behavioral ambiguity.
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 states the verb and object with no waste. It is appropriately concise for a simple list operation.
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?
The description is minimal but the schema is rich with parameter details. However, without annotations or an output schema, the description does not fully contextualize the tool—e.g., it does not specify that the list is for the current user or how pagination behaves. It is adequate but leaves gaps for an agent to fully understand the tool's behavior.
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 all 7 parameters having clear descriptions in the schema. The tool description adds no additional parameter context, but the baseline of 3 applies because the schema already provides the necessary semantics.
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 ('Get') and the resource ('a list of to-do items'), making the tool's purpose unambiguous. However, it does not differentiate from sibling tools like gitlab_get_issues, though the resource name 'todos' is distinct enough.
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. It does not mention any exclusions, prerequisites, or context for choosing this tool over sibling tools like gitlab_get_issues or gitlab_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_wiki_pageGet Wiki PageC
Get a wiki page for a given project
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | URL encoded slug of the wiki page | |
| version | No | Wiki page version SHA | |
| projectId | Yes | The ID or URL-encoded path of the project | |
| render_html | No | Render HTML of the page |
TDQS
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 says 'Get a wiki page', which implies a read-only operation, but it does not mention what is returned, how version or render_html affect the response, or any other behavioral details. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is front-loaded with the verb and resource, making it quickly scannable.
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?
There is no output schema, yet the description does not explain what the tool returns or how the optional parameters (version, render_html) affect the result. For a get-type tool, the description is too sparse to be fully complete, especially given the absence of behavioral details and usage context.
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 all parameters are well-documented in the schema itself. The description adds no additional semantic meaning beyond what the schema provides; it simply restates the project context. Baseline 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 action ('Get a wiki page') and the resource context ('for a given project'). It distinguishes the tool from siblings like gitlab_list_wiki_pages by indicating a single-page fetch, but it does not explicitly mention it retrieves by slug or provide deeper specificity.
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 (e.g., gitlab_list_wiki_pages for listing). The context is minimal; it only says 'for a given project', so there is no explicit usage direction or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_list_milestonesList MilestonesA
Get a list of project milestones (paginated)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| state | No | Return only milestones with the given state | |
| search | No | Return milestones containing the search string | |
| projectId | Yes | The ID or URL-encoded path of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It mentions pagination, which is useful, but does not disclose return format, ordering, permissions, or other caveats. For a simple list operation this is minimally acceptable.
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 starts with the action verb and includes key scoping ('project') and behavior ('paginated'). Every word contributes, with no redundancy.
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 list tool with full schema coverage and no output schema, the description is sufficient for an agent to select and invoke it correctly. It could mention return format, but given the tool's simplicity and clear scope, it is adequately complete.
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?
All parameters are fully described in the schema (100% coverage), so the description does not need to add parameter semantics. The description does not go beyond the schema, which is acceptable given the baseline of 3 for high schema coverage.
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 ('Get'), resource ('project milestones'), and scope ('project'), which distinguishes it from sibling tools that deal with projects, wiki pages, issues, etc. The addition of 'paginated' also provides useful context.
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 use for listing project milestones, but provides no explicit when-to-use guidance or alternatives. Sibling tools are all for different resources, so context is clear, but no exclusions or comparisons are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_list_projectsList ProjectsA
List all projects (paginated)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the paginated nature of the results, which is a key behavioral trait. However, with no annotations, it does not clarify other behavioral aspects such as authentication needs, whether 'all projects' means all accessible projects, or the structure of the response. The pagination mention adds some value beyond the bare title.
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, 'List all projects (paginated)', with no redundant words or filler. It is front-loaded and immediately communicates the fundamental purpose and a key behavioral attribute.
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 is a simple list operation with one optional parameter, the description combined with the schema is largely sufficient. The explicit mention of pagination is valuable, though it could mention what fields are returned or access scope. Minor gaps exist, but overall it is reasonably complete for its simplicity.
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 schema fully documents the only parameter 'page' with its description and default, resulting in 100% schema coverage. The tool description adds no additional meaning about the parameter 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and identifies the resource 'projects', clearly stating its function. It distinguishes itself from sibling tools that operate on wiki pages, issues, or merge requests, leaving no ambiguity about what this tool does.
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?
There is no guidance on when to use this tool versus alternatives, nor any mention of exclusions or prerequisites. The description simply states the action without providing context for selection among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_list_wiki_pagesList Wiki PagesA
Get all wiki pages for a given project. (paginated)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| projectId | Yes | The ID or URL-encoded path of the project | |
| with_content | No | Include pages' content |
TDQS
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 mentions 'paginated', which is a useful behavioral trait, but does not disclose other behaviors such as the effect of 'with_content', return format, or potential authentication requirements. It adds some value beyond the schema but lacks rich context.
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, compact sentence that front-loads the core purpose. The parenthetical '(paginated)' efficiently conveys the key behavioral note without unnecessary words. Every element serves a distinct function.
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, the schema's full parameter coverage, and the absence of an output schema, the description is sufficiently complete. It states the primary function and the pagination behavior, which covers the essential context for a straightforward list operation. It could be enhanced by mention of comparison to related tools, but that is already addressed in the usage guidelines dimension.
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 base score is 3. The description itself does not add any parameter details beyond what the schema already provides. For instance, 'paginated' relates to the 'page' parameter but the schema already explains the default. No additional semantic value is added.
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 'Get' with the resource 'all wiki pages for a given project', specifying both the scope (all) and the target (project). This distinguishes it from the sibling tool 'gitlab_get_wiki_page' which fetches a single page, making the purpose unmistakable.
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 all wiki pages of a project, but it does not explicitly state when to use this tool versus the sibling 'gitlab_get_wiki_page' or other list tools. There is no mention of alternatives or exclusions, only a basic statement of function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_searchSearchB
Search for projects, issues, merge requests, and more. (paginated)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| scope | Yes | The scope to search in. | |
| search | Yes | The search term. | |
| projectId | No | Project ID to search within (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses pagination, which is useful, but omits other behavioral details like whether it is read-only, permissions, or response format. The pagination note provides some value beyond annotations.
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, front-loaded with the verb and object, and the parenthetical about pagination adds useful context without waste. 'and more' is slightly vague but overall efficient.
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?
With no output schema, the description should ideally describe return values or pagination behavior in more detail. It only notes 'paginated' without specifics, and does not mention the optional projectId's purpose. The schema covers parameters, but the description lacks sufficient context for a search 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?
The schema covers 100% of parameters with descriptions and an enum for scope, so the baseline is 3. The description's mention of specific scopes echoes the schema but adds no new semantic meaning to the parameters.
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 searches for projects, issues, merge requests, and more, which aligns with the 'search' verb and differentiates it from sibling list/get tools. The phrase 'and more' is vague but acceptable given the schema's scope enum.
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 this tool is for cross-resource search, but it does not explicitly state when to prefer it over siblings like gitlab_list_projects or gitlab_get_issues. No exclusions or alternatives are mentioned, leaving usage guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource-action pair. Even similar-looking list/get pairs are clarified by singular/plural naming and descriptions. The search tool is intentionally broader but not confusable with the specific list tools.
All tools use the gitlab_ prefix and snake_case, but collection endpoints are inconsistent: list_ is used for projects, wiki pages, and milestones, while get_ is used for issues, todos, and issue notes. This mixed convention is readable but not uniform.
At 16 tools the set is slightly above the typical well-scoped range, but each tool addresses a distinct operation. The cluster of issue-related tools is granular but reasonable for a GitLab-focused server.
The tool surface covers issue creation/editing and MR creation/editing, but lacks list/get merge requests, which creates a dead end for locating MRs to edit. There are also no delete operations, and project management is limited to listing.
Maintenance
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)
GitLab Public MCP — wraps the GitLab REST API v4 (public endpoints, no auth)
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
Related MCP Servers
- -licenseAqualityAmaintenanceMCP Server for the GitLab API, enabling project management, file operations, and more.94,94490,042MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with GitLab API, supporting both self-hosted instances and gitlab.com. Provides tools for managing issues, merge requests, code review, pipelines, milestones, releases, search, and file access.302MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for the GitLab REST API providing tools to manage projects, merge requests, pipelines, CI/CD variables, approvals, issues, and code reviews.6MIT
- AlicenseAqualityCmaintenanceEnables interacting with GitLab repositories, merge requests, and code through natural language using MCP. Supports authentication with personal access tokens or OAuth2, and provides tools for listing projects, reading repository code, and analyzing merge request lifetimes.104MIT
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/Foxhunt/gitlab-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server