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
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | . |
Implementation Reference
- src/tools/dev-tools.ts:35-51 (handler)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" }); }
- src/types/common.ts:79-94 (schema)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; }
- src/tools/dev-tools.ts:30-53 (registration)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" }); } ); }
- src/tools/dev-tools.ts:60-71 (helper)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" }; }
- src/tools/dev-tools.ts:55-58 (helper)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(); }