Skip to main content
Glama
markheramis

GIT MCP Server

by markheramis

git_commit

Automate git commits by specifying a repository path and commit message, with an option to add all files. Integrates with the GIT MCP Server for managing repositories via natural language commands.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
add_allNoAdd all files before committing
messageYesCommit message
repository_pathYesPath to the git repository

Implementation Reference

  • The handler function that executes the git commit logic, optionally staging all changes with 'git add .' before committing.
    async ({ repository_path, message, add_all }) => { try { let command = `cd ${repository_path} && git commit -m "${message}"`; if (add_all) { command = `cd ${repository_path} && git add . && ${command}`; } 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 schema defining the input parameters for the git_commit tool.
    const GitCommitArgsSchema = z.object({ repository_path: z.string().describe('Path to the git repository'), message: z.string().describe('Commit message'), add_all: z.boolean().optional().describe('Add all files before committing'), });
  • index.ts:262-288 (registration)
    Registration of the git_commit tool using server.tool, including inline input schema and handler reference.
    server.tool( "git_commit", { repository_path: z.string().describe('Path to the git repository'), message: z.string().describe('Commit message'), add_all: z.boolean().optional().describe('Add all files before committing') }, async ({ repository_path, message, add_all }) => { try { let command = `cd ${repository_path} && git commit -m "${message}"`; if (add_all) { command = `cd ${repository_path} && git add . && ${command}`; } 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 }; } } );
  • Helper function used by git_commit (and other tools) to safely execute git commands via child_process.execSync with error handling.
    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