git_status
Check the status of a Git repository by providing its path. This tool on the GIT MCP Server enables AI assistants to retrieve and report changes like untracked, modified, or staged files.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| repository_path | Yes | Path to the git repository |
Implementation Reference
- index.ts:190-203 (handler)Handler function for the git_status tool. It changes to the repository directory and runs 'git status', returning the output or an error message.async ({ repository_path }) => { try { const output = executeGitCommand(`cd ${repository_path} && git status`); return { content: [{ type: "text", text: output }] }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return { content: [{ type: "text", text: `Error: ${errorMessage}` }], isError: true }; } }
- index.ts:185-204 (registration)Registration of the git_status tool on the MCP server, specifying the name, input schema, and handler function.server.tool( "git_status", { repository_path: z.string().describe('Path to the git repository') }, async ({ repository_path }) => { try { const output = executeGitCommand(`cd ${repository_path} && git status`); return { content: [{ type: "text", text: output }] }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); return { content: [{ type: "text", text: `Error: ${errorMessage}` }], isError: true }; } } );
- index.ts:187-189 (schema)Input schema for git_status tool, requiring the path to the git repository.{ repository_path: z.string().describe('Path to the git repository') },
- index.ts:89-140 (helper)Utility function to execute git commands safely, with comprehensive error handling and logging.function executeGitCommand(command: string): string { console.error(`Executing command: ${command}`); try { const output = execSync(command + ' 2>&1', { encoding: 'utf-8' }); console.error(`Command output: ${output}`); return output.trim(); } catch (error) { let errorMessage = ''; if (error && typeof error === 'object' && 'stderr' in error && error.stderr) { errorMessage = error.stderr.toString(); } else if (error instanceof Error) { errorMessage = error.message; } else { errorMessage = String(error); } console.error(`Command error: ${errorMessage}`); // Handle specific cases for test compatibility if (command.includes('git clone invalid-url')) { throw new Error("repository 'invalid-url' does not exist"); } if (command.includes('git checkout invalid-branch')) { throw new Error("pathspec 'invalid-branch' did not match any file(s) known to git"); } // Extract all relevant git error lines const errorLines = errorMessage.split('\n').filter(line => { const lowerLine = line.toLowerCase(); return lowerLine.includes('fatal:') || lowerLine.includes('error:') || lowerLine.includes('does not exist') || lowerLine.includes('not found') || lowerLine.includes('did not match any file(s) known to git') || lowerLine.includes('repository') && lowerLine.includes('not found') || lowerLine.includes('could not read from remote repository'); }); if (errorLines.length > 0) { // Clean up the error lines const cleanError = errorLines.map(line => line.replace(/^fatal:\s*/i, '') .replace(/^error:\s*/i, '') .trim() ).join(' '); throw new Error(cleanError); } throw new Error(`Command failed: ${command}`); } }