Keyless local MCP server for QA: standards retrieval, effort estimation, doc review, test analysis.
An open-source AI agent that acts as a senior QA Architect β automatically generating a Test Strategy, Risk Register, Effort Estimation Report, and Test Plan from a simple project description, plus deterministic QA Document Quality Review, Test Results Analysis, and QA Maturity Assessment for evaluating what already exists. Also available as a local MCP server so Claude Code, Claude Desktop, and other MCP clients can ground their own QA work in the same standards and numbers.
π Live demo: quality-ai-consultant.streamlit.app
π MCP server:
uvx qai-consultant-mcpβ no API keys, no Pinecone. See MCP Server below or the package on PyPI.
π€ Built with Claude Code by Anthropic.
Landing page

MCP panel in the sidebar

Project Discovery dialogue (Web Application template applied)

Executive Readout + generation status

Risk Register (Risk Ledger table)

Effort Estimation

Test Strategy

Test Plan

QA Document Quality Review

QA Maturity Assessment

π quality-ai-consultant.streamlit.app
# 1. Clone and install
git clone https://github.com/gvasile29/qai-consultant.git
cd qai-consultant
pip install -r requirements.txt
# 2. Set up API keys
cp .env.example .env
# Edit .env and fill in the 4 keys (see Prerequisites below)
# 3. Build the knowledge base (one-time, pushes to Pinecone)
python src/ingest.py
# 4. Run
python src/cli.py # Terminal UI
streamlit run src/app.py # Web UI β http://localhost:8501
π Full installation guide: INSTALL.md
Creating a Test Strategy from scratch is time-consuming and requires deep QA expertise. Most teams either skip it, do it superficially, or spend days researching methodologies.
QAI Consultant eliminates this bottleneck by combining established QA methodologies, industry standards (ISTQB, OWASP, ISO 26262, A-SPICE), and expert knowledge into an AI agent that thinks like a seasoned QA Architect.
From a single 11-question dialogue, QAI Consultant automatically generates four documents:
| Document | What it contains |
|---|---|
| β οΈ Risk Register | Risk matrix, likelihood/impact analysis, mitigations per risk |
| π Effort Estimation Report | PERT-based breakdown, team capacity analysis, confidence score |
| π Test Strategy | ISTQB-aligned strategy tailored to your stack, methodology, and compliance |
| π Test Plan | IEEE 829-aligned plan with entry/exit criteria, schedule, and AI tool oversight |
Above the four tabs, an Executive Readout summarizes overall risk, the QA effort range, team capacity, confidence, and the top 3 risks β computed deterministically from the Risk Register and Effort Estimation, with no extra LLM call.
All outputs are saved as Markdown files and available for PDF download.
Evaluating what already exists (deterministic, no LLM needed for the scores):
| Mode | What it does |
|---|---|
| π QA Document Quality Review | Scores an existing Test Plan / Strategy / test case list 0β100 across six ISTQB/IEEE 829 dimensions, with findings and knowledge-base citations |
| π§ͺ Test Results Analysis | Flaky, ever-failing, never-run and slowest tests plus failure clustering from JUnit XML/CSV β optionally used to ground the Risk Register in real execution data |
| π QA Maturity Assessment | Indicative TMMi level (1β3) across 10 process areas from a free-text description, plus an EU AI Act Articles 9β15 readiness check for AI/ML systems |
QAI Consultant's recommendations are grounded in real QA standards and methodologies:
QAI Consultant runs on cloud APIs β no local GPU required.
You need four API keys in a .env file (all have free tiers):
| Key | Where to get it |
|---|---|
MISTRAL_API_KEY | console.mistral.ai β API Keys (the default model, ministral-14b-2512, works on Mistral's free plan) |
OPENROUTER_API_KEY | openrouter.ai/keys (fallback; uses free models only) |
PINECONE_API_KEY | pinecone.io β API Keys |
PINECONE_INDEX_NAME | Name of your Pinecone index (e.g. qai-consultant, dimensions: 384, metric: cosine) |
cp .env.example .env
# Edit .env and fill in all four values
You describe your project (11 questions)
β
QAI retrieves relevant knowledge from Pinecone (parallel RAG, 3 threads)
β
QAI analyzes risks from your context β Risk Register (Mistral API)
β
QAI estimates effort using PERT + industry benchmarks β Effort Report
β
QAI summarizes risk, effort, capacity and top risks β Executive Readout (no LLM)
β
QAI generates a Test Strategy backed by QA standards β Test Strategy (Mistral API)
β
QAI generates an IEEE 829-aligned Test Plan β Test Plan (Mistral API)
β
Four documents ready for Markdown + PDF download
LLM calls use the Mistral API (ministral-14b-2512) as the primary provider, with OpenRouter free models (Nemotron 3 Super β GLM 5.2) as automatic fallback.
streamlit run src/app.py
Or use the live hosted version: quality-ai-consultant.streamlit.app
Besides the Test Strategy flow, the landing page and sidebar offer Review an existing QA document and Assess QA Maturity; test execution results can be attached on the review screen before generating.
python src/cli.py # interactive Test Strategy flow
python src/cli.py --results run1.xml run2.xml # same flow, grounded in JUnit XML/CSV results
python src/cli.py --review path/to/test_plan.md # QA Document Quality Review
python src/cli.py --maturity path/to/process.txt # QA Maturity Assessment
Listed on the official MCP registry (io.github.gvasile29/qai-consultant-mcp), Glama, and Awesome MCP Servers.
QAI Consultant is also available as a local, fully keyless MCP server β
qai-consultant-mcp. No Pinecone, no Mistral/OpenRouter API keys: it runs a
local embedding index over the knowledge base's Markdown documents (the ISTQB and
OWASP PDFs are not bundled, for licensing reasons) and exposes deterministic QA
effort estimation, document review, test-results analysis and maturity
assessment, so your own AI assistant can ground its QA work directly, with no
separate LLM call. It runs locally over stdio (requires uv);
a hosted version connectable from claude.ai is on the roadmap (v4.0).

uvx qai-consultant-mcp
Claude Code:
claude mcp add qai-consultant -- uvx qai-consultant-mcp
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"qai-consultant": {
"command": "uvx",
"args": ["qai-consultant-mcp"]
}
}
}
Tools:
| Tool | What it does |
|---|---|
retrieve_qa_knowledge | Grounding chunks from the KB (standards summaries β OWASP Top 10, IEEE 829, ISO/IEC 25010, ISO 26262, A-SPICE, EU AI Act β plus methodologies, audit/evaluation guides, and case studies), filterable by category |
list_kb_sources | Every document in the KB, grouped by category |
estimate_qa_effort | Deterministic PERT-based effort estimate (no LLM narrative β you write your own from the numbers) |
review_qa_document | Deterministic 0β100 quality score for an existing Test Plan/Strategy/test case list across six ISTQB/IEEE-829 dimensions, with findings + KB citations |
analyze_test_results | Deterministic health metrics from JUnit XML/CSV test execution data β flaky tests, ever-failing tests, slowest tests, failure clustering |
assess_qa_maturity | Deterministic indicative TMMi process-maturity level (1-3, never a certified 4-5) from a free-text description, plus a conditional EU AI Act Articles 9-15 readiness score when the input signals an AI/ML system |
Prompts: qa_project_interview (the same 11-question intake this app uses), risk_register_structure, test_strategy_structure, test_plan_structure β each grounds the client's generation in retrieve_qa_knowledge with [Source N] citations.
Privacy: usage telemetry is off by default. Set QAI_TELEMETRY=1 to opt in; even then, only tool name/success/duration/category and an anonymous install ID are sent β never your query text or project details.
After each generation, QAI asks: "Was this strategy useful?"
knowledge_base/generated_strategies/ and included in the next re-ingestionThis creates a feedback loop where QAI learns from validated real-world outputs over time.
evaluation_audit/ pillar: process/test maturity models, audit methodology, security/compliance audit, real public failure case studiesqai-consultant-mcp (standards-grounded retrieval + deterministic effort estimation), in-app announcement, and machine-readable AI-generated marking (EU AI Act Article 50(2))--review, --results), and the MCP server (review_qa_document, analyze_test_results)mcp-name marker to README_MCP.md (PyPI long description) β a prerequisite for listing qai-consultant-mcp in the official Anthropic MCP registry; no functional changeqai-consultant-mcp failed to start (ModuleNotFoundError: mcp.server.fastmcp) after the upstream mcp SDK's breaking 2.0.0 release removed the FastMCP module the server depends on; mcp is now pinned to >=1.8.0,<2.0.0qai-consultant-mcp could fail to attach in Claude Desktop on a cold cache (a client-side handshake timeout, since the server used to fully embed the whole knowledge base before responding to initialize); the full index build is now lazy, deferred until the first real requestqai-consultant-mcp could intermittently fail to attach in Claude Desktop because 4 of its 6 runtime dependencies had loose version bounds, letting uv re-resolve and reinstall on any unrelated upstream release; all dependencies are now exact-pinnedqai-consultant-mcp could again fail to attach in Claude Desktop, this time from an unpinned transitive dependency (scipy, via scikit-learn) picking up a fresh release mid-cache-miss; the entire resolved dependency tree (~99 entries) is now exact-pinned, not just the 6 direct importsassess_qa_maturity) β deterministic TMMi process-maturity signal (10 process areas, indicative level 1-3) plus a conditional EU AI Act Articles 9-15 readiness score for AI/ML projects; available in the web app ("π Assess QA Maturity"), CLI (--maturity), and the MCP server (assess_qa_maturity)torch==2.13.0+cpu unresolvable from plain PyPI) β reverted to a plain torch==2.13.0 pin. This is the first working PyPI publish of the assess_qa_maturity MCP tool, since v3.5.0's own publish step was never completed and v3.5.1 was brokenqai-consultant-mcp's local index switched from sentence-transformers/torch to fastembed (ONNX Runtime) for embeddings β same retrieval quality (evals/local_index_parity.py: recall@5=0.91, MRR=0.86, unchanged), ~3x faster cold import, and a much smaller dependency list. Removed the weekly dependency-drift-canary workflow, no longer justified at the smaller scale. See CHANGELOG.md for details.CHANGELOG.md.CHANGELOG.md.models fallback chain), so the fallback no longer accrues charges; an empty AI response now shows a clear error instead of an empty document; the in-app AI notice now warns that submitted text may be logged and used for training by the LLM providers. See CHANGELOG.md.QAI Consultant is built by the QA community, for the QA community.
Contributions are welcome:
knowledge_base/knowledge_base/expert_knowledge/See CONTRIBUTING.md for detailed guidelines.
| Problem | Solution |
|---|---|
| "Missing required secret: 'MISTRAL_API_KEY'" | Add your key to .env or Streamlit Cloud secrets |
| "Missing required secret: 'PINECONE_API_KEY'" | Add your Pinecone key to .env |
| "Knowledge base is empty" | Run python src/ingest.py to push documents to Pinecone |
| "The AI providers are temporarily unavailable" | Both Mistral and the OpenRouter free models failed β retry in a few minutes; logs/qai_consultant.log has the underlying error |
Mistral returns 429 Rate limit exceeded (code 1300) at almost no usage | On Mistral's free plan, Mistral Small/Medium are rejected while the Ministral models are served β keep the default ministral-14b-2512, or enable pay-as-you-go before switching MISTRAL_MODEL |
π Full troubleshooting guide: INSTALL.md
Source-derived launch command. Check the maintainerβs required arguments and credentials before running:
uvx qai-consultant-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-gvasile29-qai-consultant-mcp": {
"command": "uvx",
"args": [
"qai-consultant-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the clientβs tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceqai-consultant-mcppypiio.github.gvasile29/qai-consultant-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.