Automated code-review server with MCP tooling for GitHub pull requests
ReviewGenie has 5 tools with basic schemas and descriptions, but significant gaps prevent production use. Tool names lack clear action verbs (ping, ingest_pr, analyze_pr are vague about what they return vs. modify). Descriptions exist but are brief (avg ~80 chars) and lack WHEN/WHY guidance. Parameters have types but most lack descriptions (e.g., 'style' param in inline_comments has a description, but 'framework' in generate_tests does not). No output schemas documented. Error handling is minimal, exceptions are caught but not classified or recovery-guided. The inline_comments tool accepts a dry_run parameter, which is good, but generate_tests lacks idempotency guarantees and could create duplicate PRs on retry.
Analyze PR diff for code smells, security issues, and risk score using local and cloud LLMs
Generate stub test files for a PR and create a new pull request with the tests
Ingest a PR's raw diff, parse hunks, and return structured JSON with file metadata and hunk details
Post inline review comments on a PR with detected code smells, optionally in dry-run mode
Fetch PR metadata (title, author, state) from GitHub
Tool names lack action verbs. 'ping', 'ingest_pr', 'analyze_pr' do not clearly signal what the tool does or whether it modifies state. LLMs cannot infer intent from these names alone.
No output schemas documented. Tools return dicts but LLMs cannot plan downstream calls without knowing field names and types. E.g., analyze_pr returns {'smells': [...]} but this is inferred, not declared.
Parameter descriptions missing or incomplete. 'framework' param in generate_tests has no description. 'pr_url' appears in all tools but is never described (format, validation rules, examples).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Error handling is minimal and non-recoverable. Exceptions are caught but not classified. No guidance on retry, user action, or alternatives. E.g., 'comment failed' in inline_comments gives the LLM no path forward.
generate_tests is not idempotent. Calling it twice with the same PR will attempt to create duplicate branches and PRs, causing failures. No deduplication or idempotency key.