npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@redserenity/mcp-gitlab-server

v1.1.0

Published

Token-efficient GitLab MCP server with modular features

Readme

GitLab MCP Server

A token-efficient GitLab MCP server with modular features, supporting both STDIO and StreamableHTTP transports.

Features

  • Token-efficient design - Consolidated tools with command parameters to minimize token usage
  • Dual transport support - Both STDIO and StreamableHTTP via CLI arguments or environment variables
  • Modular features - Enable/disable tool groups via CLI flags
  • Innovative IssueTasks tool - Efficiently manage GitLab issue markdown checklists without regenerating entire descriptions
  • Caching support - Optional intelligent caching with configurable TTL
  • Syntax resource - Dynamic parameter documentation for token-efficient usage

Installation

Method 1: From Source

# Clone the repository
git clone https://gitlab.com/RedSerenity/McpServers/GitLab.git
cd GitLab

# Install dependencies
yarn install

# Build the project
yarn build

Method 2: Using NPX

# Run directly with npx (no installation required)
npx @redserenity/gitlab-mcp-server --projects --issues --wiki --labels

Method 3: Using Docker

# Pull and run the Docker image
docker run -e GITLAB_TOKEN=your_token_here \
  -e GITLAB_URL=https://gitlab.com \
  redserenity/gitlab-mcp-server:latest \
  --projects --issues --wiki --labels

Configuration

Environment Variables

Create a .env file based on .env.example:

# GitLab Configuration
GITLAB_TOKEN=your_gitlab_token_here
GITLAB_URL=https://gitlab.com

# MCP Server Configuration
MCP_TRANSPORT=stdio
MCP_PORT=3000
LOG_LEVEL=info

# Feature Configuration (optional)
ENABLE_PROJECTS=true
ENABLE_ISSUES=true
ENABLE_WIKI=true
ENABLE_LABELS=true

# Resource Configuration (optional)
ENABLE_RESOURCES=true
DISABLE_PROJECT_RESOURCES=false
DISABLE_ISSUE_RESOURCES=false
DISABLE_WIKI_RESOURCES=false
DISABLE_LABELS_RESOURCES=false

# Cache Configuration (optional)
ENABLE_CACHE=true
CACHE_TTL_LIST=300
CACHE_TTL_GET=60
CACHE_MAX_SIZE=1000

GitLab Token

You need a GitLab personal access token with appropriate scopes:

  • api - Full API access
  • read_user - Read user profile
  • read_repository - Read repository content

Usage

Basic Usage

# STDIO transport (default) with all features
yarn start --projects --issues --wiki --labels

# HTTP transport on port 3000
yarn start --transport=http --port=3000 --projects --issues --wiki --labels

# Enable only specific features
yarn start --projects --issues --labels

# With caching enabled
yarn start --cache --projects --issues --labels

Command Line Options

  • --transport <type> - Transport type: stdio or http (default: stdio)
  • --port <number> - Port for HTTP transport (default: 3000)
  • --projects - Enable Projects and Groups tools
  • --issues - Enable Issues and IssueTasks tools
  • --wiki - Enable Wiki tool
  • --labels - Enable Labels tool
  • --cache - Enable intelligent caching (default: true)
  • --cache-ttl-list <seconds> - List cache TTL in seconds (default: 300)
  • --cache-ttl-get <seconds> - Get cache TTL in seconds (default: 60)
  • --cache-max-size <entries> - Maximum cache entries (default: 1000)
  • --log-level <level> - Log level: debug, info, warn, error (default: info)

Environment Variable Override

You can also use environment variables:

MCP_TRANSPORT=http MCP_PORT=8080 yarn start --projects --issues

Tool Architecture

Each tool uses a consolidated command-based architecture to minimize token usage:

Projects Tool (enabled by --projects)

{
  "command": "list|get|create|update",
  "projectId": "optional-project-id",
  "data": { "optional-data-object" },
  "bypassCache": "optional-boolean"
}

Note: Check the gitlab://syntax resource for detailed parameter documentation.

Commands:

  • list - List projects
  • get - Get specific project (requires projectId)
  • create - Create new project (requires data.name)
  • update - Update existing project (requires projectId and data)

Groups Tool (enabled by --projects)

{
  "command": "list|get|create",
  "groupId": "optional-group-id",
  "data": { "optional-data-object" }
}

Commands:

  • list - List groups
  • get - Get specific group (requires groupId)
  • create - Create new group (requires data.name and data.path)

Issues Tool (enabled by --issues)

{
  "command": "list|get|create|update|close|reopen",
  "projectId": "optional-project-id",
  "issueId": "optional-issue-id",
  "data": { "optional-data-object" }
}

Commands:

  • list - List issues (optionally filtered by projectId)
  • get - Get specific issue (requires projectId and issueId)
  • create - Create new issue (requires projectId and data.title)
  • update - Update existing issue (requires projectId, issueId, and data)
  • close - Close issue (requires projectId and issueId)
  • reopen - Reopen issue (requires projectId and issueId)

IssueTasks Tool (enabled by --issues) - INNOVATION

{
  "command": "list|completed|not-completed|update|delete",
  "issueId": "required-issue-id",
  "projectId": "optional-project-id",
  "task": "task-text-or-identifier",
  "data": { "optional-data-object" }
}

This innovative tool efficiently manages GitLab issue markdown checklists without regenerating entire issue descriptions:

Commands:

  • list - List all tasks in an issue
  • completed - Mark a task as completed (requires task)
  • not-completed - Mark a task as not completed (requires task)
  • update - Update task text (requires task and data.newText)
  • delete - Delete a task (requires task)

Benefits:

  • Avoids fetching and regenerating entire issue content
  • More token-efficient than traditional approaches
  • Precise task management with partial text matching
  • Maintains issue formatting and other content

Wiki Tool (enabled by --wiki)

{
  "command": "list|get|create|update|delete",
  "projectId": "optional-project-id",
  "slug": "optional-page-slug",
  "data": { "optional-data-object" }
}

Commands:

  • list - List wiki pages (requires projectId)
  • get - Get specific wiki page (requires projectId and slug)
  • create - Create new wiki page (requires projectId, data.title, and data.content)
  • update - Update existing wiki page (requires projectId, slug, and data)
  • delete - Delete wiki page (requires projectId and slug)

Labels Tool (enabled by --labels)

{
  "command": "list|get|create|update|delete|promote",
  "scope": "project|group",
  "projectId": "optional-project-id",
  "groupId": "optional-group-id",
  "labelId": "optional-label-id",
  "data": { "optional-data-object" }
}

Commands:

  • list - List labels (requires projectId for project scope or groupId for group scope)
  • get - Get specific label (requires labelId and appropriate scope ID)
  • create - Create new label (requires data.name, data.color, and appropriate scope ID)
  • update - Update existing label (requires labelId, appropriate scope ID, and data)
  • delete - Delete label (requires labelId and appropriate scope ID)
  • promote - Promote project label to group label (requires labelId and both projectId and groupId)

Scopes:

  • project - Manage labels at project level (default)
  • group - Manage labels at group level

Transport Modes

STDIO Transport (Default)

Best for command-line tools and direct integrations:

yarn start --projects --issues --labels

StreamableHTTP Transport

Best for remote clients and web integrations:

yarn start --transport=http --port=3000 --projects --issues --wiki --labels

Access via:

  • MCP endpoint: http://localhost:3000/mcp
  • Health check: http://localhost:3000/health

Token Efficiency Features

This server is designed to minimize token usage:

  1. Consolidated Tools - Single tool per domain instead of multiple tools
  2. Command Parameters - All operations via command parameter
  3. Selective Features - Only load requested tool groups
  4. Efficient IssueTasks - Avoid regenerating entire issue content
  5. Minimal Schemas - Concise tool descriptions and validation
  6. Syntax Resource - Dynamic parameter documentation at gitlab://syntax
  7. Intelligent Caching - Optional caching with configurable TTL to reduce API calls

Development

# Development with auto-rebuild
yarn dev

# Type checking
yarn typecheck

# Clean build artifacts
yarn clean

Error Handling

The server includes comprehensive error handling:

  • GitLab API errors are properly mapped and returned
  • Rate limiting with automatic retry
  • Schema validation for all inputs
  • Graceful transport disconnection

MCP Server Configuration Examples

STDIO Configuration

Add to your MCP client's mcpServers configuration:

{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": [
        "/path/to/GitLab/dist/index.js",
        "--projects",
        "--issues",
        "--wiki"
      ],
      "env": {
        "GITLAB_TOKEN": "your_gitlab_token_here",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

HTTP Configuration

{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": [
        "/path/to/GitLab/dist/index.js",
        "--transport=http",
        "--port=3000",
        "--projects",
        "--issues",
        "--wiki"
      ],
      "env": {
        "GITLAB_TOKEN": "your_gitlab_token_here",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

NPX Configuration

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": [
        "@redserenity/gitlab-mcp-server",
        "--projects",
        "--issues",
        "--wiki"
      ],
      "env": {
        "GITLAB_TOKEN": "your_gitlab_token_here",
        "GITLAB_URL": "https://gitlab.com"
      }
    }
  }
}

Docker Configuration

{
  "mcpServers": {
    "gitlab": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e", "GITLAB_TOKEN=your_gitlab_token_here",
        "-e", "GITLAB_URL=https://gitlab.com",
        "redserenity/gitlab-mcp-server:latest",
        "--projects",
        "--issues",
        "--wiki"
      ]
    }
  }
}

Configuration with Caching

For better performance with caching enabled:

{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": [
        "/path/to/GitLab/dist/index.js",
        "--projects",
        "--issues",
        "--wiki",
        "--cache",
        "--cache-ttl-list=600",
        "--cache-ttl-get=120"
      ],
      "env": {
        "GITLAB_TOKEN": "your_gitlab_token_here",
        "GITLAB_URL": "https://gitlab.com",
        "LOG_LEVEL": "info"
      }
    }
  }
}

License

MIT