Back to the catalog

io.github.Ray0907/git-mcp-server

MCP server for GitLab and GitHub

Open source Open in the app JSON README (API)

About

MCP server for GitLab and GitHub

Details

Kind
MCP servers
Topic
Version control
Publisher
ray0907
Origin
official
Category
ferramentas
Transport
local
Version
0.2.3
Last push
2025-12-08T14:39:28Z
Repository state
ativo
Language
TypeScript
License
MIT
Added
2026-08-29 03:02:11
Updated
2026-08-29 03:02:11
Origin id
io.github.Ray0907/git-mcp-server

README

# Git MCP Server

A clean, modular Git MCP server supporting both GitHub and GitLab.

## Quick Start

### Claude Desktop Configuration

Add to your `claude_desktop_config.json`:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

#### GitHub

```json
{
  "mcpServers": {
    "git": {
      "command": "npx",
      "args": ["-y", "@raytien/git-mcp-server"],
      "env": {
        "GIT_PROVIDER": "github",
        "GIT_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

#### GitHub Enterprise

```json
{
  "mcpServers": {
    "git": {
      "command": "npx",
      "args": ["-y", "@raytien/git-mcp-server"],
      "env": {
        "GIT_PROVIDER": "github",
        "GIT_API_URL": "https://github.your-company.com/api/v3",
        "GIT_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

#### GitLab.com (SaaS)

```json
{
  "mcpServers": {
    "git": {
      "command": "npx",
      "args": ["-y", "@raytien/git-mcp-server"],
      "env": {
        "GIT_PROVIDER": "gitlab",
        "GIT_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

#### Self-Hosted GitLab

```json
{
  "mcpServers": {
    "git": {
      "command": "npx",
      "args": ["-y", "@raytien/git-mcp-server"],
      "env": {
        "GIT_PROVIDER": "gitlab",
        "GIT_API_URL": "https://gitlab.your-company.com/api/v4",
        "GIT_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

#### Read-Only Mode

```json
{
  "mcpServers": {
    "git": {
      "command": "npx",
      "args": ["-y", "@raytien/git-mcp-server"],
      "env": {
        "GIT_PROVIDER": "github",
        "GIT_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx",
        "GIT_READ_ONLY": "true"
      }
    }
  }
}
```

### Get Your Token

#### GitHub
1. Go to GitHub > Settings > Developer settings > Personal access tokens > Tokens (classic)
2. Generate new token with scopes: `repo`, `read:org`, `workflow`
3. Copy the token (starts with `ghp_`)

#### GitLab
1. Go to GitLab > Settings > Access Tokens
2. Create a new token with scopes: `api`, `read_api`, `read_repository`, `write_repository`
3. Copy the token (starts with `glpat-`)

## Available Tools

### Repository

| Tool                  | Description                          |
| --------------------- | ------------------------------------ |
| `get_file_contents`   | Read file content from repository    |
| `get_repository_tree` | List directory structure             |
| `push_files`          | Push file changes in a single commit |
| `create_branch`       | Create a new branch                  |
| `list_branches`       | List repository branches             |
| `list_commits`        | List commit history                  |
| `search_code`         | Search for code in repository        |

### Issues

| Tool           | Description        |
| -------------- | ------------------ |
| `get_issue`    | Get a single issue |
| `list_issues`  | List issues        |
| `create_issue` | Create a new issue |
| `update_issue` | Update an issue    |

### Pull/Merge Requests

| Tool                     | Description               |
| ------------------------ | ------------------------- |
| `get_pull_request`       | Get a merge request       |
| `list_pull_requests`     | List merge requests       |
| `create_pull_request`    | Create a merge request    |
| `get_pull_request_diffs` | Get merge request changes |
| `merge_pull_request`     | Merge a merge request     |

### CI/CD (Pipelines / Workflow Runs)

| Tool                 | Description                                    |
| -------------------- | ---------------------------------------------- |
| `get_pipeline`       | Get pipeline/workflow run status               |
| `list_pipelines`     | List pipelines/workflow runs                   |
| `list_pipeline_jobs` | List pipeline jobs/workflow jobs               |
| `get_job_log`        | Get job log output                             |

> Note: GitHub Actions workflow runs map to GitLab pipelines. The same tools work for both platforms.

### Comments

| Tool             | Description             |
| ---------------- | ----------------------- |
| `create_comment` | Add comment to issue/MR |
| `list_comments`  | List comments           |

### Users

| Tool     | Description                    |
| -------- | ------------------------------ |
| `get_me` | Get current authenticated user |

## Configuration

| Environment Variable | Required | Default          | Description                                 |
| -------------------- | -------- | ---------------- | ------------------------------------------- |
| `GIT_PROVIDER`       | No       | `gitlab`         | Provider type: `gitlab` or `github`         |
| `GIT_TOKEN`          | Yes      | -                | Personal Access Token                       |
| `GIT_API_URL`        | No       | Provider default | API URL (auto-detected from provider)       |
| `GIT_AUTH_TYPE`      | No       | `bearer`         | Auth type: `bearer` or `private-token`      |
| `GIT_READ_ONLY`      | No       | `false`          | Disable write operations                    |
| `LOG_LEVEL`          | No       | `info`           | Log level: `debug`, `info`, `warn`, `error` |

## Architecture

```
src/
├── index.ts              # Entry point
├── server.ts             # MCP server (provider-agnostic)
├── config.ts             # Configuration (multi-provider)
├── providers/            # Platform abstraction
│   ├── interface.ts      # GitProvider interface
│   ├── types.ts          # Platform-agnostic types
│   ├── config.ts         # Provider configuration
│   ├── factory.ts        # Provider Factory (creates GitLab/GitHub)
│   ├── gitlab/           # GitLab implementation
│   └── github/           # GitHub implementation
├── tools/                # Tool definitions
│   ├── define.ts         # defineTool helper
│   ├── registry.ts       # Tool registry
│   ├── repository/       # Repository tools
│   ├── issues/           # Issue tools
│   ├── merge-requests/   # PR/MR tools
│   ├── pipelines/        # CI/CD tools
│   ├── notes/            # Comment tools
│   └── users/            # User tools
├── gitlab/               # GitLab API client
│   ├── client.ts         # HTTP client
│   └── types.ts          # GitLab API types
├── github/               # GitHub API client
│   ├── client.ts         # HTTP client
│   └── types.ts          # GitHub API types
├── auth/                 # Authentication
└── lib/                  # Utilities
```

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

# Run locally
npm start

# Development mode (watch)
npm run dev
```

## Adding a New Tool

1. Create file: `src/tools/{category}/{action}.ts`

```typescript
import { z } from 'zod';
import { defineTool, repoParam } from '../define.js';

const schema = z.object({
    repo: repoParam,
    // ... your params
});

export const myTool = defineTool({
    name: 'my_tool',
    description: 'What this tool does',
    schema,
    category: 'my-category',
    read_only: true,
    handler: async (input, ctx) => {
        return ctx.provider.repository.someMethod(input.repo, ...);
    },
});
```

2. Export from category index: `src/tools/{category}/index.ts`
3. Add to allTools: `src/tools/index.ts`

## Inspired By

- [gitlab-mcp](https://github.com/zereight/gitlab-mcp) - GitLab MCP server
- [github-mcp-server](https://github.com/github/github-mcp-server) - Official GitHub MCP server

## License

MIT

More