Skip to main content
Glama
emmron
by emmron

mcp__gemini__precommit_guardian

Validate code changes before committing, detect issues like quality, security, and performance, and provide auto-fix suggestions. Blocks commits on critical issues with Git integration.

Instructions

Advanced pre-commit validation with auto-fix suggestions and Git integration

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
auto_fixNoGenerate auto-fix suggestions
block_on_issuesNoBlock commit on critical issues
changesYesCode changes to validate
check_typesNoCheck types
languageNoProgramming languagejavascript

Implementation Reference

  • The core handler function for the 'mcp__gemini__precommit_guardian' tool. It validates code changes for quality, security, and performance using AI prompts to aiClient.call(). Determines if commit should be blocked, generates Git pre-commit hook integration code, and stores validation metrics in storage.
        handler: async (args) => {
          const { changes, check_types = ['quality', 'security', 'performance'], auto_fix = true, block_on_issues = true, language = 'javascript' } = args;
          validateString(changes, 'changes');
          
          const timer = performanceMonitor.startTimer('precommit_guardian');
          
          const checks = Array.isArray(check_types) ? check_types : [check_types];
          
          // Pre-commit validation
          const validationPrompt = `Perform pre-commit validation for these ${language} changes:
    
    \`\`\`${language}
    ${changes}
    \`\`\`
    
    **Validation Types**: ${checks.join(', ')}
    
    Analyze:
    1. **Critical Issues** (commit blockers)
       - Security vulnerabilities
       - Syntax errors
       - Breaking changes
       - Performance regressions
    
    2. **Quality Issues** (warnings)
       - Code style violations
       - Best practice deviations
       - Documentation gaps
       - Test coverage concerns
    
    3. **Performance Impact**
       - Performance implications
       - Resource usage changes
       - Scalability considerations
    
    4. **Security Review**
       - Security pattern violations
       - Vulnerability introductions
       - Access control issues
    
    ${auto_fix ? '5. **Auto-fix Suggestions**\n   - Automated fixes for common issues\n   - Code style corrections\n   - Performance optimizations' : ''}
    
    Provide:
    - ✅ PASS / ❌ FAIL / ⚠️ WARNING for each category
    - Specific line numbers for issues
    - ${block_on_issues ? 'Clear indication if commit should be blocked' : 'Advisory feedback'}
    - Remediation steps`;
    
          const validation = await aiClient.call(validationPrompt, 'review', { 
            complexity: 'medium',
            maxTokens: 3000 
          });
          
          // Extract commit decision
          const criticalIssues = validation.toLowerCase().includes('❌ fail') || validation.toLowerCase().includes('critical');
          const commitStatus = block_on_issues && criticalIssues ? 'BLOCKED' : 'APPROVED';
          
          let result = `🛡️ **Pre-commit Guardian** (${language})
    
    **Status**: ${commitStatus === 'BLOCKED' ? '🚫 COMMIT BLOCKED' : '✅ COMMIT APPROVED'}
    **Checks**: ${checks.join(', ')}
    **Auto-fix**: ${auto_fix ? 'Enabled' : 'Disabled'}
    
    ${validation}`;
    
          // Generate Git hook integration if requested
          const gitHookPrompt = `Generate Git pre-commit hook integration:
    
    Validation Status: ${commitStatus}
    Issues Found: ${criticalIssues}
    
    Provide:
    1. **Git Hook Script** (bash/shell)
       - Pre-commit hook implementation
       - Integration with validation
       - Error handling and reporting
    
    2. **Installation Instructions**
       - How to install the hook
       - Configuration options
       - Troubleshooting guide
    
    3. **Workflow Integration**
       - CI/CD integration points
       - Team collaboration setup
       - Override procedures for emergencies`;
    
          const gitIntegration = await aiClient.call(gitHookPrompt, 'devops');
          
          result += `
    
    ---
    
    🔗 **Git Integration**
    
    ${gitIntegration}`;
    
          // Store validation results for metrics
          const validationData = {
            timestamp: new Date().toISOString(),
            language,
            status: commitStatus,
            checks: checks,
            critical_issues: criticalIssues,
            changes_size: changes.length
          };
          
          const storageData = await storage.read('validations');
          if (!storageData.validations) storageData.validations = [];
          storageData.validations.push(validationData);
          
          // Keep only last 500 validations
          if (storageData.validations.length > 500) {
            storageData.validations = storageData.validations.slice(-500);
          }
          
          await storage.write('validations', storageData);
          
          timer.end();
          return result;
        }
  • Input schema defining parameters for the precommit guardian tool, including code changes, check types, auto-fix flag, block flag, and language.
    parameters: {
      changes: { type: 'string', description: 'Code changes to validate', required: true },
      check_types: { type: 'array', description: 'Check types', default: ['quality', 'security', 'performance'] },
      auto_fix: { type: 'boolean', description: 'Generate auto-fix suggestions', default: true },
      block_on_issues: { type: 'boolean', description: 'Block commit on critical issues', default: true },
      language: { type: 'string', description: 'Programming language', default: 'javascript' }
    },
  • Tool registration/definition within the enhancedTools object exported from this file. Includes description, parameters (schema), and handler.
      'mcp__gemini__precommit_guardian': {
        description: 'Advanced pre-commit validation with auto-fix suggestions and Git integration',
        parameters: {
          changes: { type: 'string', description: 'Code changes to validate', required: true },
          check_types: { type: 'array', description: 'Check types', default: ['quality', 'security', 'performance'] },
          auto_fix: { type: 'boolean', description: 'Generate auto-fix suggestions', default: true },
          block_on_issues: { type: 'boolean', description: 'Block commit on critical issues', default: true },
          language: { type: 'string', description: 'Programming language', default: 'javascript' }
        },
        handler: async (args) => {
          const { changes, check_types = ['quality', 'security', 'performance'], auto_fix = true, block_on_issues = true, language = 'javascript' } = args;
          validateString(changes, 'changes');
          
          const timer = performanceMonitor.startTimer('precommit_guardian');
          
          const checks = Array.isArray(check_types) ? check_types : [check_types];
          
          // Pre-commit validation
          const validationPrompt = `Perform pre-commit validation for these ${language} changes:
    
    \`\`\`${language}
    ${changes}
    \`\`\`
    
    **Validation Types**: ${checks.join(', ')}
    
    Analyze:
    1. **Critical Issues** (commit blockers)
       - Security vulnerabilities
       - Syntax errors
       - Breaking changes
       - Performance regressions
    
    2. **Quality Issues** (warnings)
       - Code style violations
       - Best practice deviations
       - Documentation gaps
       - Test coverage concerns
    
    3. **Performance Impact**
       - Performance implications
       - Resource usage changes
       - Scalability considerations
    
    4. **Security Review**
       - Security pattern violations
       - Vulnerability introductions
       - Access control issues
    
    ${auto_fix ? '5. **Auto-fix Suggestions**\n   - Automated fixes for common issues\n   - Code style corrections\n   - Performance optimizations' : ''}
    
    Provide:
    - ✅ PASS / ❌ FAIL / ⚠️ WARNING for each category
    - Specific line numbers for issues
    - ${block_on_issues ? 'Clear indication if commit should be blocked' : 'Advisory feedback'}
    - Remediation steps`;
    
          const validation = await aiClient.call(validationPrompt, 'review', { 
            complexity: 'medium',
            maxTokens: 3000 
          });
          
          // Extract commit decision
          const criticalIssues = validation.toLowerCase().includes('❌ fail') || validation.toLowerCase().includes('critical');
          const commitStatus = block_on_issues && criticalIssues ? 'BLOCKED' : 'APPROVED';
          
          let result = `🛡️ **Pre-commit Guardian** (${language})
    
    **Status**: ${commitStatus === 'BLOCKED' ? '🚫 COMMIT BLOCKED' : '✅ COMMIT APPROVED'}
    **Checks**: ${checks.join(', ')}
    **Auto-fix**: ${auto_fix ? 'Enabled' : 'Disabled'}
    
    ${validation}`;
    
          // Generate Git hook integration if requested
          const gitHookPrompt = `Generate Git pre-commit hook integration:
    
    Validation Status: ${commitStatus}
    Issues Found: ${criticalIssues}
    
    Provide:
    1. **Git Hook Script** (bash/shell)
       - Pre-commit hook implementation
       - Integration with validation
       - Error handling and reporting
    
    2. **Installation Instructions**
       - How to install the hook
       - Configuration options
       - Troubleshooting guide
    
    3. **Workflow Integration**
       - CI/CD integration points
       - Team collaboration setup
       - Override procedures for emergencies`;
    
          const gitIntegration = await aiClient.call(gitHookPrompt, 'devops');
          
          result += `
    
    ---
    
    🔗 **Git Integration**
    
    ${gitIntegration}`;
    
          // Store validation results for metrics
          const validationData = {
            timestamp: new Date().toISOString(),
            language,
            status: commitStatus,
            checks: checks,
            critical_issues: criticalIssues,
            changes_size: changes.length
          };
          
          const storageData = await storage.read('validations');
          if (!storageData.validations) storageData.validations = [];
          storageData.validations.push(validationData);
          
          // Keep only last 500 validations
          if (storageData.validations.length > 500) {
            storageData.validations = storageData.validations.slice(-500);
          }
          
          await storage.write('validations', storageData);
          
          timer.end();
          return result;
        }
      },

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/emmron/gemini-mcp'

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