# 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