Skip to main content
Glama
MementoRC

MCP Git Server

by MementoRC

git_show

View the contents of a specific commit in a Git repository by providing the repository path and revision. Integrates with the MCP Git Server for streamlined repository management.

Instructions

Shows the contents of a commit

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repo_pathYes
revisionYes

Implementation Reference

  • Core handler function that executes `repo.git.show(revision)` with support for `--stat` mode, output truncation via max_lines, and large output warnings. This is the primary logic for the git_show tool.
    def git_show(
        repo: Repo, revision: str, stat_only: bool = False, max_lines: int | None = None
    ) -> str:
        """Show commit details with diff and size limiting options"""
        try:
            if stat_only:
                # Return only commit info and file statistics
                show_output = repo.git.show("--stat", revision)
                return f"Commit details for {revision}:\n{show_output}"
    
            # Get full commit details
            show_output = repo.git.show(revision)
    
            # Apply line limit if specified
            if max_lines and max_lines > 0:
                lines = show_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_only=true for summary or increase max_lines for more content"
                    return truncated_output
    
            # Check if output is extremely large and warn
            if len(show_output) > 50000:  # 50KB threshold
                lines_count = len(show_output.split("\n"))
                warning = f"⚠️  Large commit detected ({lines_count} lines, ~{len(show_output) // 1000}KB)\n"
                warning += "Consider using stat_only=true for summary or max_lines parameter to limit output\n\n"
                return warning + show_output
    
            return show_output
    
        except GitCommandError as e:
            return f"❌ Show failed: {str(e)}"
        except Exception as e:
            return f"❌ Show error: {str(e)}"
  • Pydantic input schema for the git_show tool defining required repo_path and revision, optional stat_only and max_lines parameters.
    class GitShow(BaseModel):
        repo_path: str
        revision: str
        stat_only: bool | None = False
        max_lines: int | None = None
  • Tool registration in ToolRegistry for git_show, referencing GitShow schema and setting metadata.
    ToolDefinition(
        name=GitTools.SHOW,
        category=ToolCategory.GIT,
        description="Show the contents of a commit",
        schema=GitShow,
        handler=placeholder_handler,
        requires_repo=True,
    ),
  • Handler mapping in CallToolHandler._get_git_handlers() dictionary, assigning _create_git_handler wrapper around git_show function from operations.py for the git_show tool.
    "git_show": self._create_git_handler(
        git_show, requires_repo=True, extra_args=["revision"]
    ),
  • Protected wrapper async def protected_git_show that validates repository binding before calling core git_show. Used in secured contexts.
    async def protected_git_show(self, repo_path: str, revision: str) -> str:
        """Git show with repository binding protection."""
        validated_path = await self._validate_and_prepare_operation(repo_path)
        repo = Repo(validated_path)
        return git_show(repo, revision)
    
    async def protected_git_checkout(self, repo_path: str, branch_name: str) -> str:
        """Git checkout with repository binding protection."""
        validated_path = await self._validate_and_prepare_operation(repo_path)
        repo = Repo(validated_path)
        return git_checkout(repo, branch_name)
    
    async def protected_git_create_branch(
        self, repo_path: str, branch_name: str, base_branch: str | None = None
    ) -> str:
        """Git create branch with repository binding protection."""
        validated_path = await self._validate_and_prepare_operation(repo_path)
        repo = Repo(validated_path)
        return git_create_branch(repo, branch_name, base_branch)
    
    async def protected_git_reset(
        self, repo_path: str, mode: str = "mixed", target: str | None = None
    ) -> str:
        """Git reset with repository binding protection."""
        validated_path = await self._validate_and_prepare_operation(repo_path)
        repo = Repo(validated_path)
        return git_reset(repo, mode, target)
    
    async def protected_git_remote_get_url(self, repo_path: str, name: str) -> str:
        """Git remote get-url with repository binding protection."""
        validated_path = await self._validate_and_prepare_operation(repo_path)
        repo = Repo(validated_path)
        return git_remote_get_url(repo, name)
    
    async def protected_git_remote_list(self, repo_path: str) -> str:
        """Git remote list with repository binding protection."""
        validated_path = await self._validate_and_prepare_operation(repo_path)
        repo = Repo(validated_path)
        return git_remote_list(repo)
    
    async def _get_current_remote_url(self, repo_path: Path) -> str:
        """Get current remote URL from repository."""
        repo = Repo(repo_path)
        return git_remote_get_url(repo, "origin")
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Shows' implies a read-only operation, but it doesn't specify output format (e.g., raw commit data, patch, or summary), error handling, or any constraints like authentication needs or rate limits. This leaves significant gaps for an agent to understand how to interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action, making it easy to parse quickly, though this brevity contributes to gaps in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a Git operation with 2 parameters, no annotations, and no output schema, the description is insufficient. It doesn't cover what the output looks like (e.g., commit details, diff, or raw content), how errors are handled, or how it differs from similar tools, leaving the agent with incomplete information for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'contents of a commit' but doesn't explain what 'repo_path' and 'revision' mean (e.g., path to repository, commit hash or branch name). Without this, the agent lacks context to use the parameters correctly beyond their basic types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('shows') and resource ('contents of a commit'), making the purpose understandable. However, it doesn't distinguish this tool from sibling tools like git_log (which shows commit history) or git_diff (which shows differences), leaving some ambiguity about what specific content is displayed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like git_log, git_diff, and git_status available, there's no indication of whether this shows full commit metadata, file changes, or other details, nor any prerequisites or exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools

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