Skip to main content
Glama

git_status

Check the status of a Git repository to see staged, unstaged, and untracked files. Use this tool to review changes before committing in your workflow.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathNo.

Implementation Reference

  • The main execution logic for the git_status tool: runs 'git status --porcelain', retrieves current branch, parses output, and returns JSON-formatted MCP content.
    async ({ path: gitPath }) => {
      return wrapToolExecution(async () => {
        const { stdout } = await execAsync(`git status --porcelain`, { cwd: gitPath });
        const branch = await getCurrentBranch(gitPath);
        const result = parseGitStatus(stdout, branch);
    
        return {
          content: [{
            type: "text" as const,
            text: JSON.stringify(result, null, 2)
          }]
        };
      }, {
        errorCode: ERROR_CODES.GIT_OPERATION,
        context: "Failed to get git status"
      });
    }
  • Type definitions for input parsing and output structure of git_status tool (GitStatusEntry and GitStatusResult).
    export interface GitStatusEntry {
      status: string;
      file: string;
    }
    
    export interface GitCommit {
      hash: string;
      author: string;
      date: string;
      message: string;
    }
    
    export interface GitStatusResult {
      branch: string;
      changes: GitStatusEntry[] | string;
    }
  • Registers the git_status tool on the MCP server with input schema and handler function.
    function registerGitStatus(server: McpServer): void {
      server.tool("git_status",
        {
          path: z.string().optional().default(".")
        },
        async ({ path: gitPath }) => {
          return wrapToolExecution(async () => {
            const { stdout } = await execAsync(`git status --porcelain`, { cwd: gitPath });
            const branch = await getCurrentBranch(gitPath);
            const result = parseGitStatus(stdout, branch);
    
            return {
              content: [{
                type: "text" as const,
                text: JSON.stringify(result, null, 2)
              }]
            };
          }, {
            errorCode: ERROR_CODES.GIT_OPERATION,
            context: "Failed to get git status"
          });
        }
      );
    }
  • Helper function to parse git status porcelain output into structured GitStatusResult.
    function parseGitStatus(stdout: string, branch: string): GitStatusResult {
      const lines = stdout.trim().split('\n').filter(line => line);
      const changes = lines.map(line => ({
        status: line.substring(0, 2).trim(),
        file: line.substring(3)
      }));
    
      return {
        branch,
        changes: changes.length > 0 ? changes : "No changes"
      };
    }
  • Helper function to retrieve the current git branch name.
    async function getCurrentBranch(cwd: string): Promise<string> {
      const { stdout } = await execAsync(`git rev-parse --abbrev-ref HEAD`, { cwd });
      return stdout.trim();
    }

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/ishuru/open-mcp'

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