Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
078ea77
feat: tools optimize
Oct 8, 2025
d4e2fb3
feat: commit for store
Oct 9, 2025
9fca59a
feat(extension): shared CDP session manager; refactor dialog/computer…
hangwin Oct 9, 2025
f6cb4c0
refactor(extension): migrate file-upload & console to shared CDP manager
hangwin Oct 9, 2025
25f4166
feat(extension): add unified chrome_userscript tool
hangwin Oct 9, 2025
7070f25
feat(extension/userscript): enterprise upgrades
hangwin Oct 9, 2025
09e07f2
feat(extension/options): add Userscripts Manager UI and tool-call bridge
hangwin Oct 9, 2025
f481658
feat(options/i18n): add i18n for Userscripts Manager UI (en, zh_CN)
hangwin Oct 9, 2025
46a6699
feat(options/i18n): internationalize placeholders and hints in Usersc…
hangwin Oct 9, 2025
eef5d9f
feat: add performance tool
Oct 9, 2025
471083e
feat: record/replay support
Oct 10, 2025
8c7d48a
feat(record-replay): add network capture + waitForNetworkIdle; retry/…
hangwin Oct 10, 2025
f9a06ed
feat(rr): add scroll/drag playback and record navigation enrichment
hangwin Oct 10, 2025
378f86b
feat(rr): attribute assert + after-script + keyup recording
hangwin Oct 10, 2025
800df01
chore(rr): 补充空 catch 注释,满足 no-empty 规则
hangwin Oct 10, 2025
099caa1
feat(rr-runner): 点击/填充前最小可见性校验(resolveRef 矩形宽高)
hangwin Oct 10, 2025
ff07256
feat(rr-assert): 支持断言失败策略(stop/warn/retry);fill 前确保 focus;新增 warning 日志态
hangwin Oct 10, 2025
ce7a5e5
feat: add builder editor
Oct 10, 2025
f037536
feat: editor temp store
Oct 13, 2025
a99a488
fix: builder editor ui optimize
Oct 13, 2025
1cb3582
fix: delete node from property panel
Oct 13, 2025
e3beabb
feat: add edge property panel
Oct 13, 2025
9ca2ab6
refactor: refact rr builder
Oct 13, 2025
9fd0ee1
feat: 临时提交
Oct 14, 2025
531553f
feat: style change
Oct 14, 2025
5dcb802
feat: auto layout
Oct 14, 2025
0d3181e
feat: record fix
Oct 15, 2025
4436996
feat: 卡顿问题修复
Oct 16, 2025
efc366f
feat: refact recorder
Oct 20, 2025
3e186ef
feat: refact recorder
Oct 21, 2025
8557a1e
fix: 刷新后出现录制浮窗bug fix
Oct 21, 2025
2f12cd6
fix: 录制过程中tab切换bug fix
Oct 25, 2025
27e78c6
fix: 录制过程性能优化
Oct 26, 2025
4e969df
fix: recorder bug fix(scroll)
Oct 26, 2025
73d205b
fix: 修复录制过程中同个标签页内发生导航会清空状态的bug
Oct 26, 2025
e460ebd
chore: 重构回放引擎
Oct 27, 2025
76e9841
chore: 重构回放引擎
Oct 28, 2025
78d8696
chore: 重构画布和回放引擎
Nov 2, 2025
76bedc3
fix: 录制支持shadow dom
Nov 4, 2025
e415c60
feat: 临时提交
Nov 10, 2025
6b9cf79
fix: 元素标注工具优化
Nov 12, 2025
0857ede
fix: 优化元素标注工具
Nov 13, 2025
4ad8c49
feat: 优化元素标注管理
Nov 13, 2025
880ece3
fix: 标注元素管理页修改
Nov 14, 2025
1f13522
fix: mcp tools 优化
Nov 16, 2025
c0c9ed7
fix: mcp tools 优化
Nov 16, 2025
704e04d
feat: add cli agent
Dec 15, 2025
67d41cc
fix: ccr bug fix
Dec 15, 2025
87f6402
feat: 支持session管理&claude支持更丰富的配置
Dec 16, 2025
9566a02
feat: 完善codex支持
Dec 17, 2025
d52cb5c
feat: add theme
Dec 17, 2025
4649638
feat: web editor
Dec 18, 2025
668aaec
feat: [WIP]优化web-builder
Dec 18, 2025
e107c6d
chore: lint fix
Dec 21, 2025
a74d44a
feat: [WIP]web-editor优化
Dec 22, 2025
113115b
chore: attr panel refact
Dec 23, 2025
7d59c2d
feat: [WIP]web-editor优化
Dec 23, 2025
f996613
chore: web-editor优化
Dec 24, 2025
34696bc
feat: [WIP]web-editor-v2
Dec 24, 2025
a6b52c5
chore: web-editor优化
Dec 25, 2025
c103244
feat: [WIP]web-editor toolbar ui change
Dec 25, 2025
824ca90
chore: web-editor优化
Dec 26, 2025
eeff8ac
feat: [WIP]web-editor-v2功能优化
Dec 26, 2025
de29a4c
chore: web-editor优化
Dec 29, 2025
2045cf1
feat: [WIP]quick panel 优化
Dec 29, 2025
b7822cb
chore: 删除无用文件
Dec 29, 2025
d6c9570
chore: merge master
Dec 29, 2025
d18d5d7
docs: update docs
Dec 29, 2025
6d63682
chore: update zip
Dec 29, 2025
c2295c8
chore: 删除无用文件
Dec 29, 2025
8523151
docs: Replace image sources with high-res YouTube thumbnails
hangwin Jan 6, 2026
8c7c08b
docs: Update image URLs in VisualEditor_zh.md
hangwin Jan 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,14 @@ dist
false/
metadata-v1.3/
registry.npmmirror.com/
registry.npmjs.com/
registry.npmjs.com/

other/
tools_optimize.md
Agents.md
CLAUDE.md

**/*/coverage/*

.docs/
.claude/
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
[![Chrome Extension](https://img.shields.io/badge/Chrome-Extension-green.svg)](https://developer.chrome.com/docs/extensions/)
[![Release](https://img.shields.io/github/v/release/hangwin/mcp-chrome.svg)](https://img.shields.io/github/v/release/hangwin/mcp-chrome.svg)


> 🌟 **Turn your Chrome browser into your intelligent assistant** - Let AI take control of your browser, transforming it into a powerful AI-controlled automation tool.

**📖 Documentation**: [English](README.md) | [中文](README_zh.md)
Expand All @@ -19,6 +18,10 @@

Chrome MCP Server is a Chrome extension-based **Model Context Protocol (MCP) server** that exposes your Chrome browser functionality to AI assistants like Claude, enabling complex browser automation, content analysis, and semantic search. Unlike traditional browser automation tools (like Playwright), **Chrome MCP Server** directly uses your daily Chrome browser, leveraging existing user habits, configurations, and login states, allowing various large models or chatbots to take control of your browser and truly become your everyday assistant.

## ✨ New Features(2025/12/30)

- **A New Visual Editor for Claude Code & Codex**, for more detail here: [VisualEditor](docs/VisualEditor.md)

## ✨ Core Features

- 😁 **Chatbot/Model Agnostic**: Let any LLM or chatbot client or agent you prefer automate your browser
Expand Down Expand Up @@ -46,7 +49,7 @@ Chrome MCP Server is a Chrome extension-based **Model Context Protocol (MCP) ser

### Prerequisites

- Node.js >= 18.19.0 and pnpm/npm
- Node.js >= 20.0.0 and pnpm/npm
- Chrome/Chromium browser

### Installation Steps
Expand Down
8 changes: 6 additions & 2 deletions README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@

Chrome MCP Server 是一个基于chrome插件的 **模型上下文协议 (MCP) 服务器**,它将您的 Chrome 浏览器功能暴露给 Claude 等 AI 助手,实现复杂的浏览器自动化、内容分析和语义搜索等。与传统的浏览器自动化工具(如playwright)不同,**Chrome MCP server**直接使用您日常使用的chrome浏览器,基于现有的用户习惯和配置、登录态,让各种大模型或者各种chatbot都可以接管你的浏览器,真正成为你的日常助手

## ✨ 船新的功能(2025/12/30)

- **让Claude Code/Codex也能使用的可视化编辑器**, 更多详情请看: [VisualEditor](docs/VisualEditor_zh.md)

## ✨ 核心特性

- 😁 **chatbot/模型无关**:让任意你喜欢的llm或chatbot客户端或agent来自动化操作你的浏览器
Expand Down Expand Up @@ -43,7 +47,7 @@ Chrome MCP Server 是一个基于chrome插件的 **模型上下文协议 (MCP)

### 环境要求

- Node.js >= 18.19.0 和 (npm 或 pnpm)
- Node.js >= 20.0.0 和 (npm 或 pnpm)
- Chrome/Chromium 浏览器

### 安装步骤
Expand Down Expand Up @@ -79,7 +83,7 @@ mcp-chrome-bridge register
- 启用"开发者模式"
- 点击"加载已解压的扩展程序",选择 `your/dowloaded/extension/folder`
- 点击插件图标打开插件,点击连接即可看到mcp的配置
<img width="475" alt="截屏2025-06-09 15 52 06" src="https://github.com/user-attachments/assets/241e57b8-c55f-41a4-9188-0367293dc5bc" />
<img width="475" alt="截屏2025-06-09 15 52 06" src="https://github.com/user-attachments/assets/241e57b8-c55f-41a4-9188-0367293dc5bc" />

### 在支持MCP协议的客户端中使用

Expand Down
60 changes: 59 additions & 1 deletion app/chrome-extension/_locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -442,5 +442,63 @@
"pagesUnit": {
"message": "pages",
"description": "Pages count unit"
}
},
"userscriptsManagerTitle": {
"message": "Userscripts Manager",
"description": "Options page title"
},
"emergencySwitchLabel": { "message": "Emergency Switch", "description": "Global disable switch" },
"createRunSectionTitle": {
"message": "Create / Run",
"description": "Create & run section title"
},
"nameLabel": { "message": "Name", "description": "Name input label" },
"runAtLabel": { "message": "Run At", "description": "runAt select label" },
"runAtAuto": { "message": "auto", "description": "runAt auto" },
"runAtDocumentStart": { "message": "document_start", "description": "runAt document_start" },
"runAtDocumentEnd": { "message": "document_end", "description": "runAt document_end" },
"runAtDocumentIdle": { "message": "document_idle", "description": "runAt document_idle" },
"worldLabel": { "message": "World", "description": "world select label" },
"worldAuto": { "message": "auto", "description": "world auto" },
"worldIsolated": { "message": "ISOLATED", "description": "ISOLATED world" },
"worldMain": { "message": "MAIN", "description": "MAIN world" },
"modeLabel": { "message": "Mode", "description": "mode select label" },
"modeAuto": { "message": "auto", "description": "mode auto" },
"modePersistent": { "message": "persistent", "description": "mode persistent" },
"modeCss": { "message": "css", "description": "mode css" },
"modeOnce": { "message": "once", "description": "mode once" },
"allFramesLabel": { "message": "All Frames", "description": "allFrames checkbox" },
"persistLabel": { "message": "Persist", "description": "persist checkbox" },
"dnrFallbackLabel": { "message": "DNR Fallback", "description": "dnr fallback checkbox" },
"matchesInputLabel": { "message": "Matches (comma-separated)", "description": "matches input" },
"excludesInputLabel": {
"message": "Excludes (comma-separated)",
"description": "excludes input"
},
"tagsInputLabel": { "message": "Tags (comma-separated)", "description": "tags input" },
"scriptLabel": { "message": "Script", "description": "script textarea label" },
"applyButton": { "message": "Apply", "description": "apply button" },
"runOnceButton": { "message": "Run Once (CDP)", "description": "run once button" },
"listSectionTitle": { "message": "List", "description": "list section title" },
"queryLabel": { "message": "Query", "description": "query input label" },
"statusAll": { "message": "all", "description": "status all" },
"statusEnabled": { "message": "enabled", "description": "status enabled" },
"statusDisabled": { "message": "disabled", "description": "status disabled" },
"domainLabel": { "message": "Domain", "description": "domain filter label" },
"exportAllButton": { "message": "Export All", "description": "export button" },
"tableHeaderName": { "message": "Name", "description": "table header name" },
"tableHeaderWorld": { "message": "World", "description": "table header world" },
"tableHeaderRunAt": { "message": "Run At", "description": "table header runAt" },
"tableHeaderUpdated": { "message": "Updated", "description": "table header updated" },
"deleteButton": { "message": "Delete", "description": "delete button" },
"placeholderOptional": { "message": "optional", "description": "generic optional placeholder" },
"placeholderMatchesExample": {
"message": "e.g. https://*.example.com/*",
"description": "matches example placeholder"
},
"placeholderScriptHint": {
"message": "Paste JS/CSS/TM here",
"description": "script textarea placeholder"
},
"placeholderDomainHint": { "message": "example.com", "description": "domain filter placeholder" }
}
48 changes: 47 additions & 1 deletion app/chrome-extension/_locales/zh_CN/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -442,5 +442,51 @@
"pagesUnit": {
"message": "页",
"description": "页面计数单位"
}
},
"userscriptsManagerTitle": { "message": "脚本管理器", "description": "Options 页标题" },
"emergencySwitchLabel": { "message": "紧急开关", "description": "紧急关闭开关" },
"createRunSectionTitle": { "message": "创建 / 运行", "description": "创建与运行分区标题" },
"nameLabel": { "message": "名称", "description": "名称输入标签" },
"runAtLabel": { "message": "运行时机", "description": "runAt 选择标签" },
"runAtAuto": { "message": "自动", "description": "runAt auto" },
"runAtDocumentStart": { "message": "document_start", "description": "runAt document_start" },
"runAtDocumentEnd": { "message": "document_end", "description": "runAt document_end" },
"runAtDocumentIdle": { "message": "document_idle", "description": "runAt document_idle" },
"worldLabel": { "message": "执行上下文", "description": "world 选择标签" },
"worldAuto": { "message": "自动", "description": "world auto" },
"worldIsolated": { "message": "隔离 (ISOLATED)", "description": "ISOLATED world" },
"worldMain": { "message": "页面 (MAIN)", "description": "MAIN world" },
"modeLabel": { "message": "模式", "description": "模式选择标签" },
"modeAuto": { "message": "自动", "description": "mode auto" },
"modePersistent": { "message": "持久", "description": "mode persistent" },
"modeCss": { "message": "仅样式 (CSS)", "description": "mode css" },
"modeOnce": { "message": "一次运行 (CDP)", "description": "mode once" },
"allFramesLabel": { "message": "全部 frame", "description": "allFrames 复选框" },
"persistLabel": { "message": "持久化", "description": "persist 复选框" },
"dnrFallbackLabel": { "message": "DNR 回退", "description": "DNR fallback 复选框" },
"matchesInputLabel": { "message": "匹配(逗号分隔)", "description": "matches 输入" },
"excludesInputLabel": { "message": "排除(逗号分隔)", "description": "excludes 输入" },
"tagsInputLabel": { "message": "标签(逗号分隔)", "description": "tags 输入" },
"scriptLabel": { "message": "脚本", "description": "脚本文本标签" },
"applyButton": { "message": "应用", "description": "应用按钮" },
"runOnceButton": { "message": "一次运行(CDP)", "description": "一次运行按钮" },
"listSectionTitle": { "message": "脚本列表", "description": "列表分区标题" },
"queryLabel": { "message": "搜索", "description": "查询输入标签" },
"statusAll": { "message": "全部", "description": "状态-全部" },
"statusEnabled": { "message": "启用", "description": "状态-启用" },
"statusDisabled": { "message": "禁用", "description": "状态-禁用" },
"domainLabel": { "message": "域名", "description": "域名过滤标签" },
"exportAllButton": { "message": "导出全部", "description": "导出按钮" },
"tableHeaderName": { "message": "名称", "description": "表头-名称" },
"tableHeaderWorld": { "message": "执行上下文", "description": "表头-World" },
"tableHeaderRunAt": { "message": "运行时机", "description": "表头-RunAt" },
"tableHeaderUpdated": { "message": "更新时间", "description": "表头-更新时间" },
"deleteButton": { "message": "删除", "description": "删除按钮" },
"placeholderOptional": { "message": "可选", "description": "通用可选占位符" },
"placeholderMatchesExample": {
"message": "例如:https://*.example.com/*",
"description": "匹配示例占位符"
},
"placeholderScriptHint": { "message": "在此粘贴 JS/CSS/TM", "description": "脚本文本域占位符" },
"placeholderDomainHint": { "message": "example.com", "description": "域名筛选占位符" }
}
Loading