MCP server intelligence profile

qodev-gitlab-mcp Server

A Model Context Protocol server for GitLab integration, enabling AI assistants to manage projects, merge requests, pipelines, issues, releases, and more

Local Onlyqodevai
Awaiting current scanPypi · 0.2.2

The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.

1Distribution channel
18Independently observed tools
0Linked remote endpoints
AvailableVersion intelligence

Detailed security scan evidence is not public for this MCP yet. Public identity, registry metadata, and independently observed protocol inventory remain available.

Install and connect

Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.

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'

Identity

Canonical slugqodev-gitlab-mcp-47e5f233DeploymentLocal Only
Canonical packagepypi:qodev-gitlab-mcpRepositoryqodevai/gitlab-mcp
First publishedFeb 20, 2026Latest releaseFeb 20, 2026
Last security verificationClassification confidence90%
PublicationDraftOfficial distributionNot verified

Distributions

ChannelIdentifierCurrent versionVersionsSource
pypiqodev-gitlab-mcp0.2.21Repository

Current release

PackageVersionPublished / observedInventorySecurity scan
pypiqodev-gitlab-mcp0.2.2CurrentFeb 20, 202618 toolsSucceeded · 2 resources · 0 promptsEvidence restricted
Enterprise protection

Continuously monitor this MCP for security risk

Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.

  • Independent exact-version security scans
  • Continuous release and vulnerability monitoring
  • Risk-change alerts with capability context
  • Historical evidence and API exports
Custom pricingContact salesTailored to your organization, integrations, data needs, and support requirements.

Current version evidence

No public current-version evidence is available yet.

Current protocol inventory

2025-06-18Negotiated protocol
gitlab-mcpServer-reported name
6Capability groups
Aug 24, 2026Observed

Tools 18

ToolCategoryAnnotationsRisk
close_issueClose a specific issue by project and issue IID
Input 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 IID
Input 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 IID
Input 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 IID
Input 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 diff
Input 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 project
Input 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 project
Input 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 project
Input 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 IID
Input 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 request
Input 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 request
Input 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 ID
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 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 properties
Input 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 properties
Input 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"
}

Resources 2

  • all_projectsgitlab://projects/

    List of all GitLab projects you have access to

  • GitLab MCP Helpgitlab://help/

    Quick reference for available GitLab MCP resources and common queries

Resource templates 22

  • project_by_idgitlab://projects/{project_id}

    Get specific project by ID (supports project_id="current" for current repo)

  • project_issuegitlab://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.

  • project_issue_notesgitlab://projects/{project_id}/issues/{issue_iid}/notes

    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.

  • project_issuesgitlab://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.

  • project_job_artifactgitlab://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

  • project_job_artifactsgitlab://projects/{project_id}/jobs/{job_id}/artifacts

    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

  • project_job_loggitlab://projects/{project_id}/jobs/{job_id}/log

    Get log for a specific job (supports project_id="current") Returns the raw log text for the job.

  • project_merge_requestgitlab://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.)

  • project_merge_request_approvalsgitlab://projects/{project_id}/merge-requests/{mr_iid}/approvals

    Get approval status for a specific merge request (supports project_id="current" and mr_iid="current")

  • project_merge_request_changesgitlab://projects/{project_id}/merge-requests/{mr_iid}/changes

    Get code changes/diff for a specific merge request (supports project_id="current" and mr_iid="current")

  • project_merge_request_commitsgitlab://projects/{project_id}/merge-requests/{mr_iid}/commits

    Get commits for a specific merge request (supports project_id="current" and mr_iid="current")

  • project_merge_request_discussionsgitlab://projects/{project_id}/merge-requests/{mr_iid}/discussions

    Get discussions for a specific merge request (supports project_id="current" and mr_iid="current")

  • project_merge_request_pipeline_jobsgitlab://projects/{project_id}/merge-requests/{mr_iid}/pipeline-jobs

    Get jobs for the latest pipeline of a merge request (supports project_id="current" and mr_iid="current")

  • project_merge_request_statusgitlab://projects/{project_id}/merge-requests/{mr_iid}/status

    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

  • project_merge_requestsgitlab://projects/{project_id}/merge-requests/

    Get open merge requests for a project (supports project_id="current")

  • project_pipelinegitlab://projects/{project_id}/pipelines/{pipeline_id}

    Get specific pipeline (supports project_id="current")

  • project_pipeline_jobsgitlab://projects/{project_id}/pipelines/{pipeline_id}/jobs

    Get jobs for a specific pipeline (supports project_id="current")

  • project_pipelinesgitlab://projects/{project_id}/pipelines/

    Get pipelines for a project (supports project_id="current")

  • project_releasegitlab://projects/{project_id}/releases/{tag_name}

    Get a specific release by tag name (supports project_id="current")

  • project_releasesgitlab://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).

  • project_variablegitlab://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.

  • project_variablesgitlab://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.

Prompts 0

  • None observed.

Remote endpoints

EndpointTransportAuthenticationHealthObserved
No verified remote endpoint is linked.

qodev-gitlab-mcp Server questions

How do I install qodev-gitlab-mcp Server?

Install the selected package version with: python -m pip install 'qodev-gitlab-mcp==0.2.2'

What tools does qodev-gitlab-mcp Server provide?

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.

Is qodev-gitlab-mcp Server secure?

The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.

Company and product intelligence

These internal links are derived from strong identity fields such as the implementation name, package, repository, vendor, and listing name—not generic description prose.

Associated company landscape

GitLab intelligence →

Association is based on retained identity fields; it does not by itself prove first-party publication.

Explore related MCP server guides

Curated product and capability guides containing this catalog record.

Official vs Community MCP Servers

Let’s talk about MCP security.

Share your details and our security team will contact you.