SKILL.md
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 (RUBESEARCHTOOLS available)
- Active GitLab connection via
RUBEMANAGECONNECTIONSwith toolkitgitlab - Always call
RUBESEARCHTOOLSfirst 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
RUBESEARCHTOOLSresponds - Call
RUBEMANAGECONNECTIONSwith 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:
GITLABGETPROJECTS- Find the target project and get its ID [Prerequisite]GITLABLISTPROJECT_ISSUES- List and filter issues for a project [Required]GITLABCREATEPROJECT_ISSUE- Create a new issue [Required for create]GITLABUPDATEPROJECT_ISSUE- Update an existing issue (title, labels, state, assignees) [Required for update]GITLABLISTPROJECT_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")addlabels/removelabels: Add or remove labels without replacing allstate: Filter by"all","opened", or"closed"state_event:"close"or"reopen"to change issue stateassignee_ids: Array of user IDs; use[0]to unassign allissue_iid: Internal issue ID within the project (required for updates)milestone: Filter by milestone titlesearch: Search in title and descriptionscope:"createdbyme","assignedtome", or"all"page/perpage: Pagination (default perpage: 20)
Pitfalls:
idaccepts either integer project ID or URL-encoded path; wrong IDs yield 4xx errorsissue_iidis the project-internal ID (shown as #42), different from the global issue ID- Labels in
labelsfield replace ALL existing labels; useaddlabels/removelabelsfor 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:
GITLABGETPROJECT- Get project details and verify access [Prerequisite]GITLABGETPROJECTMERGEREQUESTS- List and filter merge requests [Required]GITLABGETREPOSITORY_BRANCHES- Verify source/target branches [Optional]GITLABLISTALLPROJECTMEMBERS- Find reviewers/assignees [Optional]
Key parameters:
id: Project ID or URL-encoded pathstate:"opened","closed","locked","merged", or"all"scope:"createdbyme"(default),"assignedtome", or"all"sourcebranch/targetbranch: Filter by branch namesauthorid/authorusername: Filter by MR authorassignee_id: Filter by assignee (useNonefor unassigned,Anyfor assigned)reviewerid/reviewerusername: Filter by reviewerlabels: Comma-separated label filtersearch: Search in title and descriptionwip:"yes"for draft MRs,"no"for non-draftorderby:"createdat"(default),"title","mergedat","updatedat"view:"simple"for minimal fieldsiids[]: Filter by specific MR internal IDs
Pitfalls:
- Default
scopeis"createdbyme"which limits results; use"all"for complete listings authoridandauthorusernameare mutually exclusiverevieweridandreviewerusernameare mutually exclusiveapprovedfilter requires themrapprovedfilterfeature 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:
GITLABGETPROJECTS- List all accessible projects with filters [Required]GITLABGETPROJECT- Get detailed info for a specific project [Optional]GITLABLISTUSER_PROJECTS- List projects owned by a specific user [Optional]GITLABCREATEPROJECT- Create a new project [Required for create]GITLABGETREPOSITORY_BRANCHES- List branches in a project [Required for branch ops]GITLABCREATEREPOSITORY_BRANCH- Create a new branch [Optional]GITLABGETREPOSITORY_BRANCH- Get details of a specific branch [Optional]GITLABLISTREPOSITORY_COMMITS- View commit history [Optional]GITLABGETPROJECT_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 placementsearch: Case-insensitive substring search for projectsmembership:trueto limit to projects user is a member ofowned:trueto limit to user-owned projectsproject_id: Project ID for branch operationsbranch_name: Name for new branchref: Source branch or commit SHA for new branch creationorderby:"id","name","path","createdat","updatedat","starcount","lastactivityat"
Pitfalls:
GITLABGETPROJECTSpagination 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
projectid; verify withGITLABGET_PROJECTfirst - Invalid
branchname/ref/shacauses client errors; verify branch existence viaGITLABGETREPOSITORYBRANCHESfirst - Both
nameandpathare required forGITLABCREATEPROJECT
4. Monitor CI/CD Pipelines
When to use: User wants to check pipeline status, list jobs, or monitor CI/CD runs
Tool sequence:
GITLABGETPROJECT- Verify project access [Prerequisite]GITLABLISTPROJECT_PIPELINES- List pipelines with filters [Required]GITLABGETSINGLE_PIPELINE- Get detailed info for a specific pipeline [Optional]GITLABLISTPIPELINE_JOBS- List jobs within a pipeline [Optional]
Key parameters:
id: Project ID or URL-encoded pathstatus: Filter by"created","waitingforresource","preparing","pending","running","success","failed","canceled","skipped","manual","scheduled"scope:"running","pending","finished","branches","tags"ref: Branch or tag namesha: Specific commit SHAsource: Pipeline source (use"parent_pipeline"for child pipelines)orderby:"id"(default),"status","ref","updatedat","user_id"createdafter/createdbefore: ISO 8601 date filterspipeline_id: Specific pipeline ID for job listinginclude_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:
GITLABGETUSERS- Search and list GitLab users [Required]GITLABGETUSER- Get details for a specific user by ID [Optional]GITLABGETUSERSIDSTATUS- Get user status message and availability [Optional]GITLABLISTALLPROJECTMEMBERS- List all project members (direct + inherited) [Required for member listing]GITLABLISTPROJECT_USERS- List project users with search filter [Optional]
Key parameters:
search: Search by name, username, or public emailusername: Get specific user by usernameactive/blocked: Filter by user stateid: Project ID for member listingquery: Filter members by name, email, or usernamestate: Filter members by"awaiting"or"active"(Premium/Ultimate)user_ids: Filter by specific user IDs
Pitfalls:
- Many user filters (admins, auditors, externuid, twofactor) are admin-only
GITLABLISTALLPROJECTMEMBERSincludes 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
GITLABGETUSERSwithsearchorusername
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; useaddlabels/removelabelsfor incremental changesassignee_ids: [0]unassigns all; empty array does nothingscopedefaults vary:"createdbyme"for MRs,"all"for issuesauthoridandauthorusernameare mutually exclusive in MR filters- Date parameters use ISO 8601 format:
"2024-01-15T10:30:00Z"
Plan Restrictions
- Some features require Premium/Ultimate:
epicid,weight,iterationid,approvedbyids, memberstatefilter - Admin-only features: user management filters,
updated_atoverride, custom attributes - The
mrapprovedfilterfeature flag is disabled by default
Quick Reference
| Task | Tool Slug | Key Params |
|---|---|---|
| List projects | GITLABGETPROJECTS |
search, membership, visibility |
| Get project details | GITLABGETPROJECT |
id |
| User's projects | GITLABLISTUSER_PROJECTS |
id, search, owned |
| Create project | GITLABCREATEPROJECT |
name, path, visibility |
| List issues | GITLABLISTPROJECT_ISSUES |
id, state, labels, search |
| Create issue | GITLABCREATEPROJECT_ISSUE |
id, title, description, labels |
| Update issue | GITLABUPDATEPROJECT_ISSUE |
id, issueiid, stateevent |
| List merge requests | GITLABGETPROJECTMERGEREQUESTS |
id, state, scope, labels |
| List branches | GITLABGETREPOSITORY_BRANCHES |
project_id, search |
| Get branch | GITLABGETREPOSITORY_BRANCH |
projectid, branchname |
| Create branch | GITLABCREATEREPOSITORY_BRANCH |
projectid, branchname, ref |
| List commits | GITLABLISTREPOSITORY_COMMITS |
project ID, branch ref |
| Project languages | GITLABGETPROJECT_LANGUAGES |
project ID |
| List pipelines | GITLABLISTPROJECT_PIPELINES |
id, status, ref |
| Get pipeline | GITLABGETSINGLE_PIPELINE |
projectid, pipelineid |
| List pipeline jobs | GITLABLISTPIPELINE_JOBS |
id, pipeline_id, scope |
| Search users | GITLABGETUSERS |
search, username, active |
| Get user | GITLABGETUSER |
user ID |
| User status | GITLABGETUSERSIDSTATUS |
user ID |
| List project members | GITLABLISTALLPROJECTMEMBERS |
id, query, state |
| List project users | GITLABLISTPROJECT_USERS |
id, search |
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
Example
User request:
Automate GitLab project management, issues, merge requests, pipelines, branches, and user operations via Rube MCP (Composio).
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.