Skip to main content
Glama

MCP Memory Service

amp_quality_gate.sh5.28 kB
#!/bin/bash # scripts/pr/amp_quality_gate.sh - Parallel quality checks using Amp CLI # # Usage: bash scripts/pr/amp_quality_gate.sh <PR_NUMBER> # Example: bash scripts/pr/amp_quality_gate.sh 215 # For local branch (pre-PR): bash scripts/pr/amp_quality_gate.sh 0 set -e PR_NUMBER=$1 if [ -z "$PR_NUMBER" ]; then echo "Usage: $0 <PR_NUMBER>" echo "Use 0 for local branch (pre-PR checks)" exit 1 fi # Ensure Amp prompt directories exist mkdir -p .claude/amp/prompts/pending mkdir -p .claude/amp/responses/ready echo "=== Amp CLI Quality Gate for PR #$PR_NUMBER ===" echo "" # Get changed Python files if [ "$PR_NUMBER" = "0" ]; then echo "Analyzing local branch changes..." changed_files=$(git diff --name-only origin/main | grep '\.py$' || echo "") else if ! command -v gh &> /dev/null; then echo "Error: GitHub CLI (gh) is not installed" exit 1 fi echo "Fetching changed files from PR #$PR_NUMBER..." changed_files=$(gh pr diff $PR_NUMBER --name-only | grep '\.py$' || echo "") fi if [ -z "$changed_files" ]; then echo "No Python files changed." exit 0 fi echo "Changed Python files:" echo "$changed_files" echo "" # Generate UUIDs for each check complexity_uuid=$(uuidgen 2>/dev/null || cat /proc/sys/kernel/random/uuid) security_uuid=$(uuidgen 2>/dev/null || cat /proc/sys/kernel/random/uuid) typehints_uuid=$(uuidgen 2>/dev/null || cat /proc/sys/kernel/random/uuid) # Store UUIDs for result collection echo "$complexity_uuid,$security_uuid,$typehints_uuid" > /tmp/amp_quality_gate_uuids_${PR_NUMBER}.txt echo "Creating Amp prompts for parallel processing..." echo "" # Create complexity check prompt cat > .claude/amp/prompts/pending/complexity-${complexity_uuid}.json << EOF { "id": "${complexity_uuid}", "timestamp": "$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")", "prompt": "Analyze code complexity for each function in these files. Rating scale: 1-10 (1=simple, 10=very complex). ONLY report functions with score >7 in this exact format: 'File:Function: Score X - Reason'. If all functions score ≤7, respond: 'COMPLEXITY_OK'. Files:\n\n$(echo "$changed_files" | while read file; do echo "=== $file ==="; cat "$file" 2>/dev/null || echo "File not found"; echo ""; done)", "context": { "project": "mcp-memory-service", "task": "complexity-analysis", "pr_number": "${PR_NUMBER}" }, "options": { "timeout": 120000, "format": "text" } } EOF # Create security scan prompt cat > .claude/amp/prompts/pending/security-${security_uuid}.json << EOF { "id": "${security_uuid}", "timestamp": "$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")", "prompt": "Security audit for vulnerabilities: SQL injection (raw SQL, string formatting in queries), XSS (unescaped HTML output), command injection (os.system, subprocess with shell=True), path traversal (user input in file paths), hardcoded secrets (API keys, passwords). IMPORTANT: Output format - If ANY vulnerability found: 'VULNERABILITY_DETECTED: [type] - [details]'. If NO vulnerabilities: 'SECURITY_CLEAN'. Files:\n\n$(echo "$changed_files" | while read file; do echo "=== $file ==="; cat "$file" 2>/dev/null || echo "File not found"; echo ""; done)", "context": { "project": "mcp-memory-service", "task": "security-scan", "pr_number": "${PR_NUMBER}" }, "options": { "timeout": 120000, "format": "text" } } EOF # Create type hints check prompt cat > .claude/amp/prompts/pending/typehints-${typehints_uuid}.json << EOF { "id": "${typehints_uuid}", "timestamp": "$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")", "prompt": "Check type hint coverage for these Python files. Report: 1) Total functions/methods, 2) Functions with complete type hints, 3) Functions missing type hints (list names), 4) Coverage percentage. Output format: 'COVERAGE: X%' then 'MISSING: function1, function2, ...' (or 'NONE' if all covered). Files:\n\n$(echo "$changed_files" | while read file; do echo "=== $file ==="; cat "$file" 2>/dev/null || echo "File not found"; echo ""; done)", "context": { "project": "mcp-memory-service", "task": "type-hints", "pr_number": "${PR_NUMBER}" }, "options": { "timeout": 120000, "format": "text" } } EOF echo "✅ Created 3 Amp prompts for parallel processing" echo "" echo "=== Run these Amp commands in parallel (in separate terminals or background) ===" echo "" echo "amp @.claude/amp/prompts/pending/complexity-${complexity_uuid}.json &" echo "amp @.claude/amp/prompts/pending/security-${security_uuid}.json &" echo "amp @.claude/amp/prompts/pending/typehints-${typehints_uuid}.json &" echo "" echo "=== Then collect results with ===" echo "bash scripts/pr/amp_collect_results.sh --timeout 300 --uuids '${complexity_uuid},${security_uuid},${typehints_uuid}'" echo "" echo "=== Or use this one-liner to run all in background ===" echo "(amp @.claude/amp/prompts/pending/complexity-${complexity_uuid}.json > /tmp/amp-complexity.log 2>&1 &); (amp @.claude/amp/prompts/pending/security-${security_uuid}.json > /tmp/amp-security.log 2>&1 &); (amp @.claude/amp/prompts/pending/typehints-${typehints_uuid}.json > /tmp/amp-typehints.log 2>&1 &); sleep 10 && bash scripts/pr/amp_collect_results.sh --timeout 300 --uuids '${complexity_uuid},${security_uuid},${typehints_uuid}'"

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/doobidoo/mcp-memory-service'

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