Skip to content

Integration Scripts Examples

Practical scripts for integrating MCP Standards Server into your development workflow.

Setup Scripts

Project Initialization Script

#!/bin/bash
# scripts/init-standards.sh

echo "Initializing MCP Standards for project..."

# Detect project type
if [ -f "package.json" ]; then
    PROJECT_TYPE="javascript"
elif [ -f "requirements.txt" ] || [ -f "pyproject.toml" ]; then
    PROJECT_TYPE="python"
elif [ -f "go.mod" ]; then
    PROJECT_TYPE="go"
else
    PROJECT_TYPE="generic"
fi

# Create configuration
cat > .mcp-standards.yml << EOF
version: 1.0
project:
  type: $PROJECT_TYPE
  name: $(basename $PWD)

standards:
  - ${PROJECT_TYPE}-best-practices
  - security-baseline
  - testing-standards

validation:
  exclude:
    - "node_modules/"
    - "venv/"
    - ".git/"
    - "dist/"
EOF

echo "Created .mcp-standards.yml with $PROJECT_TYPE defaults"

Batch Validation Script

#!/usr/bin/env python3
# scripts/validate-all.py

import os
import sys
import json
from pathlib import Path
from src.core.standards import StandardsEngine

def validate_projects(root_dir):
    """Validate all projects in a directory"""
    engine = StandardsEngine()
    results = {}

    for project_dir in Path(root_dir).iterdir():
        if project_dir.is_dir() and (project_dir / '.mcp-standards.yml').exists():
            print(f"Validating {project_dir.name}...")

            result = engine.validate_directory(str(project_dir))
            results[project_dir.name] = {
                'passed': result.passed,
                'violations': len(result.violations),
                'summary': result.summary
            }

    # Generate report
    with open('validation-report.json', 'w') as f:
        json.dump(results, f, indent=2)

    # Print summary
    total_projects = len(results)
    passed_projects = sum(1 for r in results.values() if r['passed'])

    print(f"\nValidation Summary:")
    print(f"Total Projects: {total_projects}")
    print(f"Passed: {passed_projects}")
    print(f"Failed: {total_projects - passed_projects}")

if __name__ == '__main__':
    root = sys.argv[1] if len(sys.argv) > 1 else '.'
    validate_projects(root)

CI/CD Integration Scripts

GitHub Actions Integration

# .github/actions/mcp-validate/action.yml
name: 'MCP Standards Validation'
description: 'Validate code against MCP standards'

inputs:
  config-file:
    description: 'Path to MCP standards config'
    default: '.mcp-standards.yml'

  fail-on-violation:
    description: 'Fail build on violations'
    default: 'true'

runs:
  using: 'composite'
  steps:
    - name: Install MCP Standards Server
      shell: bash
      run: |
        pip install mcp-standards-server

    - name: Run Validation
      shell: bash
      run: |
        mcp-standards validate \
          --config ${{ inputs.config-file }} \
          --format github \
          $([ "${{ inputs.fail-on-violation }}" = "true" ] && echo "--fail-on-violation")

GitLab CI Integration

# .gitlab-ci.yml
standards-validation:
  stage: test
  image: python:3.11

  before_script:
    - pip install mcp-standards-server

  script:
    - mcp-standards validate . --format gitlab > validation-report.json

  artifacts:
    reports:
      codequality: validation-report.json
    paths:
      - validation-report.json
    expire_in: 1 week

Migration Scripts

Standards Migration Script

#!/usr/bin/env python3
# scripts/migrate-standards.py

import yaml
import json
from pathlib import Path

def migrate_old_config(old_config_path, new_config_path):
    """Migrate from old standard format to new format"""

    # Read old config
    with open(old_config_path) as f:
        if old_config_path.suffix == '.json':
            old_config = json.load(f)
        else:
            old_config = yaml.safe_load(f)

    # Transform to new format
    new_config = {
        'version': '2.0',
        'standard': {
            'id': old_config.get('id', 'migrated-standard'),
            'name': old_config.get('name', 'Migrated Standard'),
            'version': '1.0.0',
            'category': old_config.get('type', 'general')
        },
        'rules': []
    }

    # Migrate rules
    for old_rule in old_config.get('rules', []):
        new_rule = {
            'id': old_rule['name'],
            'description': old_rule.get('description', ''),
            'severity': old_rule.get('level', 'warning'),
            'enabled': old_rule.get('active', True)
        }
        new_config['rules'].append(new_rule)

    # Save new config
    with open(new_config_path, 'w') as f:
        yaml.dump(new_config, f, default_flow_style=False)

    print(f"Migrated {old_config_path} to {new_config_path}")

if __name__ == '__main__':
    import sys
    if len(sys.argv) != 3:
        print("Usage: migrate-standards.py <old-config> <new-config>")
        sys.exit(1)

    migrate_old_config(Path(sys.argv[1]), Path(sys.argv[2]))

Reporting Scripts

HTML Report Generator

#!/usr/bin/env python3
# scripts/generate-report.py

from jinja2 import Template
from datetime import datetime
import json

HTML_TEMPLATE = """
<!DOCTYPE html>
<html>
<head>
    <title>MCP Standards Validation Report</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        .summary { background: #f0f0f0; padding: 10px; margin: 20px 0; }
        .passed { color: green; }
        .failed { color: red; }
        .violation { margin: 10px 0; padding: 10px; background: #ffe0e0; }
    </style>
</head>
<body>
    <h1>Validation Report</h1>
    <div class="summary">
        <h2>Summary</h2>
        <p>Generated: {{ timestamp }}</p>
        <p>Total Files: {{ summary.total_files }}</p>
        <p>Files with Violations: {{ summary.files_with_violations }}</p>
        <p>Total Violations: {{ summary.total_violations }}</p>
    </div>

    <h2>Violations</h2>
    {% for violation in violations %}
    <div class="violation">
        <strong>{{ violation.file }}:{{ violation.line }}</strong><br>
        Rule: {{ violation.rule_id }}<br>
        {{ violation.message }}
    </div>
    {% endfor %}
</body>
</html>
"""

def generate_html_report(validation_results, output_path):
    template = Template(HTML_TEMPLATE)

    html = template.render(
        timestamp=datetime.now().isoformat(),
        summary=validation_results['summary'],
        violations=validation_results['violations']
    )

    with open(output_path, 'w') as f:
        f.write(html)

    print(f"Report generated: {output_path}")

if __name__ == '__main__':
    with open('validation-results.json') as f:
        results = json.load(f)

    generate_html_report(results, 'validation-report.html')

Automation Scripts

Pre-commit Hook

#!/bin/bash
# .git/hooks/pre-commit

# Get list of staged files
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)

if [ -z "$STAGED_FILES" ]; then
    exit 0
fi

# Run validation only on staged files
echo "Running MCP Standards validation..."

for file in $STAGED_FILES; do
    if [[ "$file" =~ \.(py|js|go|java|rs|ts)$ ]]; then
        mcp-standards validate "$file" --quiet
        if [ $? -ne 0 ]; then
            echo "❌ Validation failed for $file"
            echo "Run 'mcp-standards validate $file' for details"
            exit 1
        fi
    fi
done

echo "✅ All files passed validation"

Auto-fix Script

#!/bin/bash
# scripts/auto-fix.sh

echo "Running MCP Standards auto-fix..."

# Find all source files
find . -name "*.py" -o -name "*.js" -o -name "*.go" | while read file; do
    # Skip vendor/node_modules
    if [[ "$file" =~ (vendor|node_modules|\.git) ]]; then
        continue
    fi

    # Run auto-fix
    mcp-standards fix "$file" --backup

    if [ $? -eq 0 ]; then
        echo "✓ Fixed: $file"
    else
        echo "✗ Could not auto-fix: $file"
    fi
done

echo "Auto-fix complete. Review changes before committing."