This is a unified Git interface that works with both GitHub and GitLab through a single MCP server. It exposes the full workflow: reading files and directory trees, pushing commits, managing branches, handling issues and pull requests, checking CI/CD pipeline status and job logs, and posting comments. You configure it with an environment variable to point at GitHub, GitHub Enterprise, GitLab SaaS, or self-hosted GitLab, then use the same tool names regardless of platform. Includes a read-only mode if you want to prevent writes. Reach for this when you want Claude to interact with your Git repositories without switching between provider-specific servers or APIs.
A clean, modular Git MCP server supporting both GitHub and GitLab.
Add to your claude_desktop_config.json:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"git": {
"command": "npx",
"args": ["-y", "@raytien/git-mcp-server"],
"env": {
"GIT_PROVIDER": "github",
"GIT_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx"
}
}
}
}
{
"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"
}
}
}
}
{
"mcpServers": {
"git": {
"command": "npx",
"args": ["-y", "@raytien/git-mcp-server"],
"env": {
"GIT_PROVIDER": "gitlab",
"GIT_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx"
}
}
}
}
{
"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"
}
}
}
}
{
"mcpServers": {
"git": {
"command": "npx",
"args": ["-y", "@raytien/git-mcp-server"],
"env": {
"GIT_PROVIDER": "github",
"GIT_TOKEN": "ghp_xxxxxxxxxxxxxxxxxxxx",
"GIT_READ_ONLY": "true"
}
}
}
}
repo, read:org, workflowghp_)api, read_api, read_repository, write_repositoryglpat-)| 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 |
| Tool | Description |
|---|---|
get_issue | Get a single issue |
list_issues | List issues |
create_issue | Create a new issue |
update_issue | Update an issue |
| 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 |
| 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.
| Tool | Description |
|---|---|
create_comment | Add comment to issue/MR |
list_comments | List comments |
| Tool | Description |
|---|---|
get_me | Get current authenticated user |
| 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 |
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
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Run locally
npm start
# Development mode (watch)
npm run dev
src/tools/{category}/{action}.tsimport { 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, ...);
},
});
src/tools/{category}/index.tssrc/tools/index.tsMIT
GIT_PROVIDERProvider type: gitlab or github
GIT_TOKEN*secretPersonal Access Token for GitHub or GitLab
GIT_API_URLAPI URL for self-hosted instances
GIT_READ_ONLYDisable write operations (true/false)
cyanheads/git-mcp-server
io.github.b1ff/atlassian-dc-mcp-bitbucket
io.github.b1ff/atlassian-dc-mcp-jira
com.mcparmory/atlassian-jira
sirlordt/vscode-terminal-mcp
aashari/mcp-server-atlassian-bitbucket