Skip to main content
Glama

chrome-debug-mcp

License: MIT Rust chrome-debug-mcp MCP server

chrome-debug-mcp는 AI 에이전트와 대규모 언어 모델(LLM)이 **Chrome DevTools Protocol (CDP)**을 통해 Chromium 기반 브라우저를 네이티브로 제어, 자동화, 디버깅할 수 있게 해주는 비동기 Rust 기반 Model Context Protocol (MCP) 서버입니다.

내부적으로 cdp-browser-lite를 사용하며(이 크레이트는 cdp-lite 클라이언트를 다시 내보냅니다), 이 MCP 서버는 무거운 추상화를 피하고 브라우저에 직접 연결하여 편집기나 채팅 인터페이스에서 바로 라이브 디버깅 세션을 가능하게 합니다. v0.2.0부터는 Chrome 프로세스 수명 주기를 자동으로 관리할 수도 있습니다.


✨ 기능

이 서버는 CDP 도메인 및 네이티브 프로세스 관리별로 분류된 도구 모음을 기본적으로 구현합니다:

🛡️ 개인 정보 보호 및 보안

  • 격리된 프로필 (기본값): MCP 서버가 Chrome을 실행할 때마다 시스템 임시 디렉터리에 새롭고 임시적인 사용자 프로필을 생성합니다. 이 프로필은 기본 브라우저 프로필과 완전히 독립적이며, 브라우저가 중지되면 제거됩니다 — 한 세션의 쿠키, 기록, 저장된 비밀번호 또는 세션 데이터가 다음 세션으로 절대 넘어가지 않습니다.

  • 시크릿 모드와 유사한 경험: 기본적으로 개인 계정의 쿠키, 기록, 저장된 비밀번호 또는 세션 데이터가 관리되는 인스턴스와 공유되지 않습니다.

  • 신원 보호: LLM이 브라우저를 완전히 제어하더라도, 명시적으로 승인되지 않는 한 로그인된 세션(예: Google, GitHub, 은행)에 접근하거나 사용자를 사칭할 수 없습니다.

  • 사용자 프로필 모드: --user-profile 플래그를 사용하여 기존 시스템 프로필로 Chrome을 실행합니다. 이는 매 사이트에서 다시 인증하지 않고 LLM이 활성 세션(쿠키, 저장된 로그인 등) 내에서 작업하도록 하려는 경우 유용합니다. LLM이 개인 브라우저 데이터에 접근할 수 있게 되므로 주의해서 사용하세요.

    • ⚠️ --user-profile 참고 사항: Chrome의 단일 인스턴스(singleton) 아키텍처로 인해 브라우저가 이미 열려 있으면 요청을 위임하고 디버깅 포트를 열지 못합니다. MCP를 시작하기 전에 실행 중인 모든 Chrome 인스턴스를 종료하거나, --remote-debugging-port=9222 플래그로 브라우저를 수동으로 시작해야 합니다.

🚀 Chrome 인스턴스 및 탭 관리

  • 다중 인스턴스 지원: 동적 포트에서 각각 자체 격리된 프로필 디렉터리를 가진 여러 개의 동시적이고 독립적인 Chrome 프로세스를 생성하고 제어합니다. --max-instances 플래그로 인스턴스 수를 제한할 수 있습니다.

  • 인스턴스 레지스트리 도구: open_instance, list_instances, close_instance를 사용하여 추가 인스턴스를 생성, 감사, 정리할 수 있습니다. 모든 기존 도구는 선택적 instance_id를 받아 대상 브라우저로 명령을 라우팅합니다.

  • 다중 탭 지원 (신규): 단일 WebSocket 연결을 통해 이벤트 스트림과 명령을 다중화하여 하나의 Chrome 인스턴스 내에서 여러 개의 동시 탭을 제어합니다.

    • 자동 검색: 대상 페이지에서 열린 팝업(예: window.open())은 자동으로 검색, 연결되어 세션의 탭 레지스트리에 등록됩니다.

    • 캐시 격리: 상태 캐시(콘솔 메시지, 네트워크 트래픽, 디버거가 파싱한 스크립트, WebMCP 도구)는 탭별로 엄격히 격리되어 이벤트가 다른 대상으로 새어 나가지 않습니다.

  • 탭 레지스트리 도구 (신규):

    • open_tab — 선택적으로 사용자 지정 레이블과 대상 URL로 새 탭을 엽니다. 다른 도구에서 재사용할 수 있는 tab_id가 포함된 JSON을 반환합니다.

    • list_tabs — 인스턴스의 열려 있고 등록된 모든 탭을 JSON(tab_id, label, target_id, url)과 현재 활성 탭으로 나열합니다. 등록된 탭이 없으면 도구는 인스턴스의 기본 단일 탭 연결로 대체됩니다.

    • close_tab — ID로 특정 탭을 닫고 해당 캐시 상태를 정리합니다. 새 활성 탭을 반환합니다.

    • switch_tab — 도구 호출에서 tab_id가 생략될 때 사용되는 기본 활성 탭을 변경하고, 선택적으로 탭을 전경으로 가져옵니다.

  • LLM 친화적 인터페이스: 수명 주기 도구(open_instance, close_instance, open_tab, list_tabs, switch_tab, close_tab)는 구조화된 JSON을 반환하므로 에이전트가 정규식으로 텍스트를 파싱하지 않고도 호출을 연결할 수 있으며, 설명은 표준 MCP 템플릿(부작용, 전제 조건, 반환 값, 대안)을 따르므로 모델이 이를 올바르게 순위를 매깁니다.

  • 대상 라우팅 (신규): 모든 탭 범위 도구는 선택적 tab_id 매개변수를 받아 특정 탭에 명령을 대상으로 지정하고 캐시 상태를 검색할 수 있습니다. 생략하면 기본 활성 탭이 대상이 됩니다.

  • 격리된 프로필: 기본적으로 새롭고 임시적인 프로필로 Chrome을 실행하여 기본 브라우저와 쿠키, 비밀번호 또는 세션 데이터를 공유하지 않도록 보장합니다.

  • 사용자 프로필 지원: 선택적으로 --user-profile을 사용하여 기존 브라우저 세션과 쿠키를 활용할 수 있습니다.

  • 동적 포트 관리: 기본 포트(9222)가 사용 중인지 자동으로 감지합니다.

    • 포트가 CDP를 노출하는 Chrome 인스턴스(사용자가 시작했거나 다른 관리되는 chrome-debug-mcp 인스턴스)에 의해 점유된 경우 새 인스턴스를 생성하는 대신 자동으로 연결됩니다.

    • 관리되는 프로필은 임시적이므로 포트별 영구 상태가 없습니다. 포트를 공유하는 두 번째 서버는 단순히 동일한 브라우저를 공유합니다(그리고 연결된 인스턴스를 절대 종료하지 않습니다).

  • Docker 및 헤드리스 지원: Docker 환경과 완벽하게 호환됩니다. 컨테이너 내부에서 GUI 없이 Chrome을 실행하려면 --headless 플래그를 사용하세요.

  • 원격/호스트 연결: --host 인수를 사용하여 다른 머신이나 호스트 머신에서 실행 중인 Chrome 인스턴스에 연결합니다(예: 컨테이너 내부에서 --host host.docker.internal).

  • 선택적 자동화 인포바: --enable-automation 플래그를 추가하여 기본 "Chrome is being controlled by automated test software" 메시지를 명시적으로 표시할 수 있습니다. 기본적으로는 더 은밀한 상호작용을 위해 비활성화되어 있습니다.

  • 프록시 지원: restart_chrome는 이제 선택적 proxy_server 인수를 받아 프록시를 통해 트래픽을 라우팅하는 Chrome을 실행할 수 있습니다.

  • 자동 실행: 지정된 포트에서 Chrome이 실행 중인지 자동으로 감지합니다. 실행 중이 아니면 필요한 플래그로 새 인스턴스를 생성합니다.

  • restart_chrome: 관리되는 Chrome 인스턴스를 다시 시작합니다.

  • 기능 프리셋: restart_chrome는 선택적 features 배열을 받아 클라이언트가 재시작 시 추가 브라우저 기능을 선택할 수 있게 합니다. 이는 폐쇄된 집합입니다 — 도구가 명령줄 주입 지점이 되지 않도록 임의의 Chrome 플래그는 의도적으로 허용되지 않습니다:

    • WEB_MCP — 브라우저에 도구를 노출하는 사이트를 위해 실험적 WebMCP 표면(--enable-features=WebMCPTesting, --categoryExperimentalWebmcp=true)을 활성화합니다.

    • WEBGL_SOFTWARE — GPU가 없는 환경(예: 컨테이너)을 위해 SwiftShader 소프트웨어 WebGL(--use-gl=angle, --use-angle=swiftshader, --enable-unsafe-swiftshader)을 강제합니다.

    프리셋은 해당 호출로 시작된 인스턴스에 적용됩니다. 나중에 features를 생략한 restart_chrome은 proxy_server가 동작하는 방식과 동일하게 프리셋을 지웁니다.

  • stop_chrome: 관리되는 Chrome 인스턴스를 정상적으로 종료합니다(SIGTERM/SIGINT, 실패 시 SIGKILL 폴백).

  • 견고한 수명 주기: 매달린(dangling) Chrome 프로세스 문제를 수정했습니다. 임시 프로필은 중지 시 삭제되며, cdp-browser-lite는 갑작스러운 종료로 남겨진 고아 프로필 디렉터리를 정리합니다. "Chrome didn't shut down correctly" 복원 풍선은 실행 플래그와 프로필 패칭을 통해 표시되지 않습니다.

  • ⚠️ 동작 변경: 관리되는 Chrome 인스턴스는 이제 MCP 서버 프로세스가 종료될 때(크래시 포함) 종료됩니다. 이전에는 관리되는 Chrome이 서버 크래시 후에도 살아남아 재시작 시 다시 연결되었지만, 이제는 종료됩니다. 연결된(사용자가 시작한) Chrome 인스턴스는 절대 종료되지 않습니다.

🔐 프록시 인증

  • enable_proxy_auth: Fetch CDP 도메인에 연결하여 사용자가 제공한 자격 증명(사용자 이름 및 비밀번호)을 공급함으로써 프록시 인증 요청을 자동으로 처리합니다.

  • 견고성 개선: 이제 느린 리지덴셜(residential) 프록시를 위한 30초 타임아웃이 있으며, 기본적으로 Document 요청만 가로채어 백그라운드 요청이 중단되지 않도록 합니다.

  • 사전 워밍업: 기본 탐색 작업 전에 prewarm_url(기본값: http://api.ipify.org?format=json)로 자동 이동하여 프록시 터널을 안정적으로 설정합니다. 선택적으로 특정 resource_type으로 가로채기를 제한할 수 있습니다.

🖱️ 사용자 입력

  • click_element: CSS 선택자를 사용하여 특정 요소에서 네이티브 마우스 클릭을 시뮬레이션합니다. 요소의 중심 좌표를 계산하고 CDP 마우스 이벤트를 직접 전달합니다.

  • fill_input: DOM의 입력 필드를 지정된 텍스트로 채웁니다. CSS 선택자로 요소에 포커스를 맞춘 다음 네이티브 CDP Input.insertText를 사용합니다.

  • scroll: 픽셀, 뷰포트 높이(페이지) 또는 특정 요소로 페이지를 스크롤합니다. 지연 로드 콘텐츠나 무한 스크롤과 상호작용하는 데 필수적입니다.

📡 네트워크 검사

  • get_network_logs: 가로챈 네트워크 요청(REST/HTTP)과 WebSocket 프레임을 검색합니다.

  • 고급 필터링: URL, 리소스 유형, WebSocket 방향 또는 페이로드 콘텐츠로 로그를 필터링합니다.

  • 페이로드 검사: 전체 요청/응답 헤더, REST 응답 본문 및 WebSocket 프레임에 접근합니다.

  • 컨텍스트 최적화: LLM 컨텍스트 창이 넘치지 않도록 선택적 "요약 모드"를 제공합니다.

🪵 콘솔 및 오류

  • get_console_logs: 브라우저에서 콘솔 로그를 검색합니다. 여기에는 console.log/warn/error 호출, 예외 및 네트워크 오류가 포함됩니다. 페이지 스크립트와 오류를 해결하는 데 중요합니다. 선택적 로그 레벨 필터링과 상태를 효율적으로 관리하기 위한 clear 플래그가 포함됩니다.

⚡ 성능 및 프로파일링

  • get_performance_metrics: 브라우저에서 런타임 성능 메트릭(예: JS 힙 크기, DOM 노드, 레이아웃 지속 시간)을 검색합니다. 페이지의 메모리 및 계산 오버헤드에 대한 빠른 스냅샷을 얻는 데 유용합니다.

  • profile_page_performance: 페이지의 성능 추적을 기록하고 분석합니다. Core Web Vitals(FCP, LCP, DCL, Load)를 자동으로 계산하고 상위 Long Tasks(메인 스레드 차단 작업)를 식별합니다. 선택적으로 캐시를 비활성화한 상태로 페이지를 다시 로드하여 콜드 스타트를 시뮬레이션할 수 있습니다.

🌐 페이지 및 런타임 제어

  • capture_screenshot: 현재 페이지(또는 전체 페이지 레이아웃)의 스크린샷을 찍어 base64로 인코딩된 이미지 블록으로 LLM 클라이언트에 반환합니다.

  • navigate: 활성 탭을 특정 URL로 이동합니다.

  • reload: 현재 페이지를 다시 로드합니다.

  • inspect_dom: 전체 HTML 또는 검색 쿼리 주변의 스마트 스니펫을 가져옵니다.

    • 컨텍스트 검색: 특정 텍스트를 검색하고 그 주변의 구성 가능한 문자 수를 가져옵니다.

    • 토큰 효율성: 대형 페이지의 컨텍스트 창 사용량을 대폭 줄입니다.

  • evaluate_js: 페이지 컨텍스트에서 전역적으로 임의의 JavaScript 표현식을 실행합니다.

🐞 라이브 디버깅 및 실행 제어

  • pause_on_load: 디버거를 활성화하고 페이지를 새로고침하여 가장 처음 파싱된 스크립트 문(statement)에서 실행을 일시 중지합니다.

  • search_scripts: 모든 파싱된 스크립트 컨텍스트에서 쿼리를 검색하여 중단점의 줄과 열을 정확히 찾아냅니다.

  • set_breakpoint: script_id, url 또는 정확한 script_hash를 사용하여 정밀한 JS 중단점을 설정합니다.

  • evaluate_on_call_frame: 현재 일시 중지된 디버거 호출 프레임의 로컬 스코프 내에서 직접 JavaScript 표현식을 평가합니다.

  • step_over: 다음 표현식 줄을 건너뜁니다.

  • resume: 일시 중지를 해제하고 실행을 재개합니다.

  • remove_breakpoint: 이전에 설정한 중단점을 제거합니다.

🧩 WebMCP (페이지 노출 도구) WEB_MCP 기능 프리셋으로 Chrome을 다시 시작해야 합니다 (restart_chrome 참조).

  • webmcp_list_tools: 현재 페이지가 브라우저에 노출하는 도구를 나열합니다 (이름, 설명, inputSchema, frameId).

  • webmcp_invoke_tool: 이름으로 페이지 도구를 호출합니다. input은 도구의 inputSchema와 일치하는 JSON 객체 문자열입니다 (예: "{}" 또는 "{\"product\":\"knot\"}"). 결과를 기다리며 최대 30초 동안 차단됩니다.

  • webmcp_get_invocation: invocationId로 호출의 상태(Pending/Completed/Error/Canceled)와 결과를 반환합니다 — 비차단(non-blocking) 방식입니다.

  • webmcp_list_invocations: 세션의 모든 호출을 상태와 함께 나열하며, 선택적으로 status 필터를 적용할 수 있습니다.

    ⚠️ 동의 대화상자: 부작용(클립보드 쓰기, 양식 제출 등)이 있는 페이지 도구는 사용자가 클릭해야 하는 페이지 내 확인 대화상자를 표시할 수 있습니다. 이 경우 webmcp_invoke_tool은 invocationId를 포함한 시간 초과 오류를 반환하며, 호출은 Pending 상태로 유지됩니다(취소되지 않음). 사용자가 승인하거나 거부한 후 webmcp_get_invocation으로 폴링할 수 있습니다.

🧪 안정성 및 신뢰성

  • 광범위한 단위 테스트: 특히 debugger 도메인에서 이벤트 처리와 도구 역직렬화의 신뢰성을 보장하는 포괄적인 테스트 스위트.

  • 부작용 없는 테스트: 모든 단위 테스트는 실제 Chrome 인스턴스를 실행하거나 파일 시스템을 수정하지 않고 격리된 환경에서 실행되도록 설계되었습니다.

  • 내부 리팩터링: 장기적인 유지보수성을 보장하기 위해 트레이트(trait)와 의존성 주입을 통해 핵심 로직을 분리했습니다.


Related MCP server: chrome-devtools-mcp

⚙️ 구성

기본적으로 MCP 서버는 cdp-browser-lite의 크로스 플랫폼 검색을 통해 Chrome 실행 파일을 찾습니다: CHROME_PATH를 먼저 확인하고(절대 우선순위), 그 다음 PATH의 일반적인 바이너리(google-chrome, google-chrome-stable, chromium, chromium-browser), 마지막으로 OS별 위치(macOS의 /Applications/Google Chrome.app/..., Windows의 chrome.exe 설치 디렉터리, Linux의 /usr/bin/google-chrome, /opt/google/chrome/chrome, /snap/bin/chromium)를 확인합니다. 이는 서버가 이전에 하드코딩했던 경로의 엄격한 상위 집합입니다.

인수:

  • --local: 탐색을 로컬 주소로만 제한합니다 (localhost, 127.0.0.1, 192.168.x.x 또는 *.local). 보안을 위해 적극 권장됩니다.

  • --headless: Chrome을 헤드리스 모드로 실행합니다(GUI 없음). Docker 또는 서버 환경에 필수적입니다.

  • --user-profile: 새 프로필 대신 기본 시스템 사용자 프로필(세션, 쿠키 등)을 사용합니다. 연구 세션 중 반복적인 로그인을 피하는 데 유용합니다.

  • --host: Chrome 인스턴스의 대상 호스트를 지정합니다 (기본값: 127.0.0.1). 컨테이너에서 호스트 머신에 연결하려면 host.docker.internal을 사용하세요.

  • --port: 원격 디버깅 포트를 지정합니다 (기본값: 9222).

  • --enable-automation: "자동화 소프트웨어에 의해 제어됨" 정보 표시줄을 활성화합니다.

  • --max-instances: 동시 Chrome 인스턴스의 최대 수를 제한합니다 (기본값: 8). --user-profile이 설정된 경우 무시됩니다.

환경 변수:

  • CHROME_PATH: Chrome 실행 파일의 경로를 명시적으로 정의합니다.


🐳 Docker 및 헤드리스 사용 (v1.0.0)

chrome-debug-mcp는 완전히 컨테이너 지원이 가능합니다. 이를 통해 LLM을 위한 여러 강력한 사용 사례가 가능합니다:

1. 클라우드 배포 (Glama 이용)

이 서버를 사용하는 가장 쉬운 방법입니다. Glama는 Chrome이 사전 설치된 Docker 컨테이너를 생성합니다. LLM은 로컬 설정 없이 즉시 클라우드의 브라우저에 접근할 수 있습니다.

2. 격리된 로컬 사용

호스트 머신에 Chrome이나 Rust를 설치하지 않으려면 모든 것을 Docker 내부에서 실행하세요:

docker build -t chrome-mcp .
docker run -i --rm chrome-mcp --headless

3. 하이브리드 모드 (컨테이너가 호스트 제어)

MCP 서버는 안전한 Docker 컨테이너 내부에서 실행되지만 실제 데스크톱의 Chrome 인스턴스를 제어합니다. 이를 통해 LLM이 실제 브라우징 세션에서 여러분을 도울 수 있습니다:

  1. 로컬 Chrome을 --remote-debugging-port=9222로 시작하세요.

    • 참고: 이 모드에서 프록시 지원이 필요하면 Chrome도 --proxy-server="http://your-proxy:port" 플래그와 함께 시작해야 합니다.

  2. 컨테이너를 실행하세요:

# On macOS/Windows
docker run -i --rm chrome-mcp --host host.docker.internal

🚀 빠른 시작

MCP 서버를 네이티브로 설치하고 실행하는 가장 쉬운 방법은 Rust의 Cargo를 사용하거나 사전 컴파일된 바이너리를 다운로드하는 것입니다. 더 이상 Chrome을 수동으로 시작할 필요가 없습니다. MCP 서버가 올바른 디버깅 플래그로 보이는 Chrome 인스턴스를 자동으로 실행합니다.

1. 설치

옵션 A: 사전 컴파일된 바이너리 (권장) Releases 페이지로 이동하여 플랫폼(macOS, Windows, Linux)에 맞는 네이티브 실행 파일을 다운로드하세요. Windows용 .msi 설치 프로그램과 UNIX 시스템용 셸 스크립트를 제공합니다.

옵션 B: Cargo로 설치

cargo install --git https://github.com/raultov/chrome-debug-mcp

옵션 C: 셸 스크립트로 설치 (Unix)

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/chrome-debug-mcp/releases/latest/download/chrome-debug-mcp-installer.sh | sh

2. MCP 클라이언트 구성

이 서버는 Claude Code, agy, codex와 함께 작동하도록 완전히 테스트되고 확인되었습니다. AI 클라이언트가 다음 모드 중 하나를 사용하여 서버를 실행하도록 구성하세요.

범용 구성 (JSON)

대부분의 MCP 클라이언트(Claude Code 또는 JSON 기반 구성)는 이 구조를 사용합니다. 세 가지 주요 사용 모드는 다음과 같습니다:

{
  "mcpServers": {
    "chrome-debug-mcp": {
      "command": "chrome-debug-mcp",
      "args": [],
      "env": {}
    },
    "chrome-docker": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "chrome-debug-mcp:v1.0.9", "--headless"]
    },
    "chrome-docker-hybrid": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--net=host",
        "chrome-debug-mcp:v1.0.9",
        "--host",
        "127.0.0.1"
      ]
    }
  }
}

참고: Linux에서 --net=host를 사용하는 chrome-docker-hybrid 모드는 컨테이너가 127.0.0.1의 로컬 Chrome 인스턴스에 접근할 수 있도록 하는 권장 방법입니다.

Claude Code

Claude Code에서 서버를 추가하고 활성화하려면:

claude mcp add chrome-debug-mcp chrome-debug-mcp

3. 사용

연결되면 AI 에이전트가 첫 번째 명령이 실행될 때 Chrome 시작을 자동으로 처리합니다. 브라우저는 계속 표시되므로 디버깅 과정을 시각적으로 추적할 수 있습니다.

4. 에이전트 워크플로 및 다중 인스턴스 가이드

LLM은 몇 가지 최적화된 패턴으로 이 서버를 운영할 수 있습니다:

A. 격리된 다중 인스턴스 시나리오

자동화된 브라우저 세션을 실행할 때 쿠키 오염이나 탭 충돌을 방지하기 위해 별도의 Chrome 프로세스를 시작할 수 있습니다:

  1. label: "user-session-1" 또는 선택적 프록시 서버 구성으로 open_instance를 호출하세요. 고유한 instance_id(예: chrome-2)가 반환됩니다.

  2. navigate, evaluate_js 또는 webmcp_list_tools와 같은 다운스트림 도구에 instance_id를 명시적으로 전달하세요.

  3. 완료되면 close_instance를 사용하여 리소스를 정리하세요.

B. WebMCP 사용

WebMCP를 지원하는 페이지(예: https://www.knot.kz/#/agent-tools)로 이동하는 경우:

  1. 웹 페이지에 등록된 도구는 webmcp_list_tools를 사용하여 검색할 수 있습니다.

  2. 기본적으로 안전을 위해 WEB_MCP는 비활성화되어 있습니다. 도구 목록이 비어 있으면 features: ["WEB_MCP"]로 restart_chrome을 호출한 다음 reload를 호출하세요.

  3. webmcp_invoke_tool을 사용하여 입력 JSON 인수를 제공하면서 페이지 도구를 호출하세요. 동의 대화상자가 웹 페이지의 실행을 일시 중지하면 도구는 30초 후에 시간 초과되지만 호출은 계속 대기 상태로 유지됩니다. webmcp_get_invocation을 사용하여 결과를 폴링할 수 있습니다.


🛠 컴파일 (소스에서)

소스에서 컴파일하려면:

git clone https://github.com/raultov/chrome-debug-mcp
cd chrome-debug-mcp
cargo build --release

결과 바이너리는 target/release/chrome-debug-mcp에 위치합니다. 이 프로젝트는 cargo-dist를 활용하여 GitHub Actions를 통해 크로스 플랫폼 네이티브 배포를 원활하게 처리합니다.


📖 왜 이 MCP 서버인가?

Puppeteer/Playwright 래퍼와 같은 다른 통합 서버는 고수준이고 무거우며 일반적으로 실제 대화형 단계별 디버거를 노출하는 데 실패합니다. 이 MCP 서버는 원시 CDP 메시지를 사용하여 LLM 도구에 1:1로 매핑하므로, 지능형 에이전트가 말 그대로 JS를 단계별로 실행하고, 로컬 스코프 변수를 네이티브로 읽고, V8 컴파일러 컨텍스트 내부를 검색하고, 스크립트가 충돌하는 이유를 정확히 이해할 수 있습니다.


📜 라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.

Available Tools

30 tools
capture_screenshotA

Captures a visual representation of the current page viewport or entire page as a base64 encoded image ('full_page' defaults to false, capturing only the visible viewport; set true to capture the entire page). Side effects: none (read-only). Prerequisites: requires an active Chrome tab. Returns: base64 encoded image in specified format. Use this to visually verify UI state, layout, or rendering. Alternatives: 'inspect_dom' for raw HTML structure, 'get_performance_metrics' for rendering metrics.

NameRequiredDescriptionDefault
formatNoOutput image format. Constraints: must be 'png', 'jpeg', or 'webp'. Interactions: 'quality' applies only to 'jpeg' and 'webp' formats. Defaults to: "png".
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
qualityNoCompression quality (0-100, higher=better quality). Constraints: integer between 0 and 100. Interactions: only applies when 'format' is 'jpeg' or 'webp'; ignored for 'png'. Defaults to: 100.
full_pageNoCapture the entire page beyond visible viewport. Constraints: boolean value. Interactions: if true, captures full page height; if false, captures only visible area. Defaults to: false.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explicitly states 'Side effects: none (read-only)', the prerequisite of an active Chrome tab, and the return type (base64 encoded image). It also clarifies the full_page behavior. This is exceptionally transparent for a tool without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet structured with clear labels (Side effects, Prerequisites, Returns, Alternatives). Every sentence earns its place, and there is no filler or repetition beyond a minor but acceptable mention of base64 in the first and Returns sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a mutating? no, read-only tool with no output schema and no annotations. The description covers side effects, prerequisites, return value, common use case, and alternatives. For a screenshot tool with 5 optional parameters and no output schema, this is complete enough for an agent to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with each parameter already providing defaults, constraints, and interactions. The description adds no new parameter-level meaning beyond what the schema states—it only mirrors full_page behavior and mentions base64 output. Per the rubric, baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Captures') and resource ('visual representation of the current page viewport or entire page'), and states the output as a base64 encoded image. It also explicitly names alternatives (inspect_dom, get_performance_metrics), making the tool's unique purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool ('Use this to visually verify UI state, layout, or rendering') and provides alternatives with their specific use cases ('inspect_dom for raw HTML structure', 'get_performance_metrics for rendering metrics'). It also notes the prerequisite of an active Chrome tab, giving clear operational context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

click_elementA

Triggers a native mouse click event on a DOM element identified by CSS selector, executing click handlers and form submissions. Side effects: may trigger page navigation, form submission, or modify DOM state. Prerequisites: element must exist and be visible (getBoundingClientRect must return valid coordinates). Returns: success confirmation with click coordinates. Use this to interact with buttons, links, checkboxes. Alternatives: 'fill_input' for text input, 'evaluate_js' for complex interactions.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
selectorYesCSS selector identifying the target element. Constraints: valid CSS selector string matching a single DOM element. Interactions: must resolve to exactly one visible element or operation fails. Defaults to: None (required).
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosure. It clearly lists side effects (page navigation, form submission, DOM state change), prerequisites (visibility), and the return value (click coordinates). This is comprehensive and does not contradict any structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three purposeful sentences, front-loaded with the main action and side effects, with no filler or repetition. Every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, side effects, prerequisites, alternatives, and return value. With no output schema, it explains what to expect (click coordinates). For a click tool, this is complete; nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add new meaning to the parameters themselves; the only extra context, the selector mutability constraint, is already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('triggers a native mouse click'), identifies the resource ('DOM element identified by CSS selector'), and notes the effects ('click handlers and form submissions'). It also distinguishes from siblings by naming alternatives like fill_input and evaluate_js.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly lists the intended use cases (buttons, links, checkboxes) and names the alternative tools for text input and complex interactions, giving clear routing. It also mentions the prerequisite that the element must exist and be visible.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_instanceA

Closes and stops the specified Chrome instance by id. Side effects: destructive - for secondary instances the Chrome process is terminated and the instance is fully removed from the registry; for 'default' the process is stopped but the registry entry is kept and the instance is re-created lazily on the next tool call. Returns: structured JSON with the instance_id and whether it was removed from the registry. Use this to free resources used by sessions created with 'open_instance'. Alternatives: 'stop_chrome' to stop an instance, 'close_tab' to close a single tab.

NameRequiredDescriptionDefault
instance_idYesThe instance id to close. The 'default' instance cannot be removed: it is stopped and kept (re-created lazily on next use); all other instances are fully removed.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly describes side effects (destructive for secondary instances, special handling for 'default') and the return format (structured JSON with instance_id and removal status). No behavioral aspect is left undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is thorough yet every sentence serves a purpose: core action, side effects, return value, usage context, and alternatives. It is front-loaded with the primary verb and resource, and the logical progression aids comprehension without any filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool has nuanced behavior (different outcomes for default vs. other instances) and no output schema, yet the description covers all necessary context: side effects, return structure, when to use it, and alternatives. An agent can invoke it correctly without needing additional information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers 100% of the single parameter, including the critical difference between 'default' and other instances. The description does not add parameter-level detail beyond the schema, so a baseline score of 3 is appropriate. The contextual reinforcement in the description is helpful but redundant with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Closes and stops the specified Chrome instance by id.' It also distinguishes itself from siblings by naming alternatives like stop_chrome and close_tab, so an agent can immediately understand what this tool does that others do not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Use this to free resources used by sessions created with open_instance.' It also lists alternatives with their distinct purposes, making it unambiguous when to call this tool versus stop_chrome or close_tab.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_tabA

Closes a specific tab by its registered Tab ID. Side effects: destructive - removes the tab from the registry and closes it in Chrome; if it was the active tab, another registered tab becomes active. Prerequisites: the tab must exist (see 'list_tabs'). Returns: structured JSON with the closed 'tab_id' and the new 'active_tab_id' (null when no tabs remain). Use this to clean up tabs you no longer need. Alternatives: 'close_instance' to stop a whole Chrome instance.

NameRequiredDescriptionDefault
tab_idYesThe Tab ID of the tab to close (e.g. 'tab-1').
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It discloses side effects (destructive, removes tab from registry, closes in Chrome, active tab handling) and return value structure. This is comprehensive and goes beyond minimal requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured logically: purpose, side effects, prerequisites, return, usage, alternative. It is appropriately sized with no redundant sentences, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two parameters (one required) and no output schema, the description explains the return value, side effects, and usage guidance sufficiently. It also integrates with sibling tool context, making it complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema itself fully documents both parameters. The description adds some context (e.g., prerequisite of tab existing) but does not provide additional parameter-level semantics beyond what the schema already states, aligning with the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Closes a specific tab by its registered Tab ID') and differentiates from sibling tools like 'close_instance' by explicitly naming it as an alternative. This makes the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates when to use the tool ('Use this to clean up tabs you no longer need'), states prerequisites ('the tab must exist (see 'list_tabs')'), and names the alternative ('close_instance' to stop a whole Chrome instance). This explicitly guides selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evaluate_jsA

Executes arbitrary JavaScript code in the page context, returning evaluated results as JSON-serializable values. Side effects: may modify DOM, state, or trigger network requests. Prerequisites: requires an active Chrome tab; script context must allow execution. Returns: JSON-serialized return value (or error if promise rejected). Use this for dynamic inspection, DOM manipulation, complex interactions. Alternatives: 'inspect_dom' for read-only DOM queries, 'click_element' for UI interactions.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
expressionYesJavaScript code expression to execute. Constraints: valid JavaScript (single expression or IIFE). Interactions: automatically awaits promises; 'returnByValue' returns serialized results. Defaults to: None (required).
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses side effects (may modify DOM, state, trigger network requests), prerequisites, return behavior (JSON-serializable values, error on promise rejection), and context requirements. This is comprehensive, though it omits details like potential CSP restrictions or permission scopes, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, side effects, prerequisites, return, usage, and alternatives. It is well-structured and front-loaded with the core purpose, though the inclusion of both prerequisites and usage could be slightly streamlined without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a side-effect-capable tool with no annotations or output schema, the description covers all essential aspects: what it does, side effects, prerequisites, return format, error handling, and distinctions from siblings. It does not go into error specifics or permission nuances, but it is sufficient for an agent to invoke it correctly in most scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, with each parameter documented. The description adds minimal extra meaning: it mentions that promises are awaited, but the schema already states this. It does not elaborate on tab_id or instance_id beyond what the schema provides, so the baseline 3 applies as the description relies on the schema for parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action — "Executes arbitrary JavaScript code in the page context" — with a specific resource (JavaScript) and context (page). It immediately distinguishes its purpose from read-only inspection and UI interaction by naming alternatives, ensuring an agent can identify its niche.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: "Use this for dynamic inspection, DOM manipulation, complex interactions" and lists concrete alternatives ('inspect_dom' for read-only queries, 'click_element' for UI interactions). It also states prerequisites (active Chrome tab, script context must allow execution), giving clear when-to-use and when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evaluate_on_call_frameA

Evaluates JavaScript expressions within the scope of a paused call frame, accessing local variables and call stack. Side effects: read-only by default; can modify state if expression includes mutations. Prerequisites: requires debugger to be paused at a breakpoint with active call frame. Returns: expression result with type and value. Use this to inspect variables and call stack during debugging. Alternatives: 'evaluate_js' for global scope evaluation, 'step_over' to advance without evaluation.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
expressionYesJavaScript expression to evaluate in call frame scope. Constraints: valid JavaScript accessing local/closure variables. Interactions: requires active paused debugger session; has access to function parameters and local variables. Defaults to: None (required).
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and handles it well: it discloses side effects ('read-only by default; can modify state if expression includes mutations') and prerequisites. It could go further (e.g., error behavior, impact on debugger state) but is transparent about the key behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: purpose, side effects, prerequisites, return info, and alternatives are each covered in one sentence without repetition. Though slightly long, every sentence adds value and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the description covers purpose, side effects, prerequisites, return type, and alternatives. Without an output schema, it explains what the result contains ('type and value'). It doesn't elaborate on error messages or handling, but the essential information for correct invocation is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are well-documented. The description adds semantic context that the schema lacks, such as 'in call frame scope' and access to local/closure variables, clarifying what the expression can reference and the evaluation context. This goes beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Evaluates') and resource ('JavaScript expressions within the scope of a paused call frame') and distinguishes itself from siblings like 'evaluate_js' and 'step_over'. It also gives a concrete use case ('inspect variables and call stack during debugging'), making its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions the prerequisite ('requires debugger to be paused at a breakpoint with active call frame') and names alternatives with reasoning ('evaluate_js' for global scope, 'step_over' to advance without evaluation). This provides clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fill_inputA

Focuses an input field via CSS selector and inserts text using native input simulation, triggering input/change events. Side effects: modifies DOM input value; triggers input/change event handlers. Prerequisites: element must exist, be visible, and be an input/textarea or contenteditable element. Returns: success confirmation. Use this to populate form fields, search boxes, text areas. Alternatives: 'evaluate_js' for direct value assignment without events, 'click_element' to focus manually.

NameRequiredDescriptionDefault
textYesText content to insert. Constraints: any string (special chars escaped automatically). Interactions: replaces any existing text after focus; triggers input/change events. Defaults to: None (required).
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
selectorYesCSS selector identifying the input element. Constraints: valid CSS selector matching an input/textarea/contenteditable element. Interactions: element must be focusable and writable. Defaults to: None (required).
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and meets it. It discloses side effects (modifies DOM value, triggers input/change events), prerequisites (element exists, visible, input/textarea/contenteditable), and return type (success confirmation). This is thorough behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well structured and efficient: opening action, side effects, prerequisites, return, usage, alternatives. Every sentence provides distinct value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no output schema, the description fully covers what the tool does, when to use it, behavioral side effects, prerequisites, and return value. It is complete enough for an agent to select and invoke it correctly without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter has a detailed description already. The tool description adds only general context ('CSS selector', 'input/textarea/contenteditable') already present in the schema. Baseline 3 is appropriate since the schema handles parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('focuses', 'inserts text') and resource ('input field via CSS selector'), and explains the native input simulation with event triggering. It distinguishes itself from siblings by naming evaluate_js and click_element as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Use this to populate form fields, search boxes, text areas.' It also gives clear alternatives and their distinguishing conditions: evaluate_js for direct value assignment without events, click_element to focus manually.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_console_logsA

Retrieves cached console messages including log, warning, error, info levels and uncaught exceptions. Side effects: when 'clear' is true the cached console messages are emptied after being returned. Prerequisites: requires an active Chrome tab. Returns: JSON array of console messages with timestamp, level, and text. Use this to debug script errors, monitor page health, inspect exception traces. Alternatives: browser DevTools Console, error logging services.

NameRequiredDescriptionDefault
clearNoClear console cache after returning logs. Constraints: boolean. Interactions: when true, subsequent calls only return new messages. Defaults to: false.
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.
level_filterNoFilter logs by severity level (case-insensitive). Constraints: 'error', 'warning', 'info', 'log', or similar CDP log level. Interactions: when provided, returns only matching level; empty returns all. Defaults to: None (no filtering).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It openly states the side effect of 'clear' (emptying cache after return), the prerequisite, and the return format. It does not mention potential errors or failure modes, but it sufficiently discloses the critical behaviors an agent needs to know. The absence of annotations makes this transparency valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the primary purpose. It flows logically through side effects, prerequisites, returns, usage, and alternatives. Every sentence contributes meaningful information, with no redundancy or fluff. It is concise and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 params, no output schema), the description covers all essential aspects: what it does, side effects, prerequisites, return format, and use cases. An agent can correctly invoke this tool based solely on the description and schema. There are no obvious gaps that would lead to misuse.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds context about the 'clear' side effect, which clarifies its parameter's behavior, but does not elaborate on other parameters (tab_id, instance_id, level_filter) beyond what the schema already states. The added value is marginal, so 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieves' and the resource 'cached console messages', list specific log levels and exceptions. It distinguishes itself from sibling tools like get_network_logs by specifying console messages. The usage context ('debug script errors, monitor page health') further clarifies its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear prerequisites ('requires an active Chrome tab') and explicit use cases, but does not explicitly state when not to use it or directly compare to sibling tools. It mentions external alternatives (DevTools Console, error logging services) but excludes no sibling tools, leaving some ambiguity about when to prefer this over get_network_logs or similar. However, the context is still clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_custom_eventsA

EXPERIMENTAL: Retrieves unhandled CDP events from domains not covered by specialized listeners (network, console, etc.). Side effects: none (read-only cache access). Prerequisites: requires active Chrome connection with send_cdp_command or custom domain listeners active. Returns: JSON array of custom events with method, parameters, and timestamp. Use this to see Target, Debugger, or other domain events. Alternatives: domain-specific listeners (get_network_logs, get_console_logs).

NameRequiredDescriptionDefault
limitYesMaximum number of events to return. Constraints: positive integer (0 = unlimited, clamped to cache size). Interactions: limits result set size. Defaults to: 100.
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.
filter_methodNoFilter events by CDP method name (case-sensitive). Constraints: string matching format 'Domain.eventName'. Interactions: when omitted, returns all events. Defaults to: None (no filtering).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description correctly bears the full burden. It discloses 'Side effects: none (read-only cache access)', notes the 'EXPERIMENTAL' status, and explains the return format. It could additionally mention behavior on empty results or error conditions, but for a read-only cache tool, the provided transparency is comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the experimental warning and core purpose, then covers side effects, prerequisites, return format, use cases, and alternatives. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description covers purpose, usage, side effects, prerequisites, return structure, and alternatives. For a read-only tool with clear schema documentation, this is complete enough for an agent to decide when and how to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes all parameters with constraints, defaults, and interactions (100% coverage). The description adds no additional parameter-specific semantics beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieves unhandled CDP events from domains not covered by specialized listeners', specifying the verb, resource, and scope. It explicitly contrasts with siblings like get_network_logs and get_console_logs, making the tool's purpose unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit usage guidance: 'Use this to see Target, Debugger, or other domain events' and names alternatives, including specific sibling tools. It also mentions prerequisites (active Chrome connection with send_cdp_command or custom domain listeners), giving clear conditions for when to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_network_logsA

Retrieves intercepted HTTP/REST requests and WebSocket frames from network activity cache with filtering. Side effects: when 'clear' is true the cached requests and WebSocket frames are emptied after being returned. Prerequisites: requires active Chrome tab with network monitoring enabled. Returns: JSON array of requests/WebSocket frames with optional full details ('include_details' defaults to true; set false for summary only). Parameters: 'current_navigation_only' limits results to current navigation only (defaults to false, retaining up to 3 navigations). Rate limits: none. Use this to audit API calls, debug network issues, inspect WebSocket traffic. Alternatives: browser DevTools Network tab, HAR file export.

NameRequiredDescriptionDefault
clearNoClear network cache after returning logs. Constraints: boolean. Interactions: when true, subsequent calls return only new traffic. Defaults to: false.
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
url_filterNoPartial URL match (case-insensitive). Constraints: non-empty string. Interactions: filters both REST and WebSocket URLs; empty string disables filtering. Defaults to: None (no URL filtering).
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.
type_filterNoTraffic type to include. Constraints: 'rest', 'websocket', or 'both' (case-insensitive). Interactions: limits results to specified type. Defaults to: "both".
include_detailsNoInclude full request/response details. Constraints: boolean. Interactions: when false, returns summary only (URL, method, status); when true, includes headers, bodies. Defaults to: true.
ws_content_filterNoWebSocket payload substring match (case-insensitive). Constraints: non-empty string. Interactions: applies only when type_filter includes 'websocket'; filters by payload content. Defaults to: None (no content filtering).
ws_direction_filterNoWebSocket frame direction filter. Constraints: 'sent', 'received', or 'both'. Interactions: applies only when type_filter includes 'websocket'. Defaults to: "both".
current_navigation_onlyNoLimit results to current navigation only. Constraints: boolean. Interactions: when false, includes up to 3 retained navigations. Defaults to: false.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the destructive side effect of 'clear' (empties cache), prerequisites ('requires active Chrome tab with network monitoring enabled'), rate limits ('none'), and return format. This exceeds typical transparency and directly addresses potential risks and operational constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear progression: purpose, side effects, prerequisites, return info, parameter highlights, rate limits, usage, and alternatives. It is somewhat lengthy but every sentence adds value; no fluff. Front-loading the main purpose aids quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters, no output schema, and no annotations, the description covers side effects, prerequisites, return type, usage, and alternatives. It does not detail the exact JSON structure of the returned array, but given the include_details flag and the schema's description of fields, it is reasonably complete. A slight gap is the lack of error conditions or behavior when prerequisites are unmet.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all nine parameters are already described in detail. The description reiterates some parameter behaviors (e.g., current_navigation_only default and retention, include_details default) but adds no new information beyond the schema. Thus baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb-resource pair: 'Retrieves intercepted HTTP/REST requests and WebSocket frames from network activity cache with filtering.' This clearly distinguishes it from sibling tools like get_console_logs or get_performance_metrics. It also mentions the cache context and filtering, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage scenarios are given: 'Use this to audit API calls, debug network issues, inspect WebSocket traffic.' Alternatives are named (DevTools Network tab, HAR export), though they are external rather than sibling tools. It does not explicitly state when not to use it vs other tools, but the scenarios and alternatives provide adequate guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_performance_metricsA

Captures runtime performance metrics including JS heap size, DOM node count, and layout timing. Side effects: none (read-only snapshot). Prerequisites: requires an active Chrome tab. Returns: JSON object mapping metric names to numeric values (e.g., JSHeapUsedSize, LayoutCount). Use this to monitor memory usage, detect memory leaks, or profile performance. Alternatives: 'profile_page_performance' for detailed tracing, browser DevTools Performance tab.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description discloses key behavioral traits: it explicitly notes 'Side effects: none (read-only snapshot)' and 'Prerequisites: requires an active Chrome tab'. It also specifies the return format. This is strong coverage, though it doesn't mention what happens if no active tab exists or whether there are rate limits, which are minor gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured logically: purpose, side effects, prerequisites, returns, usage, alternatives. Each sentence adds value and information is front-loaded. It is slightly longer than necessary but remains efficient and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional parameters, read-only, returns JSON), the description is fully complete: it explains the return structure with examples, includes side-effects and prerequisites, and gives usage guidance. An agent can call this tool correctly without any further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters (tab_id and instance_id). The description adds no additional nuance beyond the schema's existing explanations. With full schema coverage, the baseline of 3 is appropriate; the description does not need to compensate much.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool captures runtime performance metrics (JS heap size, DOM node count, layout timing) and explicitly distinguishes it from 'profile_page_performance' which does detailed tracing. It identifies both the verb and resource precisely, making it unambiguous among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool ('monitor memory usage, detect memory leaks, or profile performance') and names the alternative ('profile_page_performance' for detailed tracing, plus browser DevTools Performance tab). This provides a clear decision pathway without needing to inspect other tool definitions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_domA

Retrieves the complete HTML document or a contextual snippet around a search query. Side effects: none (read-only). Prerequisites: requires an active Chrome tab with loaded DOM. Returns: full HTML or snippet with context markers. Use this to inspect page structure, find elements by text, or verify rendering. Alternatives: 'evaluate_js' for complex DOM queries, 'capture_screenshot' for visual verification.

NameRequiredDescriptionDefault
afterNoCharacters to include after the match. Constraints: non-negative integer. Interactions: only applies if 'query' provided. Defaults to: 200.
queryNoText pattern to search for in the DOM (case-sensitive). Constraints: any string. Interactions: when provided, returns context snippet instead of full HTML. Defaults to: None (returns full HTML if omitted).
beforeNoCharacters to include before the match. Constraints: non-negative integer. Interactions: only applies if 'query' provided. Defaults to: 200.
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states side effects are none (read-only), prerequisites require an active Chrome tab with loaded DOM, and describes the return format as full HTML or snippet with context markers. This is strong coverage. It stops short of 5 because it omits potential failure cases (e.g., no match, invalid tab) or rate limits, but for a read-only inspection tool this is nearly complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no extra fluff. The main purpose is front-loaded, followed by side effects, prerequisites, returns, usage, and alternatives. Every sentence earns its place, and the structure is logical and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no output schema, and no annotations, this description covers the essential context: purpose, usage, safety (read-only), prerequisites, and return behavior. The mention of context markers gives a clue about the snippet format. It could be more explicit about error handling or edge cases (e.g., no match for query), but overall it is sufficiently complete for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter. The description adds value by clarifying the two operational modes: full HTML when query is omitted, and contextual snippet with markers when query is provided. This maps directly to the query, before, and after parameters and gives the agent a higher-level understanding. It does not duplicate parameter details but adds conceptual grouping.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the complete HTML document or a contextual snippet around a search query. It specifies the exact action (retrieves) and resource (HTML/snippet), and explicitly differentiates from alternatives by naming them (evaluate_js, capture_screenshot). This leaves no ambiguity about what inspect_dom does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit use cases: inspect page structure, find elements by text, verify rendering. It also names specific alternatives and the conditions that select them (complex DOM queries → evaluate_js, visual verification → capture_screenshot), providing clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_instancesA

Lists all running or registered Chrome instances. Side effects: none (read-only registry snapshot). Returns: JSON array of instance descriptors with id, label, host, port, profile_dir, features and is_default. Use this to discover instance_ids before passing 'instance_id' to other tools. Alternatives: 'list_tabs' to enumerate tabs within an instance.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses 'Side effects: none (read-only registry snapshot)' and specifies the return format as a JSON array with field names. This is transparent about behavior and output, exceeding the minimum for a tool without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The purpose is front-loaded, followed by side effects, return format, usage guidance, and an alternative. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and no output schema, the description is complete: it covers purpose, side effects, return format, and how to use it with other tools. An agent can confidently invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has zero parameters, so schema coverage is 100% (trivially). Baseline for 0 params is 4. The description doesn't discuss parameters, but none exist; it compensates by explaining output fields, which is outside parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all running or registered Chrome instances, with a specific verb and resource. It also names an alternative (list_tabs) to differentiate scope, so an agent can distinguish 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool ('discover instance_ids before passing instance_id to other tools') and names list_tabs as an alternative for a different scope. Provides clear usage context and exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tabsA

Lists all tabs currently open and registered in the specified Chrome instance. Side effects: none (read-only registry snapshot). Returns: structured JSON with 'active_tab_id', the current tab targeted by tools that omit 'tab_id', and a 'tabs' array of tab_id, label, target_id and url. When no tabs are registered, tools fall back to the instance's default single-tab connection and a 'note' explains it. Use this to discover Tab IDs before passing 'tab_id' to other tools. Alternatives: 'list_instances' to enumerate Chrome instances.

NameRequiredDescriptionDefault
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly discloses side effects ('none (read-only registry snapshot)') and describes the fallback behavior when no tabs are registered, including the note in the response. With no annotations provided, this fully carries the behavioral transparency burden and exceeds it by explaining return structure and special cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with distinct sections (purpose, side effects, returns, fallback, usage, alternative) and front-loads the core purpose. It is slightly verbose but every sentence adds unique, relevant information, so no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and no output schema, the description covers return format (active_tab_id, tabs array, note), side effects, fallback behavior, usage guidance, and alternatives. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter (instance_id) is already fully described in the schema (100% coverage), and the description adds no additional semantics beyond the schema's mention of omitting it for the default instance. It does tie the parameter to discovering Tab IDs, but that's purpose rather than parameter meaning, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lists'), resource ('all tabs'), and scope ('in the specified Chrome instance'), and explicitly distinguishes itself by noting it returns Tab IDs for use with other tools, making it unambiguous against siblings like list_instances and open_tab.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states when to use the tool ('to discover Tab IDs before passing tab_id to other tools') and provides an explicit alternative ('list_instances' for enumerating instances), enabling proper routing without inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_instanceA

Opens a new independent Chrome instance. Side effects: launches a separate Chrome process with its own profile directory and remote-debugging port. Prerequisites: rejected when the server runs in --user-profile mode (Chrome's singleton profile lock). Returns: structured JSON with 'instance_id' (pass it as the 'instance_id' argument of other tools), 'host', 'port' and 'profile_dir'. Use this to isolate browsing sessions, cookies, proxies or WebMCP contexts from one another. Alternatives: 'open_tab' for additional tabs within an existing instance. Parameters: 'features' accepts a closed set - 'WEBGL_SOFTWARE' (forces SwiftShader software WebGL for GPU-less environments); 'headless' defaults to false (prefer false so the user can see the browser).

NameRequiredDescriptionDefault
labelNoOptional label to identify the instance. The label becomes the instance_id returned by this tool and accepted by the 'instance_id' argument of other tools. If omitted, a dynamic label is generated.
proxyNoOptional proxy server configuration.
featuresNoOptional feature presets (e.g. WEBGL_SOFTWARE).
headlessNoOptional headless mode. Encouraged to be set to false so that the user can see what happens with the browser. Defaults to false.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses side effects (separate Chrome process, own profile directory and remote-debugging port), a prerequisite failure mode (rejected under --user-profile due to Chrome's singleton lock), and the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, then side effects, prerequisites, returns, usage, and alternatives in a logical order. It is dense but nearly every clause carries information; minor compression is possible in the parameter section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, when-to-use, alternatives, side effects, prerequisites, and return values with no output schema present. Everything an agent needs to decide and call correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it explains what WEBGL_SOFTWARE does (forces SwiftShader for GPU-less environments) and the default/rationale for headless. Proxy and label mapping to instance_id are largely covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Opens a new independent Chrome instance') and distinguishes it from the sibling 'open_tab', which creates tabs within an existing instance. The 'independent' qualifier sets the scope precisely.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it ('to isolate browsing sessions, cookies, proxies or WebMCP contexts') and names the alternative ('open_tab' for additional tabs within an existing instance). It also states a prerequisite rejection condition (--user-profile mode).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_tabA

Opens a new tab in the specified Chrome instance. Side effects: creates a browser tab and registers it under a generated Tab ID; the tab stays open until closed with 'close_tab'. Prerequisites: none - the instance is launched lazily if not running yet. Returns: structured JSON with 'tab_id' (use it as the 'tab_id' argument of other tools), 'target_id' (raw CDP target id), 'url' and 'label'. Use this to work with several pages in parallel while keeping their CDP state isolated per tab. Alternatives: 'navigate' to load content in the active tab, 'list_tabs' to enumerate already open tabs.

NameRequiredDescriptionDefault
urlNoTarget URL to navigate to in the new tab. Defaults to 'about:blank'.
labelNoOptional unique label to identify the tab. Rejected if another tab in this instance already uses it.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description fully discloses behavior: it mentions side effects (creates a tab, registers ID, stays open until close_tab), lazy instance launch, and the exact return structure (tab_id, target_id, url, label). This goes beyond the schema and gives the agent a complete mental model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, front-loading the purpose and then detailing side effects, return values, usage, and alternatives. It is slightly verbose but every sentence contributes meaningful information without redundancy, earning a solid 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 optional params, no output schema, 30+ siblings), the description is complete: it covers what, why, when, side effects, return format, and differentiation from related tools. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all parameters at 100%, but the description adds value: url defaults to 'about:blank', label must be unique, and instance_id derives from open_instance/list_instances with an 'omit for default' guidance. This enriches the agent's understanding beyond raw schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Opens a new tab in the specified Chrome instance.' It names the specific resource (tab) and the action (open), and differentiates itself from siblings by explicitly mentioning 'navigate' and 'list_tabs' as alternatives with different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Use this to work with several pages in parallel while keeping their CDP state isolated per tab.' It also provides clear alternatives: 'navigate' for altering the active tab and 'list_tabs' for enumerating existing tabs, giving an agent precise routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pause_on_loadA

Enables the debugger and injects a breakpoint at the first statement of any script loaded after reloading the page. Side effects: reloads the current page (destructive of unsaved state). Prerequisites: requires an active Chrome tab. Returns: confirmation of debugger enablement and page reload. Use this to debug script execution from the page load. Alternatives: 'set_breakpoint' for targeting specific scripts/lines, 'pause_on_exceptions' for exception-based pausing.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explicitly discloses the destructive side effect ('reloads the current page (destructive of unsaved state)'), prerequisites, and the return value. This is more than sufficient for an agent to understand the tool's behavior and risks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into distinct clauses: purpose, side effects, prerequisites, return, usage, and alternatives. Every sentence provides essential information without redundancy, and the primary purpose is front-loaded. It is efficient despite covering multiple aspects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description compensates by stating the return value ('confirmation of debugger enablement and page reload'). It covers prerequisites, side effects, usage, and alternatives, leaving no critical operational detail missing. For a tool with only optional parameters and clear behavior, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning both parameters (tab_id and instance_id) are already fully described in the schema. The description adds no additional parameter-specific meaning, so it meets the baseline expectation but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Enables the debugger and injects a breakpoint at the first statement of any script loaded after reloading the page.' It also distinguishes itself from siblings by explicitly naming alternatives, so an agent can immediately tell it apart from set_breakpoint and pause_on_exceptions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool ('Use this to debug script execution from the page load.') and provides alternative tools with their different purposes ('set_breakpoint' for targeting specific scripts/lines, 'pause_on_exceptions' for exception-based pausing). It also mentions the prerequisite of an active Chrome tab, giving complete usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

profile_page_performanceA

Records a performance trace of page execution, calculating Core Web Vitals (FCP, LCP, DCL, Load) and identifying Long Tasks (>50ms blocking). Side effects: may temporarily disable cache ('disable_cache' defaults to false); impacts page memory/CPU. Prerequisites: requires an active Chrome tab; trace recording uses background bandwidth. Returns: JSON with vitals, blocking time, and top 5 long tasks. Use this to optimize performance, identify bottlenecks, measure cold starts. Alternatives: browser DevTools Performance tab, real user monitoring (RUM).

NameRequiredDescriptionDefault
actionNoAction to trigger during tracing. Constraints: 'none' or 'reload'. Interactions: 'reload' restarts page recording from initial load (useful with disable_cache=true). Defaults to: "none".
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
duration_msNoRecording duration in milliseconds. Constraints: integer between 500 and 15000. Interactions: longer duration captures more data; use 3000-5000 for typical pages. Defaults to: 3000.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.
disable_cacheNoDisable network cache during trace. Constraints: boolean. Interactions: when true with action='reload', simulates cold start; cache restored after profiling. Defaults to: false.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for behavioral disclosure, and it does so thoroughly. It states side effects: 'may temporarily disable cache ('disable_cache' defaults to false); impacts page memory/CPU.' It also mentions prerequisites: 'requires an active Chrome tab' and background bandwidth usage. It discloses the return format: 'JSON with vitals, blocking time, and top 5 long tasks.' This is comprehensive for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured. It front-loads the primary purpose, then efficiently covers side effects, prerequisites, return format, usage scenarios, and alternatives in a few sentences. Every clause contributes meaningful information—no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 5 parameters and no output schema, the description covers everything an agent needs to call the tool correctly: what it does, when to use it, side effects, prerequisites, return structure, and parameter interactions. The parameter details are in the schema, so the description compensates well for the lack of an output schema by specifying the JSON contents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter. However, the description adds meaningful interaction context beyond the schema: e.g., 'when true with action='reload', simulates cold start; cache restored after profiling' for disable_cache, and 'use 3000-5000 for typical pages' for duration_ms. This adds value beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Records a performance trace of page execution, calculating Core Web Vitals (FCP, LCP, DCL, Load) and identifying Long Tasks (>50ms blocking).' It specifies a concrete action (records), resource (performance trace), and the specific metrics, which distinguishes it from sibling tools like get_performance_metrics that likely fetch existing metrics rather than record a fresh trace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: 'Use this to optimize performance, identify bottlenecks, measure cold starts.' It also names alternatives: 'Alternatives: browser DevTools Performance tab, real user monitoring (RUM).' This tells the agent when to use it and what other approaches exist, though it doesn't explicitly state when NOT to use it, which is a minor gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reloadA

Reloads the current page, discarding all unsaved changes and re-fetching resources from the server. Side effects: destructive of unsaved state; clears dynamic DOM state. Prerequisites: requires an active Chrome tab. Returns: reload confirmation. Use this to refresh page content or reset to initial load state. Alternatives: 'navigate' to load a different URL, 'pause_on_load' to debug reload execution.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly mentions destructive side effects (discards unsaved changes, clears dynamic DOM), prerequisites (active Chrome tab), and the return value (reload confirmation). This is thorough and leaves nothing hidden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main action, then covers side effects, prerequisites, return, usage, and alternatives in a logical order. Each sentence adds unique value without redundancy, and the total length is appropriate for the information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two optional parameters and no output schema, the description covers everything an agent needs: what it does, side effects, prerequisites, return type, usage scenarios, and alternatives. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides full descriptions for both parameters (tab_id and instance_id) with 100% coverage, so the description doesn't need to add more. The baseline of 3 is appropriate because the description adds no parameter-specific information beyond what the schema already explains, but the schema fully documents them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (reload) and resource (current page), and adds context by noting it discards unsaved changes and re-fetches resources. It explicitly distinguishes itself from siblings by naming navigate (for different URL) and pause_on_load (for debugging reload), so an agent can clearly tell it apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Use this to refresh page content or reset to initial load state.' It also names alternatives with conditions ('navigate' to load a different URL, 'pause_on_load' to debug reload execution) and states a prerequisite (requires an active Chrome tab). This is complete usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_breakpointA

Removes a previously set debugger breakpoint by its ID, allowing execution to pass that location uninterrupted. Side effects: modifies debugger state (breakpoint deleted). Prerequisites: requires an active, paused debugger session with the breakpoint ID returned from 'set_breakpoint'. Returns: confirmation of breakpoint removal. Use this to clean up breakpoints or disable debugging at specific locations. Alternatives: 'set_breakpoint' to add new breakpoints, 'resume' to continue execution.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.
breakpoint_idYesUnique identifier of the breakpoint (returned from set_breakpoint). Constraints: non-empty string matching format from set_breakpoint response. Interactions: must correspond to an active breakpoint or operation will fail.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It clearly states side effects (modifies debugger state, breakpoint deleted), prerequisites, and return value (confirmation of removal). It does not detail error cases beyond the schema's note on failure, but for this tool that is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise but comprehensive, front-loading the action and then covering side effects, prerequisites, return, usage, and alternatives in a logical order. No fluff, every sentence adds value. Slightly verbose for a simple tool, but well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the absence of an output schema, and the full coverage of parameters by the schema, the description covers all necessary context: what it does, when to use it, side effects, prerequisites, and return. It does not mention potential errors beyond the schema's note, but that's not critical for this operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters, including breakpoint_id ('Unique identifier of the breakpoint', constraints, interactions). The description does not add additional parameter-specific meaning beyond reinforcing that breakpoint_id comes from set_breakpoint, which is already in the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific verb 'Removes' and the resource 'breakpoint' by its ID. It distinguishes itself from siblings by explicitly naming set_breakpoint and resume as alternatives, making it unambiguous which tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance ('Use this to clean up breakpoints or disable debugging at specific locations') and names concrete alternatives with their purposes. The prerequisites to call it are also stated (active, paused session with breakpoint ID from set_breakpoint).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restart_chromeA

Stops and restarts the Chrome instance selected by 'instance_id' (the default instance when omitted) with remote debugging enabled, optionally configuring proxy and opt-in capability presets. Side effects: destructive - terminates that instance's Chrome process and all its open tabs; closes its debugging connection; other instances keep running. Prerequisites: requires CHROME_PATH environment variable or chrome in PATH. Returns: restart success confirmation listing the presets applied. Use this to reset browser state, apply proxy settings, enable experimental browser capabilities, recover from crashes. Alternatives: 'reload' to refresh page without restart, 'navigate' to load new content. Parameters: 'features' accepts a closed set - 'WEBGL_SOFTWARE' (forces SwiftShader software WebGL for GPU-less environments); arbitrary Chrome flags are not accepted.

NameRequiredDescriptionDefault
featuresNoChrome capability presets to enable on the new instance. Constraints: closed set - 'WEBGL_SOFTWARE' forces SwiftShader software WebGL for GPU-less environments. Arbitrary Chrome flags are not accepted. Interactions: presets apply only to the instance started by this call and are cleared by a later restart that omits them. Defaults to: [] (no presets).
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.
proxy_serverNoProxy server URL (e.g., 'http://proxy.example.com:8080'). Constraints: valid proxy URL with protocol and port. Interactions: applied to new Chrome instance; requires 'enable_proxy_auth' for authenticated proxies. Defaults to: None (no proxy).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it declares destructive side effects (terminates the Chrome process and all open tabs, closes the debugging connection, other instances unaffected) plus a prerequisite (CHROME_PATH or chrome in PATH) and the return shape. This is exactly the behavioral context an agent needs before calling a destructive tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then labeled sections (Side effects, Prerequisites, Returns, Alternatives, Parameters) that make it scannable. It is long, but almost every sentence carries distinct information; only the parameter restatement overlaps with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations and no output schema, the description covers side effects, prerequisites, return value, usage triggers, and alternatives. An agent has everything needed to call it correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema itself documents all three parameters in depth, including the closed-set constraint on 'features' and the proxy URL format. The description largely restates this (closed feature set, default instance) rather than adding new syntax or interaction detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Stops and restarts the Chrome instance'), names the targeting parameter and the default-instance fallback, and distinguishes itself from siblings by naming 'reload' and 'navigate' as alternatives. An agent can tell exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly enumerates when to use it ('reset browser state, apply proxy settings, enable experimental browser capabilities, recover from crashes') and when to prefer alternatives ('reload' to refresh, 'navigate' to load new content). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resumeA

Continues full execution of the debugger from current breakpoint. Side effects: advances code execution until next breakpoint or completion. Prerequisites: requires an active, paused debugger session. Returns: confirmation of resume command. Use this to continue program flow after inspection. Alternatives: 'step_over' or 'step_out' for single-step execution.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states side effects ('advances code execution until next breakpoint or completion'), prerequisites, and the return confirmation. It does not mention whether the operation is reversible or if it alters breakpoints, but the core behavioral impact (execution resumes) is clearly disclosed. This is more than adequate for the tool's purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. Each sentence delivers distinct value: the action, side effects, prerequisites, return, usage guidance, and alternatives are all clearly separated. It front-loads the core function and keeps the description to four sentences without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that simply resumes a debugger, the description covers all essential aspects: what it does, conditions for use, what to expect as a result, and alternatives. There is no output schema, but the description's return statement ('confirmation of resume command') suffices. An agent has everything needed to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage for both parameters (tab_id and instance_id) with clear descriptions. The tool description does not add new parameter semantics, but none are needed since the schema already explains them. Baseline of 3 is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Continues full execution of the debugger from current breakpoint.' It uses a specific verb ('continues') and resource ('full execution of the debugger'), and explicitly distinguishes itself from single-step alternatives, making it easy for an agent to differentiate from siblings like step_over.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it ('Use this to continue program flow after inspection') and names alternatives ('step_over' or 'step_out' for single-step execution). It also states the prerequisite: 'requires an active, paused debugger session.' This leaves no ambiguity about when to select this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scrollA

Scrolls the page by pixel offset, viewport pages, or to a specific element using CSS selector. Side effects: modifies DOM scroll position (observable but reversible). Prerequisites: requires an active Chrome tab with content. Returns: scroll completion confirmation. Use this to navigate within long pages or bring elements into view. Alternatives: 'click_element' to trigger scroll by clicking, 'evaluate_js' for custom scroll logic.

NameRequiredDescriptionDefault
xNoHorizontal scroll distance in pixels. Constraints: integer (positive=right, negative=left). Interactions: ignored if 'selector' is provided; combined with 'y' for diagonal scrolling. Defaults to: 0 (no horizontal scroll).
yNoVertical scroll distance in pixels. Constraints: integer (positive=down, negative=up). Interactions: ignored if 'selector' or 'pages' is provided; overridden by 'pages'. Defaults to: 0 (no vertical scroll).
pagesNoNumber of viewport heights to scroll vertically. Constraints: positive float (e.g., 1.5 = 1.5× viewport height). Interactions: takes precedence over 'y' parameter if both provided; ignored if 'selector' provided. Defaults to: None.
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
selectorNoCSS selector of element to scroll into view. Constraints: valid CSS selector string. Interactions: takes precedence over 'x', 'y', 'pages' if provided; fails if element not found. Defaults to: None.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and discloses a side effect ('modifies DOM scroll position (observable but reversible)'), a prerequisite, and a return value. This is useful transparency, though it does not go into edge cases like element-not-found failure or lazy-loading behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences front-load the primary action, then cover side effects, prerequisites, return value, use case, and alternatives with no wasted words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with no output schema or annotations, the description gives enough context to use it correctly: purpose, modes, side effects, return confirmation, and relevant alternatives. It could add more about failure modes, but the schema covers parameter-level behavior comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The parameter schema already provides 100% coverage with detailed descriptions for each parameter, so the baseline is 3. The description adds a useful high-level mapping of pixel offset, pages, and selector to the underlying parameters, but does not add meaning beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource ('Scrolls the page') and enumerates the three distinct modes: pixel offset, viewport pages, and element selector. It also distinguishes itself from sibling tools by naming click_element and evaluate_js as alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool ('navigate within long pages or bring elements into view') and names alternatives with their purpose ('click_element' for click-triggered scroll, 'evaluate_js' for custom scroll logic). It also provides a prerequisite: requires an active Chrome tab with content.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_scriptsA

Searches all cached script sources for a text pattern and returns matching locations (line and column numbers). Side effects: none (read-only query). Prerequisites: scripts must have been parsed and cached by the debugger. Returns: JSON array of matches with script ID, line/column numbers, and line preview. Use this to locate code before setting breakpoints. Alternatives: 'set_breakpoint' for direct breakpoint placement, 'evaluate_js' for runtime code discovery.

NameRequiredDescriptionDefault
queryYesText pattern or special command to search for. Constraints: non-empty string (empty string returns cached script count). Interactions: '@source' returns first 1000 chars of each script; 'debug' returns script lengths and errors. Defaults to: None (required).
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Side effects: none (read-only query)' and discloses prerequisites and return format. While it doesn't cover auth or rate limits, for a read-only search tool these are less critical; the description covers the key behavioral traits sufficiently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (action, side effects, prerequisites, return, usage, alternatives). Each sentence adds value with no redundancy. It front-loads the primary action and logically groups related information, making it easy for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers all essential context for an agent to correctly invoke the tool: what it does, prerequisites, side effects, return format, and alternatives. Since there is no output schema, the return format explanation is critical and provided. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters in detail. The description does not add extra parameter-level semantics beyond what the schema provides; it focuses on usage context, which is not part of parameter semantics. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('searches'), the resource ('all cached script sources'), and the result ('matching locations with line and column numbers'). It also distinguishes itself from siblings by naming alternatives and placement guidance, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance ('Use this to locate code before setting breakpoints'), clearly states prerequisites ('scripts must have been parsed and cached'), and names two specific alternatives with conditions for selecting them. This fully routes the agent to the correct tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_cdp_commandA

EXPERIMENTAL: Sends raw Chrome DevTools Protocol (CDP) commands to the browser for advanced use cases not covered by specialized tools. Side effects: depends on command; may modify page state, DOM, or trigger navigation. Auth requirements: subject to local-only restrictions if enabled (Page.navigate checked). Prerequisites: requires knowledge of CDP protocol; active Chrome connection. Returns: raw CDP command response as JSON. Use this only when specialized tools inadequate. Alternatives: use domain-specific tools (navigate, click_element, evaluate_js).

NameRequiredDescriptionDefault
methodYesCDP protocol method name (e.g., 'DOM.getDocument', 'Runtime.evaluate'). Constraints: valid CDP domain.method format. Interactions: method must be recognized by Chrome protocol version.
paramsNoJSON-formatted parameters for the CDP command. Constraints: valid JSON object string. Interactions: Page.navigate URLs subject to local-only restrictions; empty string or '{}' for no parameters. Defaults to: None.
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses behavioral traits: side effects ('may modify page state, DOM, or trigger navigation'), auth restrictions (local-only for Page.navigate), and the experimental nature. It clearly states the raw return format. This is exactly what a high-risk tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: experimental warning, purpose, side effects, auth, prerequisites, return type, and usage guidance. Front-loaded with the 'EXPERIMENTAL' warning and purpose. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (raw CDP, safety, auth, prerequisites) and lack of output schema, the description covers all necessary context: what it does, when to avoid it, side effects, auth, prerequisites, and return format. Nothing an agent needs to safely and correctly invoke it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for all 4 parameters, so the baseline is 3. The description reinforces constraints (e.g., 'Page.navigate URLs subject to local-only restrictions') but does not add meaning beyond what the schema already provides. It mentions the JSON format for params, but the schema says the same. No extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'sends' with the resource 'raw Chrome DevTools Protocol (CDP) commands' and explicitly frames it as 'for advanced use cases not covered by specialized tools.' It distinguishes itself from siblings by naming alternatives (navigate, click_element, evaluate_js) and stating when it should not be used.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'Use this only when specialized tools inadequate' and directly lists alternative tools. It also states prerequisites (knowledge of CDP protocol, active Chrome connection) and auth caveats (local-only restrictions for Page.navigate). This is comprehensive routing advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_breakpointA

Sets a debugger breakpoint at a specific location, pausing execution when reached. Side effects: modifies debugger state (breakpoint added until removed). Prerequisites: requires an active Chrome tab; target script must be loaded. Returns: breakpoint identifier and location confirmation. Use this to debug specific code paths. Alternatives: 'pause_on_load' for early script execution, 'search_scripts' to find scripts by pattern.

NameRequiredDescriptionDefault
urlNoScript URL to match. Constraints: one of 'script_hash', 'script_id', or 'url' must be provided. Interactions: mutually exclusive with 'script_hash' and 'script_id'. Defaults to: None.
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
script_idNoScript ID (from Debugger.scriptParsed event). Constraints: one of 'script_hash', 'script_id', or 'url' must be provided. Interactions: mutually exclusive with 'script_hash' and 'url' (first match wins). Defaults to: None.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.
line_numberYesLine number where breakpoint is set (0-indexed). Constraints: non-negative integer, must be within script bounds. Interactions: required parameter; combined with 'column_number' to pinpoint exact location.
script_hashNoScript hash to identify the target script. Constraints: one of 'script_hash', 'script_id', or 'url' must be provided. Defaults to: None.
column_numberNoColumn number within the line. Constraints: non-negative integer. Interactions: optional; narrower precision if provided. Defaults to: start of line (0).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It covers side effects ('modifies debugger state (breakpoint added until removed)'), prerequisites, and return value. While it doesn't mention edge cases like duplicate breakpoints or persistence across navigations, the disclosed side effects and prerequisites are substantive and helpful for an agent deciding to call or not.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: two core sentences plus an alternatives sentence. It front-loads the purpose, then side effects, prerequisites, return, and usage guidance. No fluff—every sentence earns its place, and the alternatives are efficiently listed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters and no output schema or annotations, the description provides the essential context: purpose, side effects, prerequisites, return, and alternatives. It doesn't detail parameter relationships or error states, but the schema handles parameter specifics. The description is sufficiently complete for an agent to decide on invocation, though a note on persistence or failure handling would push it to 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% per context signals, so the baseline is 3. The description does not add any parameter-specific details beyond the schema; it only mentions the return value, not the parameters themselves. Since the schema already thoroughly explains each parameter with constraints and interactions, the description adds no extra semantic value for parameters, hence a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Sets a debugger breakpoint at a specific location, pausing execution when reached.' It names the exact action and resource, and distinguishes itself from siblings by explicitly mentioning alternatives like 'pause_on_load' and 'search_scripts', making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use: 'Use this to debug specific code paths,' and provides alternatives with conditions: 'Alternatives: ''pause_on_load'' for early script execution, ''search_scripts'' to find scripts by pattern.' It also states prerequisites (active tab, script loaded), giving clear guidance on when it can and should be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

step_overB

Executes the current line of code without entering function calls, pausing at the next line. Side effects: advances debugger execution state. Prerequisites: requires an active, paused debugger session. Returns: confirmation of step execution. Use this to skip function internals during debugging. Alternatives: use 'resume' to continue full execution, 'step_over' enters functions, or 'evaluate_on_call_frame' to inspect state without stepping.

NameRequiredDescriptionDefault
tab_idNoThe Tab ID of the target tab. Omit to use the active tab.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose side effects ('advances debugger execution state'), prerequisites ('requires an active, paused debugger session'), and return value. However, the internal contradiction in the alternatives line undermines the clarity of the behavioral contract.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded and has a logical structure (action, side effects, prerequisites, returns, usage). The alternatives sentence is clunky and contains an error, which makes the text less clean than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers prerequisites, side effects, return type, and use case, which is mostly sufficient for a simple debugging action. But the contradictory alternative guidance leaves unresolved ambiguity about when and how to select this tool versus a step-into operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema sufficiently documents tab_id and instance_id. The description adds no parameter-specific meaning, but per baseline it does not need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence clearly states the tool's action: executing the current line without entering function calls and pausing at the next line. However, the later alternatives line says 'step_over enters functions', which introduces confusion and slightly blurs the primary definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to skip function internals' and names resume and evaluate_on_call_frame as alternatives. But it also lists 'step_over' as an alternative that 'enters functions', which is both not an alternative and contradicts the tool's own behavior, potentially misleading an agent about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_chromeA

Gracefully terminates the Chrome instance selected by 'instance_id' (the default instance when omitted) and closes all its debugging connections. Side effects: destructive - kills the Chrome process of that instance only; its open tabs are closed; unsaved data lost; other instances keep running. Prerequisites: the instance must be running. Returns: termination success confirmation. Use this to clean up resources, prevent zombie processes, or end a debugging session. Alternatives: 'restart_chrome' to restart instead of stop, 'close_instance' to also remove a secondary instance from the registry.

NameRequiredDescriptionDefault
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so excellently. It discloses destructive side effects (kills the process, closes tabs, loses unsaved data), scope (only that instance, others keep running), prerequisites (instance must be running), and return value (success confirmation). This is comprehensive and prevents surprises.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than strictly necessary but every sentence carries relevant information: action, side effects, prerequisites, return, use cases, and alternatives. The core action is front-loaded, and the text is well-structured. While verbose, it is not wasteful, earning a 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers all essential context: what it does, side effects, scope, prerequisites, return value, when to use, and alternatives. An agent has everything needed to call it correctly and anticipate consequences. Complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter (instance_id), and the description repeats the same information ('selected by instance_id', 'default instance when omitted'). No additional semantic meaning is added beyond the schema, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (gracefully terminates) on a specific resource (Chrome instance identified by instance_id), and clearly distinguishes itself from sibling tools like restart_chrome and close_instance by naming them and their different purposes. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('clean up resources, prevent zombie processes, or end a debugging session') and lists alternatives with conditions ('restart_chrome' to restart, 'close_instance' to also remove from registry). This provides clear routing for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

switch_tabA

Switches the active default tab to the specified Tab ID. Side effects: the switched tab becomes the default target of all subsequent tool calls in this instance that omit 'tab_id'; when 'activate' is true it is also brought to the foreground in the Chrome window ('activate' defaults to true). Prerequisites: the tab must exist (see 'list_tabs'). Returns: structured JSON with the new 'active_tab_id' and whether the tab was brought to the foreground. Use this before interacting with a different page without repeating 'tab_id' on every call. Alternatives: pass 'tab_id' directly on an individual tool call to address a tab without switching.

NameRequiredDescriptionDefault
tab_idYesThe Tab ID to switch to (e.g. 'tab-1').
activateNoIf true, brings the tab to the foreground in the browser. Defaults to true.
instance_idNoChrome instance id from open_instance/list_instances. Omit for the default instance.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full disclosure burden. It clearly states side effects (becomes default target, brings to foreground when activate is true), prerequisites (tab must exist, with pointer to list_tabs), and return format (structured JSON with active_tab_id and foreground status). This is thorough and accurate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Each sentence delivers distinct information: action, side effects, defaults, prerequisites, return value, usage guidance, and alternatives. It is front-loaded with the core action and avoids filler. Though slightly long, every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (side effects, defaults, prerequisites, return), the description covers everything an agent needs: what it does, why to use it, what changes state, and what to expect in response. No output schema exists, so the return description is essential and provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema: it explains that tab_id becomes the default for subsequent calls, and that activate defaults to true and controls foregrounding. This enhances understanding of each parameter without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Switches') and a clear resource ('active default tab to the specified Tab ID'). It also differentiates from sibling tools by explaining that unlike passing tab_id directly, this changes the default target, and names alternatives like list_tabs. No ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it: 'before interacting with a different page without repeating tab_id on every call.' Also gives the alternative: 'pass tab_id directly on an individual tool call to address a tab without switching.' Provides both use case and exclusion, which is complete guidance.

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.

  1. 7 tool updatesv1.5.1
    • Removedenable_proxy_auth
    • Changedopen_instance2 fields changed
      • changedInput schema / properties / features / description
        Previous value: -"Optional feature presets (e.g. WEB_MCP, WEBGL_SOFTWARE)."New value: +"Optional feature presets (e.g. WEBGL_SOFTWARE)."
      • changedInput schema / properties / features / items / enum
        Previous value: -[
        -  "WEB_MCP",
        -  "WEBGL_SOFTWARE"
        -]New value: +[
        +  "WEBGL_SOFTWARE"
        +]
    • Changedrestart_chrome2 fields changed
      • changedInput schema / properties / features / description
        Previous value: -"Chrome capability presets to enable on the new instance. Constraints: closed set - 'WEB_MCP' turns on the experimental WebMCP surface for sites that expose tools to the browser; 'WEBGL_SOFTWARE' forces SwiftShader software WebGL for GPU-less environments. Arbitrary Chrome flags are not accepted. Interactions: presets apply only to the instance started by this call and are cleared by a later restart that omits them. Defaults to: [] (no presets)."New value: +"Chrome capability presets to enable on the new instance. Constraints: closed set - 'WEBGL_SOFTWARE' forces SwiftShader software WebGL for GPU-less environments. Arbitrary Chrome flags are not accepted. Interactions: presets apply only to the instance started by this call and are cleared by a later restart that omits them. Defaults to: [] (no presets)."
      • changedInput schema / properties / features / items / enum
        Previous value: -[
        -  "WEB_MCP",
        -  "WEBGL_SOFTWARE"
        -]New value: +[
        +  "WEBGL_SOFTWARE"
        +]
    • Removedwebmcp_get_invocation
    • Removedwebmcp_invoke_tool
    • Removedwebmcp_list_invocations
    • Removedwebmcp_list_tools
  2. 1 tool updatev1.5.0
    • Changedget_network_logs1 field changed
      • addedInput schema / properties / current_navigation_only
        Added value: +{
        +  "description": "Limit results to current navigation only. Constraints: boolean. Interactions: when false, includes up to 3 retained navigations. Defaults to: false.",
        +  "type": "boolean"
        +}
  3. 33 tool updatesv1.3.2
    • Changedcapture_screenshot5 fields changed
      • removedInput schema / properties / format / nullable
        Removed value: -true
      • removedInput schema / properties / full_page / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / quality / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedclick_element2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedclose_tab1 field changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
    • Changedenable_proxy_auth4 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / prewarm_url / nullable
        Removed value: -true
      • removedInput schema / properties / resource_type / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedevaluate_js2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedevaluate_on_call_frame2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedfill_input2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedget_console_logs4 fields changed
      • removedInput schema / properties / clear / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / level_filter / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedget_custom_events3 fields changed
      • removedInput schema / properties / filter_method / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedget_network_logs8 fields changed
      • removedInput schema / properties / clear / nullable
        Removed value: -true
      • removedInput schema / properties / include_details / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
      • removedInput schema / properties / type_filter / nullable
        Removed value: -true
      • removedInput schema / properties / url_filter / nullable
        Removed value: -true
      • removedInput schema / properties / ws_content_filter / nullable
        Removed value: -true
      • removedInput schema / properties / ws_direction_filter / nullable
        Removed value: -true
    • Changedget_performance_metrics2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedinspect_dom5 fields changed
      • removedInput schema / properties / after / nullable
        Removed value: -true
      • removedInput schema / properties / before / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / query / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedlist_tabs1 field changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
    • Changednavigate2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedopen_instance7 fields changed
      • addedInput schema / properties / features / items / enum
        Added value: +[
        +  "WEB_MCP",
        +  "WEBGL_SOFTWARE"
        +]
      • removedInput schema / properties / features / items / oneOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "WEB_MCP"
        -    ]
        -  },
        -  {
        -    "enum": [
        -      "WEBGL_SOFTWARE"
        -    ]
        -  }
        -]
      • addedInput schema / properties / features / items / type
        Added value: +"string"
      • removedInput schema / properties / features / nullable
        Removed value: -true
      • removedInput schema / properties / headless / nullable
        Removed value: -true
      • removedInput schema / properties / label / nullable
        Removed value: -true
      • removedInput schema / properties / proxy / nullable
        Removed value: -true
    • Changedopen_tab3 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / label / nullable
        Removed value: -true
      • removedInput schema / properties / url / nullable
        Removed value: -true
    • Changedpause_on_load2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedprofile_page_performance5 fields changed
      • removedInput schema / properties / action / nullable
        Removed value: -true
      • removedInput schema / properties / disable_cache / nullable
        Removed value: -true
      • removedInput schema / properties / duration_ms / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedreload2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedremove_breakpoint2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedrestart_chrome6 fields changed
      • addedInput schema / properties / features / items / enum
        Added value: +[
        +  "WEB_MCP",
        +  "WEBGL_SOFTWARE"
        +]
      • removedInput schema / properties / features / items / oneOf
        Removed value: -[
        -  {
        -    "enum": [
        -      "WEB_MCP"
        -    ]
        -  },
        -  {
        -    "enum": [
        -      "WEBGL_SOFTWARE"
        -    ]
        -  }
        -]
      • addedInput schema / properties / features / items / type
        Added value: +"string"
      • removedInput schema / properties / features / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / proxy_server / nullable
        Removed value: -true
    • Changedresume2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedscroll6 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / pages / nullable
        Removed value: -true
      • removedInput schema / properties / selector / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
      • removedInput schema / properties / x / nullable
        Removed value: -true
      • removedInput schema / properties / y / nullable
        Removed value: -true
    • Changedsearch_scripts2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedsend_cdp_command3 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / params / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedset_breakpoint6 fields changed
      • removedInput schema / properties / column_number / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / script_hash / nullable
        Removed value: -true
      • removedInput schema / properties / script_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
      • removedInput schema / properties / url / nullable
        Removed value: -true
    • Changedstep_over2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedstop_chrome1 field changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
    • Changedswitch_tab2 fields changed
      • removedInput schema / properties / activate / nullable
        Removed value: -true
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
    • Changedwebmcp_get_invocation2 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedwebmcp_invoke_tool1 field changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
    • Changedwebmcp_list_invocations3 fields changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
      • removedInput schema / properties / status / nullable
        Removed value: -true
      • removedInput schema / properties / tab_id / nullable
        Removed value: -true
    • Changedwebmcp_list_tools1 field changed
      • removedInput schema / properties / instance_id / nullable
        Removed value: -true
  4. 35 tool updatesv1.0.11
    • Changedcapture_screenshot2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Changedclick_element2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedclose_instance
    • Addedclose_tab
    • Changedenable_proxy_auth2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Changedevaluate_js2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Changedevaluate_on_call_frame2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Changedfill_input2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedget_console_logs
    • Changedget_custom_events2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedget_network_logs
    • Addedget_performance_metrics
    • Changedinspect_dom2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedlist_instances
    • Addedlist_tabs
    • Changednavigate2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedopen_instance
    • Addedopen_tab
    • Changedpause_on_load2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Changedprofile_page_performance2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Changedreload2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedremove_breakpoint
    • Changedrestart_chrome2 fields changed
      • addedInput schema / properties / features
        Added value: +{
        +  "description": "Chrome capability presets to enable on the new instance. Constraints: closed set - 'WEB_MCP' turns on the experimental WebMCP surface for sites that expose tools to the browser; 'WEBGL_SOFTWARE' forces SwiftShader software WebGL for GPU-less environments. Arbitrary Chrome flags are not accepted. Interactions: presets apply only to the instance started by this call and are cleared by a later restart that omits them. Defaults to: [] (no presets).",
        +  "items": {
        +    "oneOf": [
        +      {
        +        "enum": [
        +          "WEB_MCP"
        +        ]
        +      },
        +      {
        +        "enum": [
        +          "WEBGL_SOFTWARE"
        +        ]
        +      }
        +    ]
        +  },
        +  "nullable": true,
        +  "type": "array"
        +}
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedresume
    • Addedscroll
    • Changedsearch_scripts2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Changedsend_cdp_command2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedset_breakpoint
    • Changedstep_over2 fields changed
      • addedInput schema / properties / instance_id
        Added value: +{
        +  "description": "Chrome instance id from open_instance/list_instances. Omit for the default instance.",
        +  "nullable": true,
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "The Tab ID of the target tab. Omit to use the active tab.",
        +  "nullable": true,
        +  "type": "string"
        +}
    • Addedstop_chrome
    • Addedswitch_tab
    • Addedwebmcp_get_invocation
    • Addedwebmcp_invoke_tool
    • Addedwebmcp_list_invocations
    • Addedwebmcp_list_tools
  5. 8 tool updatesv1.0.10
    • Removedget_console_logs
    • Removedget_network_logs
    • Removedget_performance_metrics
    • Removedremove_breakpoint
    • Removedresume
    • Removedscroll
    • Removedset_breakpoint
    • Removedstop_chrome
  6. 18 tool updatesv1.0.7
    • Changedcapture_screenshot3 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Optional: Image format. Valid options: \"png\", \"jpeg\", \"webp\". Defaults to \"png\"."New value: +"Output image format. Constraints: must be 'png', 'jpeg', or 'webp'. Interactions: 'quality' applies only to 'jpeg' and 'webp' formats. Defaults to: \"png\"."
      • changedInput schema / properties / full_page / description
        Previous value: -"Optional: Capture the full page layout (beyond the visible viewport). Defaults to false."New value: +"Capture the entire page beyond visible viewport. Constraints: boolean value. Interactions: if true, captures full page height; if false, captures only visible area. Defaults to: false."
      • changedInput schema / properties / quality / description
        Previous value: -"Optional: JPEG or WEBP compression quality (0-100)."New value: +"Compression quality (0-100, higher=better quality). Constraints: integer between 0 and 100. Interactions: only applies when 'format' is 'jpeg' or 'webp'; ignored for 'png'. Defaults to: 100."
    • Changedclick_element1 field changed
      • changedInput schema / properties / selector / description
        Previous value: -"CSS selector for the element to click"New value: +"CSS selector identifying the target element. Constraints: valid CSS selector string matching a single DOM element. Interactions: must resolve to exactly one visible element or operation fails. Defaults to: None (required)."
    • Changedenable_proxy_auth4 fields changed
      • addedInput schema / properties / password / description
        Added value: +"Proxy authentication password. Constraints: non-empty string. Interactions: paired with 'username'; sent to proxy server on auth challenge."
      • addedInput schema / properties / prewarm_url / description
        Added value: +"URL to navigate for proxy pre-warming. Constraints: valid URL (http/https). Interactions: navigated after auth setup to trigger proxy auth flow. Defaults to: \"http://api.ipify.org?format=json\"."
      • addedInput schema / properties / resource_type / description
        Added value: +"Resource type to intercept. Constraints: 'Document', 'Image', 'Script', 'XHR', etc. (Chrome CDP resource types). Interactions: filters which request types trigger auth handling. Defaults to: \"Document\"."
      • addedInput schema / properties / username / description
        Added value: +"Proxy authentication username. Constraints: non-empty string. Interactions: paired with 'password'; sent to proxy server on auth challenge."
    • Changedevaluate_js1 field changed
      • addedInput schema / properties / expression / description
        Added value: +"JavaScript code expression to execute. Constraints: valid JavaScript (single expression or IIFE). Interactions: automatically awaits promises; 'returnByValue' returns serialized results. Defaults to: None (required)."
    • Changedevaluate_on_call_frame1 field changed
      • addedInput schema / properties / expression / description
        Added value: +"JavaScript expression to evaluate in call frame scope. Constraints: valid JavaScript accessing local/closure variables. Interactions: requires active paused debugger session; has access to function parameters and local variables. Defaults to: None (required)."
    • Changedfill_input2 fields changed
      • changedInput schema / properties / selector / description
        Previous value: -"CSS selector for the input element to fill"New value: +"CSS selector identifying the input element. Constraints: valid CSS selector matching an input/textarea/contenteditable element. Interactions: element must be focusable and writable. Defaults to: None (required)."
      • changedInput schema / properties / text / description
        Previous value: -"The text to insert into the input field"New value: +"Text content to insert. Constraints: any string (special chars escaped automatically). Interactions: replaces any existing text after focus; triggers input/change events. Defaults to: None (required)."
    • Changedget_console_logs2 fields changed
      • changedInput schema / properties / clear / description
        Previous value: -"If true, clears the internal console logs cache after retrieving the current logs. Use this to reset the state and only capture new logs going forward."New value: +"Clear console cache after returning logs. Constraints: boolean. Interactions: when true, subsequent calls only return new messages. Defaults to: false."
      • changedInput schema / properties / level_filter / description
        Previous value: -"Optional level filter (e.g., \"error\", \"warning\", \"info\", \"log\")."New value: +"Filter logs by severity level (case-insensitive). Constraints: 'error', 'warning', 'info', 'log', or similar CDP log level. Interactions: when provided, returns only matching level; empty returns all. Defaults to: None (no filtering)."
    • Changedget_custom_events2 fields changed
      • changedInput schema / properties / filter_method / description
        Previous value: -"Optional: Filter events by method name (e.g., 'Target.targetCreated')."New value: +"Filter events by CDP method name (case-sensitive). Constraints: string matching format 'Domain.eventName'. Interactions: when omitted, returns all events. Defaults to: None (no filtering)."
      • changedInput schema / properties / limit / description
        Previous value: -"Optional: Limit the number of events returned (default 100)."New value: +"Maximum number of events to return. Constraints: positive integer (0 = unlimited, clamped to cache size). Interactions: limits result set size. Defaults to: 100."
    • Changedget_network_logs6 fields changed
      • changedInput schema / properties / clear / description
        Previous value: -"If true, clears the internal network logs cache after retrieving the current logs. Use this to reset the state and only capture new traffic going forward."New value: +"Clear network cache after returning logs. Constraints: boolean. Interactions: when true, subsequent calls return only new traffic. Defaults to: false."
      • changedInput schema / properties / include_details / description
        Previous value: -"If true (default), returns full details including request/response headers, response bodies for REST, and full payloads for WebSockets. If false, returns a summary containing only the URL, method, status, statusText, and resourceType (or payload length for WS). Set to false when you just need to survey what requests were made without downloading all their contents."New value: +"Include full request/response details. Constraints: boolean. Interactions: when false, returns summary only (URL, method, status); when true, includes headers, bodies. Defaults to: true."
      • changedInput schema / properties / type_filter / description
        Previous value: -"Select the type of network traffic to retrieve. Valid options: \"rest\" (only REST/HTTP requests), \"websocket\" (only WebSocket frames), or \"both\" (default)."New value: +"Traffic type to include. Constraints: 'rest', 'websocket', or 'both' (case-insensitive). Interactions: limits results to specified type. Defaults to: \"both\"."
      • changedInput schema / properties / url_filter / description
        Previous value: -"Filter by URL content. Only requests or WebSocket connections whose URL contains this exact string (case-insensitive) will be returned. Leave empty to disable URL filtering."New value: +"Partial URL match (case-insensitive). Constraints: non-empty string. Interactions: filters both REST and WebSocket URLs; empty string disables filtering. Defaults to: None (no URL filtering)."
      • changedInput schema / properties / ws_content_filter / description
        Previous value: -"Filter WebSocket frames by their payload content. Only frames whose payload data contains this exact string (case-insensitive) will be returned."New value: +"WebSocket payload substring match (case-insensitive). Constraints: non-empty string. Interactions: applies only when type_filter includes 'websocket'; filters by payload content. Defaults to: None (no content filtering)."
      • changedInput schema / properties / ws_direction_filter / description
        Previous value: -"Filter WebSocket frames by their transmission direction. Valid options: \"sent\" (client to server), \"received\" (server to client), or \"both\" (default)."New value: +"WebSocket frame direction filter. Constraints: 'sent', 'received', or 'both'. Interactions: applies only when type_filter includes 'websocket'. Defaults to: \"both\"."
    • Changedinspect_dom3 fields changed
      • changedInput schema / properties / after / description
        Previous value: -"Optional: Number of characters to include after the match (default 200)"New value: +"Characters to include after the match. Constraints: non-negative integer. Interactions: only applies if 'query' provided. Defaults to: 200."
      • changedInput schema / properties / before / description
        Previous value: -"Optional: Number of characters to include before the match (default 200)"New value: +"Characters to include before the match. Constraints: non-negative integer. Interactions: only applies if 'query' provided. Defaults to: 200."
      • changedInput schema / properties / query / description
        Previous value: -"Optional: Search for this specific text within the DOM"New value: +"Text pattern to search for in the DOM (case-sensitive). Constraints: any string. Interactions: when provided, returns context snippet instead of full HTML. Defaults to: None (returns full HTML if omitted)."
    • Changednavigate1 field changed
      • addedInput schema / properties / url / description
        Added value: +"Target URL to navigate to. Constraints: valid absolute URL (http/https/file). Interactions: navigation is blocked if MCP server started with 'local' flag and URL is not localhost/127.0.0.1/192.168.x.x/*.local. Defaults to: None (required)."
    • Changedprofile_page_performance3 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform right after starting the trace. Can be \"none\" (default) or \"reload\"."New value: +"Action to trigger during tracing. Constraints: 'none' or 'reload'. Interactions: 'reload' restarts page recording from initial load (useful with disable_cache=true). Defaults to: \"none\"."
      • changedInput schema / properties / disable_cache / description
        Previous value: -"If true, disables the network cache before profiling and restores it after. Useful with action=\"reload\" to simulate a cold start."New value: +"Disable network cache during trace. Constraints: boolean. Interactions: when true with action='reload', simulates cold start; cache restored after profiling. Defaults to: false."
      • changedInput schema / properties / duration_ms / description
        Previous value: -"Duration to record the trace in milliseconds. Defaults to 3000ms. Keep it between 1000 and 10000."New value: +"Recording duration in milliseconds. Constraints: integer between 500 and 15000. Interactions: longer duration captures more data; use 3000-5000 for typical pages. Defaults to: 3000."
    • Changedremove_breakpoint1 field changed
      • addedInput schema / properties / breakpoint_id / description
        Added value: +"Unique identifier of the breakpoint (returned from set_breakpoint). Constraints: non-empty string matching format from set_breakpoint response. Interactions: must correspond to an active breakpoint or operation will fail."
    • Changedrestart_chrome1 field changed
      • addedInput schema / properties / proxy_server / description
        Added value: +"Proxy server URL (e.g., 'http://proxy.example.com:8080'). Constraints: valid proxy URL with protocol and port. Interactions: applied to new Chrome instance; requires 'enable_proxy_auth' for authenticated proxies. Defaults to: None (no proxy)."
    • Changedscroll4 fields changed
      • changedInput schema / properties / pages / description
        Previous value: -"Optional: Number of viewport heights to scroll vertically"New value: +"Number of viewport heights to scroll vertically. Constraints: positive float (e.g., 1.5 = 1.5× viewport height). Interactions: takes precedence over 'y' parameter if both provided; ignored if 'selector' provided. Defaults to: None."
      • changedInput schema / properties / selector / description
        Previous value: -"Optional: CSS selector of the element to scroll into view"New value: +"CSS selector of element to scroll into view. Constraints: valid CSS selector string. Interactions: takes precedence over 'x', 'y', 'pages' if provided; fails if element not found. Defaults to: None."
      • changedInput schema / properties / x / description
        Previous value: -"Optional: Number of pixels to scroll horizontally (positive for right, negative for left)"New value: +"Horizontal scroll distance in pixels. Constraints: integer (positive=right, negative=left). Interactions: ignored if 'selector' is provided; combined with 'y' for diagonal scrolling. Defaults to: 0 (no horizontal scroll)."
      • changedInput schema / properties / y / description
        Previous value: -"Optional: Number of pixels to scroll vertically (positive for down, negative for up)"New value: +"Vertical scroll distance in pixels. Constraints: integer (positive=down, negative=up). Interactions: ignored if 'selector' or 'pages' is provided; overridden by 'pages'. Defaults to: 0 (no vertical scroll)."
    • Changedsearch_scripts1 field changed
      • addedInput schema / properties / query / description
        Added value: +"Text pattern or special command to search for. Constraints: non-empty string (empty string returns cached script count). Interactions: '@source' returns first 1000 chars of each script; 'debug' returns script lengths and errors. Defaults to: None (required)."
    • Changedsend_cdp_command2 fields changed
      • changedInput schema / properties / method / description
        Previous value: -"The CDP method name (e.g., 'DOM.getDocument')."New value: +"CDP protocol method name (e.g., 'DOM.getDocument', 'Runtime.evaluate'). Constraints: valid CDP domain.method format. Interactions: method must be recognized by Chrome protocol version."
      • changedInput schema / properties / params / description
        Previous value: -"A JSON string representing the parameters for the CDP command (e.g., '{\"url\": \"https://example.com\"}'). Omit or provide '{}' if no parameters are needed."New value: +"JSON-formatted parameters for the CDP command. Constraints: valid JSON object string. Interactions: Page.navigate URLs subject to local-only restrictions; empty string or '{}' for no parameters. Defaults to: None."
    • Changedset_breakpoint5 fields changed
      • addedInput schema / properties / column_number / description
        Added value: +"Column number within the line. Constraints: non-negative integer. Interactions: optional; narrower precision if provided. Defaults to: start of line (0)."
      • addedInput schema / properties / line_number / description
        Added value: +"Line number where breakpoint is set (0-indexed). Constraints: non-negative integer, must be within script bounds. Interactions: required parameter; combined with 'column_number' to pinpoint exact location."
      • addedInput schema / properties / script_hash / description
        Added value: +"Script hash to identify the target script. Constraints: one of 'script_hash', 'script_id', or 'url' must be provided. Defaults to: None."
      • addedInput schema / properties / script_id / description
        Added value: +"Script ID (from Debugger.scriptParsed event). Constraints: one of 'script_hash', 'script_id', or 'url' must be provided. Interactions: mutually exclusive with 'script_hash' and 'url' (first match wins). Defaults to: None."
      • addedInput schema / properties / url / description
        Added value: +"Script URL to match. Constraints: one of 'script_hash', 'script_id', or 'url' must be provided. Interactions: mutually exclusive with 'script_hash' and 'script_id'. Defaults to: None."
  7. 24 tool updatesv1.0.0
    • First observedcapture_screenshot
    • First observedclick_element
    • First observedenable_proxy_auth
    • First observedevaluate_js
    • First observedevaluate_on_call_frame
    • First observedfill_input
    • First observedget_console_logs
    • First observedget_custom_events
    • First observedget_network_logs
    • First observedget_performance_metrics
    • First observedinspect_dom
    • First observednavigate
    • First observedpause_on_load
    • First observedprofile_page_performance
    • First observedreload
    • First observedremove_breakpoint
    • First observedrestart_chrome
    • First observedresume
    • First observedscroll
    • First observedsearch_scripts
    • First observedsend_cdp_command
    • First observedset_breakpoint
    • First observedstep_over
    • First observedstop_chrome

TDQS

A3.9/5.0

Scored across 30 tools

Disambiguation4/5

The tools target largely distinct resource+action pairs (breakpoint control, tab/instance lifecycle, DOM interaction, observability). The only mild overlaps are stop_chrome vs close_instance and get_performance_metrics vs profile_page_performance, but descriptions clearly differentiate the destructive/scope differences. No tool appears to duplicate another's purpose.

Naming Consistency4/5

Names overwhelmingly follow a consistent snake_case verb_noun pattern (set_breakpoint, list_tabs, open_instance, get_network_logs). A handful of single-verb names (resume, reload, navigate, scroll) deviate slightly but remain clear and readable.

Tool Count3/5

At 30 tools this is on the heavy side, above the comfortable 15-tool range. However, the surface spans four genuinely distinct domains (instances, tabs, DOM/debugger, observability) plus two raw escape hatches, so most tools map to real capabilities rather than filler. Borderline but defensible.

Completeness4/5

Coverage is strong: instance open/stop/restart/close/list, tab open/close/switch/list, DOM inspection, click/fill/scroll, full debugger stepping and breakpoints, plus network/console/perf observability and CDP escape hatches. Minor gaps like dialog/file-upload/cookie handling remain, but core debug workflows are complete.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers