git_context
Fetch git repository context to provide branch, commits, and diffstat details, eliminating repetitive requests for basic repo information.
Instructions
Fetches a compact git context bundle so the assistant stops asking for basic repo details.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| repoPath | Yes | Absolute repo path | |
| maxCommits | No | Max commits (1..50) |
Implementation Reference
- src/index.ts:129-196 (handler)Handler logic for git_context tool: validates input, checks if repo, fetches branch, recent commits, and latest commit diffstat using git commands, formats into markdown payload.const args = GitContextSchema.parse(request.params.arguments); // Quick guardrail: fail nicely if this isn't a repo. const isRepo = await execFileAsync("git", [ "-C", args.repoPath, "rev-parse", "--is-inside-work-tree", ]) .then((r) => r.stdout.trim() === "true") .catch(() => false); if (!isRepo) { return { content: [ { type: "text", text: `Not a git repository: ${args.repoPath}`, }, ], }; } // Branch const branch = await execFileAsync("git", [ "-C", args.repoPath, "rev-parse", "--abbrev-ref", "HEAD", ]).then((r) => r.stdout.trim()); // Recent commits const commits = await execFileAsync("git", [ "-C", args.repoPath, "log", "-n", String(args.maxCommits), "--pretty=format:%h %s", ]).then((r) => r.stdout.trim()); // Diffstat vs latest commit (simple, fast) const diffstat = await execFileAsync("git", [ "-C", args.repoPath, "show", "--stat", "--oneline", "-1", ]).then((r) => r.stdout.trim()); const payload = [ "# Repo Context", `- Branch: ${branch}`, "", "## Recent commits", commits ? commits.split("\n").map((l) => `- ${l}`).join("\n") : "- None", "", "## Latest commit diffstat", "```", diffstat, "```", ].join("\n"); return { content: [{ type: "text", text: payload }], };
- src/index.ts:95-98 (schema)Zod schema defining input parameters for git_context: repoPath (required string), maxCommits (optional number, default 15).const GitContextSchema = z.object({ repoPath: z.string().min(1).describe("Absolute path to a git repository"), maxCommits: z.number().int().min(1).max(50).default(15), });
- src/index.ts:100-122 (registration)Registers the git_context tool in the ListToolsRequestSchema handler, providing name, description, and inputSchema matching the Zod schema.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: "git_context", description: "Fetches a compact git context bundle so the assistant stops asking for basic repo details.", inputSchema: { type: "object", properties: { repoPath: { type: "string", description: "Absolute repo path" }, maxCommits: { type: "number", description: "Max commits (1..50)", default: 15, }, }, required: ["repoPath"], }, }, ], }; });
- src/index.ts:124-127 (registration)Registers the CallToolRequestSchema handler which dispatches to git_context implementation.server.setRequestHandler(CallToolRequestSchema, async (request) => { if (request.params.name !== "git_context") { throw new Error(`Unknown tool: ${request.params.name}`); }