Skip to content

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-server in 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

  1. Use AWS MCP for CloudWatch screenshot storage: Rejected because local storage is sufficient (no cloud needed)
  2. Use GitHub MCP for automatic PR creation: Rejected because HITL approval required per ADLC Principle I
  3. Use Selenium WebDriver without MCP: Rejected because Playwright MCP provides better integration with Claude agent workflow
  4. Manual testing without MCP: Rejected because violates ADLC autonomous testing requirement

References

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)