Skip to main content
Glama
markheramis

GIT MCP Server

by markheramis

git_checkout

Switch to a specified branch or commit in a Git repository using the GIT MCP Server. Optionally create a new branch if it does not exist. Simplify repository management through automated workflows.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
branchYesBranch or commit to checkout
createNoCreate new branch if it does not exist
repository_pathYesPath to the git repository

Implementation Reference

  • Handler function that executes the git checkout command using the provided repository path, branch, and optional create flag.
    async ({ repository_path, branch, create }) => { try { let command = `cd ${repository_path} && git checkout`; if (create) { command += ` -b`; } command += ` ${branch}`; const output = executeGitCommand(command); 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 }; } }
  • Input schema definition for the git_checkout tool parameters.
    { repository_path: z.string().describe('Path to the git repository'), branch: z.string().describe('Branch or commit to checkout'), create: z.boolean().optional().describe('Create new branch if it does not exist') },
  • index.ts:290-317 (registration)
    Registration of the git_checkout tool on the MCP server.
    server.tool( "git_checkout", { repository_path: z.string().describe('Path to the git repository'), branch: z.string().describe('Branch or commit to checkout'), create: z.boolean().optional().describe('Create new branch if it does not exist') }, async ({ repository_path, branch, create }) => { try { let command = `cd ${repository_path} && git checkout`; if (create) { command += ` -b`; } command += ` ${branch}`; const output = executeGitCommand(command); 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 }; } } );
  • Shared helper function to safely execute git commands and handle errors, used by the git_checkout handler.
    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}`); } }
  • Defined schema for GitCheckoutArgs (unused in registration).
    const GitCheckoutArgsSchema = z.object({ repository_path: z.string().describe('Path to the git repository'), branch: z.string().describe('Branch or commit to checkout'), create: z.boolean().optional().describe('Create new branch if it does not exist'), });

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/markheramis/mcp-git'

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