About git-mcp-server
git-mcp-server exposes GitHub and GitLab repository, issue, merge request, and CI/CD operations for teams working with hosted or self-managed repositories. Its provider-agnostic tools cover both read and write tasks, with an option to disable writes.
Key features
- 01GitHub and GitLab support
- 02Repository browsing and edits
- 03Issue and merge request operations
- 04CI/CD pipeline and job inspection
- 05Read-only mode
Use cases
- 01Inspect repository files and history
- 02Create or update issues and merge requests
- 03Check pipeline status and job logs
- 04Restrict a connected server to read-only access
MCP support
The project is an MCP server that exposes GitHub and GitLab repository, issue, merge request, comment, user, and CI/CD tools to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @raytien/git-mcp-serverGIT_PROVIDERProvider type: gitlab or githubGIT_TOKENSecretPersonal Access Token for GitHub or GitLabGIT_API_URLAPI URL for self-hosted instancesGIT_READ_ONLYDisable write operations (true/false)Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
23Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| ref | string | No | Branch name, tag, or commit SHA (default: default branch) |
| path | string | Yes | File or directory path in the repository |
| repo | string | Yes | Repository identifier (GitLab: "group/project" or ID, GitHub: "owner/repo") |
Details
From the project READMEGit 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
{
"mcpServers": {
"git": {
"command": "npx",
"args": ["-y", "@raytien/git-mcp-server"],
"env": {
"GIT_PROVIDER": "github",
"GIT_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
}
}
}
}
GitHub Enterprise
{
"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)
{
"mcpServers": {
"git": {
"command": "npx",
"args": ["-y", "@raytien/git-mcp-server"],
"env": {
"GIT_PROVIDER": "gitlab",
"GIT_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx"
}
}
}
}
Self-Hosted GitLab
{
"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
{
"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
- Go to GitHub > Settings > Developer settings > Personal access tokens > Tokens (classic)
- Generate new token with scopes:
repo,read:org,workflow - Copy the token (starts with
ghp_)
GitLab
- Go to GitLab > Settings > Access Tokens
- Create a new token with scopes:
api,read_api,read_repository,write_repository - 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
# 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
- Create file:
src/tools/{category}/{action}.ts
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, ...);
},
});
- Export from category index:
src/tools/{category}/index.ts - Add to allTools:
src/tools/index.ts
Inspired By
- gitlab-mcp - GitLab MCP server
- github-mcp-server - Official GitHub MCP server
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.