Git MCP Server
# Git MCP Server
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that gives AI assistants the ability to inspect local Git repositories and interact with the GitHub API — reading commit history, diffs, file contents, issues, comments, pull requests, and project boards — all from a single, modular TypeScript server.
---
## Tools
The server exposes **10 tools** across four categories.
### Git
| Tool | Description |
|------|-------------|
| `get_git_status` | Returns all uncommitted changes in a local repository (equivalent to `git status`). |
| `get_git_log` | Retrieves recent commit history with hash, author, date, and message. Accepts a `maxCount` limit. |
| `get-git-diff` | Shows line-by-line file differences. Can be scoped to a specific file or limited to staged changes only. |
| `get_repo_structure` | Returns the full directory and file tree of a repository — useful for architectural overviews and documentation. |
### File System
| Tool | Description |
|------|-------------|
| `read_local_file` | Reads the entire content of a small file at once. Ideal for source files and configs. |
| `read_local_file_chunk` | Reads a specific line range (`startLine`–`endLine`) from a large file, avoiding unnecessary context. |
### GitHub Issues
| Tool | Description |
|------|-------------|
| `fetch_all_issues` | Fetches all issues (open and closed) from a remote GitHub repository. |
| `get_issue_comments` | Retrieves all comments on a specific issue by number, including author and timestamps. |
| `create_and_board_issue` | Creates a new issue with title, body, labels, assignees, and priority — then automatically adds it to the repository's GitHub Projects board. Handles multi-project repos by prompting for project selection. |
### GitHub Pull Requests
| Tool | Description |
|------|-------------|
| `fetch_merged_prs` | Lists recent pull requests from a repository. Toggle between merged and open PRs with `isMerged`. Useful for generating changelogs and release notes. |
---
## Architecture
The server follows a layered, modular design introduced in [PR #1](https://github.com/EnesOzturk11/Git-MCP-Server/pull/1):
```
src/
├── index.ts # Server bootstrap — wires tools to the MCP server
├── config.ts # Centralised environment config (GITHUB_TOKEN, cache TTL)
├── services/
│ ├── github-rest.ts # GitHub REST API client
│ ├── github-graphql.ts # GitHub GraphQL client (used for Projects v2 boarding)
│ ├── cache.ts # In-memory project metadata cache (1 h TTL)
│ └── git-cmd.ts # Local Git CLI wrapper
├── tools/
│ ├── git.ts # Git operation tools
│ ├── filesystem.ts # File reading tools
│ ├── issues.ts # GitHub Issue tools
│ └── pulls.ts # GitHub Pull Request tools
├── types/
│ ├── github.ts # GitHub API response types
│ ├── cache.ts # Cache types
│ └── git.ts # Git operation types
└── utils/
└── helpers.ts # Shared utility functions
```
---
## Requirements
- **Node.js** v18 or later
- **GitHub Personal Access Token** with `repo` and `project` scopes
---
## Installation
```bash
# Clone the repository
git clone https://github.com/EnesOzturk11/Git-MCP-Server.git
cd Git-MCP-Server
# Install dependencies
npm install
# Build
npm run build
```
---
## Configuration
The server reads a single environment variable:
| Variable | Required | Description |
|----------|----------|-------------|
| `GITHUB_TOKEN` | Yes | Personal Access Token for GitHub API authentication |
Create a `.env` file in the project root or export the variable in your shell:
```bash
GITHUB_TOKEN=ghp_your_token_here
```
---
## Usage with Claude Desktop
Add the server to your Claude Desktop configuration file (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"git-mcp-server": {
"command": "node",
"args": ["/absolute/path/to/Git-MCP-Server/build/index.js"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here"
}
}
}
}
```
Restart Claude Desktop — the 10 tools will become available immediately.
---
## Tech Stack
| Layer | Technology |
|-------|-----------|
| Language | TypeScript 5 |
| Runtime | Node.js (ESM) |
| Protocol | Model Context Protocol SDK `^1.26.0` |
| Validation | Zod `^4.3.6` |
| GitHub API | REST + GraphQL (Projects v2) |
| Environment | dotenv |
---
## Contributing
Issues and pull requests are welcome. Please open an issue first to discuss any significant changes.
TDQS
Scored across 10 tools
Most tools target clearly distinct resources or actions: log, status, diff, structure, file reading, issues, and PRs. Slight overlap exists between get_git_diff and get_git_status, but descriptions clarify the summary vs line-by-line difference. read_local_file and read_local_file_chunk are intentionally paired for whole vs chunk access.
The majority follow a verb_noun snake_case pattern (get_git_log, read_local_file, fetch_all_issues), but get-git-diff breaks the pattern with hyphens. Verbs also vary between get, read, fetch, and create, reducing predictability slightly.
Ten tools is well-scoped for a Git-oriented server, covering repository inspection, file reading, issues, and PRs without unnecessary bloat. Each tool has a clear role, and the count feels appropriate for the described workflows.
The server covers common read-heavy operations well (log, status, diff, structure, files) and includes issue listing/creation and merged PR fetching. However, notable gaps exist for a full Git workflow: no single-issue retrieval, no issue update/close, no PR creation, and no branch or commit detail tools. Minor workarounds are possible for documentation tasks, but some dead ends occur.