smithery.ai

gitlab

Interact with GitLab for repository management, merge requests, pipelines, and CI/CD. Use when the user asks about GitLab projects, MRs, pipelines, or code search.

First seen Mar 6, 2026

Installation

$ npx skills add https://smithery.ai

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Declared agents claude-code

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 9,278 B
  • docs SUMMARY.md 177 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 44 installs

SKILL.md

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 GITLABAPITOKEN
  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 (GITLABAPITOKEN)

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

Method Description
connect() Initialize GitLab API client with credentials
list_projects(search, owned, membership, starred) List accessible projects
getproject(projectpath) Get project by path
search_projects(query) Search for projects
getfilecontent(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
listmergerequests(project, state) List merge requests
getmergerequest(project, iid) Get single MR
getmymerge_requests() Get MRs authored by me
getassignedmerge_requests() Get MRs assigned to me
list_pipelines(project, status, ref) List pipelines
get_pipeline(project, id) Get single pipeline
getpipelinejobs(project, pipeline_id) Get pipeline jobs
getjoblog(project, job_id) Get job log
getlatestpipeline(project, ref) Get latest pipeline
list_issues(project, state, labels) List issues
search_code(query, project) Search code

GitLabClient Methods

Method Description
authenticate() Load credentials and verify API access
getcurrentuser() Get authenticated user
get_projects(search, owned, membership, starred) Get projects
getproject(projectid) Get project by ID
getprojectby_path(path) Get project by path
getbranches(projectid, search) Get branches
getbranch(projectid, branch) Get single branch
gettags(projectid, search) Get tags
getcommits(projectid, ref_name, since, until) Get commits
getcommit(projectid, sha) Get single commit
getfile(projectid, file_path, ref) Get file info
getfilecontent(projectid, filepath, ref) Get raw file content
gettree(projectid, path, ref, recursive) Get repository tree
getmergerequests(project_id, state, scope) Get merge requests
getmergerequest(projectid, mriid) Get single MR
getmergerequestchanges(projectid, mr_iid) Get MR diff
getissues(projectid, state, labels) Get issues
getissue(projectid, issue_iid) Get single issue
getpipelines(projectid, status, ref) Get pipelines
getpipeline(projectid, pipeline_id) Get single pipeline
getpipelinejobs(projectid, pipelineid) Get pipeline jobs
getjoblog(projectid, jobid) Get job log
get_groups(search, owned) Get groups
getgroup(groupid) Get single group
getgroupprojects(groupid, includesubgroups) Get group projects
search(query, scope, projectid, groupid) 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:

Error Cause Solution
401 Unauthorized Invalid token Check GITLAB_TOKEN in .env
403 Forbidden No project access Request project permissions
404 Not Found Project/MR doesn't exist Verify project path
SSL Error Self-signed certificate Set 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:

Creating a Personal Access Token

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

API Limits

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