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: Tabrix
설치 및 설정
권장 경로: 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 토큰을 추가하지 마세요.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to control the Google Chrome browser through a Node.js WebSocket bridge and a dedicated browser extension. It provides tools for capturing screenshots, executing JavaScript, managing tabs, and extracting page content via the MCP protocol.2
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to control and interact with the user's real Chrome browser session, leveraging existing logins, cookies, and extensions for AI-driven automation.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables browser automation over MCP using a real Chrome browser with existing profile, supporting real tabs, downloads, cookies, and RPA workflows.71MIT
- FlicenseNot gradedqualityCmaintenanceDrive your real, signed-in Chrome browser from any MCP client, enabling browser automation such as navigation, clicking, typing, and screenshots through standard MCP tools.1
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.
Live browser debugging for AI assistants — DOM, console, network via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vKongv/chrome-browser-control'
If you have feedback or need assistance with the MCP directory API, please join our Discord server