Marketplace gitlab-automation
Automate GitLab project management, issues, merge requests, pipelines, branches, and user operations via Rube MCP (Composio). Always search tools first for current schemas.
git clone https://github.com/aiskillstore/marketplace
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/sickn33/gitlab-automation" ~/.claude/skills/aiskillstore-marketplace-gitlab-automation && rm -rf "$T"
skills/sickn33/gitlab-automation/SKILL.mdGitLab 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
with toolkitRUBE_MANAGE_CONNECTIONSgitlab - Always call
first to get current tool schemasRUBE_SEARCH_TOOLS
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
respondsRUBE_SEARCH_TOOLS - Call
with toolkitRUBE_MANAGE_CONNECTIONSgitlab - 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:
- Find the target project and get its ID [Prerequisite]GITLAB_GET_PROJECTS
- List and filter issues for a project [Required]GITLAB_LIST_PROJECT_ISSUES
- Create a new issue [Required for create]GITLAB_CREATE_PROJECT_ISSUE
- Update an existing issue (title, labels, state, assignees) [Required for update]GITLAB_UPDATE_PROJECT_ISSUE
- Find user IDs for assignment [Optional]GITLAB_LIST_PROJECT_USERS
Key parameters:
: Project ID (integer) or URL-encoded path (e.g.,id
)"my-group/my-project"
: Issue title (required for creation)title
: Issue body text (max 1,048,576 characters)description
: Comma-separated label names (e.g.,labels
)"bug,critical"
/add_labels
: Add or remove labels without replacing allremove_labels
: Filter bystate
,"all"
, or"opened""closed"
:state_event
or"close"
to change issue state"reopen"
: Array of user IDs; useassignee_ids
to unassign all[0]
: Internal issue ID within the project (required for updates)issue_iid
: Filter by milestone titlemilestone
: Search in title and descriptionsearch
:scope
,"created_by_me"
, or"assigned_to_me""all"
/page
: Pagination (default per_page: 20)per_page
Pitfalls:
accepts either integer project ID or URL-encoded path; wrong IDs yield 4xx errorsid
is the project-internal ID (shown as #42), different from the global issue IDissue_iid- Labels in
field replace ALL existing labels; uselabels
/add_labels
for incremental changesremove_labels - Setting
to empty array does NOT unassign; useassignee_ids
instead[0]
field requires administrator or project/group owner rightsupdated_at
2. Manage Merge Requests
When to use: User wants to list, filter, or review merge requests in a project
Tool sequence:
- Get project details and verify access [Prerequisite]GITLAB_GET_PROJECT
- List and filter merge requests [Required]GITLAB_GET_PROJECT_MERGE_REQUESTS
- Verify source/target branches [Optional]GITLAB_GET_REPOSITORY_BRANCHES
- Find reviewers/assignees [Optional]GITLAB_LIST_ALL_PROJECT_MEMBERS
Key parameters:
: Project ID or URL-encoded pathid
:state
,"opened"
,"closed"
,"locked"
, or"merged""all"
:scope
(default),"created_by_me"
, or"assigned_to_me""all"
/source_branch
: Filter by branch namestarget_branch
/author_id
: Filter by MR authorauthor_username
: Filter by assignee (useassignee_id
for unassigned,None
for assigned)Any
/reviewer_id
: Filter by reviewerreviewer_username
: Comma-separated label filterlabels
: Search in title and descriptionsearch
:wip
for draft MRs,"yes"
for non-draft"no"
:order_by
(default),"created_at"
,"title"
,"merged_at""updated_at"
:view
for minimal fields"simple"
: Filter by specific MR internal IDsiids[]
Pitfalls:
- Default
isscope
which limits results; use"created_by_me"
for complete listings"all"
andauthor_id
are mutually exclusiveauthor_username
andreviewer_id
are mutually exclusivereviewer_username
filter requires theapproved
feature flag (disabled by default)mr_approved_filter- Large MR histories can be noisy; use filters and moderate
valuesper_page
3. Manage Projects and Repositories
When to use: User wants to list projects, create new projects, or manage branches
Tool sequence:
- List all accessible projects with filters [Required]GITLAB_GET_PROJECTS
- Get detailed info for a specific project [Optional]GITLAB_GET_PROJECT
- List projects owned by a specific user [Optional]GITLAB_LIST_USER_PROJECTS
- Create a new project [Required for create]GITLAB_CREATE_PROJECT
- List branches in a project [Required for branch ops]GITLAB_GET_REPOSITORY_BRANCHES
- Create a new branch [Optional]GITLAB_CREATE_REPOSITORY_BRANCH
- Get details of a specific branch [Optional]GITLAB_GET_REPOSITORY_BRANCH
- View commit history [Optional]GITLAB_LIST_REPOSITORY_COMMITS
- Get language breakdown [Optional]GITLAB_GET_PROJECT_LANGUAGES
Key parameters:
/name
: Project name and URL-friendly path (both required for creation)path
:visibility
,"private"
, or"internal""public"
: Group or user ID for project placementnamespace_id
: Case-insensitive substring search for projectssearch
:membership
to limit to projects user is a member oftrue
:owned
to limit to user-owned projectstrue
: Project ID for branch operationsproject_id
: Name for new branchbranch_name
: Source branch or commit SHA for new branch creationref
:order_by
,"id"
,"name"
,"path"
,"created_at"
,"updated_at"
,"star_count""last_activity_at"
Pitfalls:
pagination is required for complete coverage; stopping at first page misses projectsGITLAB_GET_PROJECTS- Some responses place items under
; parse the actual returned list structuredata.details - Most follow-up calls depend on correct
; verify withproject_id
firstGITLAB_GET_PROJECT - Invalid
/branch_name
/ref
causes client errors; verify branch existence viasha
firstGITLAB_GET_REPOSITORY_BRANCHES - Both
andname
are required forpathGITLAB_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:
- Verify project access [Prerequisite]GITLAB_GET_PROJECT
- List pipelines with filters [Required]GITLAB_LIST_PROJECT_PIPELINES
- Get detailed info for a specific pipeline [Optional]GITLAB_GET_SINGLE_PIPELINE
- List jobs within a pipeline [Optional]GITLAB_LIST_PIPELINE_JOBS
Key parameters:
: Project ID or URL-encoded pathid
: Filter bystatus
,"created"
,"waiting_for_resource"
,"preparing"
,"pending"
,"running"
,"success"
,"failed"
,"canceled"
,"skipped"
,"manual""scheduled"
:scope
,"running"
,"pending"
,"finished"
,"branches""tags"
: Branch or tag nameref
: Specific commit SHAsha
: Pipeline source (usesource
for child pipelines)"parent_pipeline"
:order_by
(default),"id"
,"status"
,"ref"
,"updated_at""user_id"
/created_after
: ISO 8601 date filterscreated_before
: Specific pipeline ID for job listingpipeline_id
:include_retried
to include retried jobs (defaulttrue
)false
Pitfalls:
- Large pipeline histories can be noisy; use
,status
, and date filters to narrow resultsref - Use moderate
values to keep output manageableper_page - Pipeline job
accepts single status string or array of statusesscope
returns only pipelines with invalid configurationsyaml_errors: true
5. Manage Users and Members
When to use: User wants to find users, list project members, or check user status
Tool sequence:
- Search and list GitLab users [Required]GITLAB_GET_USERS
- Get details for a specific user by ID [Optional]GITLAB_GET_USER
- Get user status message and availability [Optional]GITLAB_GET_USERS_ID_STATUS
- List all project members (direct + inherited) [Required for member listing]GITLAB_LIST_ALL_PROJECT_MEMBERS
- List project users with search filter [Optional]GITLAB_LIST_PROJECT_USERS
Key parameters:
: Search by name, username, or public emailsearch
: Get specific user by usernameusername
/active
: Filter by user stateblocked
: Project ID for member listingid
: Filter members by name, email, or usernamequery
: Filter members bystate
or"awaiting"
(Premium/Ultimate)"active"
: Filter by specific user IDsuser_ids
Pitfalls:
- Many user filters (admins, auditors, extern_uid, two_factor) are admin-only
includes direct, inherited, and invited membersGITLAB_LIST_ALL_PROJECT_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.,
or"my-group%2Fmy-project"
)"my-group/my-project" - Issue IID vs ID:
is the project-internal number (#42); the globalissue_iid
is differentid - User ID: Numeric; resolve via
withGITLAB_GET_USERS
orsearchusername
Pagination
GitLab uses offset-based pagination:
- Set
(starting at 1) andpage
(1-100, default 20)per_page - Continue incrementing
until response returns fewer items thanpage
or is emptyper_page - 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:
becomesmy-group/my-projectmy-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
field accepts both integer and string (URL-encoded path)id - Issue
is project-scoped; do not confuse with global issue IDissue_iid - 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
valuesper_page
Parameter Quirks
field replaces ALL labels; uselabels
/add_labels
for incremental changesremove_labels
unassigns all; empty array does nothingassignee_ids: [0]
defaults vary:scope
for MRs,"created_by_me"
for issues"all"
andauthor_id
are mutually exclusive in MR filtersauthor_username- Date parameters use ISO 8601 format:
"2024-01-15T10:30:00Z"
Plan Restrictions
- Some features require Premium/Ultimate:
,epic_id
,weight
,iteration_id
, memberapproved_by_ids
filterstate - Admin-only features: user management filters,
override, custom attributesupdated_at - The
feature flag is disabled by defaultmr_approved_filter
Quick Reference
| Task | Tool Slug | Key Params |
|---|---|---|
| List projects | | , , |
| Get project details | | |
| User's projects | | , , |
| Create project | | , , |
| List issues | | , , , |
| Create issue | | , , , |
| Update issue | | , , |
| List merge requests | | , , , |
| List branches | | , |
| Get branch | | , |
| Create branch | | , , |
| List commits | | project ID, branch ref |
| Project languages | | project ID |
| List pipelines | | , , |
| Get pipeline | | , |
| List pipeline jobs | | , , |
| Search users | | , , |
| Get user | | user ID |
| User status | | user ID |
| List project members | | , , |
| List project users | | , |