MCP server for git-filter-repo - AI-powered git history rewriting
This MCP server provides 22 well-structured git-filter-repo tools with comprehensive input schemas and descriptions. Most tools follow proper naming conventions (verb-first) and include detailed parameter constraints. However, there are significant gaps: (1) Output schemas are NOT documented, responses are inferred from implementation but not formally declared in the tool definitions, which violates pattern:tool-schema. (2) Error handling lacks recovery guidance, tools return error codes but do not guide the LLM on what to do next (pattern:recovery-guide). (3) Several parameters lack descriptions or have generic descriptions. (4) No tool annotations (readOnlyHint, destructiveHint) are present in the schema definitions, despite the server correctly categorizing tools as READ_ONLY, WRITE, or DESTRUCTIVE. (5) Destructive tools support dry_run but lack explicit confirmation patterns. Overall, schemas are present and mostly well-formed, descriptions are generally present, but integration with LLM workflows and output documentation are weak.
Analyze commit history of a repository
Change author information in repository history
Change commit dates in repository history
Check AI provider configuration and connectivity
Create a backup branch of the current HEAD
Filter paths from repository history
Find large files in repository history
Output schemas are not formally documented in tool definitions. LLMs cannot infer what fields the response will contain, forcing them to make assumptions about downstream tool chaining. Responses are implemented but not declared as structured output schemas.
Error handling lacks recovery guidance. Tools return ErrorCode enum values (e.g., 'REPO_NOT_FOUND', 'COMMAND_FAILED') but do not provide actionable next steps for the LLM. Pattern requires guidance like 'Try validate_repo_safety() first' or 'Retry with --force flag'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 71 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 61 | - | v1 |
Get detailed information about a specific commit
Get commit history for a specific file
List available AI providers for commit message generation
List all files in the repository at a given commit
List backup branches created by destructive operations
Remove files from repository history
Remove large files from repository history
Replace text throughout repository history
Resolve a commit reference to its full hash
Restore from a backup branch
Rewrite commit messages using specified style or AI
Rewrite a single commit's message, author, and/or email
Scan repository for potential secrets and sensitive data
Squash multiple consecutive commits into one
Validate repository safety before destructive operations
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are absent from tool definitions. The server correctly categorizes tools internally (READ_ONLY, DESTRUCTIVE, WRITE) but does not expose this via JSON Schema or MCP annotations, preventing LLMs from understanding operation safety without reading every parameter.
Destructive tools lack explicit confirmation pattern. While dry_run defaults to true (safe), no MRTR (Multi-Round-Trip Request) confirmation step exists. LLMs cannot request user approval before executing irreversible operations like remove_files or change_author.
Some parameters have weak or missing descriptions: 'new_message' in rewrite_single_commit, 'commit_message' fields lack format guidance, and some boolean parameters lack explanation of consequences.
Response field naming is inconsistent across tools. Some return 'commit_hash', others 'commit_ref', others 'hash'. LLMs must reason about field mappings to chain tools, increasing errors (pattern:response-field-naming baseline: all list operations should return uniform ID fields).