GitLab Automation via Rube MCP
Automate GitLab operations including project management, issue tracking, merge request workflows, CI/CD pipeline monitoring, branch management, and user administration through Composio's GitLab toolkit.
Prerequisites
- •Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- •Active GitLab connection via
RUBE_MANAGE_CONNECTIONSwith toolkitgitlab - •Always call
RUBE_SEARCH_TOOLSfirst to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- •Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLSresponds - •Call
RUBE_MANAGE_CONNECTIONSwith toolkitgitlab - •If connection is not ACTIVE, follow the returned auth link to complete GitLab OAuth
- •Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Manage Issues
When to use: User wants to create, update, list, or search issues in a GitLab project
Tool sequence:
- •
GITLAB_GET_PROJECTS- Find the target project and get its ID [Prerequisite] - •
GITLAB_LIST_PROJECT_ISSUES- List and filter issues for a project [Required] - •
GITLAB_CREATE_PROJECT_ISSUE- Create a new issue [Required for create] - •
GITLAB_UPDATE_PROJECT_ISSUE- Update an existing issue (title, labels, state, assignees) [Required for update] - •
GITLAB_LIST_PROJECT_USERS- Find user IDs for assignment [Optional]
Key parameters:
- •
id: Project ID (integer) or URL-encoded path (e.g.,"my-group/my-project") - •
title: Issue title (required for creation) - •
description: Issue body text (max 1,048,576 characters) - •
labels: Comma-separated label names (e.g.,"bug,critical") - •
add_labels/remove_labels: Add or remove labels without replacing all - •
state: Filter by"all","opened", or"closed" - •
state_event:"close"or"reopen"to change issue state - •
assignee_ids: Array of user IDs; use[0]to unassign all - •
issue_iid: Internal issue ID within the project (required for updates) - •
milestone: Filter by milestone title - •
search: Search in title and description - •
scope:"created_by_me","assigned_to_me", or"all" - •
page/per_page: Pagination (default per_page: 20)
Pitfalls:
- •
idaccepts either integer project ID or URL-encoded path; wrong IDs yield 4xx errors - •
issue_iidis the project-internal ID (shown as #42), different from the global issue ID - •Labels in
labelsfield replace ALL existing labels; useadd_labels/remove_labelsfor incremental changes - •Setting
assignee_idsto empty array does NOT unassign; use[0]instead - •
updated_atfield requires administrator or project/group owner rights
2. Manage Merge Requests
When to use: User wants to list, filter, or review merge requests in a project
Tool sequence:
- •
GITLAB_GET_PROJECT- Get project details and verify access [Prerequisite] - •
GITLAB_GET_PROJECT_MERGE_REQUESTS- List and filter merge requests [Required] - •
GITLAB_GET_REPOSITORY_BRANCHES- Verify source/target branches [Optional] - •
GITLAB_LIST_ALL_PROJECT_MEMBERS- Find reviewers/assignees [Optional]
Key parameters:
- •
id: Project ID or URL-encoded path - •
state:"opened","closed","locked","merged", or"all" - •
scope:"created_by_me"(default),"assigned_to_me", or"all" - •
source_branch/target_branch: Filter by branch names - •
author_id/author_username: Filter by MR author - •
assignee_id: Filter by assignee (useNonefor unassigned,Anyfor assigned) - •
reviewer_id/reviewer_username: Filter by reviewer - •
labels: Comma-separated label filter - •
search: Search in title and description - •
wip:"yes"for draft MRs,"no"for non-draft - •
order_by:"created_at"(default),"title","merged_at","updated_at" - •
view:"simple"for minimal fields - •
iids[]: Filter by specific MR internal IDs
Pitfalls:
- •Default
scopeis"created_by_me"which limits results; use"all"for complete listings - •
author_idandauthor_usernameare mutually exclusive - •
reviewer_idandreviewer_usernameare mutually exclusive - •
approvedfilter requires themr_approved_filterfeature flag (disabled by default) - •Large MR histories can be noisy; use filters and moderate
per_pagevalues
3. Manage Projects and Repositories
When to use: User wants to list projects, create new projects, or manage branches
Tool sequence:
- •
GITLAB_GET_PROJECTS- List all accessible projects with filters [Required] - •
GITLAB_GET_PROJECT- Get detailed info for a specific project [Optional] - •
GITLAB_LIST_USER_PROJECTS- List projects owned by a specific user [Optional] - •
GITLAB_CREATE_PROJECT- Create a new project [Required for create] - •
GITLAB_GET_REPOSITORY_BRANCHES- List branches in a project [Required for branch ops] - •
GITLAB_CREATE_REPOSITORY_BRANCH- Create a new branch [Optional] - •
GITLAB_GET_REPOSITORY_BRANCH- Get details of a specific branch [Optional] - •
GITLAB_LIST_REPOSITORY_COMMITS- View commit history [Optional] - •
GITLAB_GET_PROJECT_LANGUAGES- Get language breakdown [Optional]
Key parameters:
- •
name/path: Project name and URL-friendly path (both required for creation) - •
visibility:"private","internal", or"public" - •
namespace_id: Group or user ID for project placement - •
search: Case-insensitive substring search for projects - •
membership:trueto limit to projects user is a member of - •
owned:trueto limit to user-owned projects - •
project_id: Project ID for branch operations - •
branch_name: Name for new branch - •
ref: Source branch or commit SHA for new branch creation - •
order_by:"id","name","path","created_at","updated_at","star_count","last_activity_at"
Pitfalls:
- •
GITLAB_GET_PROJECTSpagination is required for complete coverage; stopping at first page misses projects - •Some responses place items under
data.details; parse the actual returned list structure - •Most follow-up calls depend on correct
project_id; verify withGITLAB_GET_PROJECTfirst - •Invalid
branch_name/ref/shacauses client errors; verify branch existence viaGITLAB_GET_REPOSITORY_BRANCHESfirst - •Both
nameandpathare required forGITLAB_CREATE_PROJECT
4. Monitor CI/CD Pipelines
When to use: User wants to check pipeline status, list jobs, or monitor CI/CD runs
Tool sequence:
- •
GITLAB_GET_PROJECT- Verify project access [Prerequisite] - •
GITLAB_LIST_PROJECT_PIPELINES- List pipelines with filters [Required] - •
GITLAB_GET_SINGLE_PIPELINE- Get detailed info for a specific pipeline [Optional] - •
GITLAB_LIST_PIPELINE_JOBS- List jobs within a pipeline [Optional]
Key parameters:
- •
id: Project ID or URL-encoded path - •
status: Filter by"created","waiting_for_resource","preparing","pending","running","success","failed","canceled","skipped","manual","scheduled" - •
scope:"running","pending","finished","branches","tags" - •
ref: Branch or tag name - •
sha: Specific commit SHA - •
source: Pipeline source (use"parent_pipeline"for child pipelines) - •
order_by:"id"(default),"status","ref","updated_at","user_id" - •
created_after/created_before: ISO 8601 date filters - •
pipeline_id: Specific pipeline ID for job listing - •
include_retried:trueto include retried jobs (defaultfalse)
Pitfalls:
- •Large pipeline histories can be noisy; use
status,ref, and date filters to narrow results - •Use moderate
per_pagevalues to keep output manageable - •Pipeline job
scopeaccepts single status string or array of statuses - •
yaml_errors: truereturns only pipelines with invalid configurations
5. Manage Users and Members
When to use: User wants to find users, list project members, or check user status
Tool sequence:
- •
GITLAB_GET_USERS- Search and list GitLab users [Required] - •
GITLAB_GET_USER- Get details for a specific user by ID [Optional] - •
GITLAB_GET_USERS_ID_STATUS- Get user status message and availability [Optional] - •
GITLAB_LIST_ALL_PROJECT_MEMBERS- List all project members (direct + inherited) [Required for member listing] - •
GITLAB_LIST_PROJECT_USERS- List project users with search filter [Optional]
Key parameters:
- •
search: Search by name, username, or public email - •
username: Get specific user by username - •
active/blocked: Filter by user state - •
id: Project ID for member listing - •
query: Filter members by name, email, or username - •
state: Filter members by"awaiting"or"active"(Premium/Ultimate) - •
user_ids: Filter by specific user IDs
Pitfalls:
- •Many user filters (admins, auditors, extern_uid, two_factor) are admin-only
- •
GITLAB_LIST_ALL_PROJECT_MEMBERSincludes direct, inherited, and invited members - •User search is case-insensitive but may not match partial email domains
- •Premium/Ultimate features (state filter, seat info) are not available on free plans
Common Patterns
ID Resolution
GitLab uses two identifier formats for projects:
- •Numeric ID: Integer project ID (e.g.,
123) - •URL-encoded path: Namespace/project format (e.g.,
"my-group%2Fmy-project"or"my-group/my-project") - •Issue IID vs ID:
issue_iidis the project-internal number (#42); the globalidis different - •User ID: Numeric; resolve via
GITLAB_GET_USERSwithsearchorusername
Pagination
GitLab uses offset-based pagination:
- •Set
page(starting at 1) andper_page(1-100, default 20) - •Continue incrementing
pageuntil response returns fewer items thanper_pageor is empty - •Total count may be available in response headers (
X-Total,X-Total-Pages) - •Always paginate to completion for accurate results
URL-Encoded Paths
When using project paths as identifiers:
- •Forward slashes must be URL-encoded:
my-group/my-projectbecomesmy-group%2Fmy-project - •Some tools accept unencoded paths; check schema for each tool
- •Prefer numeric IDs when available for reliability
Known Pitfalls
ID Formats
- •Project
idfield accepts both integer and string (URL-encoded path) - •Issue
issue_iidis project-scoped; do not confuse with global issue ID - •Pipeline IDs are project-scoped integers
- •User IDs are global integers across the GitLab instance
Rate Limits
- •GitLab has per-user rate limits (typically 300-2000 requests/minute depending on plan)
- •Large pipeline/issue histories should use date and status filters to reduce result sets
- •Paginate responsibly with moderate
per_pagevalues
Parameter Quirks
- •
labelsfield replaces ALL labels; useadd_labels/remove_labelsfor incremental changes - •
assignee_ids: [0]unassigns all; empty array does nothing - •
scopedefaults vary:"created_by_me"for MRs,"all"for issues - •
author_idandauthor_usernameare mutually exclusive in MR filters - •Date parameters use ISO 8601 format:
"2024-01-15T10:30:00Z"
Plan Restrictions
- •Some features require Premium/Ultimate:
epic_id,weight,iteration_id,approved_by_ids, memberstatefilter - •Admin-only features: user management filters,
updated_atoverride, custom attributes - •The
mr_approved_filterfeature flag is disabled by default
Quick Reference
| Task | Tool Slug | Key Params |
|---|---|---|
| List projects | GITLAB_GET_PROJECTS | search, membership, visibility |
| Get project details | GITLAB_GET_PROJECT | id |
| User's projects | GITLAB_LIST_USER_PROJECTS | id, search, owned |
| Create project | GITLAB_CREATE_PROJECT | name, path, visibility |
| List issues | GITLAB_LIST_PROJECT_ISSUES | id, state, labels, search |
| Create issue | GITLAB_CREATE_PROJECT_ISSUE | id, title, description, labels |
| Update issue | GITLAB_UPDATE_PROJECT_ISSUE | id, issue_iid, state_event |
| List merge requests | GITLAB_GET_PROJECT_MERGE_REQUESTS | id, state, scope, labels |
| List branches | GITLAB_GET_REPOSITORY_BRANCHES | project_id, search |
| Get branch | GITLAB_GET_REPOSITORY_BRANCH | project_id, branch_name |
| Create branch | GITLAB_CREATE_REPOSITORY_BRANCH | project_id, branch_name, ref |
| List commits | GITLAB_LIST_REPOSITORY_COMMITS | project ID, branch ref |
| Project languages | GITLAB_GET_PROJECT_LANGUAGES | project ID |
| List pipelines | GITLAB_LIST_PROJECT_PIPELINES | id, status, ref |
| Get pipeline | GITLAB_GET_SINGLE_PIPELINE | project_id, pipeline_id |
| List pipeline jobs | GITLAB_LIST_PIPELINE_JOBS | id, pipeline_id, scope |
| Search users | GITLAB_GET_USERS | search, username, active |
| Get user | GITLAB_GET_USER | user ID |
| User status | GITLAB_GET_USERS_ID_STATUS | user ID |
| List project members | GITLAB_LIST_ALL_PROJECT_MEMBERS | id, query, state |
| List project users | GITLAB_LIST_PROJECT_USERS | id, search |
When to Use
This skill is applicable to execute the workflow or actions described in the overview.