Skip to main content
Glama

check_git_status

Verify the status of a git repository, identifying staged, unstaged, and untracked files. Specify a repository path or use the current directory to assess changes and prepare for commits.

Instructions

Check the current git repository status.

Args: repo_path: Optional path to the target git repository. If not provided, uses the current working directory.

Returns: Current git status including staged, unstaged, and untracked files

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repo_pathNo

Implementation Reference

  • The check_git_status tool handler, registered via @mcp.tool() decorator. Validates repo, runs git status and branch commands, parses status lines using helpers, formats and returns a summary of staged, unstaged, untracked files and readiness for commit message generation.
    @mcp.tool() def check_git_status(repo_path: Optional[str] = None) -> str: """ Check the current git repository status. Args: repo_path: Optional path to the target git repository. If not provided, uses the current working directory. Returns: Current git status including staged, unstaged, and untracked files """ try: valid_repo_path = _get_valid_repo_path(repo_path) if not valid_repo_path: return f"Path '{repo_path or os.getcwd()}' is not a valid git repository." cwd = valid_repo_path # Get full git status status_result = subprocess.run( ["git", "status", "--porcelain"], capture_output=True, text=True, check=True, cwd=cwd, ) # Get branch info branch_result = subprocess.run( ["git", "branch", "--show-current"], capture_output=True, text=True, check=True, cwd=cwd, ) current_branch = branch_result.stdout.strip() if not status_result.stdout.strip(): return f"Repository is clean on branch '{current_branch}'. No changes to commit." # Parse status using helper status_lines = [line for line in status_result.stdout.split("\n") if line] staged_files, unstaged_files, untracked_files = _parse_git_status_lines( status_lines ) status_summary = f"Current branch: {current_branch}\n\n" if staged_files: status_summary += "Staged files (ready to commit):\n" status_summary += "\n".join(f" {file}" for file in staged_files) status_summary += "\n\n" if unstaged_files: status_summary += "Unstaged files (need to be added):\n" status_summary += "\n".join(f" {file}" for file in unstaged_files) status_summary += "\n\n" if untracked_files: status_summary += "Untracked files:\n" status_summary += "\n".join(f" {file}" for file in untracked_files) status_summary += "\n\n" if staged_files: status_summary += "✓ Ready to generate commit message!" else: status_summary += ( "ℹ Stage some files with 'git add' to generate commit messages." ) return status_summary except subprocess.CalledProcessError as e: error_msg = e.stderr or e.stdout or str(e) return f"Git command failed: {error_msg}" except FileNotFoundError: return "Git is not installed or not found in PATH" except OSError as e: return f"OS error occurred: {str(e)}"
  • Helper function to resolve and validate the git repository path, used by check_git_status to get valid repo_path.
    def _get_valid_repo_path(repo_path: Optional[str]) -> Optional[str]: """ Resolve and validate the git repository path. Returns the valid repo path if valid, otherwise None. """ logger = logging.getLogger(__name__) # Resolve user tilde and symlinks to a canonical path resolved = ( os.path.realpath(os.path.expanduser(repo_path)) if repo_path else os.getcwd() ) logger.info("[get_valid_repo_path] Resolved repository path: %s", resolved) if not os.path.isdir(resolved) or not os.path.exists( os.path.join(resolved, ".git") ): return None return resolved
  • Helper to parse individual git porcelain status line into staged, unstaged, untracked components, used in check_git_status.
    def _parse_git_status_line(line): """ Helper to parse a single git status line. Returns (staged_file, unstaged_file, untracked_file) """ if len(line) < 3: return None, None, None staged_status = line[0] unstaged_status = line[1] filename = line[3:] if staged_status == "?" and unstaged_status == "?": return None, None, filename staged_file = filename if staged_status != " " else None unstaged_file = filename if unstaged_status != " " else None return staged_file, unstaged_file, None
  • Helper to aggregate parsed status lines into lists of staged, unstaged, untracked files, called by check_git_status.
    def _parse_git_status_lines(status_lines): staged_files = [] unstaged_files = [] untracked_files = [] for line in status_lines: staged_file, unstaged_file, untracked_file = _parse_git_status_line(line) if staged_file: staged_files.append(staged_file) if unstaged_file: unstaged_files.append(unstaged_file) if untracked_file: untracked_files.append(untracked_file) return staged_files, unstaged_files, untracked_files

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/theoklitosBam7/mcp-git-commit-generator'

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