ADR-014: Use Playwright MCP + Vizro MCP for autonomous testing¶
Note: This ADR was originally numbered ADR-004 but was renumbered to ADR-014 during the 2026-01-28 namespace consolidation to resolve collision with ADR-004-finops-vizro-integration.md
Status: Approved Date: 2026-01-28 Deciders: @cloud-architect, @product-owner, HITL/Manager
Context¶
Cloud-Infrastructure project has 9 MCP configuration files (.mcp-*.json):
1. .mcp-aws.json (12 servers: Organizations, Cost Explorer, Security Hub, etc.)
2. .mcp-azure.json (8 servers: Cost Management, Policy, Security Center, etc.)
3. .mcp-finops.json (5 servers: Cost aggregation, Infracost, Kubecost)
4. .mcp-terraform.json (2 servers: HashiCorp Registry, AWS Labs)
5. .mcp-testing.json (2 servers: Playwright, Markdown Lint)
6. .mcp-github.json (1 server: PRs, Issues, Workflows)
7. .mcp-mkdocs.json (1 server: Documentation Build/Serve)
8. .mcp-atlassian.json (2 servers: JIRA, Confluence - Pilot Q2-Q3 2026)
9. .mcp-vizro.json (1 server: Vizro MCP - Dashboard generation)
Question: Which MCP servers are needed for ITSM demo overhaul?
Decision¶
Use 2 MCP servers from existing configurations:
1. Playwright MCP (Primary)¶
Config file: .mcp-testing.json
Server: playwright
Command: npx -y @playwright/mcp-server@latest
Purpose: E2E testing with autonomous screenshot capture
Capabilities:
- navigate({url: "http://localhost:8053", tabId: TAB_ID})
- find({query: "Open P1 & P2 KPI", tabId: TAB_ID})
- computer({action: "left_click", ref: REF_ID, tabId: TAB_ID})
- computer({action: "screenshot", tabId: TAB_ID})
- read_console_messages({tabId: TAB_ID, onlyErrors: true})
Usage pattern: Aligned with itsm-demo-transcripts.md autonomous execution sequence (12 steps, 2:40 target)
Rate limit: 200 req/min (sufficient for E2E test suite)
2. Vizro MCP (Secondary)¶
Config file: .mcp-vizro.json
Server: vizro-mcp
Command: uvx vizro-mcp
Purpose: Dashboard generation validation and chart pattern validation
Capabilities:
- create_dashboard (not used - dashboard already exists)
- create_vizro_chart (validate chart configurations)
- validate_visual_vocabulary (ensure McKinsey standards compliance)
Usage pattern: Validate KPI card styling matches McKinsey Visual Vocabulary
Rate limit: 200 req/min
References: - Visual Vocabulary - Prompt templates
Not Needed (Explicitly Rejected)¶
| MCP Server | Reason for Exclusion |
|---|---|
.mcp-aws.json |
No cloud deployment in this phase |
.mcp-azure.json |
No cloud deployment in this phase |
.mcp-finops.json |
No cost tracking needed (local docker) |
.mcp-terraform.json |
No infrastructure provisioning |
.mcp-github.json |
Manual git workflow (HITL commits) |
.mcp-mkdocs.json |
ITSM demo is Vizro, not MkDocs |
.mcp-atlassian.json |
Pilot phase, not production-ready |
Consequences¶
Positive¶
- Local-first: No cloud credentials required (aligns with ADLC Principle IV)
- Autonomous testing: Playwright MCP enables fully automated E2E testing
- Cost-effective: $0 operational cost (no API charges)
- Compliance: Screenshot artifacts meet audit trail requirements
- McKinsey alignment: Vizro MCP validates Visual Vocabulary compliance
Negative¶
- Node.js dependency: Playwright MCP requires Node.js runtime (~100MB)
- Browser download: First run downloads Chromium (~200MB)
- Limited AI assistance: Vizro MCP is read-only (no dashboard generation capabilities used)
Risks¶
- Risk 1 (Playwright MCP network failure during npx install): Probability LOW, Impact MEDIUM
-
Mitigation: Pre-install with
npm install -g @playwright/mcp-serverin CI/CD -
Risk 2 (Vizro MCP version mismatch with local Vizro 0.4.0): Probability LOW, Impact LOW
- Mitigation: Vizro MCP uses Vizro documentation (version-agnostic patterns)
Alternatives Considered¶
- Use AWS MCP for CloudWatch screenshot storage: Rejected because local storage is sufficient (no cloud needed)
- Use GitHub MCP for automatic PR creation: Rejected because HITL approval required per ADLC Principle I
- Use Selenium WebDriver without MCP: Rejected because Playwright MCP provides better integration with Claude agent workflow
- Manual testing without MCP: Rejected because violates ADLC autonomous testing requirement
References¶
- Playwright MCP server
- Vizro MCP documentation
- MCP rate limiting
- ITSM demo transcript (autonomous execution pattern)
Evidence¶
- MCP configurations:
.mcp-testing.json(Playwright server configured, rate limit: 200 req/min).mcp-vizro.json(Vizro MCP server configured, rate limit: 200 req/min)- Test integration:
tests/e2e/test_itsm_responsive.spec.py(uses Playwright MCP commands) - Rate limit validation: 200 req/min sufficient for 150 test operations (12 steps × 5 zoom levels × 2.5 assertion checks)