Skip to main content
Glama
markheramis

GIT MCP Server

by markheramis

git_push

Push changes to a specified branch in a Git repository by providing the repository path, remote name, and branch name. Facilitates repository management through natural language commands using the GIT MCP Server.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
branchNoBranch name
remoteNoRemote name
repository_pathYesPath to the git repository

Implementation Reference

  • The main handler function for the 'git_push' tool. It constructs a 'git push' command using the provided repository_path, optional remote and branch, executes it via executeGitCommand, and returns the output or an error response.
    async ({ repository_path, remote, branch }) => { try { let command = `cd ${repository_path} && git push ${remote || 'origin'}`; if (branch) { 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 }; } }
  • index.ts:234-260 (registration)
    Registers the 'git_push' tool with the MCP server, specifying the input schema and handler function.
    server.tool( "git_push", { repository_path: z.string().describe('Path to the git repository'), remote: z.string().optional().describe('Remote name'), branch: z.string().optional().describe('Branch name') }, async ({ repository_path, remote, branch }) => { try { let command = `cd ${repository_path} && git push ${remote || 'origin'}`; if (branch) { 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 }; } } );
  • Zod input schema defining parameters for the git_push tool: repository_path (required), remote and branch (optional).
    { repository_path: z.string().describe('Path to the git repository'), remote: z.string().optional().describe('Remote name'), branch: z.string().optional().describe('Branch name') },
  • Shared helper function that executes git commands using Node.js child_process.execSync, with comprehensive error handling and cleaning for MCP responses.
    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}`); } }

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