Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
smithery.ai avatar

Gitlab

  • 44 installs
  • smithery.ai

Helps with ai & agent building tasks during AI-assisted development.

About

gitlab is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.

  • gitlab
  • AI & Agent Building
  • AI-coding skill

Gitlab by the numbers

  • 44 all-time installs (skills.sh)
  • Ranked #7,851 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/smithery.ai --skill gitlab

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs44
Repositorysmithery.ai

What it does

Helps with ai & agent building tasks during AI-assisted development.

Files

SKILL.mdMarkdownGitHub ↗

GitLab Skill

You are a specialized assistant for managing repositories and CI/CD in GitLab. This skill enables querying projects, merge requests, pipelines, and searching code.

When to Use This Skill

Activate this skill when the user:

  • Asks about GitLab projects or repositories
  • Wants to see merge requests or pipelines
  • Needs to search code or files
  • Asks about CI/CD status or job logs
  • Wants to browse repository contents
  • Mentions "GitLab", "MR", "pipeline", or "CI/CD"

Prerequisites

Before using this skill, ensure: 1. The ~/.claude/.env file exists with GITLAB_API_TOKEN 2. Python 3.x is installed 3. Network access to GitLab instance (https://gitlab.lan.athonet.com)

Skill Structure

.claude/skills/gitlab/
├── SKILL.md                    # This file
├── requirements.txt            # Python dependencies
└── scripts/
    ├── gitlab_client.py        # Core GitLab REST API client
    └── gitlab_helper.py        # High-level repository operations

Project root contains:

  • ~/.claude/.env - API credentials (GITLAB_API_TOKEN)

Quick Start

Using GitLabHelper (Recommended)

import sys
sys.path.insert(0, '.claude/skills/gitlab/scripts')

from gitlab_helper import GitLabHelper

helper = GitLabHelper()
helper.connect()

# List projects
projects = helper.list_projects(membership=True)

# Get a specific project
project = helper.get_project("group/project-name")

# Get file content
content = helper.get_file_content("group/project", "README.md", ref="main")

# List files in repository
files = helper.list_files("group/project", path="src/", recursive=True)

# Get recent commits
commits = helper.get_commits("group/project", branch="main", limit=10)

# List open merge requests
mrs = helper.list_merge_requests(project_path="group/project", state="opened")

# Get my MRs
my_mrs = helper.get_my_merge_requests()

# List pipelines
pipelines = helper.list_pipelines("group/project", status="success")

# Get pipeline jobs
jobs = helper.get_pipeline_jobs("group/project", pipeline_id=12345)

# Get job log
log = helper.get_job_log("group/project", job_id=67890)

# Search code
results = helper.search_code("function_name", project_path="group/project")

Using GitLabClient Directly

import sys
sys.path.insert(0, '.claude/skills/gitlab/scripts')

from gitlab_client import GitLabClient

client = GitLabClient()
client.authenticate()

# Get current user
user = client.get_current_user()

# Get projects
projects = client.get_projects(membership=True, per_page=20)

# Get project by path
project = client.get_project_by_path("group/project")

# Get branches
branches = client.get_branches("group/project")

# Get tags
tags = client.get_tags("group/project")

# Get file content
content = client.get_file_content("group/project", "src/main.py", ref="main")

# Get repository tree
tree = client.get_tree("group/project", path="src/", recursive=True)

# Get merge requests
mrs = client.get_merge_requests(project_id="group/project", state="opened")

# Get pipelines
pipelines = client.get_pipelines("group/project", status="running")

# Global search
results = client.search("query", scope="blobs", project_id="group/project")

Available Operations

GitLabHelper Methods

MethodDescription
connect()Initialize GitLab API client with credentials
list_projects(search, owned, membership, starred)List accessible projects
get_project(project_path)Get project by path
search_projects(query)Search for projects
get_file_content(project, path, ref)Get file content
list_files(project, path, ref, recursive)List repository files
get_branches(project)Get project branches
get_tags(project)Get project tags
get_commits(project, branch)Get recent commits
list_merge_requests(project, state)List merge requests
get_merge_request(project, iid)Get single MR
get_my_merge_requests()Get MRs authored by me
get_assigned_merge_requests()Get MRs assigned to me
list_pipelines(project, status, ref)List pipelines
get_pipeline(project, id)Get single pipeline
get_pipeline_jobs(project, pipeline_id)Get pipeline jobs
get_job_log(project, job_id)Get job log
get_latest_pipeline(project, ref)Get latest pipeline
list_issues(project, state, labels)List issues
search_code(query, project)Search code

GitLabClient Methods

MethodDescription
authenticate()Load credentials and verify API access
get_current_user()Get authenticated user
get_projects(search, owned, membership, starred)Get projects
get_project(project_id)Get project by ID
get_project_by_path(path)Get project by path
get_branches(project_id, search)Get branches
get_branch(project_id, branch)Get single branch
get_tags(project_id, search)Get tags
get_commits(project_id, ref_name, since, until)Get commits
get_commit(project_id, sha)Get single commit
get_file(project_id, file_path, ref)Get file info
get_file_content(project_id, file_path, ref)Get raw file content
get_tree(project_id, path, ref, recursive)Get repository tree
get_merge_requests(project_id, state, scope)Get merge requests
get_merge_request(project_id, mr_iid)Get single MR
get_merge_request_changes(project_id, mr_iid)Get MR diff
get_issues(project_id, state, labels)Get issues
get_issue(project_id, issue_iid)Get single issue
get_pipelines(project_id, status, ref)Get pipelines
get_pipeline(project_id, pipeline_id)Get single pipeline
get_pipeline_jobs(project_id, pipeline_id)Get pipeline jobs
get_job_log(project_id, job_id)Get job log
get_groups(search, owned)Get groups
get_group(group_id)Get single group
get_group_projects(group_id, include_subgroups)Get group projects
search(query, scope, project_id, group_id)Global search

Common Tasks

1. Check Pipeline Status

# Get latest pipeline for a branch
pipeline = helper.get_latest_pipeline("group/project", ref="main")
print(f"Pipeline #{pipeline.id}: {pipeline.status}")

# Get failed jobs
if pipeline.status == "failed":
    jobs = helper.get_pipeline_jobs("group/project", pipeline.id)
    for job in jobs:
        if job["status"] == "failed":
            print(f"Failed: {job['name']} in stage {job['stage']}")
            log = helper.get_job_log("group/project", job["id"])
            print(log[-1000:])  # Last 1000 chars

2. Review Merge Requests

# Get open MRs assigned to me
mrs = helper.get_assigned_merge_requests()
for mr in mrs:
    print(f"!{mr.iid}: {mr.title}")
    print(f"  {mr.source_branch} -> {mr.target_branch}")
    print(f"  Author: {mr.author}")
    print(f"  URL: {mr.web_url}")

3. Browse Repository

# List files in a directory
files = helper.list_files("group/project", path="src/", ref="main")
for f in files:
    print(f"{'[D]' if f['type'] == 'tree' else '[F]'} {f['name']}")

# Read a file
content = helper.get_file_content("group/project", "src/config.py", ref="main")
print(content)

4. Search Code

# Search for a function across projects
results = helper.search_code("authenticate_user")
for r in results:
    print(f"{r['path']} in project {r['project_id']}")
    print(f"  {r['data'][:100]}...")

5. Check Recent Activity

# Get recent commits
commits = helper.get_commits("group/project", branch="main", limit=5)
for c in commits:
    print(f"{c['id']} - {c['title']} ({c['author']})")

# Get recent tags
tags = helper.get_tags("group/project", limit=5)
for t in tags:
    print(f"{t['name']} - {t['message']}")

Error Handling

Common errors and solutions:

ErrorCauseSolution
401 UnauthorizedInvalid tokenCheck GITLAB_TOKEN in .env
403 ForbiddenNo project accessRequest project permissions
404 Not FoundProject/MR doesn't existVerify project path
SSL ErrorSelf-signed certificateSet verify_ssl=False (default)

Running Scripts

# Run the helper example
python .claude/skills/gitlab/scripts/gitlab_helper.py

# Run client directly with search
python .claude/skills/gitlab/scripts/gitlab_client.py --search "project-name"

Configuration

The client reads settings from environment:

  • GITLAB_API_TOKEN - Personal Access Token required
  • GITLAB_URL - GitLab instance URL (default: https://gitlab.lan.athonet.com)

Creating a Personal Access Token

1. Go to GitLab → User Settings → Access Tokens 2. Create token with scopes: api, read_api, read_repository 3. Add to ~/.claude/.env: GITLAB_API_TOKEN=glpat-xxxxxxxxxxxx

API Limits

  • Maximum 100 results per page
  • Rate limits apply per GitLab instance configuration
  • Large file downloads may timeout

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.