Skip to content
Conduit

mcp server

aurora-qa

πŸ€– Aurora QA β€” AI-powered autonomous quality engineering platform. Multi-agent pipelines, self-healing tests, chaos engineering, MCP server & real-time dashboard.

Zijian-Ni/aurora-qacommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 21, 2026

Aurora QA πŸ€–

TypeScript License: MIT pnpm Node 20+

AI-powered autonomous quality engineering platform β€” 13 specialized agents, chaos engineering, self-healing tests, MCP server & real-time dashboard

Aurora QA is an intelligent quality engineering platform that uses Claude to autonomously generate tests, find bugs, analyze code security, measure performance, and ensure accessibility. It features 13 specialized AI agents orchestrated through a pipeline system, backed by a vector-based knowledge memory that learns from every analysis.

The platform integrates with your development workflow via the Model Context Protocol (MCP), CI/CD adapters for GitHub Actions, GitLab CI, and Jenkins, and a real-time Next.js dashboard for monitoring.

✨ Features

  • πŸ§ͺ AI Test Generation β€” Generates comprehensive test suites covering edge cases, error paths, and happy paths
  • πŸ› Intelligent Bug Detection β€” Deep static analysis with AI-powered reasoning for complex bugs
  • πŸ”’ OWASP Security Scanning β€” SQL injection, XSS, secrets detection, auth analysis
  • ⚑ Performance Analysis β€” Big O estimation, N+1 queries, memory leak detection
  • β™Ώ Accessibility Checking β€” WCAG 2.1 AA compliance analysis for HTML and React
  • πŸ”₯ Chaos Engineering β€” Network latency/failure injection, CPU stress, memory pressure, time skew
  • 🧬 Mutation Testing β€” Measures test quality by generating code mutations
  • πŸ“‹ Contract Testing β€” Pact-inspired API contract verification
  • 🩹 Self-Healing Tests β€” Automatically classifies and fixes flaky tests
  • 🎭 Browser Automation β€” AI-powered semantic element targeting with Playwright
  • 🧠 Knowledge Memory β€” TF-IDF vector store learns from every analysis session
  • πŸ›‘οΈ Circuit Breaker β€” Auto-halts agents after consecutive failures to prevent token waste
  • ⏱️ Timeout Control β€” AbortController-based API timeouts with graceful degradation
  • πŸ“Š Real-time Dashboard β€” Next.js 15 dashboard with SSE live updates
  • πŸ”Œ MCP Integration β€” 12 tools available in Claude Desktop, Cursor, VS Code
  • 🧾 Evidence Grading (v1.3) β€” every finding graded by how it can be proven; severity is capped by evidence, so hallucinated "criticals" are auto-downgraded
  • 🚦 Quality Gates (v1.3) β€” deterministic exit code from explicit budgets; only evidence-backed findings can fail your build
  • πŸ“€ SARIF / JUnit / Markdown (v1.3) β€” inline GitHub PR annotations, CI test tabs, PR summaries

🚦 Quality Gates (v1.3)

The hard problem with AI QA isn't generating findings β€” it's trusting them.

pnpm --filter @aurora-qa/cli build
node packages/cli/bin/aurora-qa.js gate examples/gate/findings.json \
  --sources examples/gate --sarif aurora-qa.sarif --md pr.md
| Sev    | Evidence         | Conf  | Finding                                |
|--------|------------------|-------|----------------------------------------|
| high   | πŸ“ static-match  | 0.782 | SQL injection via string concatenation |
| medium | πŸ”— citation      | 0.480 | Hardcoded secret detected              |
| low    | πŸ’­ heuristic     | 0.245 | Possible race condition in cache warmup|
| info   | 🚫 unverifiable  | 0.044 | Unbounded recursion in parseTree()     |

The last one claimed critical β€” but it cited code that doesn't exist in the file, so it was capped at info and flagged as a hallucination suspect. It can never break your build. The first one matched a deterministic rule, so it does.

See docs/EVIDENCE_GATES.md.

πŸ— Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Aurora QA Platform                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Orchestrator ────────────────────────┐ β”‚
β”‚  β”‚                                                         β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚ β”‚
β”‚  β”‚  β”‚ TestGen     β”‚ β”‚ TestRunner  β”‚ β”‚ BugAnalyzer      β”‚   β”‚ β”‚
β”‚  β”‚  β”‚ Agent       β”‚ β”‚ Agent       β”‚ β”‚ Agent            β”‚   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚ β”‚
β”‚  β”‚  β”‚ Coverage    β”‚ β”‚ Review      β”‚ β”‚ Healer           β”‚   β”‚ β”‚
β”‚  β”‚  β”‚ Agent       β”‚ β”‚ Agent       β”‚ β”‚ Agent            β”‚   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚ β”‚
β”‚  β”‚  β”‚ Security    β”‚ β”‚ Performance β”‚ β”‚ Accessibility    β”‚   β”‚ β”‚
β”‚  β”‚  β”‚ Agent       β”‚ β”‚ Agent       β”‚ β”‚ Agent            β”‚   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚ β”‚
β”‚  β”‚  β”‚ Chaos       β”‚ β”‚ Mutation    β”‚ β”‚ Contract         β”‚   β”‚ β”‚
β”‚  β”‚  β”‚ Agent       β”‚ β”‚ Agent       β”‚ β”‚ Agent            β”‚   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                        β”‚ β”‚
β”‚  β”‚  β”‚ Playwright  β”‚    Pipeline Runner                     β”‚ β”‚
β”‚  β”‚  β”‚ Agent       β”‚    (topological execution)             β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                        β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                              β”‚
β”‚  β”Œβ”€β”€β”€ Memory Layer ───┐  β”Œβ”€β”€ Intelligence ──┐  β”Œβ”€β”€ Events ──┐│
β”‚  β”‚ VectorStore (TF-IDFβ”‚  β”‚ ReasoningEngine  β”‚  β”‚ EventStreamβ”‚β”‚
β”‚  β”‚ KnowledgeBase      β”‚  β”‚ TestPrioritizer  β”‚  β”‚ (SSE)      β”‚β”‚
β”‚  β”‚ EpisodicMemory     β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚  β”‚ PatternLibrary     β”‚  β”Œβ”€β”€ Metrics ────────┐               β”‚
β”‚  β”‚ WorkingMemory      β”‚  β”‚ MetricsCollector  β”‚               β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚ (Prometheus fmt)  β”‚               β”‚
β”‚                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  MCP Server (12 tools)  β”‚  Dashboard (Next.js 15)  β”‚  CI/CD  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Quick Start

# 1. Clone the repository
git clone https://github.com/Zijian-Ni/aurora-qa.git && cd aurora-qa

# 2. Install dependencies
pnpm install

# 3. Build all packages
pnpm build

# 4. Set your API key
export ANTHROPIC_API_KEY=sk-ant-...

# 5. Run an example
node_modules/.bin/tsx examples/basic-pipeline/index.ts

πŸ“– API Usage

import { Orchestrator, loadConfig } from '@aurora-qa/core';

// Initialize with config
const config = loadConfig({ anthropicApiKey: process.env.ANTHROPIC_API_KEY! });
const orchestrator = new Orchestrator({ config });

// Generate tests for a source file
const testOutput = await orchestrator.generateTests({
  sourceCode: 'export function add(a: number, b: number) { return a + b; }',
  filePath: 'src/math.ts',
  framework: 'vitest',
});

// Run security scan
const securityReport = await orchestrator.scanSecurity(
  'const query = `SELECT * FROM users WHERE id = ${userId}`;',
  'src/db.ts',
);

// Analyze performance
const perfAnalysis = await orchestrator.analyzePerformance(
  'for (const user of users) { await db.find(user.id); }',
  'typescript',
);

// Run a full pipeline
const run = await orchestrator.runPipeline({
  id: 'my-pipeline',
  name: 'Full QA',
  steps: [
    { id: 'gen', type: 'generate-tests', name: 'Generate', config: { sourceCode: '...', filePath: 'app.ts' } },
    { id: 'sec', type: 'scan-security', name: 'Security', config: { code: '...' } },
    { id: 'perf', type: 'analyze-performance', name: 'Performance', config: { code: '...' } },
  ],
  triggers: [{ type: 'manual' }],
  environment: {},
  createdAt: new Date(),
  updatedAt: new Date(),
});

// Health check
console.log(orchestrator.health());

// Shutdown
await orchestrator.shutdown();

πŸ€– Agents (13 total)

AgentRoleKey Capabilities
TestGeneratorTest creationGenerates comprehensive test suites with edge cases
TestRunnerTest executionRuns tests, parses output with AI
BugAnalyzerBug detectionDeep static analysis, severity ratings
CoverageAgentCoverage analysisGap detection, threshold checking
ReviewAgentCode reviewQuality scoring, issue categorization
HealerAgentSelf-healingClassifies failures, suggests automated fixes
PlaywrightAgentBrowser automationAI-powered semantic element targeting
SecurityAgentSecurity scanningOWASP-aligned vulnerability detection
PerformanceAgentPerformance analysisBig O, N+1 queries, memory leaks
AccessibilityAgenta11y checkingWCAG 2.1 AA compliance
ChaosAgentChaos engineeringResilience testing with fault injection
MutationAgentMutation testingMeasures test quality via code mutations
ContractAgentContract testingAPI contract verification (Pact-inspired)

πŸ”Œ MCP Tools (12 tools)

ToolDescription
generate_testsGenerate comprehensive test cases for source code
run_testsExecute tests and return structured results
analyze_bugsDeep static analysis for bugs and vulnerabilities
review_codeThorough code review with scoring
analyze_coverageCoverage gap analysis
query_knowledgeSearch the knowledge base for patterns
scan_securityOWASP security scanning
check_dependenciesVulnerable dependency detection
design_chaos_experimentDesign chaos engineering scenarios
check_accessibilityWCAG compliance checking
analyze_performancePerformance issue detection
run_mutation_testingMutation testing for test quality

πŸ“Š Dashboard

The Next.js 15 dashboard provides real-time monitoring:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Aurora QA                        ● Live     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚          β”‚  [Runs: 142] [Pass: 94.2%]       β”‚
β”‚  β—ˆ Dash  β”‚  [Bugs: 23]  [Avg: 4.2s]        β”‚
β”‚  β–Ά Runs  β”‚                                   β”‚
β”‚  βš™ Agent β”‚  Agent Status (13 agents)         β”‚
β”‚  πŸͺ² Bugs β”‚  Recent Pipeline Runs             β”‚
β”‚          β”‚  Bug Tracker with Severity         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
pnpm dashboard  # http://localhost:3001

πŸ”₯ Chaos Engineering

Aurora QA includes a full chaos engineering engine:

  • Network Latency β€” Inject artificial delays into fetch calls
  • Network Failure β€” Randomly fail network requests
  • CPU Stress β€” Block the event loop to simulate load
  • Memory Pressure β€” Allocate memory to test GC behavior
  • Random Errors β€” Inject errors at configurable probability
  • Time Skew β€” Offset Date.now() for temporal testing
import { ChaosEngine } from '@aurora-qa/core';

const engine = new ChaosEngine();
engine.injectNetworkLatency(200, 0.5);  // 200ms delay, 50% probability
engine.injectNetworkFailure(0.1);       // 10% failure rate
// ... run your tests ...
engine.reset();

🧠 Intelligence Layer

  • EpisodicMemory β€” Stores and recalls past analysis sessions with time-decay scoring
  • PatternLibrary β€” Learns successful test patterns and matches them to new contexts
  • WorkingMemory β€” Short-term context for current pipeline run
  • ReasoningEngine β€” Chain-of-thought reasoning for complex decisions
  • TestPrioritizer β€” Smart test ordering based on change proximity, failure history, and criticality

βš™οΈ Configuration

# Environment variables
ANTHROPIC_API_KEY=sk-ant-...   # Required
AURORA_MODEL=claude-opus-4-6          # AI model (default: claude-opus-4-6)
DASHBOARD_PORT=3001             # Dashboard port
DASHBOARD_HOST=0.0.0.0         # Dashboard host
CORS_ORIGINS=http://localhost:3000

πŸ“– Examples

ExampleDescription
basic-pipelineFull QA pipeline on utility functions
security-scanSecurity scanning on vulnerable code
chaos-resilienceChaos engineering experiments

🀝 Contributing

See CONTRIBUTING.md for guidelines.

  1. Fork the repository
  2. Create your feature branch: git checkout -b feat/amazing-feature
  3. Commit changes: git commit -m 'feat: add amazing feature'
  4. Push: git push origin feat/amazing-feature
  5. Open a Pull Request

πŸ“„ License

MIT β€” Built with ❀️ by Zijian Ni & Aurora Xiaoluo πŸŽ€

↑↓ navigate openesc close