Skip to main content
Glama

gitlab-mcp-lite

A small MCP server for the GitLab REST API: pipelines, manual jobs, issues and merge requests of one project. No runtime dependencies (Python 3.11+ standard library), no setup beyond a token, works with self-hosted GitLab. Write tools default to dry runs and can be removed entirely with --read-only.

Quick start

export GITLAB_API_KEY=glpat-...      # a personal or project access token with the `api` scope
cd your-clone-of-a-gitlab-project
uvx gitlab-mcp-lite check            # shows what it resolved and tests the connection
uvx gitlab-mcp-lite config-snippet claude

check prints the API URL, the project, where the token came from (never the token) and whether GitLab accepts it. Run it first when something does not work.

Related MCP server: @wanadev/mcp-gitlab

Configuration

Everything is resolved from the environment, a .env file and the git origin remote. First match wins.

Value

Sources, in order

Default

Token

GITLAB_API_KEY, GITLAB_TOKEN, then the same keys in .env in the git root or the current directory

none (required)

GitLab URL

GITLAB_URL (e.g. https://gitlab.example.com, no /api/v4)

host of the origin remote, over https

Project

the tool's project argument, GITLAB_PROJECT (group/name or numeric id)

path of the origin remote

Request timeout

GITLAB_TIMEOUT (seconds)

30

Read-only mode

--read-only or GITLAB_MCP_READ_ONLY=1

off

In a clone of the project you want to manage, only the token is needed. Outside a clone, set GITLAB_URL and GITLAB_PROJECT, or pass project per call.

Where to keep the token. Prefer a .env file in the repository root (GITLAB_API_KEY=glpat-..., listed in .gitignore): the server reads it itself, so it works the same in every client. MCP clients usually start servers with a trimmed environment, so a variable exported in your shell may not reach the server; if you rely on the environment, pass it through the client's own env setting. The token is sent only in the PRIVATE-TOKEN header and is never included in tool results or error messages.

Tools

Tool

Does

Writes

gitlab_pipeline_get

status, ref, sha and URL of a pipeline

no

gitlab_pipeline_jobs

jobs of a pipeline (paged)

no

gitlab_issues_list

issues by state and labels (paged)

no

gitlab_issue_get

one issue with description, assignees, milestone

no

gitlab_mr_list

merge requests by state (paged)

no

gitlab_pipeline_create

create a pipeline for a branch or tag; dry_run (default) only checks the ref

yes

gitlab_job_play

play a manual job; dry_run (default) only reads its status

yes

gitlab_issue_comment

add a comment to an issue

yes

gitlab_mr_create

create a merge request; dry_run (default) only checks both branches

yes

Every tool takes an optional project. Lists return compact rows; per_page is 1-100 (default 30) and page starts at 1. Failures come back as isError results with the reason, so an agent can see what went wrong. Read-only tools carry readOnlyHint, so clients can skip the approval prompt for them.

Adding it to a client

gitlab-mcp-lite config-snippet <client> prints the block (clients: claude, vscode, codex, cursor, gemini, generic; options --url, --project, --read-only, --from <path|git-url>). See docs/clients.md.

claude mcp add gitlab -- uvx gitlab-mcp-lite

Development

python -m pip install -e ".[dev]"
ruff check . && mypy && pytest

Tests use a stand-in transport and a local HTTP server; they need no network and no token.

Releasing

Pushing to main runs the tests on Linux, macOS and Windows and builds the package. If version in pyproject.toml has no v<version> tag yet, the workflow publishes to PyPI and creates the tag and GitHub release. Bump version in pyproject.toml and src/gitlab_mcp_lite/__init__.py (a test keeps them equal), add a changelog entry, merge to main. One-time setup: a GitHub environment named pypi, and either the repository secret PYPI_API_TOKEN or a trusted publisher on PyPI for this repository (workflow ci.yml, environment pypi).

Status

Alpha. Covers one project per call and the most common read/write operations; it is not a full GitLab client. It originated in the Embersail project's GitLab tooling. Plans for the next editions are in TODO.md.

License

MIT

Available Tools

9 tools
gitlab_issue_commentB

Post a comment (note) on an issue. Append-only.

NameRequiredDescriptionDefault
iidYes
bodyYes
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this mutates external state. "Append-only" usefully adds that no update/delete path exists, but the description says nothing about required auth scope, failure behavior, or what is returned for the new note.

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

Conciseness5/5

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

Two short sentences, action first and the append-only constraint immediately after. Zero filler and nothing to trim.

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

Completeness3/5

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

For a write tool with no output schema and two undocumented required parameters, the definition leaves real gaps: an agent gets no hint that `iid` is the issue number within `project`, nor what the response contains. It is callable but under-specified.

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

Parameters2/5

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

Schema description coverage is only 33%: the workspace-relative `iid` and the `body` parameter are completely undocumented, and the description supplies no meaning for either. Only `project` carries a schema description, so the description fails to compensate for the coverage gap on the two required params.

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

Purpose4/5

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

Specific verb ("Post") plus resource ("a comment (note) on an issue") makes the action unambiguous, and the parenthetical clarifies GitLab's note terminology. It is clearly distinct from siblings like gitlab_issue_get and gitlab_issues_list, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

"Append-only" implies the use case (adding commentary that cannot later be edited or removed) but does not state when to prefer this over any sibling or mention prerequisites such as issue state or permissions. Usage is inferable rather than stated.

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

gitlab_issue_getA
Read-only

Fetch one issue by iid: title, description, state, labels, assignees, milestone, dates.

NameRequiredDescriptionDefault
iidYes
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds real value by enumerating the returned fields (title, description, state, labels, assignees, milestone, dates), which substitutes for the missing output schema; it does not cover not-found behavior or visibility of confidential issues.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; the identifying key (iid) comes first and the field list gives immediate value.

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

Completeness4/5

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

For a simple two-parameter read with no output schema, enumerating response fields is the right compensation. Only minor gaps remain, such as error behavior for a missing iid or whether notes/attachments require a separate call.

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

Parameters3/5

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

At 50% schema coverage, the 'project' parameter is documented in the schema while 'iid' is bare. Saying 'by iid' adds the useful hint that this is the project-scoped issue IID rather than a global id, but it does not clarify the default-project resolution behavior described in the schema.

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

Purpose5/5

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

States a specific verb (Fetch), resource (issue), scope (one, by iid), and even enumerates the returned fields. The word 'one' cleanly separates it from gitlab_issues_list without naming it.

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

Usage Guidelines3/5

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

The singular-lookup framing implies you use this when you already have an iid and need a single issue, but there is no explicit when-to-use versus gitlab_issues_list or guidance on how to obtain an iid. Usage is inferable, not stated.

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

gitlab_issues_listA
Read-only

List issues. state: opened (default), closed or all. labels: all must match. Paged with per_page and page.

NameRequiredDescriptionDefault
pageNo
stateNoopened
labelsNo
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote
per_pageNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavior detail — default state, AND-semantics for labels, paging via per_page/page — but never clarifies scoping (which project/namespace, and what happens when project is omitted via the GITLAB_PROJECT fallback) or whether results are sorted/paginated beyond the parameters.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and followed by the filtering and paging rules; nothing is wasted. The telegraphic style is efficient but slightly under-explains, keeping it from a 5.

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

Completeness3/5

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

For a five-parameter read tool with no output schema, the description covers filtering and pagination but omits scope (project default resolution) and any hint about the returned issue fields or ordering, leaving an agent to infer what a call returns.

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

Parameters4/5

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

Schema coverage is only 20% (only project is documented), so the description must compensate and largely does: it gives the state enum values plus the default, explains that labels are ANDed ('all must match'), and states that per_page/page drive paging. Only the project parameter's meaning is left entirely to the schema.

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

Purpose4/5

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

States a specific verb and resource ('List issues'), clearly distinguishable from gitlab_issue_get which fetches a single issue. It does not explicitly name that sibling or state the scope (project vs all accessible issues), so it falls short of a 5.

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

Usage Guidelines3/5

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

The filtering rules (default state=opened, labels must all match) imply how to use the tool for common queries, but there is no explicit when-to-use guidance and no mention of the alternative gitlab_issue_get for single-issue retrieval.

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

gitlab_job_playA

Play a manual job. dry_run (default true) only reads the job's status.

NameRequiredDescriptionDefault
job_idYes
dry_runNo
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote

TDQS

A3.5/5.0
Behavior3/5

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

The annotation readOnlyHint=false marks this as mutating, and the description adds important context that dry_run defaults to true and only reads status, meaning the unsafe action requires opting out. However it omits permission requirements, side effects of actually playing a job, and error behavior for non-manual jobs.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and immediately qualifying the default-safe mode. No waste.

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

Completeness3/5

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

For a mutating, no-output-schema tool, the description covers the critical safety default but leaves gaps: what playing a job returns, prerequisites on job state, and the required job_id semantics. Adequate but not complete.

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

Parameters3/5

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

Schema coverage is 33%: only project is documented. The description compensates partly by explaining dry_run's meaning and default, but job_id (the sole required parameter) is explained nowhere in schema or description.

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

Purpose4/5

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

States a specific verb (play) and a specific resource (a manual job), which is distinguishable from sibling listing tools like gitlab_pipeline_jobs. It doesn't explicitly name sibling tools, but the 'manual job' scope is narrow enough that confusion is unlikely.

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

Usage Guidelines3/5

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

Usage is implied: use it on manual jobs to trigger them, and dry_run reads the status instead. There is no explicit when/when-not guidance, no mention that the job must be in a manual state, and no comparison to alternatives such as gitlab_pipeline_jobs for inspecting jobs.

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

gitlab_mr_createB

Create a merge request. dry_run (default true) only checks that both branches exist.

NameRequiredDescriptionDefault
titleYes
labelsNo
dry_runNo
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote
descriptionNo
source_branchYes
target_branchYes

TDQS

B3.3/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and openWorldHint=true. The description adds a genuinely important trait beyond that: the default invocation is a no-op branch check, not a creation — a real behavioral disclosure that prevents accidental calls. It omits return shape, error behavior, and auth requirements, keeping it short of a 5.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and immediately qualifying the default behavior. No filler, though the second sentence is packed so densely that the critical 'set dry_run=false to actually create' implication has to be inferred.

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

Completeness2/5

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

This is a mutation tool with an unusual default that makes it a no-op, no output schema, and 14% schema coverage. The description should explicitly state that dry_run must be disabled to create and clarify branch/title expectations; instead it leaves the most consequential behavior implicit.

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

Parameters2/5

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

Schema coverage is only 14% — just 'project' has a description. The description explains dry_run's semantics well but leaves six parameters (source_branch, target_branch, title, description, labels, and their formats/constraints) undocumented in both schema and prose, so it does not compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb and resource ("Create a merge request"), clearly distinct from the sibling read tool gitlab_mr_list. It does not explicitly contrast against any sibling, but the resource is unambiguous enough that an agent can select it without opening the schema.

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

Usage Guidelines3/5

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

The note that dry_run defaults to true and only verifies branch existence is useful implied guidance: an agent can infer it must set dry_run=false to actually create the MR. However, the description never says this explicitly and offers no when-to-use vs alternatives guidance or prerequisites (e.g., branch must exist, permissions needed).

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

gitlab_mr_listA
Read-only

List merge requests (state opened by default; opened, closed, merged or all). Paged with per_page and page.

NameRequiredDescriptionDefault
pageNo
stateNoopened
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote
per_pageNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the default state filter and the paging mechanism, but says nothing about result volume, ordering, or what happens when the project is omitted (falling back to GITLAB_PROJECT or the origin remote).

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

Conciseness5/5

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

Two short sentences with no filler; the state default is front-loaded before the paging note. Every clause carries information.

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

Completeness3/5

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

For a four-parameter read-only list tool with no output schema, the description leaves the return shape, ordering, and project-resolution behavior undocumented. It is functional but thin for an open-world read tool.

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

Parameters3/5

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

Schema description coverage is only 25% (only `project` is documented in-schema), but the remaining parameters are self-describing: `state` is a four-value enum, and `page`/`per_page` have defaults and bounds. The description restates the state values and paging but adds no new meaning or edge-case notes beyond the schema.

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

Purpose4/5

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

The description states a specific verb and resource ("List merge requests") and names the meaningful filter dimension (state). It is unambiguously distinct from every sibling tool (issues, pipelines, job play, mr_create), so no further differentiation is required.

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

Usage Guidelines3/5

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

The default state (opened) and the available state values imply the intended usage, but the description never says when to reach for this tool versus something else or what preconditions exist (e.g. project scoping). Guidance is implied rather than stated.

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

gitlab_pipeline_createA

Create a pipeline for a branch or tag. dry_run (default true) only checks that the ref exists.

NameRequiredDescriptionDefault
refYes
dry_runNo
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote

TDQS

A3.6/5.0
Behavior3/5

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

The disclosure that dry_run defaults to true and only verifies the ref exists adds real behavioral context beyond the annotations, which merely say readOnlyHint=false and openWorldHint=true. It does not cover required permissions, what a second call against the same ref does (duplicate pipelines), error behavior for a missing ref, or what 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.

Conciseness5/5

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

Two short sentences with zero filler; the primary action leads, and the non-obvious default behavior follows immediately. Nothing redundant is included.

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

Completeness3/5

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

For a small three-parameter mutation tool with no output schema, the essentials of what the tool does and how dry_run behaves are present. What an agent still cannot infer is the result shape (pipeline id/url), permission requirements, and behavior on duplicate or nonexistent refs, which matters for an open-world write operation.

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

Parameters4/5

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

Schema coverage is only 33% — only project is described in the schema — but the description compensates by explaining that 'ref' is a branch or tag and that dry_run's default true performs an existence check only. That covers the two undocumented parameters with meaningful semantics rather than restating their names.

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

Purpose4/5

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

States a specific verb and resource (create a pipeline) and narrows scope to a branch or tag, which distinguishes it from read-oriented siblings like gitlab_pipeline_get and gitlab_pipeline_jobs. It doesn't explicitly name an alternative, but the create-vs-read split is obvious from the sibling set.

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

Usage Guidelines3/5

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

The dry_run sentence implicitly tells the agent that the default call is a validation no-op and that dry_run=false is required to actually create, which is useful usage context. However, there is no explicit when-to-use guidance versus alternatives (job_play, retrying a pipeline) and no prerequisites or exclusions stated.

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

gitlab_pipeline_getA
Read-only

Fetch one pipeline by id (status, ref, sha, web_url).

NameRequiredDescriptionDefault
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote
pipeline_idYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds value by naming the returned fields (status, ref, sha, web_url) in the absence of an output schema, but says nothing about behavior on a missing id, permission requirements, or cross-project resolution.

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

Conciseness5/5

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

A single front-loaded sentence with the resource scope first and the return fields in a tight parenthetical. No filler, nothing to trim.

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

Completeness4/5

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

For a two-parameter single-record read with readOnly annotations, the description covers what it returns, which is the main missing structured signal. It stops short of explaining id acquisition or error behavior, but nothing essential to calling it correctly is absent.

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

Parameters3/5

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

Schema coverage is 50%: 'project' is fully documented in the schema (group/name or numeric id with a default), while 'pipeline_id' is a bare integer. The description's 'by id' only restates the obvious, so it neither compensates for nor harms the coverage gap.

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

Purpose4/5

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

States a specific verb and resource ('Fetch one pipeline by id') and enumerates the fields returned, which distinguishes it from the sibling gitlab_pipeline_jobs (which lists jobs, not pipeline metadata). It does not explicitly name siblings, but the singular 'one pipeline by id' is unambiguous against a list-style tool.

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

Usage Guidelines3/5

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

Usage is only implied: the agent infers this is the tool for retrieving a single pipeline's details once it has an id. There is no statement of when to prefer it over gitlab_pipeline_jobs or how to obtain a pipeline_id in the first place, and no exclusions.

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

gitlab_pipeline_jobsB
Read-only

List the jobs of a pipeline (id, name, status, stage, web_url).

NameRequiredDescriptionDefault
pageNo
projectNogroup/name or numeric id; default: GITLAB_PROJECT or the origin remote
per_pageNo
pipeline_idYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds the projected return fields, which is genuinely useful since there is no output schema, but it says nothing about pagination behavior or result ordering despite page/per_page parameters existing.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler; the resource and the key output fields come first. It is efficient, though its brevity is the same thing that leaves gaps elsewhere.

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

Completeness3/5

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

With no output schema, naming the returned fields is a real contribution, and annotations cover the safety profile. However, for a paginated list tool it omits the fact that results are paged (page, per_page default 30, max 100), which an agent needs to retrieve full results.

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

Parameters2/5

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

Schema description coverage is only 25% — project is the sole documented parameter, and page, per_page, and pipeline_id are undocumented. The description does not compensate: it never explains pagination, per-page limits, or that pipeline_id identifies the target pipeline, leaving only the parameter names to infer meaning.

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

Purpose4/5

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

Specific verb ('List') plus resource ('jobs of a pipeline') with the returned fields enumerated. It is clearly distinguishable from siblings like gitlab_pipeline_get (pipeline metadata) and gitlab_job_play (acts on a job), though it never names them explicitly.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus gitlab_pipeline_get or gitlab_job_play, and no prerequisites or exclusions. The read-only 'list' framing implies usage but nothing routes the agent among the siblings.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.0
    • First observedgitlab_issue_comment
    • First observedgitlab_issue_get
    • First observedgitlab_issues_list
    • First observedgitlab_job_play
    • First observedgitlab_mr_create
    • First observedgitlab_mr_list
    • First observedgitlab_pipeline_create
    • First observedgitlab_pipeline_get
    • First observedgitlab_pipeline_jobs

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct GitLab resource and action: pipelines, jobs, issues, or merge requests. There is no meaningful overlap between listing jobs, playing a job, creating a pipeline, or creating an MR.

Naming Consistency4/5

All tools use a clear gitlab_ prefix and snake_case, mostly following resource_action ordering. Minor inconsistencies exist, such as gitlab_pipeline_jobs lacking a list verb and singular/plural mixing (issue_get vs issues_list).

Tool Count5/5

Nine tools is well within the appropriate range for a focused GitLab lite server. Each tool has a clear role and the set does not feel bloated.

Completeness3/5

The surface covers useful subsets of pipelines, jobs, issues, and merge requests, but has notable gaps: no issue create/update, no MR get/merge, and no pipeline cancel/retry. The 'lite' scope explains some omissions, but agents may still hit dead ends for common workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers