QualityMax QA MCP
OfficialQualityMax QA MCP
코딩 에이전트가 웹 변경을 완료했다고 선언하기 전에 독립적인 QA 증거를 제공하세요: 페이지를 스캔하고, UI를 검사하고, 집중된 Playwright 재현을 생성한 다음 실행 결과를 검토하세요.
npx -y @qualitymax/qmax-mcp네 가지 로컬 도구는 QualityMax 계정, API 키 또는 호스팅 서비스가 필요 없습니다.
유용한 결과로 시작하기
MCP 지원 에이전트에게 변경한 URL을 스캔하도록 요청하거나 로컬 CLI를 실행하세요:
npx -y @qualitymax/qmax-mcp scan https://example.com --format markdown보고서에는 등급이 매겨진 요약, 발견 사항, 구체적인 재현 단계 및 제안된 수정 사항이 포함됩니다. 하나의 명령으로 체크인된 의존성 없는 픽스처에 대해 네 가지 도구를 모두 실행합니다 — 재현 가능한 데모를 참조하세요.
한 번의 스캔으로 측정하는 것
아홉 가지 검사는 모두 단일 페이지 로드에서 실행됩니다. checks를 전달하여 하위 집합을 실행하세요.
검사 | 보고 내용 |
| JavaScript 오류, 경고 및 실패한 요청 |
| 끊어진 링크 및 리디렉션 링크, 최대 |
| 누락된 대체 텍스트, 레이블 없는 컨트롤, 이름 없는 대화형 요소, 제목 구조 |
| Core Web Vitals: LCP, CLS, TTFB, FCP |
| 제목 및 메타 설명 |
| CSP, HSTS, |
| 누락된 |
| HTTPS 페이지의 HTTP 하위 리소스 및 양식 작업, 브라우저 차단 활성 및 수동으로 구분 |
| 전송 바이트, 요청 수, 렌더링 차단 리소스, 과대 및 압축되지 않은 자산, 타사 비용 |
scan_url은 또한 측정된 vitals와 페이지 무게 분석(가장 느린 요청 포함)을 포함한 metrics 블록을 반환합니다. 두 가지 제한 사항은 숨기지 않고 해당 블록에 명시됩니다: INP는 측정되지 않습니다. 실제 사용자 상호작용이 필요하기 때문이며, vitals는 필드 데이터가 아닌 스캔 머신의 단일 콜드 로드에서 얻습니다. weightBudget을 설정하여 자체 성능 예산에 맞게 스캔하세요.
보고서의 모습
--format markdown은 결과의 형태로 시작하므로 사람이나 에이전트가 단일 발견 사항을 읽기 전에 문제가 어디에 있는지 볼 수 있습니다:
등급: 🔴 F (0 / 100) · 17개 문제 발견
░░░░░░░░░░░░░░░░░░░░░░░░0 / 100
카테고리
문제 수
최악
콘솔 오류
██░░░░░░░░1🔴 높음
접근성
████████░░3🔴 높음
보안 헤더
██████████4🟠 중간
쿠키 및 추적기
█████░░░░░2🟠 중간
페이지 무게
██████████4🟠 중간
각 막대는 해당 실행에서 가장 시끄러운 카테고리에 맞게 조정되므로 가장 긴 막대가 먼저 수정해야 할 항목입니다. weight가 실행되면 측정 섹션에서도 바이트를 귀속시킵니다:
script ████████████████ 18 kB
document ██░░░░░░░░░░░░░░ 3 kB
stylesheet ██░░░░░░░░░░░░░░ 1 kB
image ░░░░░░░░░░░░░░░░ 417 B그런 다음 각 발견 사항에는 심각도, 복사하여 붙여넣을 수 있는 재현 및 제안된 수정 사항이 이어집니다. 동일한 데이터를 구조화된 출력으로 보려면 --format json을 사용하세요.
Related MCP server: ProdPoke MCP Server
에이전트가 할 수 있는 일
도구 | 로컬 기능 | 검토 경계 |
| 콘솔, 네트워크, 링크, 접근성, SEO, 보안 헤더, 쿠키/추적기, 혼합 콘텐츠, 페이지 무게 및 Core Web Vitals 발견 사항에 대해 URL을 스캔합니다. | 아웃바운드 요청을 하고 스크린샷을 쓸 수 있습니다. |
| 페이지 구조와 역할/이름 로케이터 후보를 반환하며, 인증된 페이지의 경우 선택적으로 Playwright storage-state 파일을 사용합니다. | 아웃바운드 요청을 하고 자격 증명이 포함된 명시적으로 선택된 작업 공간 파일을 읽을 수 있습니다. |
| 결정적이고 작업 공간에 포함된 Playwright 재현을 작성합니다. |
|
| 하나의 로컬 Playwright 테스트를 실행하고 구조화된 상태를 반환합니다. | 코드를 실행하고 제어된 아티팩트를 씁니다. 기본적으로 수락된 다이제스트 바인딩 MCP 인간 승인 요청이 필요합니다. |
로컬 서버는 계정이 필요 없습니다. 호스팅 프록시 모드는 계정 기반 QualityMax 기능을 위한 별도의 옵트인 연결입니다. 해당 기능이 필요하지 않으면 추가하지 마세요.
인증된 페이지 검사
로그인된 Playwright 컨텍스트를 browserContext.storageState()로 저장하고 해당 파일을 gitignore로 유지한 다음 활성 작업 공간에 상대적인 경로를 전달하세요:
{
"url": "https://example.com/account",
"storageStatePath": "playwright/.auth/user.json"
}inspect_page는 첫 탐색 전에 상태를 임시 브라우저 컨텍스트에 로드합니다. 경로는 작업 공간 내부의 일반 파일로 확인되어야 합니다. 절대 경로, 트래버설, 심볼릭 링크 이스케이프 및 10MB를 초과하는 파일은 거부됩니다. 상태 경로와 자격 증명 값은 반환되지 않지만 검사된 페이지 구조는 반환되며 자체적으로 개인 계정 데이터를 포함할 수 있습니다. 상태 파일과 도구 결과를 모두 그에 따라 처리하고 검사된 애플리케이션에 필요한 자격 증명만 포함된 전용 상태 파일을 사용하세요. Playwright storage state는 쿠키, 로컬 저장소 및 선택적으로 IndexedDB를 포함합니다. 세션 저장소는 유지하지 않습니다.
코딩 에이전트에 추가하기
클라이언트에 대한 자격 증명 없는 기성 구성과 함께 제공되는 지침 파일을 복사하세요:
Claude Code | Cursor | Codex | VS Code |
에이전트 설정 가이드는 예상되는 승인 표면을 설명하고 일반적인 stdio 구성을 제공합니다. 루트 AGENTS.md는 휴대용 지침입니다: 증거를 수집하고, 해결되지 않은 실패를 보고하고, 서버가 명시적으로 무인 모드를 광고하지 않는 한 파일을 변경하거나 제공된 코드를 실행하기 전에 승인을 요청하세요.
무인 자동화
인간이 MCP 요청에 응답할 수 없는 신뢰할 수 있는 격리된 자동화 환경의 경우 명시적인 --unattended 플래그로 서버를 시작하세요:
{
"mcpServers": {
"qmax": {
"command": "npx",
"args": ["-y", "@qualitymax/qmax-mcp", "--unattended"]
}
}
}Codex TOML의 경우 args = ["-y", "@qualitymax/qmax-mcp", "--unattended"]를 사용하세요. 이 프로세스 시작 옵트인은 해당 서버가 처리하는 모든 run_playwright_test 호출을 승인합니다. 의도적으로 도구 인수나 환경 변수로는 사용할 수 없습니다. 서버는 활성 모드를 에이전트에 광고하고 UNATTENDED 시작 경고를 출력하며 각 실행과 함께 approval.mechanism: "unattended-cli-opt-in-v1"을 반환합니다. 정확한 테스트는 여전히 스냅샷되고 다이제스트 검사되며 기존 작업 공간, 환경, 시간 초과, 취소 및 출력 제어는 계속 활성 상태입니다.
인접한 QualityMax 도구
서버는 연결된 에이전트에게 이 네 가지 도구가 다루지 않는 QA 작업을 다루는 세 가지 별도의 QualityMax 도구에 대해 알려줍니다. 이들은 독립적인 프로그램입니다 — qmax-mcp는 그 중 어떤 것도 설치, 실행, 번들 또는 프록시하지 않으며, 어떤 것도 QualityMax 계정이 필요하지 않습니다. 에이전트는 트리거가 있을 때만 한 번 이름을 지정하고 실행 결정은 사용자와 함께 남기도록 지시받습니다.
도구 | 용도 | 명령어 | 이런 경우에 사용하세요 |
9lives (MIT) |
| 변경 후 이전에 통과하던 Playwright 스펙이 실패하고 그 원인이 드리프트(drift)처럼 보일 때. 어서션(assertion)을 약화하는 대신 로케이터(locator)를 힐링하세요. | |
qualitymax-grader (Apache-2.0) |
| 스펙이 커밋되기 직전이거나, 스위트가 통과 여부가 아닌 테스트 품질로 평가될 때. 모델이나 네트워크 없이 오프라인 A-F 등급을 제공합니다. | |
free-qa-skills (Apache-2.0) | skills.sh에서 설치 | QA 요청이 실행 중인 URL이 아닌 저장소에 관한 것이거나, 에이전트에 MCP 서버가 없을 때. |
로컬 도구들과 함께 하나의 루프를 형성합니다: scan_url이 실패를 찾고, generate_playwright_repro가 스펙을 작성하며, qualitymax-grader가 랜딩 전에 점수를 매기고, run_playwright_test가 서버가 선택한 인증 모드로 실행하며, 9lives는 이후 변경으로 드리프트가 발생했을 때 이를 힐링합니다.
안전 및 정직한 한계
로컬 스캐닝은 네트워크를 사용합니다. 비공개 대상은 기본적으로 거부됩니다.
allowPrivateNetwork: true는 좁은 루프백 대상에 대한 신중한 호출자 측 동의일 뿐입니다.생성된 리프로(repro)는 통제된 작업 공간 디렉터리에 유지됩니다. 테스트 실행은 최소 환경과 통제된 아티팩트 디렉터리를 사용합니다.
기본적으로
run_playwright_test는 실행 전에 MCP 양식 유도(form elicitation)를 사용합니다. 서버는 대상, 부작용, SHA-256 다이제스트를 클라이언트에 표시하고, 클라이언트가 해당 정확한 다이제스트에 대해 승인된 인간 승인을 반환한 경우에만 실행합니다. 양식 유도를 지원하지 않는 클라이언트는 실패-폐쇄(fail closed) 방식이며, 호출자가 제공한 단순 불리언은 증거로 인정되지 않습니다.--unattended는 격리된 자동화를 위한 명시적 프로세스 수준 예외이며, 추가 인간 프롬프트 없이 로컬 사용자의 파일 시스템 및 네트워크 권한으로 제공된 코드를 실행할 수 있게 합니다.
아키텍처
런치 비교는 TestSprite, BrowserStack, mabl, Momentic에 대한 날짜가 기록된 자사 기능 참조를 제공합니다. 이는 순위가 아닌 사실 기반 경계 비교입니다.
호스팅 프록시 모드
로컬 도구는 개방형 로컬 우선 계층입니다. 호스팅 QualityMax는 작업 공간 기반 프로젝트, 테스트 케이스, 스크립트 및 관찰 가능성 워크플로를 위한 명시적 프록시입니다:
QUALITYMAX_API_KEY="<your-api-key>" npx -y @qualitymax/qmax-mcp proxy호스팅 전용 기능이 필요할 때만 프록시를 구성하십시오. 베어러 자격 증명은 고정된 https://app.qualitymax.io/api/mcp/ 엔드포인트로만 전송됩니다. 엔드포인트 재정의 및 리다이렉트는 거부됩니다.
지원 및 책임 있는 공개
민감하지 않은 사용 및 문서 지원은 GitHub Issues를 사용하십시오. 공개 이슈에 취약점을 보고하지 마십시오. 저장소 보안 정책을 따르십시오. 런치 체크리스트에는 공개 발표 전에 필요한 소유자 점검이 포함되어 있습니다.
개발
런타임에는 Node 22.13.0 이상이 필요합니다.
npm install
npx playwright install chromium
npm run check
npm run demonpm run demo는 의존성이 없는 로컬 픽스처를 시작하고, 기본적으로 Markdown 품질 영수증을 출력하며, 생성된 리프로 및 Playwright 아티팩트를 검사용으로 .qmax-mcp/ 아래에 남깁니다. 기계 판독 가능한 영수증에는 npm run demo -- --format json을 사용하십시오.
0.4.0 이후의 후보 작업과 준수해야 할 경계는 로드맵에 기록되어 있습니다. 이는 방향일 뿐 제공 약속이 아닙니다. 출시된 변경 사항은 변경 로그에 나열되어 있습니다.
패키지 및 릴리스 메타데이터
패키지가 등록된 위치, 의도적으로 등록되지 않은 위치, 각 채널이 수락하는 내용은 배포 채널 인벤토리에 기록되어 있습니다.
server.json은 표준 MCP 레지스트리 매니페스트입니다. npm run validate:registry는 아무것도 게시하지 않고 공식 스키마에 대해 이를 검증합니다. npm run version:sync -- <semver>를 사용하여 모든 공개 메타데이터 표면(package.json, package-lock.json, server.json, smithery.yaml, src/metadata.ts)을 함께 이동하십시오. npm run check는 이들이 일치하는지 검증하고 드리프트 시 실패하며, npm publish는 출처 증명 기반 릴리스 워크플로로 제한됩니다. 릴리스 워크플로 및 롤백 절차는 릴리스 런북에 문서화되어 있습니다.
라이선스
MIT — Copyright (c) 2026 QualityMax.
Available Tools
4 toolsgenerate_playwright_reproGenerate Playwright ReproADestructive
Generate a minimal Playwright test from a scan finding, URL, or plain-English goal and write it below the approved workspace directory .qmax-mcp/repros. outputPath must be relative; existing files require overwrite:true after review. No outbound network request is made by generation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| goal | No | ||
| finding | No | ||
| testName | No | ||
| overwrite | No | ||
| outputPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It adds substantial behavior beyond the destructiveHint annotation: it states the exact write location, mandates a relative outputPath, requires overwrite:true to replace existing files, and explicitly discloses that no outbound network request occurs. This safely frames a destructive write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the full message: the first front-loads the primary action and inputs, and the second adds the critical constraints. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description covers the key operational risks: destination, relative path, overwrite behavior, and lack of network access. It does not describe the return value or whether outputPath has a default, but the missing details are minor relative to what is provided for a moderately complex, destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for all six parameters. It does clarify url/goal/finding as alternative input sources and gives explicit constraints for outputPath and overwrite, but it leaves testName and the internal structure of the finding object unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Generate a minimal Playwright test...' and clearly names the output destination. It distinguishes itself from siblings like run_playwright_test by making clear it writes reproductions rather than executing them, and lists the three accepted input forms (scan finding, URL, plain-English goal).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when the goal is to generate a reproduction from a finding, URL, or plain-English goal. It does not explicitly name alternative siblings or state when not to use it, so it stops short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_pageInspect PageARead-only
Read page structure through outbound browser network requests and return headings, forms, buttons, links, inputs, role/name selectors, and data-testid candidates. storageStatePath may name a workspace-relative Playwright storage-state file for authenticated pages; its credentials are loaded into the throwaway browser context and never returned. Because returned page content may be private, authenticated inspection also requires acknowledgePrivateContent:true as explicit caller consent. Does not intentionally modify the target or local filesystem. allowPrivateNetwork:true is limited to deliberate loopback development targets.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| viewport | No | ||
| includeForms | No | ||
| storageStatePath | No | ||
| allowPrivateNetwork | No | ||
| includeAccessibilityTree | No | ||
| acknowledgePrivateContent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, openWorldHint, destructiveHint), the description discloses credential handling ('loaded into the throwaway browser context and never returned'), caller consent expectations, privacy implications, the non-modification guarantee, and the loopback-only private-network restriction. These are meaningful behavioral details not available in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose appears first, followed by safety and consent details in logical order. Every sentence adds needed information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only inspection tool with no output schema, the description covers the essential invocation context, safety semantics, and the categories of returned elements. It does not describe the result envelope, limits, failure behavior, or the full meaning of every toggle, but the operative constraints are well established.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden for parameters. It adds real meaning for storageStatePath, acknowledgePrivateContent, and allowPrivateNetwork. The remaining parameters (url, viewport, includeForms, includeAccessibilityTree) are only conveyed by their names and type constraints, so the description does not fully compensate for the absence of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific action and resource: 'Read page structure ... and return headings, forms, buttons, links, inputs, role/name selectors, and data-testid candidates.' This clearly identifies what the tool produces. However, it does not explicitly differentiate inspect_page from sibling tools like scan_url, so it falls short of the top rubric point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides actionable context for the main conditional parameters: storageStatePath is for authenticated pages, acknowledgePrivateContent is required as consent because content may be private, and allowPrivateNetwork is limited to deliberate loopback development. It does not name alternatives or specify when not to use inspect_page, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_playwright_testRun Playwright TestADestructive
Execute supplied local Playwright code or a local test file. This is a code-execution and artifact-writing boundary: qmax-mcp first requires an MCP human-approval elicitation bound to the exact test digest. The runner may make outbound network requests requested by the test.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| headed | No | ||
| baseUrl | No | ||
| browser | No | ||
| testPath | No | ||
| timeoutMs | No | ||
| allowedEnv | No | ||
| wallClockTimeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive, open-world, and non-idempotent. The description adds valuable beyond-annotation context: an MCP human-approval step tied to the exact test digest, artifact-writing behavior, and the possibility of outbound network requests. This meaningfully clarifies the risk profile without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each pulling weight: the first states the action, the second flags the approval boundary, and the third discloses network behavior. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity tool with 8 parameters, one nested object, no output schema, and zero parameter descriptions. The description covers execution intent and risk but omits parameter semantics and any indication of return values or artifacts, leaving important gaps for an agent deciding how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only loosely maps to code and testPath via 'supplied local Playwright code or a local test file.' The other six parameters — headed, baseUrl, browser, timeoutMs, allowedEnv, and wallClockTimeoutMs — receive no elaboration, leaving the agent without semantic guidance for most inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Execute supplied local Playwright code or a local test file.' It further labels the tool as a 'code-execution and artifact-writing boundary,' which clearly separates it from read-oriented siblings like scan_url and inspect_page and from generation-focused generate_playwright_repro.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for running user-supplied Playwright code or test files, but it never states when to prefer this over the sibling tools or when not to use it. No alternatives or exclusions are mentioned, so the agent must infer selection criteria from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_urlScan URLA
Inspect a URL with outbound browser and HTTP network requests for console errors, links, accessibility, Core Web Vitals, SEO, security headers, cookie and tracker privacy, mixed content, and page weight. storageStatePath may name a workspace-relative Playwright storage-state file so the checks can run on an authenticated page; its credentials are loaded into the throwaway browser context and never returned. Because returned findings may reflect private content, authenticated scans also require acknowledgePrivateContent:true as explicit caller consent. This may write a local screenshot artifact when screenshot:true. Set format:"markdown" for a shareable graded report, or format:"issue" to render each finding as a self-contained ticket block (summary, steps, expected, actual, environment) ready to paste into a tracker; minSeverity filters that export. baseline takes a previous scan result, or a workspace-relative path to one, and adds a delta reporting which findings are new, fixed, and unchanged — use it to answer whether a change introduced anything rather than comparing two results by eye. allowPrivateNetwork:true is limited to deliberate loopback development targets.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| checks | No | ||
| format | No | ||
| baseline | No | ||
| maxLinks | No | ||
| viewport | No | ||
| screenshot | No | ||
| minSeverity | No | ||
| weightBudget | No | ||
| storageStatePath | No | ||
| allowPrivateNetwork | No | ||
| acknowledgePrivateContent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects and sensitive behavior beyond the annotations: outbound network activity, auth credentials loaded into a throwaway context and never returned, explicit consent requirement, possible screenshot artifact, and loopback restriction on allowPrivateNetwork. Consistent with readOnlyHint=false, openWorldHint=true, and idempotentHint=false; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded and information-dense; every sentence adds operational value for a 12-parameter tool. The length is justified by the tool's complexity, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers authentication, privacy, output formats, baselines, and side effects, which is strong for a tool with no output schema. It is not flawless: three parameters are left unexplained and the default/JSON return shape is not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by explaining format values, baseline behavior, minSeverity, storageStatePath, acknowledgePrivateContent, allowPrivateNetwork, and screenshot. However, maxLinks, viewport, and weightBudget have no explanatory text in either the schema or description, leaving a small but real gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it inspects a URL via outbound browser and HTTP requests, and enumerates the exact categories of checks. This clearly identifies it as a scanner rather than the sibling playwright repro/page-inspection tools, so an agent can select it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete context for non-obvious options: markdown for shareable reports, issue for tracker tickets, baseline for change-introduced findings, and acknowledgePrivateContent for authenticated scans. It does not explicitly contrast scan_url with sibling tools or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.9.0- Changed
inspect_page2 fields changed- added
Input schema / properties / acknowledgePrivateContentAdded value: +{ + "const": true, + "type": "boolean" +} - added
Input schema / properties / storageStatePathAdded value: +{ + "minLength": 1, + "type": "string" +}
- Changed
run_playwright_test2 fields changed- added
Input schema / properties / allowedEnv / additionalProperties / maxLengthAdded value: +8192 - added
Input schema / properties / allowedEnv / propertyNames / maxLengthAdded value: +128
- Changed
scan_url6 fields changed- added
Input schema / properties / acknowledgePrivateContentAdded value: +{ + "const": true, + "type": "boolean" +} - added
Input schema / properties / baselineAdded value: +{ + "anyOf": [ + { + "minLength": 1, + "type": "string" + }, + { + "additionalProperties": {}, + "properties": {}, + "type": "object" + } + ] +} - added
Input schema / properties / checks / items / enumAdded value: +[ + "console", + "links", + "accessibility", + "performance", + "seo", + "security_headers", + "cookies", + "mixed_content", + "weight" +] - changed
Input schema / properties / format / enumPrevious value: -[ - "json", - "markdown" -]New value: +[ + "json", + "markdown", + "issue" +] - added
Input schema / properties / minSeverityAdded value: +{ + "enum": [ + "critical", + "high", + "medium", + "low", + "info" + ], + "type": "string" +} - added
Input schema / properties / storageStatePathAdded value: +{ + "minLength": 1, + "type": "string" +}
4 tool updates
v0.4.2- First observed
generate_playwright_repro - First observed
inspect_page - First observed
run_playwright_test - First observed
scan_url
TDQS
Scored across 4 tools
scan_url and inspect_page both involve browser access but are clearly differentiated: scan_url is a full quality audit with findings and reports, while inspect_page returns structural selectors and page elements. generate_playwright_repro creates tests and run_playwright_test executes them, so overall tool boundaries are clear, though one could initially confuse scan_url with inspect_page.
All tools consistently use a verb_object snake_case pattern: scan_url, inspect_page, generate_playwright_repro, run_playwright_test. There are no vague generic verbs or mixed conventions, making the intent of each tool predictable from its name.
Four tools is well within the ideal 3-15 range and each tool represents a distinct high-level QA workflow: auditing a URL, inspecting page structure, generating a reproduction, and executing a test. The count feels appropriately scoped rather than thin or bloated.
The core QA workflow is covered: scan a URL for issues, inspect page structure, generate a Playwright reproduction, and run Playwright tests. Minor gaps exist such as managing or listing generated repro artifacts, but these do not create dead ends for the server's apparent purpose.
Maintenance
Related MCP Connectors
Read-only web QA agent: scans a site in a real browser and returns evidence-backed findings
1Browser-based QA for AI-built software. Test pages with real browsers via agents.
Browser-backed QA with evidence and fix-ready reports for coding agents.
Captured web interfaces, screenshots, flows and structured evidence for AI coding agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to inspect, debug, and test web pages using Playwright. Provides comprehensive DOM inspection, visibility debugging, layout validation, and element finding capabilities in real browser environments.34101 npm5MIT

ProdPoke MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables AI to perform real-browser QA testing on websites via Playwright, finding bugs, accessibility, SEO, and performance issues through natural language conversations.1MIT- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to autonomously interact with and test web applications in a real browser, providing DOM/Accessibility tree extraction, runtime telemetry, screenshot capture, and Markdown test reports.37 npm1MIT
- AlicenseAqualityBmaintenanceEnables AI coding agents to see, measure, and verify web pages through a real Chrome browser, including screenshots, responsive layout and accessibility audits, pixel diffing against baselines, secure logins, and deployed-fix verification.271MIT