MCP server for repository analysis, Git operations, and code refactoring tools
Project Scope MCP has 20 tools across repository analysis, Git operations, and code refactoring. Tool naming is generally verb-first and clear (get_repo_structure, git_commit_history, refactor_rename). Descriptions are present and moderately detailed (ranging 100-250 chars), explaining the what and when. However, critical gaps exist: (1) Input schemas are visible but lack comprehensive detail in several tools, many parameters are missing explicit type constraints and enum definitions; (2) Output schemas are mentioned in descriptions but not formally documented in the visible code; (3) Parameter descriptions vary in quality, some are rich, others are minimal; (4) Error handling guidance is absent, tools do not indicate what the LLM should do on failure; (5) Tool compositions are sound (each tool has one responsibility), but the server is STDIO-only, which is a hard protocol limitation. Overall: definitions are above-average for community servers, but fall short of production grade due to schema completeness, error guidance, and transport constraints.
Predict the blast radius of renaming a symbol. Uses AST analysis (not text search) to find all legitimate references across the codebase. Use before refactoring to understand dependencies and prevent breaking changes.
Detect prompt injection attacks and jailbreak attempts in text input.
Detect template injection vulnerabilities in template files and code.
Find unused variables, functions, and imports in a file or across the codebase.
Map the complete file structure of a repository. Automatically respects .gitignore rules. Use 'tree' format for visual hierarchy, 'simple' for flat file lists, or 'json' for programmatic access. Best practice: Run this first when encountering a new codebase.
Display all Git branches with their tracking status and current HEAD. Useful for understanding repository state before making commits or merges.
Output schemas not formally documented. Tools describe their return values in prose (e.g., 'Returns structured data including commit hashes, timestamps, and messages') but the actual JSON response schema is not visible or explicitly specified. LLMs cannot reliably plan downstream tool calls without knowing the exact fields and types of responses.
Parameter descriptions for optional/enum parameters are incomplete. For example, git_commit_history accepts 'since' and 'until' parameters described as 'Optional: show commits since date (e.g., "2024-01-01", "2 weeks ago")', but the format constraint and accepted patterns are not formally declared as JSON Schema constraints (format, pattern, or examples in description).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
View commit history with powerful filtering (by file, author, or date range). Returns structured data including commit hashes, timestamps, and messages. Use to understand code evolution or trace when bugs were introduced.
Compare two Git branches showing unique commits in each branch, common ancestor, and files that differ. Optionally show full diff.
Initialize a new Git repository. Creates a .git directory and sets up the repository structure.
Show current working directory changes including staged, unstaged, and untracked files. Optionally show detailed diff.
Get a quick overview of the repository status including current branch, staged/unstaged/untracked file counts, and remote tracking info.
Extract a block of code into a new function/method. Supports JavaScript, TypeScript, Python, Java, and Go. Returns preview by default.
Inline a variable by removing its declaration and replacing all usages with its value.
Move selected code into a new file and update imports accordingly. Supports JavaScript, TypeScript, and Python.
Rename a symbol (variable, function, class) across the entire codebase. Returns preview of changes, apply with the apply flag to commit changes.
Comprehensively scan a single file for security threats including injection patterns, malicious code, and compliance violations.
Scan an entire repository for security threats across all files. Returns a prioritized risk assessment.
Validate file paths for path traversal and other directory escape attacks.
Validate shell commands for injection vulnerabilities and unsafe patterns. Returns risk assessment and sanitization suggestions.
Validate SQL queries for injection vulnerabilities, unsafe patterns, and compliance issues.
No error handling or recovery guidance in tool descriptions. Tools do not indicate what the LLM should do if a call fails. For example, 'analyze_impact' could fail if the symbol is not found or the file path is invalid, but the description provides no guidance like 'If symbol not found, try search_repository_symbols() first.' This violates the recovery-guide pattern.
No confirmation or dry-run support for destructive operations. Tools like 'refactor_rename', 'refactor_extract_function', and 'refactor_move_to_file' accept an 'apply' flag (defaulting to false for preview). However, the description does not explain what 'preview mode' returns or how the LLM should confirm before applying. A confirmation-request pattern would prevent accidental refactors.
Security validation tools (validate_shell_input, validate_sql_query, detect_prompt_injection, etc.) accept a 'config' parameter of type object, but the structure and valid properties are not documented. LLMs cannot know what to pass in config without explicit schema or parameter description guidance.
No batch or pagination parameters for potentially large result sets. 'get_repo_structure' with 'json' format and 'scan_repo_for_threats' could return very large datasets, but the tools do not accept limit, offset, or pagination parameters. This risks exhausting the context window.
Parameter naming inconsistency. Most tools use 'repoPath', but 'git_branch_status' and others use 'path'. Inconsistent naming increases cognitive load for LLMs and may cause parameter mismatches when chaining tools.
STDIO-only transport limits deployment and observability. The server uses STDIO (stdio transport in index.ts). STDIO servers are not remotely accessible and cannot be used by hosted MCP clients, restricting the server to local CLI usage only.