0.2.2pypi · qodev-gitlab-mcp · current release
Observed 2026-08-24T06:59:10.014Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.
{
"experimental": {},
"logging": {},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"tools": {
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/ui": {}
}
}| 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"
} | — | — · — | — |
List of all GitLab projects you have access to
{
"resource_key": "gitlab://projects/",
"uri": "gitlab://projects/",
"name": "all_projects",
"description": "List of all GitLab projects you have access to",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "e5119700d95608c7cfcd33806a9f4f0c7676008502289d1a40e1638696bf3b9e"
}Quick reference for available GitLab MCP resources and common queries
{
"resource_key": "gitlab://help/",
"uri": "gitlab://help/",
"name": "GitLab MCP Help",
"description": "Quick reference for available GitLab MCP resources and common queries",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "e669a95c5b0a93bc5a3c3db978a884015ff29ba5c0f17c6e2f93381276a6fbe3"
}Get specific project by ID (supports project_id="current" for current repo)
{
"template_key": "gitlab://projects/{project_id}",
"uri_template": "gitlab://projects/{project_id}",
"name": "project_by_id",
"description": "Get specific project by ID (supports project_id=\"current\" for current repo)",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "3f670665cd7b150c94015137418c32090736bf5512456b7e32b3f39b22134a3c"
}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.
{
"template_key": "gitlab://projects/{project_id}/issues/{issue_iid}",
"uri_template": "gitlab://projects/{project_id}/issues/{issue_iid}",
"name": "project_issue",
"description": "Get a specific issue by IID (supports project_id=\"current\")\n\nReturns issue details including title, description, labels, assignees, state, milestone.\nFor issue comments, use the separate /notes resource for minimal token usage.",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "cc352b09a47a6a99401da512d7f509b86172989592b6003178682db226b7e0d8"
}Get 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.
{
"template_key": "gitlab://projects/{project_id}/issues/{issue_iid}/notes",
"uri_template": "gitlab://projects/{project_id}/issues/{issue_iid}/notes",
"name": "project_issue_notes",
"description": "Get comments/notes on an issue (supports project_id=\"current\")\n\nReturns all comments on the issue in chronological order.\nUse this granular resource to minimize token usage when you only need comments.",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "fa6d5f6e5b3593dec76272e557e65abda9c024d38862f5e521aba304478ac795"
}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.
{
"template_key": "gitlab://projects/{project_id}/issues/",
"uri_template": "gitlab://projects/{project_id}/issues/",
"name": "project_issues",
"description": "List open issues in a project (supports project_id=\"current\")\n\nReturns up to 20 most recently updated open issues.\nFor filtering by labels/assignees/milestone, use the GitLab API parameters via tools.",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "72c054e05413245f5b5785b963ceeeb9982c9ad19b7be99c04d1d04135b8363c"
}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
{
"template_key": "gitlab://projects/{project_id}/jobs/{job_id}/artifacts/{artifact_path}",
"uri_template": "gitlab://projects/{project_id}/jobs/{job_id}/artifacts/{artifact_path}",
"name": "project_job_artifact",
"description": "Read a specific artifact file from a job (supports project_id=\"current\")\n\nArgs:\n project_id: Project ID or \"current\"\n job_id: Job ID\n artifact_path: Path to artifact file (e.g., \"logs.txt?lines=50\", \"build/output.log?lines=all\")\n Supports query params: ?lines=N (default 10), ?offset=M (default 0), ?lines=all\n\nReturns:\n For text files: Content with optional line range\n For binary files: Base64-encoded content with prefix",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "cec5b1d91fb5b2e377168eaf2fa13f0f5c6f276ac53fda47e49189ab9025d5e5"
}List 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
{
"template_key": "gitlab://projects/{project_id}/jobs/{job_id}/artifacts",
"uri_template": "gitlab://projects/{project_id}/jobs/{job_id}/artifacts",
"name": "project_job_artifacts",
"description": "List all artifacts for a job (supports project_id=\"current\")\n\nReturns JSON with job details and available artifacts including:\n- job_id: Job ID\n- job_name: Job name\n- status: Job status\n- artifacts: Array of artifact objects with filename, size, file_type",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "38ffbee74e7fcbf0a1c10f4d698b7e3138abf37fbca70ecb26243f9ebf3d93e2"
}Get log for a specific job (supports project_id="current") Returns the raw log text for the job.
{
"template_key": "gitlab://projects/{project_id}/jobs/{job_id}/log",
"uri_template": "gitlab://projects/{project_id}/jobs/{job_id}/log",
"name": "project_job_log",
"description": "Get log for a specific job (supports project_id=\"current\")\n\nReturns the raw log text for the job.",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "7afd91cc6af0424d79c1eb0903be4aab2bb1bef4fbccf724574bbfed92c00af5"
}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.)
{
"template_key": "gitlab://projects/{project_id}/merge-requests/{mr_iid}",
"uri_template": "gitlab://projects/{project_id}/merge-requests/{mr_iid}",
"name": "project_merge_request",
"description": "Get comprehensive MR overview (supports project_id=\"current\" and mr_iid=\"current\")\n\nReturns complete MR information including discussions, changes, commits, pipeline, and approvals.\nFor granular access to specific data, use the dedicated resources (/discussions, /changes, etc.)",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "8d179f666c9cd31044ecaf48e829074769ff66325c15eacaeff96fced7e9237f"
}Get approval status for a specific merge request (supports project_id="current" and mr_iid="current")
{
"template_key": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/approvals",
"uri_template": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/approvals",
"name": "project_merge_request_approvals",
"description": "Get approval status for a specific merge request (supports project_id=\"current\" and mr_iid=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "22eb39c43525f051b9558171fa07a84c68f1fe7dd047ff141f9363de3073c28a"
}Get code changes/diff for a specific merge request (supports project_id="current" and mr_iid="current")
{
"template_key": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/changes",
"uri_template": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/changes",
"name": "project_merge_request_changes",
"description": "Get code changes/diff for a specific merge request (supports project_id=\"current\" and mr_iid=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "fa753e1fd8abbc8fdd966acba7967d2dc13126b5cbd18b35be95d55e4ad5afee"
}Get commits for a specific merge request (supports project_id="current" and mr_iid="current")
{
"template_key": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/commits",
"uri_template": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/commits",
"name": "project_merge_request_commits",
"description": "Get commits for a specific merge request (supports project_id=\"current\" and mr_iid=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "989af7e77b2d6840f5eb757ef67fe523d07bd0668577f31e3590e7bedcb23e0f"
}Get discussions for a specific merge request (supports project_id="current" and mr_iid="current")
{
"template_key": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/discussions",
"uri_template": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/discussions",
"name": "project_merge_request_discussions",
"description": "Get discussions for a specific merge request (supports project_id=\"current\" and mr_iid=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "9124e62cd334ed43163332ddf451d16c7667483c9342fcf4757055e3896fc3bc"
}Get jobs for the latest pipeline of a merge request (supports project_id="current" and mr_iid="current")
{
"template_key": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/pipeline-jobs",
"uri_template": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/pipeline-jobs",
"name": "project_merge_request_pipeline_jobs",
"description": "Get jobs for the latest pipeline of a merge request (supports project_id=\"current\" and mr_iid=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "2846adf21b543ae7c8c98c742fc246ff3ec62ad0f38100c3ac3ea9c9ae882267"
}Get 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
{
"template_key": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/status",
"uri_template": "gitlab://projects/{project_id}/merge-requests/{mr_iid}/status",
"name": "project_merge_request_status",
"description": "Get merge readiness status for a merge request (supports project_id=\"current\" and mr_iid=\"current\")\n\nLightweight resource that answers \"Is this MR ready to merge?\" by checking:\n- Pipeline status (passing/failed)\n- Discussion threads (resolved/unresolved)\n- Approval status (if configured)\n- Merge conflicts",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "8784a5d2a44876e34e2ce118652bb39878eeca7a920fbd2107a83ea5539e7f77"
}Get open merge requests for a project (supports project_id="current")
{
"template_key": "gitlab://projects/{project_id}/merge-requests/",
"uri_template": "gitlab://projects/{project_id}/merge-requests/",
"name": "project_merge_requests",
"description": "Get open merge requests for a project (supports project_id=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "94d2536c107e285bc70b412152e841f8677a47e6afc7edd5136a6b7a52b386dd"
}Get specific pipeline (supports project_id="current")
{
"template_key": "gitlab://projects/{project_id}/pipelines/{pipeline_id}",
"uri_template": "gitlab://projects/{project_id}/pipelines/{pipeline_id}",
"name": "project_pipeline",
"description": "Get specific pipeline (supports project_id=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "6c0739155b935d2177a5119799bd7e08b0f513ce0934e67e195a1c8df960c2f5"
}Get jobs for a specific pipeline (supports project_id="current")
{
"template_key": "gitlab://projects/{project_id}/pipelines/{pipeline_id}/jobs",
"uri_template": "gitlab://projects/{project_id}/pipelines/{pipeline_id}/jobs",
"name": "project_pipeline_jobs",
"description": "Get jobs for a specific pipeline (supports project_id=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "7c73f1d58efe1e414e1b415c1ee4929ea1802eeb2ce9d94d5d012b482d5e362a"
}Get pipelines for a project (supports project_id="current")
{
"template_key": "gitlab://projects/{project_id}/pipelines/",
"uri_template": "gitlab://projects/{project_id}/pipelines/",
"name": "project_pipelines",
"description": "Get pipelines for a project (supports project_id=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "907562e5dc6c065f09cd1fdeef2b575fd952c7649c29d1fb8517908613d1cfe2"
}Get a specific release by tag name (supports project_id="current")
{
"template_key": "gitlab://projects/{project_id}/releases/{tag_name}",
"uri_template": "gitlab://projects/{project_id}/releases/{tag_name}",
"name": "project_release",
"description": "Get a specific release by tag name (supports project_id=\"current\")",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "6501cfbe4d8e94f4c0624cd141a8f4234a65991457e6cf80d35396c68a1b9f17"
}Get all releases for a project (supports project_id="current") Returns releases sorted by released_at in descending order (newest first).
{
"template_key": "gitlab://projects/{project_id}/releases/",
"uri_template": "gitlab://projects/{project_id}/releases/",
"name": "project_releases",
"description": "Get all releases for a project (supports project_id=\"current\")\n\nReturns releases sorted by released_at in descending order (newest first).",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "631205a66a6fbf50b07f0b5afa7eb6bfe2489bcd1bde2de86b28fbc599a14322"
}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.
{
"template_key": "gitlab://projects/{project_id}/variables/{key}",
"uri_template": "gitlab://projects/{project_id}/variables/{key}",
"name": "project_variable",
"description": "Get a specific CI/CD variable's metadata (value not exposed for security)\n\nSupports project_id=\"current\" for current repository.\n\nReturns: key, variable_type, protected, masked, raw, environment_scope, description.\nValue is NEVER exposed for security reasons. Use set_project_ci_variable() to update values.",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "6b40fad64de8b50ad3eeab8dd99d66b11b85b7c8078bf071ad406aecbdf6660e"
}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.
{
"template_key": "gitlab://projects/{project_id}/variables/",
"uri_template": "gitlab://projects/{project_id}/variables/",
"name": "project_variables",
"description": "List all CI/CD variables for a project (metadata only, values not exposed for security)\n\nSupports project_id=\"current\" for current repository.\n\nReturns variable metadata: key, variable_type, protected, masked, raw, environment_scope, description.\nValues are NEVER exposed for security reasons.",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "c4164a22c8ce9b550821d962a3b381709540d766310766bb79ba5d8cbd3ebc0d"
}