feat: LLM-Agnostic MCP Server with Peer Review Integration#30
Open
ipanov-ritech wants to merge 55 commits into
Open
feat: LLM-Agnostic MCP Server with Peer Review Integration#30ipanov-ritech wants to merge 55 commits into
ipanov-ritech wants to merge 55 commits into
Conversation
Initial implementation of peer review feature that validates PRs against linked Jira tickets: - Add PeerReviewIntegration class with ticket extraction and analysis - Add JiraMcpClient for MCP-based Jira communication - Add JiraSubAgent for AI-powered requirement validation - Add types for Jira tickets, acceptance criteria, and validation results - Extend analyze command with --peer-review flag - Update config loader to support peerReview configuration section The feature extracts ticket references from PR titles, branch names, and commit messages, then uses AI to validate that code changes satisfy the ticket's acceptance criteria. Work in progress - build verification pending. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix LangChain import path (langchain/output_parsers -> @langchain/core/output_parsers) - Fix TypeScript type casting issues in jira-mcp-client.ts - Refactor peer review to use ProviderFactory for multi-provider support - Peer review now uses the same provider/model as the main PR analysis 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Zhipu AI provider with Anthropic-compatible API support - Fix peerReview config being stripped by Zod validation (add schema) - Make criteriaId optional in AC validation to prevent parsing errors - Update README with comprehensive peer review documentation - Update README with Zhipu AI provider details - Add verbose debug output for peer review troubleshooting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Resolved conflicts: - README.md: Combined peer review and static analysis documentation - src/cli/commands/analyze.command.ts: Merged imports and output logic 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added visual dashboard with ROI calculator, quality trends, and risk analysis - Implemented SQLite persistence to store and aggregate PR analysis results - Added npm run cli dashboard command for standalone local usage - Configured Probot server to serve dashboard at root URL - Updated build pipeline to copy static assets to distribution folder - Added documentation for Dashboard features and deployment
- Combines peer-review Jira integration with Zhipu AI provider - Adds analytics dashboard from dime/ui_dashboard branch - Demo branch for 3pm presentation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add saveAnalysis() call in analyze command to persist results to database - Fix database path to use module-relative location instead of cwd - Calculate complexity from fileAnalyses instead of missing overallComplexity - Add helper functions for repo info, author, and PR number extraction The dashboard now displays real PR analysis data from any analyzed repository. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed action.yml to point to dist/action.js (ncc-bundled) instead of dist/index.js - The bundled action.js includes all dependencies (express, etc.) - Fixes "Cannot find package 'express'" error in GitHub Actions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fix: Connect dashboard to real PR analysis data
feat(dashboard): Add JIRA widget, Dark Mode, and layout updates
…est suggestions Integrates enhanced PR analysis features v0.2.0 with smart change detection that conditionally shows relevant outputs based on file types. - Estimates AWS infrastructure costs from IaC files (Terraform, CloudFormation, CDK, Pulumi, K8s, Docker) - Uses static pricing tables - no AWS connection required - Provides confidence levels (high/medium/low) for estimates - Auto-detects test framework (Jest, Vitest, Mocha, Pytest) - Generates framework-specific test templates - Only suggests for files with significant changes (>5 additions) - Reads test coverage from multiple formats (Jest, NYC, LCOV, Cobertura) - Only runs when coverage tool is configured in project - Shows overall percentage, line/branch coverage - Categorizes files automatically (code, test, DevOps/IaC) - Only shows relevant outputs - no noise - Logs detection for transparency - Extended SQLite schema with DevOps cost tracking fields - Added test suggestions and coverage tracking - New getDevOpsCostStats() function for dashboard - New DevOps Cost/mo card - IaC Changes count - Test Suggestions count - Average Coverage percentage - DevOps Resource Types chart - src/tools/devops-cost-estimator.ts (new) - src/tools/coverage-reporter.ts (new) - src/tools/test-suggestion-tool.ts (new) - src/tools/index.ts (updated exports) - src/agents/base-pr-agent-workflow.ts (smart detection) - src/cli/commands/analyze.command.ts (display) - src/db/index.ts (schema + stats) - src/types/agent.types.ts (new types) - src/public/index.html (dashboard cards) - src/public/dashboard.js (rendering)
…ntry point - Fixed dashboard.js to use devops_cost_monthly instead of removed cost_usd - Fixed dashboard.js to use devops_resources instead of total_tokens - Updated table header from 'Cost' to 'DevOps Cost' - Fixed action.yml to point to dist/index.js (bundled) instead of dist/action.js
- Created project-classifier tool to distinguish between business logic and QA projects - Classification based on file patterns and code content analysis - Provides type-specific recommendations tailored to project focus - Integrated into PR analysis workflow with automatic detection - Added display in CLI output after summary - Helps teams separate concerns between business logic and QA projects
Bug 1: Added DevOps cost trend chart initialization in dashboard.js - The HTML canvas element chart-cost-trend was present but never rendered - Now properly displays daily cost trends when data is available - Shows placeholder message when no cost trend data exists Bug 2: Convert currentRisks to fixes format in agent workflow - Both execute() and executeFastPath() were returning empty fixes array - Now properly converts risks to fixes format for CLI display - Maintains backward compatibility with Fix interface - Enables proper display of critical issues and quick actions in CLI
…s-costs feat(tools): Add smart change detection, DevOps cost estimator, and test suggestions
Adds a standalone MCP plugin that exposes PR Agent functionality as MCP tools for any MCP-compatible tool (Claude Code, etc.). Key features: - LLM-agnostic design: returns diff data for the calling LLM to analyze - No API keys required in plugin - uses host tool's LLM - Dashboard integration for tracking analysis metrics MCP Tools: - analyze_diff: Get diff ready for AI analysis - analyze_branch: Get current branch diff for analysis - get_dashboard_stats: Get dashboard metrics - get_recent_analyses: Get analysis history - save_analysis: Save results to dashboard Commands: - /pr-analyze: Analyze current branch - /pr-stats: Show dashboard statistics - /pr-recent: Show recent analyses Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…onfig - Detailed README with tool descriptions and usage examples - npm package configuration for publishing as pr-agent-mcp - Added bin entry for npx pr-agent-mcp usage Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- smithery.json for Smithery MCP marketplace - PUBLISHING.md with npm, Smithery, and mcp.run instructions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a production-ready MCP (Model Context Protocol) server that mirrors the CLI workflow exactly, enabling PR Agent to work with any MCP-compatible tool (Claude Code, Cursor, Windsurf, Cline, etc.). ## New Features - **MCP Server** (`src/mcp/server.ts`): Full implementation with two tools: - `analyze`: Mirrors `pr-agent analyze` CLI command exactly - `dashboard`: Starts web dashboard for analysis history - **Publishing Configuration**: - `server.json`: MCP Registry configuration - `smithery.json`: Smithery marketplace configuration - Updated `package.json` with mcpName and npm metadata - **Documentation**: - `docs/MCP-SERVER.md`: Comprehensive MCP server documentation - `src/mcp/README.md`: MCP-specific quick start guide - Publishing guides for npm, MCP Registry, and Smithery ## Technical Details - Uses same `.pragent.config.json` as CLI - Full feature parity: Jira peer review, arch-docs, risk detection, complexity scoring - Saves analysis to `pr-agent.db` for dashboard - Follows MCP security best practices (input validation, localhost binding) ## Breaking Changes - Removed old `pr-agent-plugin/` directory (replaced by integrated `src/mcp/`) Closes techdebtgpt#28 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- MCP server now uses the same PRAnalyzerAgent workflow as CLI - Added StubChatModel that triggers fallback paths in the agent - Added MCPChatModel for future use when Claude Code supports MCP sampling - PRAnalyzerAgent accepts optional chatModel for pass-through LLM access - Recommendations and risks are now properly stored in database - Dashboard "Most Requested Changes" section now populates correctly The StubChatModel always throws, which forces PRAnalyzerAgent to: 1. Run static analysis (semgrep, pattern matching) 2. Generate default recommendations via catch blocks The calling LLM (Claude Code, Cursor, etc.) provides AI insights after receiving the analysis response. Note: When Claude Code adds MCP sampling support (Issue #1785), StubChatModel can be replaced with MCPChatModel for true LLM pass-through. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added analyzeTestQuality() to analyze existing tests and suggest improvements - Detects missing test scenarios: error handling, edge cases, async ops, validation, state changes - Generates enhancement code suggestions for Jest, Mocha, Pytest, Vitest - Integrated into smart change detection workflow - Displays test enhancements separately from new test suggestions in CLI - Checks for: * Error handling and exception tests * Edge case and boundary value tests * Async operation tests * Input validation tests * Return value verification * State change and side effect tests * Integration test suggestions - Enhanced TestSuggestion interface with isEnhancement and existingTestFile flags - Provides actionable code snippets to improve test coverage and quality
- Expand database schema with 12 new columns for peer review data: - peer_review_enabled, ticket_key, ticket_quality_score, ticket_quality_tier - ac_compliance_percentage, ac_requirements_met, ac_requirements_total - peer_review_verdict, peer_review_blockers, peer_review_warnings - implementation_completeness, quality_score - Add getJiraComplianceStats() function to aggregate peer review metrics - Update analyze.command.ts to save peer review results after analysis - Update MCP server to include peer_review_enabled flag in saved analyses The peer review data includes ticket quality ratings, acceptance criteria compliance, verdict (approve/request_changes/needs_discussion), and detailed blockers/warnings for dashboard visualization. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: Add peer review data persistence to database
… flag - Cache project classification in database to avoid re-running on every analysis (saves tokens) - Add project_classification column to pr_analysis table with migration - Add getProjectClassification() function to retrieve cached results - Add --show-classification CLI flag to display classification on demand - Remove automatic console output for classification (now silent by default) - Update README with new flag documentation - Update AgentResult type with projectClassification field
Resolved conflicts: - src/db/index.ts: Keep both project_classification and peer review fields - src/agents/pr-analyzer-agent.ts: Keep MCP chatModel support from main - Added @modelcontextprotocol/sdk dependency
Enable team members to use the PR Agent MCP server by adding committed configuration files (.mcp.json, .vscode/mcp.json) that work after build. Clarify architecture in documentation: PR Agent is primarily a CLI tool with an MCP server component (src/mcp/) that reuses the CLI's analysis engine. Add comprehensive tool descriptions (analyze, dashboard) and setup helper script for easy onboarding. Key changes: - Add .mcp.json for Claude Code/Cursor/Windsurf team usage - Add .vscode/mcp.json for VS Code + GitHub Copilot - Create MCP-LOCAL-SETUP.md with architecture diagram and tool docs - Add scripts/setup-mcp-local.js helper (npm run mcp:setup) - Update README.md with MCP architecture notes and tool descriptions - Update .gitignore to track MCP config files Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Configure PR Agent to work alongside official Atlassian and GitHub MCP servers for full Jira ticket validation and repository management. The PR Agent extracts Jira ticket IDs from branches/commits, then Claude Code uses the Atlassian MCP server to fetch ticket details and validate PRs against acceptance criteria. Key changes: - Add atlassian and github MCP servers to .mcp.json - Add atlassian and github servers to .vscode/mcp.json - Document MCP server integration workflow in README.md - Add "How They Work Together" section to MCP-LOCAL-SETUP.md - Update Claude Code settings to enable all three servers Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…tegration - Replace local Atlassian MCP with official cloud-hosted Rovo MCP Server - Add comprehensive OAuth-based setup instructions for team members - Update GitHub MCP server command for Windows compatibility - Add troubleshooting section and official documentation links - Clarify that Atlassian integration is required for peer review features The Atlassian Rovo MCP Server provides secure OAuth 2.1 authentication, eliminating the need for manual API token management. Configuration is committed, so team members only need to restart Claude Code and authenticate. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit completes the comprehensive refactoring to make ALL AI-powered analysis work in PROMPT_ONLY mode for MCP servers, while preserving full EXECUTE mode functionality for CLI, GitHub Actions, and Probot. Changes: - Unified AnalysisPrompt interface in agent.types.ts for both main analysis and peer review - Updated jira-sub-agent.ts to import AnalysisPrompt from agent.types.ts - Added 'instructions' field to all AnalysisPrompt objects in peer review - Removed unused StubChatModel and MCPChatModel classes - Fixed type compatibility issues between different AnalysisPrompt definitions - Cleaned up MCP server to use PROMPT_ONLY mode throughout The architecture now supports two execution modes: 1. EXECUTE mode (CLI/GitHub Action/Probot): Executes prompts with API keys 2. PROMPT_ONLY mode (MCP): Returns prompts for calling LLM to execute All 7 LLM invocation points are now LLM-agnostic: - Main PR Analysis: 4 points (file analysis, risk detection, summary, refinement) - Peer Review: 3 points (ticket quality, AC validation, peer review) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Added streaming:true to Anthropic and Zhipu providers to prevent timeout errors on long operations (>10 minutes). Changes: - anthropic.provider.ts: Enable streaming - zhipu.provider.ts: Enable streaming for GLM-4.7 - Increases all provider maxTokens defaults to 50,000 This fixes AnthropicError: "Streaming is required for operations that may take longer than 10 minutes" Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Enable peer review by default in DEFAULT_CONFIG - Auto-open dashboard at http://localhost:3000 after analysis completes - Update .pr-analyzer.yml with latest model (claude-sonnet-4-5-20250929) - Increase max_tokens to 50000 for large PR analysis - Add C# (.cs) and C/C++ file patterns to configuration - Fix dashboard routing pattern from '*' to '/' to prevent path-to-regexp errors - Add peer review configuration section to .pr-analyzer.yml Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Auto-start dashboard server in background on analysis complete - Enhanced peer review with proper Jira configuration - Add *.db to .gitignore to prevent committing sensitive data - Update dist files with latest build Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…rver Fixes MCP server to match CLI behavior: - Auto-starts dashboard after analysis completes - Opens browser automatically with dashboard URL - Adds saveAnalysisResults MCP tool for LLM to persist analysis data - Dashboard now accessible immediately after running analysis Changes: - Added startDashboardInBackground() function - Auto-start dashboard after returning prompts (non-blocking) - New MCP tool: saveAnalysisResults (saves peer review data to DB) - Matches CLI behavior from analyze.command.ts lines 645-672 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Fixes missing parameter error when saving analysis results - Adds defaults for devops fields in database record preparation
Working on refactoring MCP server to execute LLM analysis internally instead of returning prompts. Goal is to match CLI behavior with unified Markdown output, auto-save to database, and dashboard auto-start. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
feat: LLM-Agnostic MCP Server with Peer Review Integration
## Features - Added coverage-analyzer.ts with nyc/Istanbul coverage parsing (LCOV, JSON formats) - Added ESLint static analysis integration - New CLI flags: * --scan-coverage: Run test coverage analysis * --show-coverage: Display coverage metrics * --show-static-analysis: Run ESLint analysis * --peer-review: Enable Jira peer review (moved from config-only) ## Coverage Analysis - Parses coverage-summary.json and lcov.info reports - Identifies files with low coverage (<50%) - Suggests uncovered functions and branches for testing - Formats coverage report for CLI output ## Static Analysis - Runs ESLint on project files - Reports errors, warnings, and fixable issues - Integrates with existing test enhancement suggestions ## Technical Details - Created src/tools/coverage-analyzer.ts with full TypeScript types - Exported types: CoverageMetrics, FileCoverage, UncoveredCode, CoverageAnalysis - Integrated into analyze command flow
Added documentation for new CLI flags: - --scan-coverage: Run test coverage analysis - --show-coverage: Display coverage metrics - --show-static-analysis: Run ESLint analysis - --peer-review: Enable Jira integration - Example for full analysis with all static analysis features
…s-costs Testing Features enchancements, static code analysis
- Update MCP server with improved tool handling - Add PR description documentation files - Include team communication materials - Update dist files with latest build Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Ignore test output, analysis results, and snapshot files that are generated during local development and testing. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Includes static code analysis, test enhancement suggestions, and project classification caching from main branch. Resolved dist/index.js conflict by rebuilding the GitHub Action bundle. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
BREAKING CHANGE: Peer review no longer defaults to enabled - Fix MCP server peer review to respect config (was defaulting to true) - Improve CLI boolean logic to use nullish coalescing (??) - Both CLI and MCP now consistently respect config.peerReview.enabled - Peer review only runs when explicitly enabled in config or via flag - All other config settings (archDocs, enableStaticAnalysis) remain consistent This ensures predictable behavior: PR Agent only enables features when configured, not by default. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Create multi-root workspace to view both repos simultaneously: - peer-agent: Main PR analysis tool - todo-ai-agents: Target repo for testing and integration Includes recommended extensions and workspace settings. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fixed MCP server analyze tool to work properly on Windows by adding shell:true to execSync calls. This resolves ENOENT errors when running git commands through the MCP server on Windows systems. Changes: - Added shell:true to all execSync calls in server.ts - Cleaned up obsolete dist files from build refactoring - MCP server now successfully analyzes PRs on Windows Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Created OutputFormatter utility to ensure consistent formatting between CLI terminal output and MCP server markdown output. Both now display: - Project classification - Test suggestions (new tests and enhancements) - Coverage reports - Static analysis results This provides deterministic, consistent output regardless of which interface (CLI or MCP) is used. Changes: - Created src/utils/output-formatter.ts with OutputFormatter class - Supports both 'terminal' (chalk colors) and 'markdown' modes - MCP server now uses shared formatter for test suggestions - Ensures test suggestions appear in MCP output consistently - Matches CLI formatting structure and information density Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
CRITICAL FIX: Prevent silent failures and ensure prompts are always executed Changes: 1. JiraMcpClient: Automatic fallback from MCP to API when MCP fails - Clear error logging at each step - Graceful degradation: MCP → MCP Search → API → null - Shows which method succeeded/failed 2. MCP Server: Show errors to user, don't silently fail - Display peer review errors in output - Explain possible causes and solutions - Continue analysis with base prompts if peer review fails 3. MCP Server: Clearer prompt execution instructions - Explicit "YOU MUST EXECUTE" warnings - Expected token usage guidance (~10k+ tokens) - Step-by-step execution requirements 4. Error handling improvements: - All exceptions logged with context - No silent catch blocks - User always informed of failures This ensures: - Analysis never completely fails due to one component - Users know WHY something failed - Calling LLM knows it MUST execute prompts - Automatic fallback when tools are unavailable Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Refactored the 970-line monolithic server.ts into a clean, maintainable architecture: BEFORE: - src/mcp/server.ts: 970 lines (all logic inline) AFTER: - src/mcp/server.ts: 102 lines (89% reduction, tool registration only) - 13 new modular files with clear separation of concerns NEW STRUCTURE: 1. Constants & Types (2 files) - constants.ts: All magic strings, numbers, messages, tool schemas - types.ts: MCP-specific type definitions 2. Service Classes (6 files - Single Responsibility) - GitService: Git operations (diff, branch, repo info) - DiffParserService: Parse git diff into structured data - TicketExtractorService: Extract Jira ticket references - FormatterService: Format analysis output for MCP responses - DashboardService: HTTP dashboard server lifecycle management - PeerReviewService: Orchestrate peer review workflow 3. Tool Handlers (3 files - One per MCP tool) - AnalyzeTool: Handle analyze tool requests - SaveResultsTool: Handle save results requests - DashboardTool: Handle dashboard requests 4. Index Files (2 files) - services/index.ts: Export all services - tools/index.ts: Export all tool handlers BENEFITS: ✅ SOLID principles: Each class has single responsibility ✅ Testability: Stateless services ready for unit tests ✅ Maintainability: Clear separation of concerns ✅ No magic strings: All constants centralized ✅ Type safety: Proper type definitions throughout ✅ Modularity: Easy to add new tools or services This architecture follows MCP best practices: stateless services, separation of transport from business logic, and clear boundaries for error handling and testing. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…atic analysis output PROBLEM: OutputFormatter.formatStaticAnalysis() was only formatting project classification and test suggestions, but was missing: 1. DevOps cost estimates (devOpsCostEstimates) 2. Coverage reports (coverageReport) These features were running in the agent workflow but not appearing in MCP server output. SOLUTION: - Added formatDevOpsCostEstimates() method to OutputFormatter - Updated formatStaticAnalysis() to include both missing features - Now MCP output has complete feature parity with CLI VERIFICATION: All static analysis tools confirmed running in PROMPT_ONLY mode: ✓ Project classification (src/tools/project-classifier.ts) ✓ Test suggestions (src/tools/test-suggestion-tool.ts) ✓ DevOps cost estimator (src/tools/devops-cost-estimator.ts) ✓ Coverage analyzer (src/tools/coverage-reporter.ts) Workflow analysis confirms CLI and MCP server execute identically: - Both call PRAnalyzerAgent.analyze() with same options - Both run detectAndAnalyzeChangeTypes() for static analysis - Both include all 4 features in output (now that formatter is fixed) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Integrate deterministic DevOps cost analysis into MCP server to show infrastructure cost estimates in analysis output. Changes: - Add devOpsCostEstimates and totalDevOpsCost fields to MCP types - Run analyzeDevOpsFiles in analyze-tool before LLM prompts (deterministic analysis) - Format DevOps cost estimates in MCP output with confidence indicators - Fix Terraform resource extraction regex to handle diff format (+ prefix) - Add debug logging for cost analysis tracing The cost estimation now works consistently in both CLI and MCP modes using the same deterministic code. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add complete test suite following MCP testing best practices with unit tests for services and integration tests for tools. Unit Tests: - GitService: Git command execution and output parsing (14 tests) - TicketExtractorService: Ticket reference extraction (10 tests) - FormatterService: MCP output formatting (15 tests) - DevOps Cost Estimator: Infrastructure cost estimation (30+ tests) Integration Tests: - AnalyzeTool: Full analysis workflow with git mocks (15 tests) - SaveResultsTool: Database operations and persistence (14 tests) - MCP Server: End-to-end protocol compliance (10 tests) Testing Approach: - Mock all external dependencies (git, filesystem, database) - Test MCP protocol response format compliance - Test PROMPT_ONLY mode (returns prompts, no LLM execution) - Test deterministic analysis (DevOps costs, static analysis) - Test error handling and graceful degradation References: - https://modelcontextprotocol.info/docs/best-practices/ - https://milvus.io/ai-quick-reference/how-do-i-write-unit-tests-for-model-context-protocol-mcp-tools-and-resources - https://github.com/haakco/mcp-testing-framework Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This was referenced Jan 27, 2026
Fix GitHub Actions workflow failure caused by missing dependencies (express, probot, etc.). The bundled dist/index.js now includes all dependencies (4.1MB) so the action can run without npm install. Changes: - Rebuilt dist/index.js with ncc bundler (4.1MB with all deps) - Removed dist/index.js.map (not needed for bundled action) - Updated type definitions Fixes: ERR_MODULE_NOT_FOUND for express package in GitHub Actions Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The dist/index.d.ts file contained type definitions for the Probot app (src/index.ts) which import 'express'. When the GitHub Action runs, Node.js tries to load this file alongside dist/index.js, causing ERR_MODULE_NOT_FOUND. The GitHub Action (dist/index.js) should not have type definitions alongside it - it's a bundled executable, not a library. Fix: Delete dist/index.d.ts to prevent Node.js from attempting to load the Probot app's type definitions when running the GitHub Action. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 LLM-Agnostic MCP Server with Peer Review Integration
📋 Overview
This PR implements a comprehensive MCP (Model Context Protocol) server for PR Agent that enables AI-powered PR analysis directly in Claude Code, Cursor, and other MCP-compatible editors without requiring API keys.
✨ Key Features
🤖 LLM-Agnostic Architecture
🎯 Peer Review Integration
📊 Auto-Start Dashboard
🔧 Installation Instructions for Team Members
Prerequisites
Step 1: Install PR Agent Package
Step 2: Configure MCP Server in Claude Code
Add the PR Agent MCP server to your Claude Code configuration:
Location:
~/.claude/config.json(or%APPDATA%\Claude\config.jsonon Windows){ "mcpServers": { "pr-agent": { "command": "npx", "args": ["@techdebtgpt/pr-agent", "mcp"] } } }Alternative: If installed globally:
{ "mcpServers": { "pr-agent": { "command": "pr-agent", "args": ["mcp"] } } }Note: No API keys needed! The MCP server leverages the calling LLM (Claude Code) to execute prompts.
Step 3: Create Configuration File
In your repository root, create
.pragent.config.json:{ "git": { "defaultBranch": "main" }, "analysis": { "enableStaticAnalysis": true, "language": "typescript", "framework": "react" }, "peerReview": { "enabled": true, "useMcp": true, "instanceUrl": "https://your-org.atlassian.net", "defaultProject": "PROJ" } }Note: No
ai.providerorapiKeysneeded for MCP mode - the calling LLM handles execution.Step 4: Restart Claude Code
After adding the MCP server configuration:
Step 5: Test the Integration
In Claude Code, try these commands:
or in any repository:
📖 Usage Examples
Basic Analysis
With Peer Review (Jira Integration)
View Results Dashboard
🎯 Available MCP Tools
The MCP server exposes three tools:
1.
analyzeAnalyzes PR/branch changes with static analysis and generates LLM prompts.
Parameters:
branch(optional): Base branch to compare againststaged(optional): Analyze staged changes insteadtitle(optional): PR title (auto-detected from git)cwd(optional): Working directoryverbose(optional): Include debug informationpeerReview(optional): Enable Jira peer reviewarchDocs(optional): Include architecture docs2.
saveAnalysisResultsSaves analysis results to the database after LLM execution.
Parameters:
title,complexity,risks,recommendations(required)peerReviewEnabled,ticketKey,ticketQualityScore(optional)3.
dashboardStarts the web dashboard on localhost.
Parameters:
port(optional): Port to run on (default: 3000)🏗️ Architecture
MCP Server (PROMPT_ONLY Mode)
Key Benefits:
🧪 Testing
Thoroughly tested and working:
📊 Output Format
Static Analysis (Immediate, No LLM)
LLM Analysis Prompts
🚧 TODO: Output Format Consistency
Remaining Work: The MCP server output format needs to be standardized to match the CLI output format.
Current State:
Target State:
Example Target Format (matching CLI):
This ensures consistency between CLI and MCP user experiences.
🔗 Related Links
📝 Breaking Changes
None. This is a new feature addition that does not affect existing CLI functionality.
🚀 Next Steps
🤝 For Reviewers
Key Files to Review
src/mcp/server.ts- Main MCP server implementation (PROMPT_ONLY mode)src/types/agent.types.ts- Type definitions for execution modessrc/agents/base-pr-agent-workflow.ts- PROMPT_ONLY mode supportsrc/issue-tracker/peer-review-integration.ts- Peer review in PROMPT_ONLY modeTesting Checklist
📞 Support
For issues or questions:
Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com