Skip to main content
Glama
JJJHoons

Python Code Review MCP Agent

by JJJHoons

analyze_code_quality

Analyze Python code for quality issues including style, maintainability, performance, and best practices compliance to improve code reliability and developer productivity.

Instructions

Deep code quality analysis including style, maintainability, performance, and best practices compliance.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
codeYesPython code to analyze for quality issues
filenameNoName of the file (optional)unknown.py
includeStyleNoInclude style and naming convention checks
includeMaintainabilityNoInclude maintainability and documentation checks

Implementation Reference

  • The handleQualityAnalysis method is the primary handler for the 'analyze_code_quality' tool. It validates input, performs code analysis using PythonAnalyzer, applies user-specified filters for style and maintainability checks, generates a custom quality report, and returns the result as MCP content.
    private async handleQualityAnalysis(args: unknown) { const { code, filename, includeStyle, includeMaintainability } = QualityAnalysisSchema.parse(args); const result = this.analyzer.analyzePythonCode(code, filename); // Filter issues based on options let filteredIssues = result.issues; if (!includeStyle) { filteredIssues = filteredIssues.filter(issue => issue.type !== 'style' && !issue.rule.includes('naming-convention') ); } if (!includeMaintainability) { filteredIssues = filteredIssues.filter(issue => issue.type !== 'maintainability'); } const filteredResult = { ...result, issues: filteredIssues, totalIssues: filteredIssues.length }; const qualityReport = this.generateQualityReport(filteredResult); return { content: [ { type: 'text', text: qualityReport } ] };
  • Zod validation schema for the analyze_code_quality tool input parameters, defining code, filename, includeStyle, and includeMaintainability fields.
    const QualityAnalysisSchema = z.object({ code: z.string().min(1, "Code cannot be empty"), filename: z.string().optional().default("unknown.py"), includeStyle: z.boolean().optional().default(true), includeMaintainability: z.boolean().optional().default(true) });
  • src/index.ts:125-153 (registration)
    Tool registration in the ListTools response, defining the name, description, and JSON schema for input validation of analyze_code_quality.
    { name: 'analyze_code_quality', description: 'Deep code quality analysis including style, maintainability, performance, and best practices compliance.', inputSchema: { type: 'object', properties: { code: { type: 'string', description: 'Python code to analyze for quality issues' }, filename: { type: 'string', description: 'Name of the file (optional)', default: 'unknown.py' }, includeStyle: { type: 'boolean', description: 'Include style and naming convention checks', default: true }, includeMaintainability: { type: 'boolean', description: 'Include maintainability and documentation checks', default: true } }, required: ['code'] } },
  • Core analysis engine called by the tool handler. Uses regex patterns to detect security vulnerabilities, quality issues, style violations, and maintainability problems in Python code, computes quality and security scores, and produces structured AnalysisResult.
    public analyzePythonCode(code: string, fileName: string = 'unknown.py'): AnalysisResult { const lines = code.split('\n'); const issues: CodeIssue[] = []; // Analyze each line lines.forEach((line, index) => { const lineNumber = index + 1; // Check security patterns this.securityPatterns.forEach(pattern => { if (pattern.pattern.test(line)) { issues.push({ type: 'security', severity: pattern.severity, line: lineNumber, message: pattern.message, rule: pattern.rule, codeSnippet: line.trim(), suggestion: this.getSuggestion(pattern.rule, line) }); } }); // Check quality patterns this.qualityPatterns.forEach(pattern => { if (pattern.pattern.test(line)) { issues.push({ type: 'quality', severity: pattern.severity, line: lineNumber, message: pattern.message, rule: pattern.rule, codeSnippet: line.trim(), suggestion: this.getSuggestion(pattern.rule, line) }); } }); // Check maintainability patterns this.maintainabilityPatterns.forEach(pattern => { if (pattern.pattern.test(line)) { issues.push({ type: 'maintainability', severity: pattern.severity, line: lineNumber, message: pattern.message, rule: pattern.rule, codeSnippet: line.trim(), suggestion: this.getSuggestion(pattern.rule, line) }); } }); }); // Multi-line analysis this.analyzeMultilinePatterns(code, issues); // Calculate metrics const criticalIssues = issues.filter(i => i.severity === 'critical').length; const highIssues = issues.filter(i => i.severity === 'high').length; const mediumIssues = issues.filter(i => i.severity === 'medium').length; const lowIssues = issues.filter(i => i.severity === 'low').length; const codeQualityScore = this.calculateCodeQualityScore(issues, lines.length); const securityScore = this.calculateSecurityScore(issues); return { fileName, totalLines: lines.length, totalIssues: issues.length, criticalIssues, highIssues, mediumIssues, lowIssues, issues: issues.sort((a, b) => { const severityOrder = { critical: 4, high: 3, medium: 2, low: 1 }; return severityOrder[b.severity] - severityOrder[a.severity] || a.line - b.line; }), summary: this.generateSummary(issues, lines.length), recommendations: this.generateRecommendations(issues), codeQualityScore, securityScore }; }
  • Helper method that formats the quality analysis report specific to the analyze_code_quality tool, including header, quality score, breakdown, and recommendations.
    private generateQualityReport(result: AnalysisResult): string { const sections = [ 'πŸ“Š **CODE QUALITY ANALYSIS REPORT**', '=' + '='.repeat(50), `**File:** ${result.fileName}`, `**Quality Score:** ${result.codeQualityScore}/100 ${this.getQualityRating(result.codeQualityScore)}`, '', this.generateQualityBreakdown(result), '', this.generateQualityRecommendations(result) ]; return sections.join('\n'); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JJJHoons/python_code_review_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server