Install qodev-gitlab-mcp from PyPI
Install exact version 0.2.2. The executable name has not been verified, so it is intentionally not guessed.
python -m pip install 'qodev-gitlab-mcp==0.2.2'A Model Context Protocol server for GitLab integration, enabling AI assistants to manage projects, merge requests, pipelines, issues, releases, and more
Detailed security scan evidence is not public for this MCP yet. Public identity, registry metadata, and independently observed protocol inventory remain available.
Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.
Install exact version 0.2.2. The executable name has not been verified, so it is intentionally not guessed.
python -m pip install 'qodev-gitlab-mcp==0.2.2'| Canonical slug | qodev-gitlab-mcp-47e5f233 | Deployment | Local Only |
|---|---|---|---|
| Canonical package | pypi:qodev-gitlab-mcp | Repository | qodevai/gitlab-mcp |
| First published | Feb 20, 2026 | Latest release | Feb 20, 2026 |
| Last security verification | — | Classification confidence | 90% |
| Publication | Draft | Official distribution | Not verified |
| Channel | Identifier | Current version | Versions | Source |
|---|---|---|---|---|
| pypi | qodev-gitlab-mcp | 0.2.2 | 1 | Repository |
| Package | Version | Published / observed | Inventory | Security scan |
|---|---|---|---|---|
| pypiqodev-gitlab-mcp | 0.2.2Current | Feb 20, 2026 | 18 toolsSucceeded · 2 resources · 0 prompts | Evidence restricted |
Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.
No public current-version evidence is available yet.
| Tool | Category | Annotations | Risk |
|---|---|---|---|
close_issueClose a specific issue by project and issue IIDInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"issue_iid": {
"type": "integer",
"description": "Issue IID (the #number)"
}
},
"required": [
"project_id",
"issue_iid"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
close_merge_requestClose a specific merge request by project and MR IIDInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"description": "Merge request IID or \"current\" (the !number, or \"current\" for current branch MR)"
},
"comment": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional comment to post when closing (supports Markdown formatting)"
}
},
"required": [
"project_id",
"mr_iid"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
comment_on_issueLeave a comment on a specific issue by project and issue IIDInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"issue_iid": {
"type": "integer",
"description": "Issue IID (the #number)"
},
"comment": {
"type": "string",
"description": "Comment text to post (supports Markdown formatting)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"issue_iid",
"comment"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
comment_on_merge_requestLeave a comment on a specific merge request by project and MR IIDInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"description": "Merge request IID or \"current\" (the !number, or \"current\" for current branch MR)"
},
"comment": {
"type": "string",
"description": "Comment text to post (supports Markdown formatting)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"mr_iid",
"comment"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
create_inline_commentCreate an inline comment on a specific line in a merge request diffInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"description": "Merge request IID or \"current\" (the !number, or \"current\" for current branch MR)"
},
"comment": {
"type": "string",
"description": "Comment text to post (supports Markdown formatting)"
},
"position": {
"description": "Position specifying where to place the comment. Must include:\n- file_path: Path to the file in the diff\n- new_line: Line number (1-based) in the new version (for added/unchanged lines)\n- old_line: Line number (1-based) in the old version (for deleted/unchanged lines)\n- new_line_content: Alternative to new_line - content to match (whitespace-insensitive, must be unique)\n- old_line_content: Alternative to old_line - content to match (whitespace-insensitive, must be unique)\nAt least one of new_line or old_line must be provided.\nOptionally include base_sha, head_sha, start_sha (auto-fetched from MR if omitted)",
"properties": {
"file_path": {
"type": "string"
},
"new_line": {
"type": "integer"
},
"old_line": {
"type": "integer"
},
"new_line_content": {
"type": "string"
},
"old_line_content": {
"type": "string"
},
"base_sha": {
"type": "string"
},
"head_sha": {
"type": "string"
},
"start_sha": {
"type": "string"
}
},
"required": [
"file_path"
],
"type": "object"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"mr_iid",
"comment",
"position"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
create_issueCreate a new issue in a projectInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"title": {
"type": "string",
"description": "Issue title (required)"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Issue description (optional, supports Markdown)"
},
"labels": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Comma-separated label names (optional, e.g., \"bug,urgent\")"
},
"assignee_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of user IDs to assign (optional)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"title"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
create_merge_requestCreate a new merge request in a projectInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"title": {
"type": "string",
"description": "MR title (required)"
},
"source_branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Source branch name (defaults to current branch if None)"
},
"target_branch": {
"default": "main",
"type": "string",
"description": "Target branch name (default: \"main\")"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "MR description/body (optional, supports Markdown)"
},
"assignee_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of user IDs to assign (optional)"
},
"reviewer_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of user IDs to review (optional)"
},
"labels": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Comma-separated label names (optional, e.g., \"bug,urgent\")"
},
"remove_source_branch": {
"default": true,
"type": "boolean",
"description": "Remove source branch after merge (default: True)"
},
"squash": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Squash commits on merge (None = use project settings, True = squash, False = don't squash)"
},
"allow_collaboration": {
"default": false,
"type": "boolean",
"description": "Allow commits from members with merge access (default: False)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"title"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
create_releaseCreate a new release in a projectInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"tag_name": {
"type": "string",
"description": "Tag name for the release (required)"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Release title (optional, defaults to tag_name)"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Release description/notes (optional, supports Markdown)"
},
"ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Commit SHA, branch, or existing tag (required only if tag_name doesn't exist yet; auto-detects from current branch if not provided)"
},
"milestones": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of milestone titles to associate (optional)"
},
"released_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 8601 datetime for release (optional, defaults to current time)"
},
"assets_links": {
"anyOf": [
{
"items": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of asset link dicts with 'name', 'url', and optional 'direct_asset_path' (optional)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"tag_name"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
download_artifactDownload an artifact file to local filesystem for analysis with shell tools.
Downloads the complete artifact file (no truncation) to a local path.
Useful for large files that need analysis with grep, wc, awk, etc.Input schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"job_id": {
"type": "integer",
"description": "Job ID"
},
"artifact_path": {
"type": "string",
"description": "Path to artifact within job (e.g., \"logs.txt\", \"build/output.log\")"
},
"destination": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Local path to save file (optional, defaults to temp file)"
}
},
"required": [
"project_id",
"job_id",
"artifact_path"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
merge_merge_requestMerge a specific merge request by project and MR IIDInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"description": "Merge request IID or \"current\" (the !number, or \"current\" for current branch MR)"
},
"merge_commit_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Custom merge commit message (optional)"
},
"squash_commit_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Custom squash commit message (optional, used if squashing)"
},
"should_remove_source_branch": {
"default": true,
"type": "boolean",
"description": "Remove source branch after merge (default: True)"
},
"merge_when_pipeline_succeeds": {
"default": false,
"type": "boolean",
"description": "Wait for pipeline to succeed before merging (default: False)"
},
"squash": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Squash commits on merge (None = use project/MR settings, True = squash, False = don't squash)"
}
},
"required": [
"project_id",
"mr_iid"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
reply_to_discussionReply to an existing discussion thread on a merge requestInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"description": "Merge request IID or \"current\" (the !number, or \"current\" for current branch MR)"
},
"discussion_id": {
"type": "string",
"description": "Discussion thread ID to reply to"
},
"comment": {
"type": "string",
"description": "Reply text to post (supports Markdown formatting)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"mr_iid",
"discussion_id",
"comment"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
resolve_discussion_threadResolve or unresolve a discussion thread on a merge requestInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"description": "Merge request IID or \"current\" (the !number, or \"current\" for current branch MR)"
},
"discussion_id": {
"type": "string",
"description": "Discussion thread ID to resolve/unresolve"
},
"resolved": {
"default": true,
"type": "boolean",
"description": "True to resolve the thread, False to unresolve it (default: True)"
}
},
"required": [
"project_id",
"mr_iid",
"discussion_id"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
retry_jobRetry a specific job by project and job IDInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"job_id": {
"type": "integer",
"description": "Job ID to retry"
}
},
"required": [
"project_id",
"job_id"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
set_project_ci_variableSet a CI/CD variable in a specific project (upsert: creates if new, updates if exists)Input schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"key": {
"type": "string",
"description": "Variable key/name (e.g., \"API_KEY\", \"DATABASE_URL\")"
},
"value": {
"type": "string",
"description": "Variable value"
},
"variable_type": {
"default": "env_var",
"type": "string",
"description": "Type of variable - \"env_var\" (default) or \"file\""
},
"protected": {
"default": false,
"type": "boolean",
"description": "Only available in protected branches (default: False)"
},
"masked": {
"default": false,
"type": "boolean",
"description": "Hidden in job logs (default: False)"
},
"raw": {
"default": false,
"type": "boolean",
"description": "Disable variable reference expansion (default: False)"
},
"environment_scope": {
"default": "*",
"type": "string",
"description": "Environment scope - \"*\" for all (default), or specific like \"production\", \"staging\""
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional description of the variable"
}
},
"required": [
"project_id",
"key",
"value"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
update_issueUpdate an existing issue's title, description, or other propertiesInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"issue_iid": {
"type": "integer",
"description": "Issue IID (the #number)"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New issue title (optional)"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New issue description (optional)"
},
"labels": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New comma-separated label names (optional)"
},
"assignee_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "New list of assignee user IDs (optional)"
},
"state_event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Change state: \"close\" or \"reopen\" (optional)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"issue_iid"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
update_merge_requestUpdate a merge request's title, description, or other propertiesInput schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
}
],
"description": "Merge request IID or \"current\" (the !number, or \"current\" for current branch MR)"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New MR title (optional)"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New MR description (optional)"
},
"target_branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New target branch (optional)"
},
"state_event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Change state: \"open\", \"close\", \"reopen\" (optional)"
},
"assignee_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of assignee user IDs (optional)"
},
"reviewer_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of reviewer user IDs (optional)"
},
"labels": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Comma-separated label names (optional)"
},
"images": {
"anyOf": [
{
"items": {
"anyOf": [
{
"description": "Image input from local file path.",
"properties": {
"path": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "Image input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
},
"alt": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "List of images to attach. Each image is either {\"path\": \"/local/file.png\"}\n or {\"base64\": \"...\", \"filename\": \"name.png\", \"alt\": \"optional alt text\"}"
}
},
"required": [
"project_id",
"mr_iid"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
upload_fileUpload a file to GitLab for embedding in issues, MRs, or comments.
Uploads a file to GitLab's project uploads and returns a markdown-ready
image/file tag that can be embedded in descriptions or comments.Input schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\""
},
"source": {
"anyOf": [
{
"description": "File input from local filesystem path.",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"type": "object"
},
{
"description": "File input from base64-encoded data.",
"properties": {
"base64": {
"type": "string"
},
"filename": {
"type": "string"
}
},
"required": [
"base64",
"filename"
],
"type": "object"
}
],
"description": "File source - either {\"path\": \"/local/file.png\"} for local files\n or {\"base64\": \"...\", \"filename\": \"name.png\"} for base64 data"
}
},
"required": [
"project_id",
"source"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — | |
wait_for_pipelineWait for a GitLab pipeline to complete (success or failure)Input schema{
"additionalProperties": false,
"properties": {
"project_id": {
"type": "string",
"description": "Project ID, path, or \"current\" (e.g., \"mygroup/myproject\", \"123\", or \"current\")"
},
"pipeline_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Pipeline ID to wait for (required if mr_iid not provided)"
},
"mr_iid": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "MR IID to get latest pipeline from (alternative to pipeline_id, supports \"current\")"
},
"timeout_seconds": {
"default": 3600,
"type": "integer",
"description": "Maximum time to wait in seconds (default: 3600/1 hour)"
},
"check_interval": {
"default": 10,
"type": "integer",
"description": "How often to check status in seconds (default: 10)"
},
"include_failed_logs": {
"default": true,
"type": "boolean",
"description": "Include last 10 lines of failed job logs (default: True)"
}
},
"required": [
"project_id"
],
"type": "object"
}Output schema{
"additionalProperties": true,
"type": "object"
} | — | — |
gitlab://projects/List of all GitLab projects you have access to
gitlab://help/Quick reference for available GitLab MCP resources and common queries
gitlab://projects/{project_id}Get specific project by ID (supports project_id="current" for current repo)
gitlab://projects/{project_id}/issues/{issue_iid}Get a specific issue by IID (supports project_id="current") Returns issue details including title, description, labels, assignees, state, milestone. For issue comments, use the separate /notes resource for minimal token usage.
gitlab://projects/{project_id}/issues/{issue_iid}/notesGet comments/notes on an issue (supports project_id="current") Returns all comments on the issue in chronological order. Use this granular resource to minimize token usage when you only need comments.
gitlab://projects/{project_id}/issues/List open issues in a project (supports project_id="current") Returns up to 20 most recently updated open issues. For filtering by labels/assignees/milestone, use the GitLab API parameters via tools.
gitlab://projects/{project_id}/jobs/{job_id}/artifacts/{artifact_path}Read a specific artifact file from a job (supports project_id="current") Args: project_id: Project ID or "current" job_id: Job ID artifact_path: Path to artifact file (e.g., "logs.txt?lines=50", "build/output.log?lines=all") Supports query params: ?lines=N (default 10), ?offset=M (default 0), ?lines=all Returns: For text files: Content with optional line range For binary files: Base64-encoded content with prefix
gitlab://projects/{project_id}/jobs/{job_id}/artifactsList all artifacts for a job (supports project_id="current") Returns JSON with job details and available artifacts including: - job_id: Job ID - job_name: Job name - status: Job status - artifacts: Array of artifact objects with filename, size, file_type
gitlab://projects/{project_id}/jobs/{job_id}/logGet log for a specific job (supports project_id="current") Returns the raw log text for the job.
gitlab://projects/{project_id}/merge-requests/{mr_iid}Get comprehensive MR overview (supports project_id="current" and mr_iid="current") Returns complete MR information including discussions, changes, commits, pipeline, and approvals. For granular access to specific data, use the dedicated resources (/discussions, /changes, etc.)
gitlab://projects/{project_id}/merge-requests/{mr_iid}/approvalsGet approval status for a specific merge request (supports project_id="current" and mr_iid="current")
gitlab://projects/{project_id}/merge-requests/{mr_iid}/changesGet code changes/diff for a specific merge request (supports project_id="current" and mr_iid="current")
gitlab://projects/{project_id}/merge-requests/{mr_iid}/commitsGet commits for a specific merge request (supports project_id="current" and mr_iid="current")
gitlab://projects/{project_id}/merge-requests/{mr_iid}/discussionsGet discussions for a specific merge request (supports project_id="current" and mr_iid="current")
gitlab://projects/{project_id}/merge-requests/{mr_iid}/pipeline-jobsGet jobs for the latest pipeline of a merge request (supports project_id="current" and mr_iid="current")
gitlab://projects/{project_id}/merge-requests/{mr_iid}/statusGet merge readiness status for a merge request (supports project_id="current" and mr_iid="current") Lightweight resource that answers "Is this MR ready to merge?" by checking: - Pipeline status (passing/failed) - Discussion threads (resolved/unresolved) - Approval status (if configured) - Merge conflicts
gitlab://projects/{project_id}/merge-requests/Get open merge requests for a project (supports project_id="current")
gitlab://projects/{project_id}/pipelines/{pipeline_id}Get specific pipeline (supports project_id="current")
gitlab://projects/{project_id}/pipelines/{pipeline_id}/jobsGet jobs for a specific pipeline (supports project_id="current")
gitlab://projects/{project_id}/pipelines/Get pipelines for a project (supports project_id="current")
gitlab://projects/{project_id}/releases/{tag_name}Get a specific release by tag name (supports project_id="current")
gitlab://projects/{project_id}/releases/Get all releases for a project (supports project_id="current") Returns releases sorted by released_at in descending order (newest first).
gitlab://projects/{project_id}/variables/{key}Get a specific CI/CD variable's metadata (value not exposed for security) Supports project_id="current" for current repository. Returns: key, variable_type, protected, masked, raw, environment_scope, description. Value is NEVER exposed for security reasons. Use set_project_ci_variable() to update values.
gitlab://projects/{project_id}/variables/List all CI/CD variables for a project (metadata only, values not exposed for security) Supports project_id="current" for current repository. Returns variable metadata: key, variable_type, protected, masked, raw, environment_scope, description. Values are NEVER exposed for security reasons.
| Endpoint | Transport | Authentication | Health | Observed |
|---|---|---|---|---|
| No verified remote endpoint is linked. | ||||
Install the selected package version with: python -m pip install 'qodev-gitlab-mcp==0.2.2'
qodev-gitlab-mcp Server exposed 18 tools during independent protocol observation, including close_issue, close_merge_request, comment_on_issue, comment_on_merge_request, create_inline_comment, create_issue, create_merge_request, create_release, and others.
The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.
These internal links are derived from strong identity fields such as the implementation name, package, repository, vendor, and listing name—not generic description prose.
Association is based on retained identity fields; it does not by itself prove first-party publication.
Curated product and capability guides containing this catalog record.