Skip to content

mcp-server-git: Make --repository . auto-detect git root like standard git commands #3029

Description

@fabn

Problem

When using mcp-server-git with --repository ., the server uses the literal current working directory instead of finding the git repository root. This differs from standard git behavior and creates portability issues:

  1. Breaks when invoked from subdirectories: If the MCP client is launched from a subdirectory of the repository, --repository . points to that subdirectory instead of the repository root, causing failures.

  2. Forces absolute paths: Teams must use absolute paths in configuration, requiring each developer to maintain local overrides since everyone has different clone paths.

Current Behavior

{
  "mcpServers": {
    "git": {
      "command": "uvx",
      "args": [
        "mcp-server-git",
        "--repository",
        "."
      ]
    }
  }
}

This only works when the MCP client is launched exactly from the repository root.

Proposed Solution: Make . Auto-detect Repository Root (Preferred)

When --repository . is specified, mcp-server-git should automatically search upward from the current directory to find the git repository root, just like standard git commands do.

Implementation: Use git rev-parse --show-toplevel to find the repository root when the specified path is . or any path within a git repository.

Benefits:

  • Matches standard git behavior: Every git command (git status, git log, etc.) works from anywhere inside the repository
  • Zero configuration changes needed: Existing configurations with --repository . would just work better
  • Team-friendly: Shared configuration works for all developers regardless of:
    • Which subdirectory they're working in
    • Where they cloned the repository
    • Which OS they're using

Alternative Solutions (Less Preferred)

Option 2: Environment Variable Expansion

Allow --repository "${GIT_REPO_ROOT}" but this still requires configuration and environment setup.

Option 3: New Flag

Add --auto-detect-root flag, but this breaks existing configurations and is less intuitive than making . work naturally.

Use Case

We maintain a large IaC repository (~1000 files) with multiple subdirectories (terraform/, applications/, etc.). Team members work in specific subdirectories, and the current behavior forces us to either:

  • Always launch the MCP client from root (inconvenient)
  • Maintain per-developer absolute paths in local config files (maintenance burden)

Standard git commands work perfectly from any subdirectory—mcp-server-git should too.

Comparison with Standard Git Behavior

# These work from ANY subdirectory within a git repo:
cd /path/to/repo/terraform/environments/production
git status              # ✅ Works - finds repo root automatically
git log                 # ✅ Works - finds repo root automatically

# But mcp-server-git with --repository . does NOT:
mcp-server-git --repository .  # ❌ Uses CWD literally, doesn't find repo root

Would be happy to contribute a PR for this!

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingserver-gitReference implementation for the Git MCP server - src/gitv2

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions