Chrome Browser Control
Chrome 브라우저 제어
stdio MCP 호스트를 위한 로컬 Chrome 프로필 제어.
이 프로젝트는 루프백 WebSocket 브로커에 연결된 Manifest V3 Chrome 확장 프로그램을 통해 브라우저 제어 MCP 도구를 제공합니다. 확장 프로그램에 입력한 것과 동일한 페어링 토큰으로 stdio 어댑터를 실행하도록 MCP 호스트를 구성하세요.
저장소: https://github.com/vkongv/chrome-browser-control
사전 요구 사항
Node.js 18+
Google Chrome
Related MCP server: OpenCode in Chrome
설치 및 설정
권장 경로: CLI를 설치한 후 setup을 실행합니다.
npm install -g chrome-browser-control
# or, without a global install:
npx -y chrome-browser-control setupCLI는 cbctl(권장 약칭) 및 chrome-browser-control로 설치됩니다.
cbctl setup
cbctl start
cbctl doctorsetup은 ~/.chrome-browser-control/config.env(페어링 토큰 + 포트)를 작성하고, 압축 해제된 확장 프로그램을 ~/.chrome-browser-control/extension에 복사하며, MCP 호스트 스니펫을 출력합니다. 해당 디렉터리를 커밋하지 마세요.
에이전트 스킬(npm과 별도)
skills/chrome-browser-control/ 아래의 런타임 에이전트 스킬은 npm 패키지에 포함되지 않습니다. CLI 설치 후, 에이전트 호스트가 스킬을 사용하는 경우 이 저장소(또는 skills.sh)에서 스킬을 얻으세요.
CLI 명령어(cbctl 또는 chrome-browser-control):
명령어 | 용도 |
| 사용자 구성 생성 및 확장 프로그램 복사본 설치 |
| 공유 루프백 브로커 시작 |
| 브로커 중지 |
| 브로커 / 구성 상태 표시 |
| 로컬 설정 검사기 |
| stdio MCP 어댑터(기본적으로 연결 전용) |
| 호스트별 MCP 스니펫 출력 |
| 포그라운드에서 브로커 실행(개발) |
git 체크아웃에서(기여자):
git clone https://github.com/vkongv/chrome-browser-control.git
cd chrome-browser-control
npm install
npm run build
node dist/cli/main.js setup저장소 로컬 npm run broker / npm run mcp는 TypeScript 소스에 대한 개발용으로 계속 사용할 수 있습니다(선택적 저장소 .env.local 포함).
환경 변수
CHROME_BROWSER_CONTROL_TOKEN— 필수. 브로커, MCP 어댑터 및 확장 프로그램 팝업이 공유하는 높은 엔트로피 페어링 토큰.CHROME_BROWSER_CONTROL_PORT— WebSocket 브로커 포트(기본값8765).CHROME_BROWSER_CONTROL_HOST— 브로커용 루프백 호스트(기본값127.0.0.1).CHROME_BROWSER_CONTROL_EXTENSION_ID— 선택 사항. 브로커를 설치된 하나의 확장 프로그램 ID로 고정합니다.CHROME_BROWSER_CONTROL_AUTOLOAD— 선택 사항.1로 설정하면mcp가 연결 가능한 브로커가 없을 때 브로커를 생성할 수 있습니다(복구). 일반 사용에는cbctl start를 선호합니다.CHROME_BROWSER_CONTROL_DISABLE_LOCAL_ENV— 선택 사항.1로 설정하면 저장소.env.local로드를 건너뜁니다.
사용자 구성은 ~/.chrome-browser-control/ 아래에 있으며 저장소 .env.local보다 먼저 로드됩니다. 프로세스 환경 변수가 항상 우선합니다.
MCP 연결 전용 기본값: cbctl mcp는 이미 실행 중인 브로커에 연결합니다. 먼저 cbctl start로 브로커를 시작하세요. 복구의 경우 cbctl mcp --autoload 또는 CHROME_BROWSER_CONTROL_AUTOLOAD=1을 사용하세요.
확장 프로그램 로드
MCP 도구로 제어하려는 프로필로 Chrome을 엽니다.
chrome://extensions로 이동합니다.개발자 모드를 활성화합니다.
"압축 해제된 확장 프로그램을 로드합니다"를 클릭합니다.
~/.chrome-browser-control/extension을 선택합니다(setup이 출력). 소스를 편집하는 기여자는 저장소의extension/을 대신 로드할 수 있습니다.Chrome Browser Control 확장 프로그램 팝업을 엽니다.
로컬 포트를 변경하지 않은 경우 브리지 URL을
ws://127.0.0.1:8765로 유지합니다.생성된 페어링 토큰을 붙여넣습니다.
https://example.com,http://localhost:3000또는 모든 일반http://및https://페이지에 대해*와 같은 허용된 출처를 추가합니다."저장 후 다시 연결"을 클릭합니다.
확장 프로그램은 허용된 출처에 대한 호스트 권한을 요청할 수 있습니다. 해당 요청을 거부하면 해당 출처에 대한 페이지 작업이 차단됩니다.
* 사용은 로컬 개발에 편리하지만 현재 Chrome 프로필의 모든 일반 웹 페이지를 MCP 도구에 노출합니다. 몇 개의 사이트만 필요한 경우 명시적 출처를 선호하세요. 와일드카드 모드는 또한 Chrome이 chrome.tabs.captureVisibleTab을 통해 표시되는 뷰포트 스크린샷을 허용하도록 선택적 <all_urls> 호스트 권한을 요청합니다. 백그라운드는 캡처 전에 비-http(s) URL 및 허용되지 않은 출처를 계속 차단합니다.
MCP 호스트 구성
cbctl setup(또는 mcp-config)의 스니펫을 Cursor, Claude Desktop, Codex 또는 다른 stdio MCP 호스트에 붙여넣습니다. 나중에 호스트별 구성을 다시 출력하려면:
cbctl mcp-config --host cursor
cbctl mcp-config --host claude
cbctl mcp-config --host codex
cbctl mcp-config --host yamlMCP 서버 키는 chrome_browser_control입니다. 어댑터 명령어는 설치 가능한 CLI(cbctl 권장)이며 args: ["mcp"]를 사용합니다 — server/index.ts에 대한 tsx가 아닙니다.
YAML 스타일 예시:
mcp_servers:
chrome_browser_control:
command: "cbctl"
args: ["mcp"]
env:
CHROME_BROWSER_CONTROL_TOKEN: "<generated-token>"
CHROME_BROWSER_CONTROL_PORT: "8765"
timeout: 60
connect_timeout: 30JSON 스타일 예시:
{
"mcpServers": {
"chrome_browser_control": {
"command": "cbctl",
"args": ["mcp"],
"env": {
"CHROME_BROWSER_CONTROL_TOKEN": "<generated-token>",
"CHROME_BROWSER_CONTROL_PORT": "8765"
}
}
}
}CLI가 PATH에 없으면 setup이 출력하는 NPX 대체를 사용하세요: npx와 args: ["-y", "chrome-browser-control", "mcp"].
MCP 호스트가 구성 파일을 사용하는 경우 비공개로 유지하고 저장소 외부에 두세요.
확인
브로커 시작:
cbctl start설정 검사기 실행:
cbctl doctorMCP 호스트에서
browser_status도구를 호출하여 확인합니다. 준비되면extension.status및ping.status가 활성 브리지 연결을 반영하고,extension.allowedOrigins가 구성된 범위를 표시해야 합니다.
도구
browser_status: MCP 어댑터가 브로커에 도달할 수 있는지, Chrome 확장 프로그램이ping에 응답하는지 확인합니다. 준비되면extension.status및ping.status가 활성 브리지 연결(오래된 연결 끊김 기본값이 아닌)을 반영하고,extension.allowedOrigins는 구성된 범위(와일드카드 모드가 활성화된 경우* (모든 http/https 웹 출처)포함)를 표시하며,extension.session은 세션 이름/클레임된 탭을 표시하고,protocolVersion/features는 로드된 압축 해제 확장 프로그램 코드를 확인합니다. 프로토콜 버전6에는document-targeting기능 마커가 포함됩니다.name_session: 상태/디버깅을 위한 사람이 읽을 수 있는 세션 이름을 설정합니다.list_tabs: URL 출처가 확장 프로그램 팝업에서 허용된 탭을 나열합니다. 열린 모든 탭이 필터링되면 빈[]대신{ tabs: [], detail, hiddenTabCount, allowedOrigins? }를 반환합니다. 와일드카드 모드는allowedOrigins에 명확하게 표시됩니다.list_frames: Chrome의 프레임 레지스트리를 사용하여 허용된 탭의 현재 프레임 문서를 나열합니다. 작동 가능한 활성 HTTP(S) 문서에는documentId가 포함됩니다. 정책 차단, 호스트 권한 거부, 지원되지 않음, 펜스 및 비활성 행은 계층/상태만 유지하고 URL 및 문서 ID를 삭제합니다.claim_tab: 이 브라우저 제어 세션에 허용된 탭을 클레임하고sessionTabId를 반환합니다. 클레임은 라우팅 상태이지 배타적 브라우저 잠금이 아닙니다.release_tab: 탭을 닫지 않고sessionTabId또는tabId로 클레임을 해제합니다.finalize_tabs: 탭을 닫지 않고 세션의 클레임 상태를 해제합니다. 핸드오프/전달 클레임을 보존하려면keep항목을 전달하세요.snapshot: 허용된 문서의 단순화된 DOM 스냅샷을 반환합니다. 기본적으로 간결한 자동화 스냅샷으로 간결한 실행 가능 요소, 텍스트 미리보기(500자), 생략 횟수 및 영역 요약이 포함됩니다. 자세한 요소 메타데이터와text필드(기본 4000자)를 위해mode: "full"을 전달하세요. 뷰포트/교차 인식 요소와 경계 및 스크롤 메타데이터를 위해mode: "visible"을 전달하세요. 더 많은 페이지 본문 텍스트가 필요하면textLimit(최대100000)을 전달하세요 — 콘텐츠가 잘렸는지textBytesOmitted를 확인하세요.visible_snapshot:snapshot({ mode: "visible" })용 편의 도구.navigate: 활성 탭 또는 지정된tabId를 허용된 URL로 탐색한 다음 가능할 때 탭 로드 완료를 기다립니다. 기본적으로 포커스는 변경되지 않습니다(백그라운드 탭은 백그라운드에 유지되고 포커스된 탭은 비활성화되지 않음). 탭이 표시되어야 하는 경우에만active: true를 전달하세요. 로드 시간이 초과되면 결과에pending: true및warning이 포함됩니다. 로드 대기 후after관찰을 지원합니다.click: 허용된 탭에서 스냅샷 참조로 요소를 클릭합니다.after관찰을 지원합니다.type: 허용된 탭에서 스냅샷 참조로 요소에 입력합니다. 비밀번호 유사 필드는force=true가 아니면 차단됩니다.after관찰을 지원합니다.scroll: 허용된 탭을deltaX및deltaY로 스크롤합니다. 선택적x/y뷰포트 좌표는 해당 지점 아래의 스크롤 가능한 요소가 발견되면 스크롤합니다. 스크롤은 스냅샷 텍스트를 페이지 매김하지 않습니다 — 스냅샷은 전체document.bodyinnerText를 사용합니다. 페이지가 콘텐츠를 지연 로드하지 않는 한 스크롤 스티칭 대신snapshot에서textLimit을 높이세요.after관찰을 지원합니다.query_elements: CSS 선택기, 역할, 텍스트 및 가시성으로 필터링된 요소에 대한 경계 참조/역할/레이블/경계를 반환합니다.extract_elements: CSS 선택기에서 경계 텍스트/HTML/링크/시간 데이터를 추출합니다. HTML 추출은 비밀번호/OTP/숨겨진 토큰 속성 값을 삭제하고 비밀 값을 누출하는 대신 민감한 항목을 표시합니다. 이는 원시 JavaScript 평가의 지원되는 대안입니다.screenshot: 허용된 탭의 표시되는 뷰포트를 데이터 URL로 캡처합니다. 선택적ref또는bounds(+padding)는 캡처 후 자릅니다. 빈 자르기는captureVisibleTab전에 실패합니다. 자르지 않은 응답은 자르기 필드를 생략합니다. MV3 캡처는 뷰포트 전용입니다. 비활성 대상 탭은 캡처 전에 활성화될 수 있습니다. Chrome은captureVisibleTab에<all_urls>또는activeTab이 필요합니다. 이 확장 프로그램은 와일드카드(*) 모드에서만 선택적<all_urls>를 요청하므로 와일드카드 스크린샷에는 해당 팝업 권한이 필요합니다.keypress: 일반적인 DOM 키보드 이벤트를 페이지에 전달합니다. 브라우저/OS 수준 단축키는 MV3에서 보장되지 않습니다.after관찰을 지원합니다.click_at: 뷰포트 좌표에서 마우스 이벤트를 전달합니다.after관찰을 지원합니다.wait_for: 경계 선택기/텍스트/URL 하위 문자열 조건을 기다리고 일치/시간 초과 증거를 반환합니다.page_status: 제목, URL, 준비/가시성 상태, 뷰포트/스크롤 상태 및 시작자 유형별 리소스 수를 반환합니다. 요청 헤더나 응답 본문은 노출하지 않습니다.console_logs: 콘텐츠 스크립트가 주입된 후 캡처된 경계 콘솔 로그를 반환합니다. 이전 페이지 콘솔 기록은 볼 수 없습니다.collect_scroll: 경계 수의 단계를 스크롤하고(until이 설정된 경우 하드 상한), 각 단계에서 선택된 요소를 추출하고, 선택적으로scroll을 통해 중첩 스크롤 컨테이너를 대상으로 하고, 집계 항목 상한(maxItems, 기본 100)을 적용하고, 지연 피드의 경우 텍스트 또는 href로 선택적으로 중복 제거합니다. 선택적until.noNewItemsForSteps/until.stopBeforeDatetime(ISO-8601,includeTimes필요)은stoppedReason을 설정합니다. 결과에는 생략/잘림 횟수가 포함됩니다.after관찰을 지원합니다.perform_actions: 하나의 브로커 왕복에서 최대 10개의 순차 페이지 작업(click,type,scroll,keypress)을 실행합니다. 첫 번째 단계 오류에서 빠르게 실패합니다. 터미널after관찰은 모든 단계가 성공할 때만 실행됩니다. 좌표 클릭은 단일 도구click_at에 유지됩니다. 단계는after,tabId또는sessionTabId를 전달할 수 없습니다.
프레임 문서 대상 지정
DOM/콘텐츠 도구는 list_frames가 반환한 선택적 documentId를 허용합니다. 생략하면 기존 동작을 유지하고 각 작업에 대해 현재 최상위 문서를 대상으로 합니다. 제공하면 해당 정확한 문서를 선택합니다. iframe이 탐색되거나, 사라지거나, 다른 탭으로 이동하거나, 지원되지 않게 되거나, 액세스가 손실되면 동일한 frameId를 사용하는 대체 항목이나 최상위 프레임으로 대체하는 대신 작업이 실패합니다.
모든 콘텐츠 결과에는 documentId, frameId, isTopFrame, coordinateSpace가 함께 제공됩니다. 최상위 프레임 좌표는 tabViewport를 사용하고, iframe의 visible_snapshot 경계, click_at, 좌표 스크롤은 frameViewport를 사용합니다. iframe 로컬 경계는 스크린샷 자르기에 전달할 수 없습니다. screenshot은 여전히 탭 뷰포트 전용 도구이기 때문입니다. navigate, screenshot, list_frames는 탭 대상만 허용합니다. perform_actions.documentId는 전체 배치에 적용되며 개별 단계에서 재정의할 수 없습니다.
문서 실패는 다음 접두사 중 하나를 유지하며, 배치 단계 오류 및 after 실패 내부에서도 포함됩니다: DOCUMENT_STALE:, DOCUMENT_POLICY_DENIED:, DOCUMENT_HOST_PERMISSION_DENIED:, 또는 DOCUMENT_UNSUPPORTED:. V1은 활성 HTTP(S) 최상위/서브프레임 문서만 지원합니다. about:blank, about:srcdoc, blob:, data:, 원본 폴백 프레임, iframe 탐색, iframe-to-tab 스크린샷 좌표 변환은 의도적으로 제외됩니다.
실행 후 관찰
액션 도구 navigate, click, type, scroll, keypress, click_at, collect_scroll, perform_actions는 선택적 after 객체를 허용합니다. 확장 프로그램은 기본 액션을 콘텐츠 스크립트로 보내기 전에 after를 제거한 다음, 요청된 관찰을 waitFor, snapshot, pageStatus 순서로 실행합니다. 응답은 기본 액션 결과와 관찰 결과가 포함된 after 객체입니다.
perform_actions의 경우 after는 전체 배치에만 적용됩니다. 개별 단계는 after를 포함할 수 없으며, 단계가 실패하면 터미널 관찰이 건너뜁니다. 부분 배치 실패는 failedIndex와 completedCount가 포함된 구조화된 단계 결과를 반환하면서 브리지 수준의 성공을 유지하여 에이전트가 페이로드를 검사할 수 있도록 합니다.
{
"ref": "h12",
"after": {
"waitFor": { "selector": ".results", "timeoutMs": 5000 },
"snapshot": { "mode": "visible", "limit": 40 },
"pageStatus": true
}
}after.waitFor는 text, selector, 또는 urlIncludes 중 하나 이상을 포함해야 합니다. timeoutMs는 선택 사항이며 20000으로 제한되어 전체 실행-후-관찰 체인이 기본 브로커 요청 시간 제한 내에 유지됩니다. after.snapshot은 기본 스냅샷 옵션의 경우 true, 또는 mode, textLimit, limit가 포함된 객체일 수 있습니다. 잘못된 after 요청은 기본 액션이 실행되기 전에 거부됩니다.
기본 액션이 성공했지만 after 관찰이 실패한 경우에도 응답에는 기본 액션 결과가 포함되며 after는 { "ok": false, "error": "..." }로 설정됩니다.
스냅샷 모드 및 참조
기본 컴팩트 스냅샷은 모델 컨텍스트 사용을 줄이면서 브라우저 자동화를 유지하도록 설계되었습니다. 컴팩트 스냅샷은 다음과 같습니다:
{
"title": "Example Domain",
"url": "https://example.com/",
"mode": "compact",
"elements": [{ "ref": "h1", "role": "link", "label": "Learn more" }],
"omittedElements": 0,
"textPreview": "Example Domain ...",
"textBytesOmitted": 0,
"regions": []
}레거시 상세 요소 메타데이터가 필요할 때만 전체 모드를 사용하세요:
{ "mode": "full", "tabId": 123 }뷰포트 기반 작업, 가상화된 페이지, 클릭 좌표 계획에는 가시 모드를 사용하세요:
{ "mode": "visible", "sessionTabId": "tab-1" }긴 페이지 콘텐츠(예: API 문서)를 읽으려면 브로커 스크립트나 CDP 우회를 사용하는 대신 textLimit를 높이세요:
{ "mode": "full", "textLimit": 100000, "tabId": 123 }컴팩트 모드도 textLimit를 지원합니다. 본문 텍스트는 textPreview로 반환됩니다(컴팩트 모드에는 text 필드가 없습니다). textBytesOmitted가 0보다 크면 textLimit를 높이거나, 콘텐츠가 레이지 로딩되는 경우에만 페이지를 스크롤하고 다시 스냅샷을 찍으세요.
참조는 문서 내 메모리 ID(h...)로, 요소 ID에서 할당되며 출력 순서가 아닙니다. 동일한 문서 내에서 DOM 삽입/재정렬 시에도 안정적으로 유지되며, click/type은 콘텐츠 스크립트의 참조 저장소를 통해 해결됩니다. 참조는 프레임 문서 간에 충돌할 수 있으므로 결과의 documentId를 유지하고 이후 iframe 작업과 함께 전달하세요. 다른 페이지로 이동하면 새 문서가 로드되므로 이전 참조는 깔끔하게 실패할 것으로 예상됩니다. 탐색이나 주요 페이지 변경 후에는 새 스냅샷을 찍으세요. 참조 저장소는 연결이 끊기거나 만료되거나 용량을 초과한 항목을 정리하고, 오래된 data-cbc-ref 속성을 제거하여 정리된 참조가 실수로 재사용되지 않도록 합니다.
탭 세션
다단계 브라우저 작업 전에 claim_tab을 선호하세요:
{ "tabId": 123 }반환된 sessionTabId는 snapshot, navigate, click, type, scroll, query_elements, extract_elements, screenshot, wait_for 및 관련 페이지 도구에 전달할 수 있습니다. 세션에 현재 클레임이 있는 경우, 명시적인 tabId나 sessionTabId 없이 페이지 액션을 수행하면 해당 클레임으로 라우팅됩니다. 클레임이 없으면 레거시 활성 탭 폴백이 유지됩니다.
클레임은 정보 제공용 MCP 라우팅 상태일 뿐입니다. 사용자가 탭을 변경, 닫기 또는 탐색하는 것을 막지 않습니다. 작업이 완료되면 release_tab 또는 finalize_tabs를 사용하세요. 두 도구 모두 브라우저 탭을 닫지 않습니다.
개발 확인
npm test
npm run build
cbctl doctor
# or: node dist/cli/main.js doctor
npm run benchmark:compact-snapshots
npm auditnpm run benchmark:snapshots는 동일한 컴팩트-vs-전체 벤치마크의 별칭입니다. 벤치마크는 컴팩트 바이트, 전체 바이트, 감소 비율을 출력합니다. 컴팩트 모드는 밀집 픽스처에서 최소 50% 더 작아야 합니다.
extension/ 아래 파일을 편집한 후 브라우저 e2e 확인을 실행하기 전에 chrome://extensions에서 압축 해제된 확장 프로그램을 다시 로드하세요. 어댑터/서버 변경 후 MCP 호스트도 다시 빌드하고 다시 시작하세요. 오래된 로드된 백그라운드 서비스 워커나 도구 카탈로그가 이전 동작을 계속 제공할 수 있습니다. browser_status는 양쪽이 최신일 때 adapter.registeredToolCount: 24, 확장 프로토콜 버전 6, document-targeting 기능 마커를 보고해야 합니다.
제한 사항
이는 다중 사용자 인증이 아닌 공유 로컬 토큰을 사용하는 프로토타입입니다.
브라우저 도구 호출은 브로커에서 전역적으로 직렬화됩니다.
콘텐츠 스크립트는 전체 Chrome 접근성 트리가 아닌 DOM 스냅샷을 사용합니다.
참조는 문서 범위의 메모리 내 핸들입니다. 탐색, 다시 로드, 주요 DOM 변경 또는 오래된 참조 오류 후에
snapshot을 다시 실행하세요.표시 스크린샷은 뷰포트 전용입니다. 비활성 탭을 캡처하면 Chrome MV3가 창에서 표시된 탭을 캡처하기 때문에 탭이 활성화될 수 있습니다.
Chrome 스크린샷 캡처에는
<all_urls>또는activeTab이 필요합니다. 이 프로젝트는 와일드카드 스크린샷에만 호스트 권한으로 선택적<all_urls>를 요청합니다.screenshot에서 이 권한이 없다고 보고하면 매니페스트 업데이트 후 확장 프로그램을 다시 로드하고, 팝업을 열고, 설정을 저장하고, 프롬프트를 승인하세요.keypress와click_at은 CDP 입력 디스패치가 아닌 DOM 이벤트를 사용합니다. 페이지 핸들러에는 유용하지만 특권 브라우저 단축키나 모든 프레임워크별 입력 경로를 트리거하지 않을 수 있습니다.콘솔 로그는 콘텐츠 스크립트 주입 후에만 캡처되며 제한됩니다.
리소스 요약은 Performance API의 개수만 제공합니다. 요청 헤더, 응답 본문, 쿠키, 저장소, 기록, 북마크, 다운로드는 의도적으로 노출되지 않습니다.
브라우저 기록, 북마크, 다운로드, 쿠키 도구는 의도적으로 노출되지 않습니다.
보안
기본 토큰은 허용되지 않습니다. 브로커와 MCP 어댑터 모두에 대해
CHROME_BROWSER_CONTROL_TOKEN을 높은 엔트로피의 URL 안전 값으로 설정한 다음 동일한 값을 확장 프로그램 팝업에 붙여넣으세요.브로커는 루프백 호스트(
127.0.0.1,localhost, 또는::1)에만 바인딩됩니다.확장 프로그램은 선택적 포트와 함께
ws://127.0.0.1,ws://localhost, 또는ws://[::1]에만 연결합니다.페이지 접근은 팝업에서 구성된 허용된 출처로 제한됩니다.
https://example.com과 같은 명시적 항목을 사용하거나, 모든 일반http://및https://웹 페이지를 허용하려면*를 입력하세요. 구성된 범위 밖의 탭 및 페이지 액션은 차단됩니다.허용된 출처 확인은 콘텐츠 액션, 스크린샷, 탭 클레임 전에 확장 프로그램 백그라운드에서 수행됩니다.
비밀번호 및 OTP 필드는 입력 유형, 자동 완성, 이름, ID, 레이블, 플레이스홀더로 감지됩니다.
type은force=true가 아닌 한 차단합니다.선택적
CHROME_BROWSER_CONTROL_EXTENSION_ID는 브로커를 하나의 설치된 확장 프로그램 ID로 고정합니다.CDP 폴백은 확장 프로그램 페어링을 우회하므로 MCP 어댑터에서 지원되지 않습니다.
브로커를 루프백이 아닌 인터페이스에 바인딩하거나 토큰, 로컬 구성 파일, 로그, 개인 설정 메모를 커밋하지 마세요.
유지보수자 게시
첫 번째 공개 npm 릴리스는 수동입니다. 유지보수자는 docs/publish-checklist.md를 따릅니다. 기본 릴리스 경로에 대해 CI에 푸시 시 자동 게시나 장기 npm 토큰을 추가하지 마세요.
Available Tools
30 toolsactivate_tabActivate Chrome tabA
Focus an allowed tab and its window without navigating. Waits until the document reports visibilityState visible or a short timeout elapses. Returns visibilityState and visible; reason is present only when visible is false. focused is not success. Use this when click/type fail with DOCUMENT_HIDDEN. Pass allowHidden=true only when visibilityState is hidden. If reason is host_permission_denied or document_unavailable, grant permission or reload; allowHidden will not help. Does not change the page URL.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
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 thoroughly. It discloses the waiting behavior (timeout), the return fields (visibilityState, visible, reason), the fact that 'focused is not success', and that it does not change the URL. It also covers permission-denied and document-unavailable scenarios.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the core purpose, then covers conditions, usage, and caveats. Every sentence adds value and there is no redundancy. It is concise while being comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema and no annotations, the description covers the essential behavior, return values, error reasoning, and usage constraints. It leaves no critical gap for an agent to call the tool correctly, given the tool's moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (tabId and sessionTabId) are already documented in the schema, including the default resolution order. The description does not add parameter-specific detail 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Focus') and resource ('an allowed tab and its window') and explicitly distinguishes from navigation ('without navigating'). It also mentions the context of failure (DOCUMENT_HIDDEN), making it clear what the tool does and how it differs from siblings like navigate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('Use this when click/type fail with DOCUMENT_HIDDEN') and when-not-to-use allowHidden ('Pass allowHidden=true only when visibilityState is hidden'), plus troubleshooting for specific reason codes. It clearly tells the agent when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_statusBrowser bridge statusA
Check whether the MCP adapter can reach the local broker and whether the Chrome extension answers ping. Read nextAction for onboarding coaching. When the extension answers, also read cdpEnabled and attachedTabs for the trusted-input tier.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description itself carries the transparency burden. It clearly frames the operation as a read-only status/check action: 'check whether', 'read nextAction', and 'read cdpEnabled and attachedTabs'. It does not go into failure details or permissions, but the behavioral intent is transparent and not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The first sentence states the core purpose, and the next two sentences add useful read-field context. The content is front-loaded and every sentence contributes to the agent's decision to invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity, no-parameter status tool with a straightforward goal. The description covers the purpose and names the key response fields to inspect (nextAction, cdpEnabled, attachedTabs), which respects the lack of an output schema. It does not mention failure modes or field types, but those are not critical at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and the schema description coverage is 100%, so there are no hidden parameters to document. Baseline for zero-parameter tools is 4, and the description adds no malformed parameter claims. It instead hints at response fields rather than input field, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action: checking adapter-to-broker connectivity and whether the Chrome extension answers a ping. It names the specific resource (browser bridge status) clearly. It does not explicitly differentiate itself from sibling tools like page_status, but the broker/extension focus makes the purpose distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context: use it for broker/extension readiness and read nextAction for onboarding coaching. It also gives a conditional instruction to read cdpEnabled and attachedTabs when the extension responds. However, it does not explicitly say when to prefer this tool over siblings such as page_status or list_tabs, nor does it give exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdp_attachAttach trusted CDP inputA
Attach trusted CDP input to a claimed tab. While attached, click, type, keypress, click_at, and matching perform_actions steps use trusted CDP input. Requires the popup enableCdp toggle, a claimed tab, and an allowed origin. The debugger permission is required in the manifest. Chrome shows a debugging banner on the tab. Repeating attach on the same tab refreshes the TTL without tearing down the socket.
| Name | Required | Description | Default |
|---|---|---|---|
| ttlMs | No | Auto-detach TTL in milliseconds. Defaults to 600000 (10 minutes). | |
| sessionTabId | Yes | Claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses multiple operational details: required popup toggle, claimed tab, allowed origin, debugger permission in manifest, Chrome debugging banner, and that repeating attach refreshes TTL without socket teardown. This goes well beyond the schema and gives the agent a realistic expectation of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each adding value: the action, prerequisites, permission/banner, and TTL refresh behavior. It is front-loaded with the core purpose and avoids redundancy. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (requires multiple prerequisites, has permissions and side effects), the description covers all necessary context: what it does, when it's valid, required permissions, and behavior on repeat. It doesn't cover error cases or return values, but there's no output schema, and the description is sufficient for an agent to decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (ttlMs and sessionTabId) are already well-documented with meanings and defaults. The description adds the TTL refresh behavior on repeat attach, which is useful but is more of a behavioral note than parameter semantics. It doesn't add new meaning to the parameters themselves, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('attach') and resource ('trusted CDP input') to a claimed tab, clearly distinguishing it from siblings like cdp_detach (detach) and claim_tab (claim). It also states the effect: while attached, certain steps use trusted CDP input. This is unambiguous and non-tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit prerequisites (popup enableCdp toggle, claimed tab, allowed origin) and notes the debugger permission and Chrome banner. It does not explicitly name alternatives or state when not to use it, but the context is clear enough that an agent can infer this is the tool to attach CDP input, versus cdp_detach for detaching. It's more than implied but lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdp_detachDetach trusted CDP inputB
Detach trusted CDP input from a claimed tab and return click/type/keypress to the content-script path. release_tab and finalize_tabs also detach, including kept finalize claims.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | ||
| sessionTabId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the transformation (input returns to content-script path) and a notable nuance about finalize_tabs and kept claims. It doesn't mention preconditions like whether the tab must be claimed, or failure states, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences. The first gets straight to the action; the second adds necessary sibling context without redundancy. No filler, and the key concept is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no annotations and no output schema, so the description must supply most of the context. It is thin on parameters, prerequisites, return values, failure behavior, and assumes prior knowledge of internal concepts like 'trusted CDP input', 'claimed tab', and 'finalize claims'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description never mentions tabId or sessionTabId. 'Claimed tab' hints at tabId's role, but sessionTabId is entirely unexplained, and there is no guidance on which parameter is needed or how they interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Detach'), resource ('trusted CDP input'), and effect ('return click/type/keypress to the content-script path'). It also names sibling detaching tools, helping distinguish them, though it doesn't articulate the exact selection difference between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when this tool is relevant (when detaching trusted CDP input while preserving the content-script path) and notes that release_tab and finalize_tabs also detach. However, it gives no explicit conditions for choosing one over the other, nor any '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.
cdp_network_requestsList watched network requestsA
Return the in-memory network request index for an attached tab. Rows are metadata only. Response headers, Set-Cookie, and request post data are never included.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionTabId | Yes | Claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: 'in-memory' signals ephemerality, 'Rows are metadata only' sets expectations about data richness, and the explicit exclusions prevent the agent from assuming headers or bodies are present. It does not cover failure modes or whether an active watch is required, but the disclosed traits are genuinely useful beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences totaling roughly 27 words, with the primary action front-loaded and the exclusions following logically. Every sentence earns its place; there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool, the core behavior and data boundaries are well covered. The main gap is that with no output schema, the description does not specify which metadata fields each row contains (URL, status, timing), leaving the agent to guess at the row structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — sessionTabId is fully documented as 'Claimed tab session id returned by claim_tab.' The description adds nothing about the parameter itself, but the schema is doing the heavy lifting, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Return'), resource ('in-memory network request index'), and scope ('for an attached tab'), which is further reinforced by the title 'List watched network requests'. The explicit exclusions ('Response headers, Set-Cookie, and request post data are never included') delineate it from cdp_response_body, so an agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use it to retrieve the metadata-level network request index for an attached tab. The 'never included' phrasing acts as a when-not boundary (do not use if you need headers, cookies, or post data), but it does not explicitly name an alternative tool like cdp_response_body or note the prerequisite of cdp_network_watch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdp_network_watchWatch network requestsA
Enable the Network domain on an attached tab and keep an in-memory index of metadata rows only (requestId, url, method, status, mimeType, size, timestamp). No response body is read or stored. Restricted-category origins never enter the index. Requires cdp_attach. Optional patterns narrow which URLs are indexed.
| Name | Required | Description | Default |
|---|---|---|---|
| patterns | No | Optional URL prefixes or globs. Omitted means every non-denylisted request is indexed. | |
| sessionTabId | Yes | Claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the transparency burden. It discloses that only metadata is indexed, that no response body is read/stored, and that restricted-category origins never enter the index. This covers the key safety- and privacy-relevant behaviors. It does not mention whether the watch persists across navigations or how to stop it, but the disclosed traits are substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each earning its place: purpose, exclusions, behavioral constraints, prerequisite, and optional parameters. The key purpose is front-loaded and clarifies scope immediately. Slightly longer than the terse 2-sentence examples but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a moderately complex tool with no output schema or annotations. The description explains the intended lifecycle, captures safety behavior, and names the prerequisite (cdp_attach). It doesn't describe its return value or how to stop/clear the index, but the core invocation rules and constraints are present and sufficient for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds no new parameter-level semantics beyond what the schema already provides. The description repeats that optional patterns narrow URLs but does not add format details, defaults, or interaction rules; thus the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific verb ('Enable the Network domain') and the resource ('an attached tab') and states it keeps an in-memory index of metadata. It also explicitly says 'No response body is read or stored', which distinguishes it immediately from cdp_response_body and cdp_network_requests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'Requires cdp_attach' and explains optional patterns narrow indexing, but does not explicitly say 'use cdp_network_requests to retrieve this index' or 'do not use when you need response bodies'. Since the sibling tools make the relationship inferable, this is clear context without full alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdp_response_bodyRead one response bodyA
Read one response body by requestId from an attached tab. Deny by default: the request origin must be in the popup body-capture allowlist, which does not accept *. Restricted-category origins are refused even when listed. Binary bodies (base64Encoded) are refused. Bodies over the size cap return an error, never a truncated body. Token-shaped JSON fields receive best-effort masking of obvious token-shaped fields, not a guarantee — treat any response body as if it contains credentials. Response headers, Set-Cookie, and Network.getRequestPostData are never exposed. Each successful read is recorded to an append-only metadata log; body content is never written there.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | requestId from cdp_network_requests. | |
| sessionTabId | Yes | Claimed tab session id returned by claim_tab. |
TDQS
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 thoroughly covers allowlist denials, restricted-origin refusal, binary-body refusal, size caps, token-mask limitations, header/non-body data never being exposed, and the append-only metadata log. This goes far beyond a simple mutation warning and gives the agent a realistic security model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core purpose, then enumerates every consequential constraint. Every sentence adds a meaning, such as allowlist, binary limits, size cap, masking, and metadata logging. It is longer than minimal but justifies its length given the tool's security-critical behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a non-trivial CDP response body tool, the description should explain what the agent will receive on success and failure. It details many error/denial behaviors but never tells the shape of a successful body (e.g., text content, JSON object, or raw bytes). There is enough behavioral context for safe invocation, but the missing return contract is a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters completely: requestId is from cdp_network_requests and sessionTabId is a Claimed tab session id returned by claim_tab. With 100% schema coverage, the description adds no additional parameter-specific detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Read one response body by requestId from an attached tab.' This clearly differentiates it from siblings like cdp_network_requests and cdp_network_watch, and the title 'Read one response body' reinforces the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by stating it operates on a requestId from an attached tab and under an explicit allowlist, but it does not directly compare to sibling tools or state when not to use it. There is no explicit routing such as 'use cdp_network_requests first' or 'prefer this over cdp_network_watch for single body reads.' Use is inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_tabClaim Chrome tabA
Claim an allowed Chrome tab for this browser-control session. Advisory claims are default. Use exclusive=true with ttlMs for fail-fast tab leases across parallel agents.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | Optional human-readable owner label for conflict diagnostics. | |
| tabId | Yes | ||
| ttlMs | No | Exclusive lease TTL in milliseconds. Defaults to 300000 (5 minutes). | |
| exclusive | No | When true, acquire an exclusive lease on this tab until expiry or release. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds context about advisory default and exclusive lease behavior with TTL, which is valuable. However, it does not mention side effects, failure modes (e.g., what happens if the tab is already exclusively claimed), or the non-destructive nature of claiming. The description gives partial insight but leaves important operational details unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary purpose and immediately followed by the most important usage decision (advisory vs exclusive). No filler or redundancy. Every word contributes to comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a claim tool with 4 params and no output schema, the description covers the critical decision point (exclusive vs advisory) and TTL semantics. It does not explain return values or error conditions, but given the simplicity and the presence of sibling tools like list_tabs and release_tab, this is largely sufficient. A minor gap is the lack of information about contention or failure when an exclusive claim is already held.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (tabId lacks a description). The description adds semantic meaning beyond the schema by explaining the advisory/exclusive distinction and linking exclusive=true with ttlMs for lease semantics. It also implies that tabId must refer to an 'allowed' tab, which is a constraint not stated in the schema. This meaningfully helps an agent select correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('claim') and resource ('Chrome tab') with a specific scope ('for this browser-control session'). It distinguishes itself from siblings like release_tab and list_tabs by defining the claim action precisely. The wording leaves 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use exclusive mode versus advisory claims, mentioning 'fail-fast tab leases across parallel agents'. It does not explicitly name alternative tools or exclusions, but the context of advisory vs exclusive gives actionable decision-making. Slight gap: doesn't state when to prefer this over release_tab, but that is inferred from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickClick page elementA
Click an element by snapshot ref in the current top document or an exact documentId from list_frames. Fails with DOCUMENT_HIDDEN when the document is hidden unless allowHidden=true.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| after | No | Optional act-then-observe requests, run after the page action in waitFor, snapshot, pageStatus order. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| allowHidden | No | When true, click/type on a hidden document. Default fails with DOCUMENT_HIDDEN and names activate_tab as the remedy. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses important error behavior (fails with DOCUMENT_HIDDEN unless allowHidden=true) which is useful context. However, it does not mention other behavioral aspects such as potential navigation, scroll behavior, or return values. The disclosed error is beneficial but the overall behavioral coverage is minimal, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences efficiently describe the core capability and a critical error condition. The key information is front-loaded, with no redundant text. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a rich nested 'after' object with waitFor, snapshot, and pageStatus options, but the description does not mention that these abilities exist or guide when to use them. Nor does it describe the return value. While the schema covers parameter details, the description lacks guidance on optional post-action observations, leaving an agent to discover that from schema alone. This is a moderate gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 83%, so the schema documents most parameters. The description adds little beyond what schema descriptions already provide (e.g., documentId's 'returned by list_frames' is duplicated). It clarifies that ref is from a snapshot and that documentId is exact, but these are already implied. A baseline 3 fits given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Click an element'), the resource ('by snapshot ref'), and the scope ('current top document or an exact documentId from list_frames'). It distinguishes from click_at by specifying the input type, making the tool's purpose unambiguous even among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you have a snapshot ref) but does not explicitly contrast with alternatives like click_at (for coordinate clicks) or type (for keyboard input). It mentions the DOCUMENT_HIDDEN condition and allowHidden workaround, but no explicit 'when not to use' guidance or alternative tools are cited.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_atClick viewport coordinatesA
Click at tabViewport coordinates in the top document or frameViewport coordinates in an exact iframe documentId. Fails with DOCUMENT_HIDDEN when the document is hidden unless allowHidden=true.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| after | No | Optional act-then-observe requests, run after the page action in waitFor, snapshot, pageStatus order. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| allowHidden | No | When true, click/type on a hidden document. Default fails with DOCUMENT_HIDDEN and names activate_tab as the remedy. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose the DOCUMENT_HIDDEN failure mode and the allowHidden=true override, which is useful. However, it does not describe return values, navigation side effects, or any post-click behavior, so the transparency is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and target, and no filler. Every clause earns its place: top document vs iframe, coordinate space, and hidden-document failure behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a nested 'after' object and no output schema, the description covers the core invocation details: coordinates, document targeting, and hidden-document handling. Optional wait/snapshot behavior is documented in the schema, so the description is mostly complete for correct tool selection and basic invocation, though return behavior is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema leaves x and y as bare numbers, but the description adds crucial meaning by distinguishing tabViewport coordinates from frameViewport coordinates and linking the latter to an exact iframe documentId. With 71% schema description coverage, this is meaningful compensation beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Click'), a precise resource ('tabViewport coordinates' or 'frameViewport coordinates'), and the exact targeting context (top document vs iframe documentId). It clearly distinguishes click_at from the sibling click tool by emphasizing coordinate-based targeting rather than element/selector-based clicking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use it: click in the top document, or in an exact iframe by documentId. It also explains the hidden-document failure and allowHidden override. It does not explicitly name an alternative tool or say 'do not use when a selector is available,' but the coordinate-space wording makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect_scrollCollect while scrollingA
Scroll a bounded number of steps (hard ceiling when until is set), extract selected elements each step, optionally target a nested scroll container, and optionally stop early via until conditions. Results include stoppedReason.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Optional act-then-observe requests, run after the page action in waitFor, snapshot, pageStatus order. | |
| steps | Yes | Maximum scroll/extract steps. Hard ceiling when until is set. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| until | No | ||
| deltaY | No | Legacy window scroll deltaY when scroll is omitted. | |
| scroll | No | Scroll target for each step. When set, overrides top-level deltaY. Pass x/y to scroll a nested overflow container under that point. | |
| delayMs | No | ||
| extract | Yes | ||
| dedupeBy | No | ||
| maxItems | No | ||
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the burden of behavioral disclosure. It reveals the hard ceiling on steps, optional nested scroll targeting, early-stop conditions, and stoppedReason in results. This goes beyond a tautology, though it does not detail tab defaults or the exact result structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core behavior and packs in the bounded-step ceiling, per-step extraction, nested container option, and early-stop condition. Every clause adds value and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with 12 parameters, nested objects, and no output schema. The description explains the main flow but omits the full result contract beyond stoppedReason, noNewItemsForSteps semantics, and guidance on dedupeBy or maxItems. It is adequate but not complete for fully correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 58%, and the description adds useful relational meaning for steps, until, extract, and scroll (e.g., 'hard ceiling when until is set'). However, many parameters such as dedupeBy, maxItems, after, tabId, delayMs, documentId, and sessionTabId are left to the schema or remain undocumented by the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific composite verb phrase: scroll bounded steps, extract selected elements each step, optionally target a nested scroll container, and stop early via until conditions. This makes the tool's purpose clear and distinguishes it from simpler siblings like scroll or extract_elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the use case: repeatedly scrolling a page while collecting matching elements across steps, with bounded steps and optional early termination. It does not explicitly name alternatives or exclusion criteria, but the context is clear enough for an agent to decide when this composite tool fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_logsConsole logsC
Return bounded console logs captured after the content script was injected in the target tab.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| levels | No | ||
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses only that logs are 'bounded' and captured after injection, but does not state whether reading logs clears them, what the bound means, how filtering works, or what happens when no logs exist. There is no annotation contradiction because none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no filler. It front-loads the core action and the additional injection-context clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is too sparse for an agent to invoke the tool confidently. Missing details include the shape of returned log entries, how 'bounded' is determined, accepted levels values, and any stateful effects of calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 60%; the 'limit' and 'levels' parameters have no schema descriptions, and the tool description does not clarify them. 'Bounded' weakly hints at the limit parameter but does not explain default or maximum behavior, and valid values for 'levels' are entirely left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Return bounded console logs.' The temporal scope ('captured after the content script was injected in the target tab') adds useful specificity. However, it does not explicitly differentiate from sibling inspection tools, though none are log-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives, nor are any exclusions or sibling references provided. The only contextual hint is the mention of content-script injection and target tab, which implies a use case but does not make it explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_elementsExtract page elementsB
Extract bounded structured data from elements selected by CSS selector. Safer alternative to raw JavaScript evaluation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| visible | No | ||
| selector | Yes | ||
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| includeHtml | No | ||
| includeText | No | ||
| includeLinks | No | ||
| includeTimes | No | ||
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
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 only says 'safer alternative' and 'bounded structured data,' hinting at safety and structure but not explicitly stating read-only behavior, side effects, or permissions. It does not disclose what happens with the extracted data, whether mutations are possible, or any constraints like rate limits. This is insufficient for a data-extraction tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and the safety differentiator. There is no redundancy or filler. While it is brief, conciseness itself is a strength; the lack of depth is penalized under other dimensions, not this one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, no output schema, no annotations), the description is severely incomplete. An agent cannot infer the return format, how to handle pagination or limits, what the include* flags control, or any side effects. The description provides only a high-level overview and leaves critical operational details undefined, making it inadequate for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 30%, so the description must compensate by explaining parameter meanings. It only clarifies that the selector is a CSS selector and that extraction yields structured data, which relates to the selector and output but not to flags like includeHtml, includeText, limit, or visible. The description adds minimal value over the schema and fails to cover the majority of parameters that the schema leaves undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Extract'), a resource ('elements selected by CSS selector'), and a clear scope ('bounded structured data'). It also distinguishes itself from raw JavaScript evaluation by claiming to be a safer alternative, which separates it from a generic scripting tool. Even without naming a sibling explicitly, the purpose is unambiguous and easily differentiated from other tools like query_elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a usage context: use this instead of raw JavaScript evaluation for safer data extraction. However, it does not explicitly state when to use it versus other extraction tools (e.g., query_elements), nor does it mention exclusions or prerequisites. The single alternative mention provides only weak guidance, leaving the agent to infer the rest from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_feed_postsExtract feed postsB
Extract structured feed/post records (author, text, times, live flags) from a scoped feed region without site-specific selectors.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Content root for text and elements. Compact defaults to main when a main landmark exists, or to a visible modal dialog (aria-modal=true or <dialog> opened with showModal()). Use document for the page behind a modal; pass ignoreRoles: ["dialog"] or ["alertdialog"] to hide both dialog and alertdialog. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| maxPosts | No | Maximum posts to return. Defaults to 10. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| ignoreRoles | No | Computed roles to exclude from scoped snapshots. Compact/main defaults to ["dialog"] when no visible dialog is open. A visible non-modal dialog is included without taking scope; a visible modal takes scope. Pass ["dialog"] or ["alertdialog"] to hide both roles, or [] to include them in the current scope. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. | |
| excludeSelectors | No | CSS selectors for subtrees removed from the scoped snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions that it extracts structured records, but it does not describe important behaviors such as pagination handling, limits, whether it mutates the page, or what happens if no feed is found. The description is also silent on permission requirements (e.g., claiming tabs) even though related tools exist. This is a significant gap for a tool that likely interacts with the browser state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, a single sentence that captures the core purpose. It front-loads the key output and differentiator. However, it could be more structured by separating purpose from usage hints, but it is adequately sized for a tool with a rich schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, no output schema, and no annotations, the description is too minimal. It does not explain how the extraction behaves with respect to the scope parameter, or any side effects. It doesn't clarify what happens with 'live flags' or how times are formatted. An agent would need to guess many details from the schema alone, making it incomplete for a full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage, so each parameter is documented. The tool description adds minimal extra meaning beyond 'structured feed/post records'. The schema covers the semantics of each parameter, so the description does not need to repeat it)Skip. However, the description could add context on how parameters like 'scope' interact with feed extraction, but that is not present, so it is at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to extract structured feed/post records (author, text, times, live flags) from a scoped feed region. It also distinguishes it from other extraction tools like extract_elements by mentioning 'without site-specific selectors' and 'structured feed/post records'. However, it does not name a specific sibling to differentiate from, and the purpose is somewhat narrow to feeds, which is clear but not maximally distinctive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for feed extraction, but it does not provide explicit when-to-use or when-not-to-use guidance. It does not mention alternatives like extract_elements or visible_snapshot for cases where site-specific selectors are needed. The context of 'without site-specific selectors' hints at the use case but does not fully explain the trade-offs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finalize_tabsFinalize claimed tabsA
Release browser-control ownership state for claimed tabs. This does not close user tabs; pass keep entries to preserve handoff/deliverable claims. Detaches CDP attachments on every claimed tab, including kept claims.
| Name | Required | Description | Default |
|---|---|---|---|
| keep | No |
TDQS
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 states that the tool releases ownership, does not close tabs, and detaches CDP attachments on all claimed tabs, including kept claims. It also clarifies that 'keep' entries preserve handoff/deliverable claims. This is transparent and covers key side effects, though it could mention reversibility or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the primary action. It is compact and each sentence adds relevant information: the main effect, a critical exception (no tab close), and a behavioral detail (CDP detach). No fluff or repetition, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description covers the essential operational details: what it does, what it preserves, and what it detaches. It does not specify the scope of 'claimed tabs' (e.g., session-wide), but sibling tools like 'claim_tab' provide context. The absence of output schema is acceptable since no return value is defined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It explains that 'keep' preserves handoff/deliverable claims, which adds meaning beyond the schema. However, it does not elaborate on the 'status' enum values or the significance of 'sessionTabId', nor does it specify that 'keep' is optional. While it partially compensates, some parameter semantics remain implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: releasing browser-control ownership state for claimed tabs. It also specifies what it does NOT do (does not close user tabs) and that it detaches CDP attachments. However, it does not explicitly differentiate from the sibling tool 'release_tab', so an agent may need to infer the difference. Still, the core 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use finalize_tabs versus release_tab or cdp_detach. The description does not mention typical scenarios, prerequisites, or conditions that would lead an agent to choose this tool over alternatives. It only describes the mechanism, not the context of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keypressPress page keysB
Dispatch common DOM keyboard events in the target page. Browser/OS shortcuts are not guaranteed under MV3. Fails with DOCUMENT_HIDDEN when the document is hidden unless allowHidden=true.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | ||
| after | No | Optional act-then-observe requests, run after the page action in waitFor, snapshot, pageStatus order. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| allowHidden | No | When true, click/type on a hidden document. Default fails with DOCUMENT_HIDDEN and names activate_tab as the remedy. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It mentions that browser/OS shortcuts are not guaranteed under MV3 and that it fails with DOCUMENT_HIDDEN unless allowHidden=true, which adds useful context. However, it does not describe the return value, side effects, or whether the action is destructive, leaving significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no waste, front-loading the primary action and then providing key behavioral caveats. It is appropriately concise and efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits critical context for correct usage: it does not explain the 'after' parameter for act-then-observe, how to specify key combinations or modifiers, or when to prefer this over sibling input tools. Given the tool's complexity and the absence of an output schema, the description leaves agents under-informed about its full capabilities and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so most parameters are documented in the schema. The description adds minimal parameter insight—only the allowHidden behavior is echoed in the error mention. Since the schema already explains allowHidden in detail, the description does not meaningfully enhance parameter understanding beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool dispatches common DOM keyboard events in the target page, which is a specific verb and resource. It distinguishes from sibling tools like click and type because it focuses on keyboard events, but it does not explicitly name alternatives or differentiate further. Thus, it is clear but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like type or click. The only usage-related note is about the DOCUMENT_HIDDEN failure condition, which is a behavior, not a decision rule for tool selection. There is no mention of scenarios that favor keypress over other input tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_framesList frame documentsA
List current frame documents for an allowed target tab. Blocked or unsupported frames are redacted and cannot be targeted.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It does disclose a useful behavioral trait: blocked or unsupported frames are redacted and cannot be targeted, and 'current' implies a snapshot-style read. However, it leaves 'allowed target tab' undefined and does not explain failure modes, authorization prerequisites, or what side effects (if any) occur, which are notable gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely efficient: two sentences, the action comes first, and the second sentence adds the only redaction detail an agent needs. There is no redundant padding; every clause contributes a distinct aspect of the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only two optional parameters and full schema coverage, so it does not need exhaustive explanation of inputs, but it leaves important operational details unaddressed: it does not describe the expected return shape of 'frame documents', the meaning of 'allowed target tab', or error behavior when no tabs are allowed. These gaps are moderate for a seemingly simple listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is the 100% and each parameter's meaning and default behavior is already documented in the schema. The description adds no further parameter-level detail beyond the notion of an 'allowed target tab', which stays aligned with the schema but does not enhance it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') on a concrete resource ('current frame documents') and scopes it to 'an allowed target tab', which clearly distinguishes it from tab-level tools like list_tabs. The added note that blocked/unsupported frames are redacted further clarifies what the tool exposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context about targeting tabs through the phrases 'allowed target tab' and 'redacted... cannot be targeted', but it never explicitly says when to prefer this tool over alternatives like list_tabs or snapshots. Usage is implied rather than direct, with no exclusion criteria or sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tabsList Chrome tabsA
List tabs visible to the Chrome Browser Control extension in the current Chrome profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the scope ('visible to extension') but does not disclose whether the operation is read-only, what the output format looks like (e.g., tab IDs, URLs, titles), or any side effects. An agent cannot infer if this is safe to call repeatedly or what data it returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It immediately states the action and scope, and every word adds value. This is a model of conciseness for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema), the description is somewhat adequate but leaves a key gap: it does not specify what the returned list contains (e.g., tab IDs, URLs, titles). Since there is no output schema, the description should at least hint at the return format for the agent to use the results effectively. Additionally, it could mention common use cases (e.g., enumerating tabs before claiming one) to improve decision-making among many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema has no properties, so there is nothing to describe. Per the baseline for 0-parameter tools, a score of 4 is appropriate since the description is not required to explain parameters. However, it does not add any supplementary detail about parameters because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'tabs', and adds useful scope constraints ('visible to the Chrome Browser Control extension', 'current Chrome profile'). This differentiates it from siblings like list_frames (frames vs tabs) and claim_tab/release_tab (management actions). An agent can immediately know the tool's core function without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to enumerate tabs within the extension's visibility, but it does not explicitly state when to use this over alternatives like snapshot, visible_snapshot, or page_status. It lacks guidance on prerequisites (e.g., whether a session must be named) or complementary usage (e.g., before claiming a tab). The context is clear but exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
name_sessionName browser sessionA
Set a human-readable browser-control session name for status, logs, and debugging.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
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 states that the name is used for status, logs, and debugging, which gives some side-effect insight beyond the parameter value. However, it does not state whether the name is persisted, overwritten, or how it appears in fragmented contexts, leaving some behavioral uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single highly readable sentence that front-loads verb the object and purpose. No wasted words or filler, and maximum clarity per word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a very simple tool with a single parameter and no output schema, the description is adequate to let an agent know what the tool does and what the parameter means. It doesn't discuss response-derived behavior, but the absence of output schema and the trivial complexity make the description almost complete, only revealing no details about overwriting or querying the current session name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no property descriptions (0% coverage), so the description must compensate. It does clarify that the 'name' is a human-readable identifier used for logs/status/debugging, and the parameter name 'name' aligns with this. Yet it does not explain any formatting constraints or examples in detail beyond the schema's min/max length.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Set') and resource ('browser-control session name'), and states the purpose ('for status, logs, and debugging'). It clearly distinguishes from sibling tools like browser_status or navigate by identifying the action of naming a session, with no ambiguity that it is a setter rather than a getter or mutating action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when/where comparison to sibling tools. The description implies use 'for status, logs, and debugging', which faintly guides context, but no exclusions are provided. An agent may infer to use this when a readable label is needed, but it does not force or avoid any alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_statusPage statusC
Return lightweight page status, viewport/scroll state, and resource summary counts for an allowed target tab.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry all behavioral disclosure. It mentions 'lightweight' and 'allowed target tab' but does not clarify permission requirements, whether the operation is read-only, failure modes, or any side effects. The brevity leaves significant behavioral uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary purpose and then lists the returned elements. It is concise and free of fluff, though it could arguably include a bit more contextual detail without losing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and an output schema, the description is incomplete for an agent to confidently call the tool. It does not explain the return format, prerequisites like claiming a tab, or error conditions, leaving important operational details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter (tabId, documentId, sessionTabId) has a descriptive string in the schema. The tool description adds no additional parameter meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Return lightweight page status') and names the specific data included (viewport/scroll state, resource summary counts) for an allowed target tab. This is clear and distinguishes it from general snapshot tools, though it doesn't explicitly contrast with browser_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus siblings like browser_status or snapshot. It does not mention prerequisites (e.g., needing a claimed tab) or scenarios where this tool is preferred, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perform_actionsPerform sequential page actionsA
Run up to 10 sequential page actions in one document target. An explicit batch-level documentId is revalidated before every step and after observation; steps cannot override it. Fail-fast on the first step error. Click, type, and keypress steps fail with DOCUMENT_HIDDEN on hidden documents unless that step sets allowHidden=true.
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | Optional act-then-observe requests, run after the page action in waitFor, snapshot, pageStatus order. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| actions | Yes | Ordered action steps. Each step is a flat object with action plus action-specific fields. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses fail-fast behavior, DOCUMENT_HIDDEN failure for click/type/keypress unless allowHidden=true, and documentId revalidation before every step and after observation. This is substantive behavioral context beyond the schema, though it does not cover scroll-specific behavior or return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero redundancy. The main purpose is front-loaded, and each subsequent sentence adds a critical behavioral constraint. It is compact and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior (batch execution, fail-fast, hidden handling) but does not mention the 'after' observation feature or other parameters like tabId/sessionTabId. However, those are fully described in the schema, and the description provides enough high-level context for an agent to understand the tool's primary function and constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining documentId revalidation (steps cannot override it) and the allowHidden exception for hidden documents. These nuances are not present in the parameter descriptions themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Run up to 10 sequential page actions in one document target.' It clearly distinguishes this from sibling tools like click/type/scroll by emphasizing batch execution and the single-document constraint. The mention of fail-fast and DOCUMENT_HIDDEN behavior further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for batching multiple actions, but it does not explicitly contrast with single-action siblings (click, type, scroll) or state when to prefer this tool over them. The documentId revalidation and hidden-document notes give some context, but no explicit 'use this for multiple actions; use click for a single action' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_elementsQuery page elementsB
Find elements by selector, role, text, and visibility without returning full page text.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| text | No | ||
| limit | No | ||
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| visible | No | ||
| selector | No | ||
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full disclosure burden. It does add one useful behavioral trait by explaining the tool does not return full page text, which prevents a reasonable misunderstanding. However, it does not state whether the tool is strictly read-only, what the return shape is, whether it waits for page content, or how it handles pages with no matching elements, leaving the agent to infer important 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no filler, and the meaningful behavioral constraint 'without returning full page text' is included. It loses one point for restating the title's basic purpose before adding the new information, but it is still concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 mostly optional parameters and no annotations or output schema, the description is minimal and does not fully define how the tool behaves at the boundaries. It does not explain how selector, role, text, and visibility relate to one another, what the returned elements look like, or what constraints exist around tab/session/frame addressing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 38%, so the description should compensate for undocumented parameters. It covers four of them by listing 'selector, role, text, and visibility', which gives semantic meaning to `selector`, `role`, `text`, and `visible`. It does not explain how multiple criteria interact (e.g., AND or OR) and says nothing about `limit` semantics, so parameter behavior is only partially defined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), a specific resource ('elements'), and explicit search dimensions: 'selector, role, text, and visibility'. It also adds a discriminating constraint, 'without returning full page text'. It is clear what the tool does, though it does not name a sibling tool (e.g., extract_elements or visible_snapshot) so an agent must infer the exact boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives such as extract_elements, visible_snapshot, or wait_for. No usage condition, prerequisite, or 'use this when X' is provided. The only hint is the negative 'without returning full page text', but no direct comparison or sibling differentiation is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_tabRelease claimed tabA
Release a previously claimed tab by sessionTabId or tabId without closing the browser tab.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | No | ||
| sessionTabId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without any annotations, the description carries full responsibility for disclosing behavior. It mentions that the tab is not closed, which is a useful side-effect, but it does not explain what 'release' does to the claim state, whether the operation is idempotent, or any other implications. This is a minimal disclosure given the absence of structured behavioral hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no waste. It states the action, the resource, the identifiers, and the key behavioral qualifier, all efficiently without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is bare-bones. It covers the main action and identifier options, but omits preconditions, detailed side effects, and error behavior. While the tool is simple, an agent might need more detail to act safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds meaning by stating that the tab can be identified by sessionTabId or tabId, clarifying that these are alternative selectors. It does not explain each parameter's exact role or priority, but it provides more than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair, 'Release a previously claimed tab', distinguishing it from claim_tab and other tab management tools. It also specifies the identifiers used (sessionTabId or tabId) and the critical side-effect constraint that the browser tab is not closed, clearly conveying the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'previously claimed tab' implies the tool is used after a tab has been claimed via claim_tab, but it does not explicitly state this condition or compare with alternatives. No explicit when-not-to-use or alternative routing is provided, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotCapture visible screenshotA
Capture the visible tab viewport. This tool is tab-target only; iframe frameViewport bounds are not valid crop coordinates. Optionally crop to a top-document snapshot ref or tabViewport bounds.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Snapshot ref to crop to (mutually exclusive with bounds). | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| bounds | No | Viewport CSS-pixel crop rect (mutually exclusive with ref). | |
| format | No | ||
| padding | No | Optional non-negative CSS pixels to expand the crop rect before viewport intersection. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
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 explicitly states that the tool only captures the visible tab viewport and that iframe frameViewport bounds are invalid, which are key behavioral traits. It also mentions cropping options. While it does not state permissions or side effects, for a screenshot tool these are less critical. The description adds meaningful context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each with a clear purpose: the core action, a critical constraint, and cropping options. It is front-loaded with the main purpose and avoids redundancy. Every sentence earns its place, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, a nested object, and no output schema, the description covers the main behavior, the iframe limitation, and the cropping options. It does not explicitly state the output format, but that is implied by the tool name and the schema. It also does not mention what happens when no ref or bounds are provided, but 'Capture the visible tab viewport' implies a full viewport capture. The description is sufficient for an agent to call the tool correctly in most scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so most parameters are already documented. The description adds value by clarifying the semantics of ref and bounds: 'top-document snapshot ref' and 'tabViewport bounds' explain the coordinate system and cropping targets. It also reinforces the mutual exclusivity of ref and bounds by presenting them as alternatives. This goes beyond the schema's terse descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Capture the visible tab viewport.' It also includes a scoping constraint ('tab-target only') and a caveat about iframe coordinates, which clearly distinguishes it from potential sibling tools that handle full-page or iframe captures. This is not a tautology and provides a precise purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: it is tab-target only and iframe frameViewport bounds are not valid crop coordinates. This implicitly tells the agent not to use it for iframe captures, and it suggests using it with a top-document snapshot ref or tabViewport bounds for cropping. However, it does not explicitly name alternative tools like snapshot or visible_snapshot, so the guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollScroll pageA
Scroll the current top document or an exact documentId by pixel deltas. x/y are tabViewport coordinates for the top document and frameViewport coordinates for an iframe. Use textLimit on snapshot to capture more text; scroll only helps when the page lazy-loads content.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Optional viewport x coordinate to scroll a nested element under this point. Defaults to window scroll. | |
| y | No | Optional viewport y coordinate to scroll a nested element under this point. Defaults to window scroll. | |
| after | No | Optional act-then-observe requests, run after the page action in waitFor, snapshot, pageStatus order. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| deltaX | No | ||
| deltaY | No | ||
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses coordinate frame semantics, iframe targeting, and the lazy-load limitation, which is meaningful. It does not mention side effects, scroll-triggered events, permissions, or what the tool returns after execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no filler. The primary action and target are front-loaded, and the follow-up sentences add high-value coordinate and lazy-load caveats. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus the rich schema cover target selection, coordinate spaces, snapshot options, wait conditions, and the key lazy-load caveat. The main gap is the absence of an output schema and no explicit contrast with collect_scroll, but the agent has enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the baseline is already moderate. The description adds important semantic detail beyond the schema, especially that x/y are tabViewport coordinates for the top document and frameViewport coordinates for an iframe, and clarifies documentId targeting. Remaining parameters are already well described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Scroll') and the resource ('current top document or an exact documentId') with pixel-delta detail. It doesn't explicitly differentiate from sibling collect_scroll, but the target and coordinate nuance make 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a useful condition for effectiveness: 'scroll only helps when the page lazy-loads content' and suggests using textLimit on snapshots to capture more text. However, it does not name specific alternatives or give explicit guidance on when another tool like collect_scroll would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotSnapshot active pageA
Return a simplified DOM snapshot for the current top document or an exact documentId from list_frames. Compact mode (default) returns textPreview only — not text. Full mode returns text. Compact defaults to main-landmark scope when present; a visible modal dialog (aria-modal=true or opened with showModal()) takes scope instead. Pass scope: "document" for legacy full-body text including the page behind a modal, ignoreRoles: ["dialog"] or ["alertdialog"] to hide both dialog and alertdialog, or mode: "full" for the unscoped legacy snapshot. Defaults truncate at 500 (compact) or 4000 (full) chars; pass textLimit (up to 100000) for long page content such as API docs. Response includes authoritative document identity and coordinate space.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Snapshot detail mode. Defaults to compact. Use full for text and verbose metadata, or visible for viewport-only refs, bounds, and labels. | |
| scope | No | Content root for text and elements. Compact defaults to main when a main landmark exists, or to a visible modal dialog (aria-modal=true or <dialog> opened with showModal()). Use document for the page behind a modal; pass ignoreRoles: ["dialog"] or ["alertdialog"] to hide both dialog and alertdialog. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| textLimit | No | Max body text characters. Optional; defaults to 500 (compact) or 4000 (full). Not a hard cap — maximum 100000. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| ignoreRoles | No | Computed roles to exclude from scoped snapshots. Compact/main defaults to ["dialog"] when no visible dialog is open. A visible non-modal dialog is included without taking scope; a visible modal takes scope. Pass ["dialog"] or ["alertdialog"] to hide both roles, or [] to include them in the current scope. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. | |
| excludeSelectors | No | CSS selectors for subtrees removed from the scoped snapshot. |
TDQS
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 does well: it explains default scoping behavior (main landmark vs visible modal), default truncation limits (500/4000), the fact that textLimit is not a hard cap, and that the response includes 'authoritative document identity and coordinate space.' It also discloses that compact mode returns textPreview only, not text. The only minor gap is not describing the exact response shape or error conditions, but the description covers the most important 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, front-loading the core purpose and then layering mode, scope, and limits. Every sentence adds information, and the structure mirrors the parameter hierarchy (mode → scope → textLimit → documentId). It is long, but the complexity of the tool (8 parameters, modal scoping rules) justifies the length. A slight trim could improve scannability, but it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, modal scoping, truncation, frame targeting), the description is remarkably complete. It covers defaults, edge cases (modal dialogs, legacy document scope), and the source of key identifiers (list_frames, claim_tab). There is no output schema, so the description's mention of 'authoritative document identity and coordinate space' gives a useful hint about the return value. It could mention error cases or the exact response structure, but for an agent deciding whether and how to call this tool, the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the interaction between scope and ignoreRoles (e.g., 'A visible non-modal dialog is included without taking scope; a visible modal takes scope'), and by clarifying that textLimit defaults differ by mode. It also explains the relationship between documentId and list_frames. This goes beyond the schema's per-parameter descriptions, so a 4 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Return a simplified DOM snapshot for the current top document or an exact documentId from list_frames.' It clearly distinguishes the tool from siblings like visible_snapshot and query_elements by describing the snapshot's purpose and modes. The title 'Snapshot active page' is also expanded with concrete detail about what the snapshot contains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use compact vs full mode, when to pass scope: 'document' for legacy full-body text behind a modal, and when to use ignoreRoles to hide dialogs. It also names list_frames as the source for documentId and claim_tab for sessionTabId, giving clear context for when those parameters are needed. This is strong routing guidance that helps an agent choose the right invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
typeType into page elementA
Type text into an element by snapshot ref. Password-like fields are blocked unless force=true. Fails with DOCUMENT_HIDDEN when the document is hidden unless allowHidden=true.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| text | Yes | ||
| after | No | Optional act-then-observe requests, run after the page action in waitFor, snapshot, pageStatus order. | |
| force | No | ||
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| allowHidden | No | When true, click/type on a hidden document. Default fails with DOCUMENT_HIDDEN and names activate_tab as the remedy. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses two important failure modes (password fields blocked unless force=true; DOCUMENT_HIDDEN unless allowHidden=true) and names activate_tab as a remedy. It does not mention other behaviors like whether the text replaces existing content or appends, but the disclosed constraints are valuable and specific.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The core action is stated first, followed by the two most important behavioral constraints. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and no output schema, the description is reasonably complete. It covers the core action and the two main failure modes. It does not explain the 'after' observation block or the tab/frame targeting semantics, but the schema provides descriptions for those. The description is adequate for an agent to invoke the tool correctly in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 63%, so the schema already documents many parameters. The description adds meaning for 'ref' (snapshot ref) and 'force' (bypass password blocking), but does not explain 'after', 'tabId', 'documentId', or 'sessionTabId' beyond what the schema provides. The description adds some value but does not fully compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Type'), a resource ('text into an element by snapshot ref'), and two key behavioral constraints (password fields blocked unless force=true; DOCUMENT_HIDDEN unless allowHidden=true). It clearly distinguishes this from sibling tools like click, keypress, and click_at, which involve different interaction mechanisms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is for typing text into an element, and it explicitly mentions when it fails (password fields, hidden documents) and the remedy (activate_tab). It does not explicitly name alternatives like keypress for keyboard events, but the context is clear enough for an agent to select this tool for text entry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
visible_snapshotVisible page snapshotB
Return a viewport-aware snapshot with visible/intersecting elements, refs, labels, roles, bounds, and scroll metadata. Iframe bounds use frameViewport coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It adds useful context about viewport-awareness and that iframe bounds use frameViewport coordinates, which is a specific coordinate system note. However, it does not mention read-only nature (though implied), potential performance costs, pagination, or what happens when no visible elements exist. It is not misleading, but it leaves some behavior unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The primary function is front-loaded in the first sentence, and the coordinate detail is a concise second sentence. Every word adds value, making it an efficient and well-structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has four optional parameters and no output schema, so the description must explain what the agent receives and any constraints. It lists the returned content types and notes the coordinate system, which is helpful. However, it lacks usage context (when to prefer this over 'snapshot'), does not mention any limits or pagination, and does not describe the response format. Given the moderate complexity and lack of output schema, the description is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (three of four parameters have descriptions; 'limit' does not). The description itself adds no parameter-specific meaning, but it is not required to since most parameters are already documented in the schema. The missing 'limit' description is a gap, but the description does not attempt to compensate. Given moderate coverage, the baseline is a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a viewport-aware snapshot and enumerates its contents (visible/intersecting elements, refs, labels, roles, bounds, scroll metadata). The verb 'Return' and resource 'viewport-aware snapshot' are specific. It distinguishes itself from a generic 'snapshot' by emphasizing viewport-awareness, though it does not explicitly name the sibling 'snapshot' tool or contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'snapshot', 'query_elements', or 'extract_elements'. It does not mention use cases, exclusions, or conditions that would select this tool over others. An agent would have to infer usage from the tool name and description alone, which is insufficient given the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forWait for page conditionB
Wait for text, selector, URL substring, selector absence, scoped text, or bounded content stability in the target page.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| scope | No | Scope for textInScope and contentStableMs waits. | |
| tabId | No | Optional Chrome tab id. Defaults to the claimed session tab, then the active tab. | |
| selector | No | ||
| timeoutMs | No | ||
| documentId | No | Exact frame document id returned by list_frames. Omit to target the current top document. | |
| ignoreRoles | No | Computed roles to exclude from scoped snapshots. Compact/main defaults to ["dialog"] when no visible dialog is open. A visible non-modal dialog is included without taking scope; a visible modal takes scope. Pass ["dialog"] or ["alertdialog"] to hide both roles, or [] to include them in the current scope. | |
| textInScope | No | Wait for substring in scoped page text. | |
| urlIncludes | No | ||
| sessionTabId | No | Optional claimed tab session id returned by claim_tab. | |
| selectorAbsent | No | Wait until selector is absent from the document. | |
| contentStableMs | No | Wait until scoped text length is stable for this many milliseconds. | |
| excludeSelectors | No | CSS selectors for subtrees removed from the scoped snapshot. |
TDQS
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 does not state what happens on timeout, whether the tool throws or returns a value, whether it blocks or polls, or any side effects. The phrase 'bounded content stability' is opaque without further explanation. This is a significant gap for a waiting tool where agents need to know failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the full list of wait conditions. It is efficient and information-dense, with no filler. Every word contributes to the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 13 parameters, many with complex interplay (e.g., scope, ignoreRoles, excludeSelectors), yet the description only summarizes the wait types. It does not explain return behavior, timeout semantics, or how parameters interact. Without an output schema, the agent lacks crucial information to call this correctly in diverse scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 69%, with several parameters lacking descriptions (text, selector, timeoutMs, urlIncludes, documentId). The description provides a high-level summary of the wait conditions, which partially aligns with parameters, but it does not elaborate on parameter meanings or combinations beyond the schema. It adds some value by grouping conditions but does not fully compensate for the uncovered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('wait for') and enumerates the specific conditions it handles: text, selector, URL substring, selector absence, scoped text, and bounded content stability. It is specific and unambiguous, and since no sibling tool performs waiting, it distinguishes itself effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for waiting on page conditions but does not explicitly state when to prefer this tool over alternatives or when not to use it. It also lacks guidance on which parameter combinations are valid (e.g., can text and selector be used together?). The context is clear but exclusions and selection criteria are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Added
cdp_network_requests - Added
cdp_network_watch - Added
cdp_response_body
27 tool updates
v0.4.0- First observed
activate_tab - First observed
browser_status - First observed
cdp_attach - First observed
cdp_detach - First observed
claim_tab - First observed
click - First observed
click_at - First observed
collect_scroll - First observed
console_logs - First observed
extract_elements - First observed
extract_feed_posts - First observed
finalize_tabs - First observed
keypress - First observed
list_frames - First observed
list_tabs - First observed
name_session - First observed
navigate - First observed
page_status - First observed
perform_actions - First observed
query_elements - First observed
release_tab - First observed
screenshot - First observed
scroll - First observed
snapshot - First observed
type - First observed
visible_snapshot - First observed
wait_for
TDQS
Scored across 30 tools
Several tools overlap significantly: snapshot, visible_snapshot, query_elements, extract_elements, and page_status all provide ways to inspect page content/state; click, click_at, and perform_actions (with click steps) overlap in interaction; browser_status and page_status both report status but with different focus. The descriptions are detailed but the high-level purposes blur together.
Tool names are predominantly verb_noun (e.g., list_tabs, navigate, click_at), but there is inconsistency in verb style: some use explicit verbs like 'browser_status' (noun-only), 'cdp_attach' (abbreviation), 'snapshot' (noun-only), and 'keypress' (verb-noun but single word). Also 'extract_feed_posts' is more domain-specific than the rest.
30 tools is on the high end for a browser control server. While the domain is complex, many tools feel like slight variations of each other (e.g., snapshot vs visible_snapshot), making the count feel bloated. The server could be consolidated to around 20 tools without losing functionality.
The tool set covers well the lifecycle of controlling a browser: claiming tabs, navigating, interacting, snapshotting, waiting, extracting, and CDP network inspection. Missing basic operations like page reload, back/forward, or download management are minor gaps that agents can work around.
Maintenance
Related MCP Connectors
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Browserless MCP — wraps the Browserless headless-Chromium REST API (browserless.io)
MCP server to assist with JxBrowser development.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables browser automation over MCP using a real Chrome browser with existing profile, supporting real tabs, downloads, cookies, and RPA workflows.354 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables local opencode agents to control a live Chrome browser via MCP tools, including tab management, JavaScript execution, clicking, form filling, page reading, screenshots, and console log retrieval.MIT
- AlicenseNot gradedqualityAmaintenanceEnables remote agents to control a local Chrome/Edge browser via MCP, supporting navigation, snapshots, clicks, typing, screenshots, and script execution.147 npmISC
- AlicenseNot gradedqualityBmaintenanceEnables remote AI agents to control a local, authenticated desktop browser over MCP through an outbound WebSocket bridge and Chrome extension, supporting tab management, navigation, page reading, clicking, typing, scrolling, screenshots, and JavaScript evaluation.1MIT