[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7166MP7VN9S883HNVYYM822":3,"skill-same:01M7166MP7VN9S883HNVYYM822":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M7166MP7VN9S883HNVYYM822","gitlab-automation",null,"Automate GitLab project management, issues, merge requests, pipelines, branches, and user operations via Rube MCP (Composio). Always search tools first for current schemas.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fgitlab-automation\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"gitlab","automation","gitlab automation","requests","first","for","gitlab project management","project management","automate","Tools","composio","2026","merge","unknown","MCP","branches","issues","search","project","community","2026-11-10 10:12:30",false,"---\nname: gitlab-automation\ndescription: \"Automate GitLab project management, issues, merge requests, pipelines, branches, and user operations via Rube MCP (Composio). Always search tools first for current schemas.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# GitLab Automation via Rube MCP\n\nAutomate GitLab operations including project management, issue tracking, merge request workflows, CI\u002FCD pipeline monitoring, branch management, and user administration through Composio's GitLab toolkit.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active GitLab connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `gitlab`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `gitlab`\n3. If connection is not ACTIVE, follow the returned auth link to complete GitLab OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Manage Issues\n\n**When to use**: User wants to create, update, list, or search issues in a GitLab project\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECTS` - Find the target project and get its ID [Prerequisite]\n2. `GITLAB_LIST_PROJECT_ISSUES` - List and filter issues for a project [Required]\n3. `GITLAB_CREATE_PROJECT_ISSUE` - Create a new issue [Required for create]\n4. `GITLAB_UPDATE_PROJECT_ISSUE` - Update an existing issue (title, labels, state, assignees) [Required for update]\n5. `GITLAB_LIST_PROJECT_USERS` - Find user IDs for assignment [Optional]\n\n**Key parameters**:\n- `id`: Project ID (integer) or URL-encoded path (e.g., `\"my-group\u002Fmy-project\"`)\n- `title`: Issue title (required for creation)\n- `description`: Issue body text (max 1,048,576 characters)\n- `labels`: Comma-separated label names (e.g., `\"bug,critical\"`)\n- `add_labels` \u002F `remove_labels`: Add or remove labels without replacing all\n- `state`: Filter by `\"all\"`, `\"opened\"`, or `\"closed\"`\n- `state_event`: `\"close\"` or `\"reopen\"` to change issue state\n- `assignee_ids`: Array of user IDs; use `[0]` to unassign all\n- `issue_iid`: Internal issue ID within the project (required for updates)\n- `milestone`: Filter by milestone title\n- `search`: Search in title and description\n- `scope`: `\"created_by_me\"`, `\"assigned_to_me\"`, or `\"all\"`\n- `page` \u002F `per_page`: Pagination (default per_page: 20)\n\n**Pitfalls**:\n- `id` accepts either integer project ID or URL-encoded path; wrong IDs yield 4xx errors\n- `issue_iid` is the project-internal ID (shown as #42), different from the global issue ID\n- Labels in `labels` field replace ALL existing labels; use `add_labels`\u002F`remove_labels` for incremental changes\n- Setting `assignee_ids` to empty array does NOT unassign; use `[0]` instead\n- `updated_at` field requires administrator or project\u002Fgroup owner rights\n\n### 2. Manage Merge Requests\n\n**When to use**: User wants to list, filter, or review merge requests in a project\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECT` - Get project details and verify access [Prerequisite]\n2. `GITLAB_GET_PROJECT_MERGE_REQUESTS` - List and filter merge requests [Required]\n3. `GITLAB_GET_REPOSITORY_BRANCHES` - Verify source\u002Ftarget branches [Optional]\n4. `GITLAB_LIST_ALL_PROJECT_MEMBERS` - Find reviewers\u002Fassignees [Optional]\n\n**Key parameters**:\n- `id`: Project ID or URL-encoded path\n- `state`: `\"opened\"`, `\"closed\"`, `\"locked\"`, `\"merged\"`, or `\"all\"`\n- `scope`: `\"created_by_me\"` (default), `\"assigned_to_me\"`, or `\"all\"`\n- `source_branch` \u002F `target_branch`: Filter by branch names\n- `author_id` \u002F `author_username`: Filter by MR author\n- `assignee_id`: Filter by assignee (use `None` for unassigned, `Any` for assigned)\n- `reviewer_id` \u002F `reviewer_username`: Filter by reviewer\n- `labels`: Comma-separated label filter\n- `search`: Search in title and description\n- `wip`: `\"yes\"` for draft MRs, `\"no\"` for non-draft\n- `order_by`: `\"created_at\"` (default), `\"title\"`, `\"merged_at\"`, `\"updated_at\"`\n- `view`: `\"simple\"` for minimal fields\n- `iids[]`: Filter by specific MR internal IDs\n\n**Pitfalls**:\n- Default `scope` is `\"created_by_me\"` which limits results; use `\"all\"` for complete listings\n- `author_id` and `author_username` are mutually exclusive\n- `reviewer_id` and `reviewer_username` are mutually exclusive\n- `approved` filter requires the `mr_approved_filter` feature flag (disabled by default)\n- Large MR histories can be noisy; use filters and moderate `per_page` values\n\n### 3. Manage Projects and Repositories\n\n**When to use**: User wants to list projects, create new projects, or manage branches\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECTS` - List all accessible projects with filters [Required]\n2. `GITLAB_GET_PROJECT` - Get detailed info for a specific project [Optional]\n3. `GITLAB_LIST_USER_PROJECTS` - List projects owned by a specific user [Optional]\n4. `GITLAB_CREATE_PROJECT` - Create a new project [Required for create]\n5. `GITLAB_GET_REPOSITORY_BRANCHES` - List branches in a project [Required for branch ops]\n6. `GITLAB_CREATE_REPOSITORY_BRANCH` - Create a new branch [Optional]\n7. `GITLAB_GET_REPOSITORY_BRANCH` - Get details of a specific branch [Optional]\n8. `GITLAB_LIST_REPOSITORY_COMMITS` - View commit history [Optional]\n9. `GITLAB_GET_PROJECT_LANGUAGES` - Get language breakdown [Optional]\n\n**Key parameters**:\n- `name` \u002F `path`: Project name and URL-friendly path (both required for creation)\n- `visibility`: `\"private\"`, `\"internal\"`, or `\"public\"`\n- `namespace_id`: Group or user ID for project placement\n- `search`: Case-insensitive substring search for projects\n- `membership`: `true` to limit to projects user is a member of\n- `owned`: `true` to limit to user-owned projects\n- `project_id`: Project ID for branch operations\n- `branch_name`: Name for new branch\n- `ref`: Source branch or commit SHA for new branch creation\n- `order_by`: `\"id\"`, `\"name\"`, `\"path\"`, `\"created_at\"`, `\"updated_at\"`, `\"star_count\"`, `\"last_activity_at\"`\n\n**Pitfalls**:\n- `GITLAB_GET_PROJECTS` pagination is required for complete coverage; stopping at first page misses projects\n- Some responses place items under `data.details`; parse the actual returned list structure\n- Most follow-up calls depend on correct `project_id`; verify with `GITLAB_GET_PROJECT` first\n- Invalid `branch_name`\u002F`ref`\u002F`sha` causes client errors; verify branch existence via `GITLAB_GET_REPOSITORY_BRANCHES` first\n- Both `name` and `path` are required for `GITLAB_CREATE_PROJECT`\n\n### 4. Monitor CI\u002FCD Pipelines\n\n**When to use**: User wants to check pipeline status, list jobs, or monitor CI\u002FCD runs\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECT` - Verify project access [Prerequisite]\n2. `GITLAB_LIST_PROJECT_PIPELINES` - List pipelines with filters [Required]\n3. `GITLAB_GET_SINGLE_PIPELINE` - Get detailed info for a specific pipeline [Optional]\n4. `GITLAB_LIST_PIPELINE_JOBS` - List jobs within a pipeline [Optional]\n\n**Key parameters**:\n- `id`: Project ID or URL-encoded path\n- `status`: Filter by `\"created\"`, `\"waiting_for_resource\"`, `\"preparing\"`, `\"pending\"`, `\"running\"`, `\"success\"`, `\"failed\"`, `\"canceled\"`, `\"skipped\"`, `\"manual\"`, `\"scheduled\"`\n- `scope`: `\"running\"`, `\"pending\"`, `\"finished\"`, `\"branches\"`, `\"tags\"`\n- `ref`: Branch or tag name\n- `sha`: Specific commit SHA\n- `source`: Pipeline source (use `\"parent_pipeline\"` for child pipelines)\n- `order_by`: `\"id\"` (default), `\"status\"`, `\"ref\"`, `\"updated_at\"`, `\"user_id\"`\n- `created_after` \u002F `created_before`: ISO 8601 date filters\n- `pipeline_id`: Specific pipeline ID for job listing\n- `include_retried`: `true` to include retried jobs (default `false`)\n\n**Pitfalls**:\n- Large pipeline histories can be noisy; use `status`, `ref`, and date filters to narrow results\n- Use moderate `per_page` values to keep output manageable\n- Pipeline job `scope` accepts single status string or array of statuses\n- `yaml_errors: true` returns only pipelines with invalid configurations\n\n### 5. Manage Users and Members\n\n**When to use**: User wants to find users, list project members, or check user status\n\n**Tool sequence**:\n1. `GITLAB_GET_USERS` - Search and list GitLab users [Required]\n2. `GITLAB_GET_USER` - Get details for a specific user by ID [Optional]\n3. `GITLAB_GET_USERS_ID_STATUS` - Get user status message and availability [Optional]\n4. `GITLAB_LIST_ALL_PROJECT_MEMBERS` - List all project members (direct + inherited) [Required for member listing]\n5. `GITLAB_LIST_PROJECT_USERS` - List project users with search filter [Optional]\n\n**Key parameters**:\n- `search`: Search by name, username, or public email\n- `username`: Get specific user by username\n- `active` \u002F `blocked`: Filter by user state\n- `id`: Project ID for member listing\n- `query`: Filter members by name, email, or username\n- `state`: Filter members by `\"awaiting\"` or `\"active\"` (Premium\u002FUltimate)\n- `user_ids`: Filter by specific user IDs\n\n**Pitfalls**:\n- Many user filters (admins, auditors, extern_uid, two_factor) are admin-only\n- `GITLAB_LIST_ALL_PROJECT_MEMBERS` includes direct, inherited, and invited members\n- User search is case-insensitive but may not match partial email domains\n- Premium\u002FUltimate features (state filter, seat info) are not available on free plans\n\n## Common Patterns\n\n### ID Resolution\nGitLab uses two identifier formats for projects:\n- **Numeric ID**: Integer project ID (e.g., `123`)\n- **URL-encoded path**: Namespace\u002Fproject format (e.g., `\"my-group%2Fmy-project\"` or `\"my-group\u002Fmy-project\"`)\n- **Issue IID vs ID**: `issue_iid` is the project-internal number (#42); the global `id` is different\n- **User ID**: Numeric; resolve via `GITLAB_GET_USERS` with `search` or `username`\n\n### Pagination\nGitLab uses offset-based pagination:\n- Set `page` (starting at 1) and `per_page` (1-100, default 20)\n- Continue incrementing `page` until response returns fewer items than `per_page` or is empty\n- Total count may be available in response headers (`X-Total`, `X-Total-Pages`)\n- Always paginate to completion for accurate results\n\n### URL-Encoded Paths\nWhen using project paths as identifiers:\n- Forward slashes must be URL-encoded: `my-group\u002Fmy-project` becomes `my-group%2Fmy-project`\n- Some tools accept unencoded paths; check schema for each tool\n- Prefer numeric IDs when available for reliability\n\n## Known Pitfalls\n\n### ID Formats\n- Project `id` field accepts both integer and string (URL-encoded path)\n- Issue `issue_iid` is project-scoped; do not confuse with global issue ID\n- Pipeline IDs are project-scoped integers\n- User IDs are global integers across the GitLab instance\n\n### Rate Limits\n- GitLab has per-user rate limits (typically 300-2000 requests\u002Fminute depending on plan)\n- Large pipeline\u002Fissue histories should use date and status filters to reduce result sets\n- Paginate responsibly with moderate `per_page` values\n\n### Parameter Quirks\n- `labels` field replaces ALL labels; use `add_labels`\u002F`remove_labels` for incremental changes\n- `assignee_ids: [0]` unassigns all; empty array does nothing\n- `scope` defaults vary: `\"created_by_me\"` for MRs, `\"all\"` for issues\n- `author_id` and `author_username` are mutually exclusive in MR filters\n- Date parameters use ISO 8601 format: `\"2024-01-15T10:30:00Z\"`\n\n### Plan Restrictions\n- Some features require Premium\u002FUltimate: `epic_id`, `weight`, `iteration_id`, `approved_by_ids`, member `state` filter\n- Admin-only features: user management filters, `updated_at` override, custom attributes\n- The `mr_approved_filter` feature flag is disabled by default\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List projects | `GITLAB_GET_PROJECTS` | `search`, `membership`, `visibility` |\n| Get project details | `GITLAB_GET_PROJECT` | `id` |\n| User's projects | `GITLAB_LIST_USER_PROJECTS` | `id`, `search`, `owned` |\n| Create project | `GITLAB_CREATE_PROJECT` | `name`, `path`, `visibility` |\n| List issues | `GITLAB_LIST_PROJECT_ISSUES` | `id`, `state`, `labels`, `search` |\n| Create issue | `GITLAB_CREATE_PROJECT_ISSUE` | `id`, `title`, `description`, `labels` |\n| Update issue | `GITLAB_UPDATE_PROJECT_ISSUE` | `id`, `issue_iid`, `state_event` |\n| List merge requests | `GITLAB_GET_PROJECT_MERGE_REQUESTS` | `id`, `state`, `scope`, `labels` |\n| List branches | `GITLAB_GET_REPOSITORY_BRANCHES` | `project_id`, `search` |\n| Get branch | `GITLAB_GET_REPOSITORY_BRANCH` | `project_id`, `branch_name` |\n| Create branch | `GITLAB_CREATE_REPOSITORY_BRANCH` | `project_id`, `branch_name`, `ref` |\n| List commits | `GITLAB_LIST_REPOSITORY_COMMITS` | project ID, branch ref |\n| Project languages | `GITLAB_GET_PROJECT_LANGUAGES` | project ID |\n| List pipelines | `GITLAB_LIST_PROJECT_PIPELINES` | `id`, `status`, `ref` |\n| Get pipeline | `GITLAB_GET_SINGLE_PIPELINE` | `project_id`, `pipeline_id` |\n| List pipeline jobs | `GITLAB_LIST_PIPELINE_JOBS` | `id`, `pipeline_id`, `scope` |\n| Search users | `GITLAB_GET_USERS` | `search`, `username`, `active` |\n| Get user | `GITLAB_GET_USER` | user ID |\n| User status | `GITLAB_GET_USERS_ID_STATUS` | user ID |\n| List project members | `GITLAB_LIST_ALL_PROJECT_MEMBERS` | `id`, `query`, `state` |\n| List project users | `GITLAB_LIST_PROJECT_USERS` | `id`, `search` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# GitLab Automation via Rube MCP\n\nAutomate GitLab operations including project management, issue tracking, merge request workflows, CI\u002FCD pipeline monitoring, branch management, and user administration through Composio's GitLab toolkit.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active GitLab connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `gitlab`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `gitlab`\n3. If connection is not ACTIVE, follow the returned auth link to complete GitLab OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Manage Issues\n\n**When to use**: User wants to create, update, list, or search issues in a GitLab project\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECTS` - Find the target project and get its ID [Prerequisite]\n2. `GITLAB_LIST_PROJECT_ISSUES` - List and filter issues for a project [Required]\n3. `GITLAB_CREATE_PROJECT_ISSUE` - Create a new issue [Required for create]\n4. `GITLAB_UPDATE_PROJECT_ISSUE` - Update an existing issue (title, labels, state, assignees) [Required for update]\n5. `GITLAB_LIST_PROJECT_USERS` - Find user IDs for assignment [Optional]\n\n**Key parameters**:\n- `id`: Project ID (integer) or URL-encoded path (e.g., `\"my-group\u002Fmy-project\"`)\n- `title`: Issue title (required for creation)\n- `description`: Issue body text (max 1,048,576 characters)\n- `labels`: Comma-separated label names (e.g., `\"bug,critical\"`)\n- `add_labels` \u002F `remove_labels`: Add or remove labels without replacing all\n- `state`: Filter by `\"all\"`, `\"opened\"`, or `\"closed\"`\n- `state_event`: `\"close\"` or `\"reopen\"` to change issue state\n- `assignee_ids`: Array of user IDs; use `[0]` to unassign all\n- `issue_iid`: Internal issue ID within the project (required for updates)\n- `milestone`: Filter by milestone title\n- `search`: Search in title and description\n- `scope`: `\"created_by_me\"`, `\"assigned_to_me\"`, or `\"all\"`\n- `page` \u002F `per_page`: Pagination (default per_page: 20)\n\n**Pitfalls**:\n- `id` accepts either integer project ID or URL-encoded path; wrong IDs yield 4xx errors\n- `issue_iid` is the project-internal ID (shown as #42), different from the global issue ID\n- Labels in `labels` field replace ALL existing labels; use `add_labels`\u002F`remove_labels` for incremental changes\n- Setting `assignee_ids` to empty array does NOT unassign; use `[0]` instead\n- `updated_at` field requires administrator or project\u002Fgroup owner rights\n\n### 2. Manage Merge Requests\n\n**When to use**: User wants to list, filter, or review merge requests in a project\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECT` - Get project details and verify access [Prerequisite]\n2. `GITLAB_GET_PROJECT_MERGE_REQUESTS` - List and filter merge requests [Required]\n3. `GITLAB_GET_REPOSITORY_BRANCHES` - Verify source\u002Ftarget branches [Optional]\n4. `GITLAB_LIST_ALL_PROJECT_MEMBERS` - Find reviewers\u002Fassignees [Optional]\n\n**Key parameters**:\n- `id`: Project ID or URL-encoded path\n- `state`: `\"opened\"`, `\"closed\"`, `\"locked\"`, `\"merged\"`, or `\"all\"`\n- `scope`: `\"created_by_me\"` (default), `\"assigned_to_me\"`, or `\"all\"`\n- `source_branch` \u002F `target_branch`: Filter by branch names\n- `author_id` \u002F `author_username`: Filter by MR author\n- `assignee_id`: Filter by assignee (use `None` for unassigned, `Any` for assigned)\n- `reviewer_id` \u002F `reviewer_username`: Filter by reviewer\n- `labels`: Comma-separated label filter\n- `search`: Search in title and description\n- `wip`: `\"yes\"` for draft MRs, `\"no\"` for non-draft\n- `order_by`: `\"created_at\"` (default), `\"title\"`, `\"merged_at\"`, `\"updated_at\"`\n- `view`: `\"simple\"` for minimal fields\n- `iids[]`: Filter by specific MR internal IDs\n\n**Pitfalls**:\n- Default `scope` is `\"created_by_me\"` which limits results; use `\"all\"` for complete listings\n- `author_id` and `author_username` are mutually exclusive\n- `reviewer_id` and `reviewer_username` are mutually exclusive\n- `approved` filter requires the `mr_approved_filter` feature flag (disabled by default)\n- Large MR histories can be noisy; use filters and moderate `per_page` values\n\n### 3. Manage Projects and Repositories\n\n**When to use**: User wants to list projects, create new projects, or manage branches\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECTS` - List all accessible projects with filters [Required]\n2. `GITLAB_GET_PROJECT` - Get detailed info for a specific project [Optional]\n3. `GITLAB_LIST_USER_PROJECTS` - List projects owned by a specific user [Optional]\n4. `GITLAB_CREATE_PROJECT` - Create a new project [Required for create]\n5. `GITLAB_GET_REPOSITORY_BRANCHES` - List branches in a project [Required for branch ops]\n6. `GITLAB_CREATE_REPOSITORY_BRANCH` - Create a new branch [Optional]\n7. `GITLAB_GET_REPOSITORY_BRANCH` - Get details of a specific branch [Optional]\n8. `GITLAB_LIST_REPOSITORY_COMMITS` - View commit history [Optional]\n9. `GITLAB_GET_PROJECT_LANGUAGES` - Get language breakdown [Optional]\n\n**Key parameters**:\n- `name` \u002F `path`: Project name and URL-friendly path (both required for creation)\n- `visibility`: `\"private\"`, `\"internal\"`, or `\"public\"`\n- `namespace_id`: Group or user ID for project placement\n- `search`: Case-insensitive substring search for projects\n- `membership`: `true` to limit to projects user is a member of\n- `owned`: `true` to limit to user-owned projects\n- `project_id`: Project ID for branch operations\n- `branch_name`: Name for new branch\n- `ref`: Source branch or commit SHA for new branch creation\n- `order_by`: `\"id\"`, `\"name\"`, `\"path\"`, `\"created_at\"`, `\"updated_at\"`, `\"star_count\"`, `\"last_activity_at\"`\n\n**Pitfalls**:\n- `GITLAB_GET_PROJECTS` pagination is required for complete coverage; stopping at first page misses projects\n- Some responses place items under `data.details`; parse the actual returned list structure\n- Most follow-up calls depend on correct `project_id`; verify with `GITLAB_GET_PROJECT` first\n- Invalid `branch_name`\u002F`ref`\u002F`sha` causes client errors; verify branch existence via `GITLAB_GET_REPOSITORY_BRANCHES` first\n- Both `name` and `path` are required for `GITLAB_CREATE_PROJECT`\n\n### 4. Monitor CI\u002FCD Pipelines\n\n**When to use**: User wants to check pipeline status, list jobs, or monitor CI\u002FCD runs\n\n**Tool sequence**:\n1. `GITLAB_GET_PROJECT` - Verify project access [Prerequisite]\n2. `GITLAB_LIST_PROJECT_PIPELINES` - List pipelines with filters [Required]\n3. `GITLAB_GET_SINGLE_PIPELINE` - Get detailed info for a specific pipeline [Optional]\n4. `GITLAB_LIST_PIPELINE_JOBS` - List jobs within a pipeline [Optional]\n\n**Key parameters**:\n- `id`: Project ID or URL-encoded path\n- `status`: Filter by `\"created\"`, `\"waiting_for_resource\"`, `\"preparing\"`, `\"pending\"`, `\"running\"`, `\"success\"`, `\"failed\"`, `\"canceled\"`, `\"skipped\"`, `\"manual\"`, `\"scheduled\"`\n- `scope`: `\"running\"`, `\"pending\"`, `\"finished\"`, `\"branches\"`, `\"tags\"`\n- `ref`: Branch or tag name\n- `sha`: Specific commit SHA\n- `source`: Pipeline source (use `\"parent_pipeline\"` for child pipelines)\n- `order_by`: `\"id\"` (default), `\"status\"`, `\"ref\"`, `\"updated_at\"`, `\"user_id\"`\n- `created_after` \u002F `created_before`: ISO 8601 date filters\n- `pipeline_id`: Specific pipeline ID for job listing\n- `include_retried`: `true` to include retried jobs (default `false`)\n\n**Pitfalls**:\n- Large pipeline histories can be noisy; use `status`, `ref`, and date filters to narrow results\n- Use moderate `per_page` values to keep output manageable\n- Pipeline job `scope` accepts single status string or array of statuses\n- `yaml_errors: true` returns only pipelines with invalid configurations\n\n### 5. Manage Users and Members\n\n**When to use**: User wants to find users, list project members, or check user status\n\n**Tool sequence**:\n1. `GITLAB_GET_USERS` - Search and list GitLab users [Required]\n2. `GITLAB_GET_USER` - Get details for a specific user by ID [Optional]\n3. `GITLAB_GET_USERS_ID_STATUS` - Get user status message and availability [Optional]\n4. `GITLAB_LIST_ALL_PROJECT_MEMBERS` - List all project members (direct + inherited) [Required for member listing]\n5. `GITLAB_LIST_PROJECT_USERS` - List project users with search filter [Optional]\n\n**Key parameters**:\n- `search`: Search by name, username, or public email\n- `username`: Get specific user by username\n- `active` \u002F `blocked`: Filter by user state\n- `id`: Project ID for member listing\n- `query`: Filter members by name, email, or username\n- `state`: Filter members by `\"awaiting\"` or `\"active\"` (Premium\u002FUltimate)\n- `user_ids`: Filter by specific user IDs\n\n**Pitfalls**:\n- Many user filters (admins, auditors, extern_uid, two_factor) are admin-only\n- `GITLAB_LIST_ALL_PROJECT_MEMBERS` includes direct, inherited, and invited members\n- User search is case-insensitive but may not match partial email domains\n- Premium\u002FUltimate features (state filter, seat info) are not available on free plans\n\n## Common Patterns\n\n### ID Resolution\nGitLab uses two identifier formats for projects:\n- **Numeric ID**: Integer project ID (e.g., `123`)\n- **URL-encoded path**: Namespace\u002Fproject format (e.g., `\"my-group%2Fmy-project\"` or `\"my-group\u002Fmy-project\"`)\n- **Issue IID vs ID**: `issue_iid` is the project-internal number (#42); the global `id` is different\n- **User ID**: Numeric; resolve via `GITLAB_GET_USERS` with `search` or `username`\n\n### Pagination\nGitLab uses offset-based pagination:\n- Set `page` (starting at 1) and `per_page` (1-100, default 20)\n- Continue incrementing `page` until response returns fewer items than `per_page` or is empty\n- Total count may be available in response headers (`X-Total`, `X-Total-Pages`)\n- Always paginate to completion for accurate results\n\n### URL-Encoded Paths\nWhen using project paths as identifiers:\n- Forward slashes must be URL-encoded: `my-group\u002Fmy-project` becomes `my-group%2Fmy-project`\n- Some tools accept unencoded paths; check schema for each tool\n- Prefer numeric IDs when available for reliability\n\n## Known Pitfalls\n\n### ID Formats\n- Project `id` field accepts both integer and string (URL-encoded path)\n- Issue `issue_iid` is project-scoped; do not confuse with global issue ID\n- Pipeline IDs are project-scoped integers\n- User IDs are global integers across the GitLab instance\n\n### Rate Limits\n- GitLab has per-user rate limits (typically 300-2000 requests\u002Fminute depending on plan)\n- Large pipeline\u002Fissue histories should use date and status filters to reduce result sets\n- Paginate responsibly with moderate `per_page` values\n\n### Parameter Quirks\n- `labels` field replaces ALL labels; use `add_labels`\u002F`remove_labels` for incremental changes\n- `assignee_ids: [0]` unassigns all; empty array does nothing\n- `scope` defaults vary: `\"created_by_me\"` for MRs, `\"all\"` for issues\n- `author_id` and `author_username` are mutually exclusive in MR filters\n- Date parameters use ISO 8601 format: `\"2024-01-15T10:30:00Z\"`\n\n### Plan Restrictions\n- Some features require Premium\u002FUltimate: `epic_id`, `weight`, `iteration_id`, `approved_by_ids`, member `state` filter\n- Admin-only features: user management filters, `updated_at` override, custom attributes\n- The `mr_approved_filter` feature flag is disabled by default\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List projects | `GITLAB_GET_PROJECTS` | `search`, `membership`, `visibility` |\n| Get project details | `GITLAB_GET_PROJECT` | `id` |\n| User's projects | `GITLAB_LIST_USER_PROJECTS` | `id`, `search`, `owned` |\n| Create project | `GITLAB_CREATE_PROJECT` | `name`, `path`, `visibility` |\n| List issues | `GITLAB_LIST_PROJECT_ISSUES` | `id`, `state`, `labels`, `search` |\n| Create issue | `GITLAB_CREATE_PROJECT_ISSUE` | `id`, `title`, `description`, `labels` |\n| Update issue | `GITLAB_UPDATE_PROJECT_ISSUE` | `id`, `issue_iid`, `state_event` |\n| List merge requests | `GITLAB_GET_PROJECT_MERGE_REQUESTS` | `id`, `state`, `scope`, `labels` |\n| List branches | `GITLAB_GET_REPOSITORY_BRANCHES` | `project_id`, `search` |\n| Get branch | `GITLAB_GET_REPOSITORY_BRANCH` | `project_id`, `branch_name` |\n| Create branch | `GITLAB_CREATE_REPOSITORY_BRANCH` | `project_id`, `branch_name`, `ref` |\n| List commits | `GITLAB_LIST_REPOSITORY_COMMITS` | project ID, branch ref |\n| Project languages | `GITLAB_GET_PROJECT_LANGUAGES` | project ID |\n| List pipelines | `GITLAB_LIST_PROJECT_PIPELINES` | `id`, `status`, `ref` |\n| Get pipeline | `GITLAB_GET_SINGLE_PIPELINE` | `project_id`, `pipeline_id` |\n| List pipeline jobs | `GITLAB_LIST_PIPELINE_JOBS` | `id`, `pipeline_id`, `scope` |\n| Search users | `GITLAB_GET_USERS` | `search`, `username`, `active` |\n| Get user | `GITLAB_GET_USER` | user ID |\n| User status | `GITLAB_GET_USERS_ID_STATUS` | user ID |\n| List project members | `GITLAB_LIST_ALL_PROJECT_MEMBERS` | `id`, `query`, `state` |\n| List project users | `GITLAB_LIST_PROJECT_USERS` | `id`, `search` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":37,"source":43,"date_added":49,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcursor\u002Fgitlab-automation","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill gitlab-automation",{"tool":62,"command":63},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill gitlab-automation",{"tool":65,"command":66},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill gitlab-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcursor\u002Fgitlab-automation\u002FSKILL.md",true,[],[71,94,120,130,143,160],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":44},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[83,84,41,85,86,87,88,89,90,91,92,93],"wechat search","wechat","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":44},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[101,102,103,104,105,106,41,107,108,109,110,111,112,113,114,115,116,117,118,119],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":44},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[127,128,101,112,113,114,115,105,41,117,129,118,119,111,109,108,107,116,106,104],"trend radar","radar","pulse",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":44},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[137,138,139,140,141,142],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":152,"publishedAt":44},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[149],{"categoryNo":150,"categoryName":151,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[145,90,153,154,155,93,112,156,157,158,103,159,116],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":44},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[162,167,168,169,116,170,157,171,172,173,174,175],"status","play","go","latest","github","discover","control","cmd","volume"]