Skip to main content
Glama
MementoRC

MCP Git Server

by MementoRC

git_diff_branches

Compare changes between two branches in a Git repository to identify differences, enabling clear review and analysis of code updates.

Instructions

Show differences between two branches

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
base_branchYes
compare_branchYes
repo_pathYes

Implementation Reference

  • The core handler function git_diff_branches that performs the git diff operation between two specified branches, including branch validation, stat-only mode, truncation for large diffs, and error handling.
    def git_diff_branches(
        repo: Repo,
        base_branch: str,
        compare_branch: str,
        stat_only: bool = False,
        max_lines: int | None = None,
    ) -> str:
        """Show differences between two branches with size limiting options"""
        try:
            # Verify branches exist
            all_branches = [branch.name for branch in repo.branches] + [
                ref.name.split("/")[-1] for ref in repo.remote().refs
            ]
    
            if base_branch not in all_branches:
                return f"❌ Base branch '{base_branch}' not found"
            if compare_branch not in all_branches:
                return f"❌ Compare branch '{compare_branch}' not found"
    
            # Build diff command arguments
            diff_range = f"{base_branch}...{compare_branch}"
    
            if stat_only:
                # Return only file statistics
                diff_output = repo.git.diff("--stat", diff_range)
                if not diff_output.strip():
                    return f"No differences between {base_branch} and {compare_branch}"
                return f"Diff statistics between {base_branch} and {compare_branch}:\n{diff_output}"
    
            # Get full diff
            diff_output = repo.git.diff(diff_range)
    
            if not diff_output.strip():
                return f"No differences between {base_branch} and {compare_branch}"
    
            # Apply line limit if specified
            if max_lines and max_lines > 0:
                lines = diff_output.split("\n")
                if len(lines) > max_lines:
                    truncated_output = "\n".join(lines[:max_lines])
                    truncated_output += (
                        f"\n\n... [Truncated: showing {max_lines} of {len(lines)} lines]"
                    )
                    truncated_output += "\nUse --stat flag for summary or increase max_lines for more content"
                    return truncated_output
    
            # Check if output is extremely large and warn
            if len(diff_output) > 50000:  # 50KB threshold
                lines_count = len(diff_output.split("\n"))
                warning = f"⚠️  Large diff detected ({lines_count} lines, ~{len(diff_output) // 1000}KB)\n"
                warning += "Consider using stat_only=true for summary or max_lines parameter to limit output\n\n"
                return warning + diff_output
    
            return diff_output
    
        except GitCommandError as e:
            return f"❌ Diff failed: {str(e)}"
        except Exception as e:
            return f"❌ Diff error: {str(e)}"
  • Pydantic BaseModel defining the input schema/parameters for the git_diff_branches tool.
    class GitDiffBranches(BaseModel):
        repo_path: str
        base_branch: str
        compare_branch: str
        stat_only: bool | None = False
        max_lines: int | None = None
  • Registration of the git_diff_branches handler in the CallToolHandler._get_git_handlers() method, wrapping the core function with error handling and repo validation.
    "git_diff_branches": self._create_git_handler(
        git_diff_branches,
        requires_repo=True,
        extra_args=["base_branch", "compare_branch"],
  • ToolDefinition registration in ToolRegistry.initialize_default_tools(), associating the tool name, schema, and category.
    ToolDefinition(
        name=GitTools.DIFF_BRANCHES,
        category=ToolCategory.GIT,
        description="Show differences between two branches",
        schema=GitDiffBranches,
        handler=placeholder_handler,
        requires_repo=True,
  • Export of the git_diff_branches function from the git module for use in handlers.
    git_diff_branches,

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MementoRC/mcp-git'

If you have feedback or need assistance with the MCP directory API, please join our Discord server