Skip to main content
Glama
Git MCP Server

Git MCP Server

by EnesOzturk11

Git MCP Server

A Model Context Protocol (MCP) 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.


Related MCP server: Simple Code Review Assistant

Architecture

The server follows a layered, modular design introduced in PR #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

# 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:

GITHUB_TOKEN=ghp_your_token_here

Usage with Claude Desktop

Add the server to your Claude Desktop configuration file (claude_desktop_config.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.

Available Tools

10 tools
create_and_board_issueCreate GitHub Issue and Board the IssueA

Creates a new issue in a GitHub repository and automatically assigns it to the project board with a specific priority. Use this when identifying bugs, technical debt, or documentation gaps that need tracking.

Inputs: body (required), title (required), priority (required), repoName (required), +6 more.

fetch_all_issuesGet All IssuesB

Get all issues from the specified remote repo and list them

Inputs: repoName (required), repoOwner (required).

fetch_merged_prsFetch Pull RequestsB

Retrieves a list of Pull Requests from the specified GitHub repository. Crucial for generating automated release notes, writing changelogs, or summarizing the latest features and bug fixes added to the project.

Inputs: repoName (required), repoOwner (required), limit, isMerged.

get-git-diffGet Git DiffB

Get all difference in files and show the differences line by line. It can focus on a specific file according to willingness

Inputs: repoPath (required), cached, targetFile.

get_git_logGet Git LogB

List recent commits of the project

Inputs: maxCount (required), repoPath (required).

get_git_statusGet Git StatusC

Get all changes in directory by calling git command (git status)

Inputs: repoPath (required).

get_issue_commentsGet All Comments of the Given IssueC

Retrieves the all comments of the given issue based on its comment_url datafield which is given in the parameter of the function

Inputs: repoName (required), repoOwner (required), issue_number (required).

get_repo_structureGet Repository StructureB

Returns the directory and file structure of the git repository. Useful for architectural documentation.

Inputs: repoPath (required).

read_local_fileRead the Small Local FileA

Reads the entire content of a specific small sized file. Crucial for understanding the full context of the code before writing documentation.

Inputs: filePath (required), repoPath (required).

read_local_file_chunkRead Large File by Line RangeA

Reads a specific line range from a large file. Use startLine and endLine to fetch only the section you need, reducing memory usage and context size.

Inputs: endLine (required), filePath (required), repoPath (required), startLine (required), +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 10 tools

    Disambiguation4/5

    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.

    Naming Consistency3/5

    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.

    Tool Count5/5

    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.

    Completeness3/5

    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.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers