Skip to content

Commit bbc205a

Browse files
author
ly
committed
Add managed chrome-devtools MCP for all agents
1 parent 522d03b commit bbc205a

File tree

5 files changed

+118
-4
lines changed

5 files changed

+118
-4
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
└────────────────┴──────────────────────────────────┴──────────┴─────────────┘
2020
```
2121

22+
默认受管 MCP 服务器当前包含 `augment-context-engine`(代码库检索)和 `chrome-devtools`(浏览器调试 / network / performance,使用官方推荐的 `npx -y chrome-devtools-mcp@latest`)。
23+
2224
## Agent 安装源依据 (Official Evidence)
2325

2426
本项目的生命周期管理逻辑严格对齐以下官方发布渠道:

config/manager.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"ui-ux-pro-max-skill": { "enabled": true }
2727
},
2828
"mcp": {
29-
"augment-context-engine": { "enabled": true }
29+
"augment-context-engine": { "enabled": true },
30+
"chrome-devtools": { "enabled": true }
3031
},
3132
"terminal": {
3233
"enabled": false

config/mcp.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
"AUGMENT_SESSION_AUTH": "${AUGMENT_SESSION_AUTH}"
88
},
99
"agents": null
10+
},
11+
"chrome-devtools": {
12+
"command": "npx",
13+
"args": ["-y", "chrome-devtools-mcp@latest"],
14+
"env": {},
15+
"agents": null
1016
}
1117
},
1218
"agent_paths": {

docs/MCP-CONFIG-GUIDE.md

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88

99
1. [快速开始](#快速开始)
1010
2. [各 Agent 的 MCP 配置格式](#各-agent-的-mcp-配置格式)
11-
3. [augment-context-engine 专项说明](#augment-context-engine-专项说明)
12-
4. [常见问题与解决方案](#常见问题与解决方案)
13-
5. [调试技巧](#调试技巧)
11+
3. [当前仓库默认受管 MCP 服务器](#当前仓库默认受管-mcp-服务器)
12+
4. [augment-context-engine 专项说明](#augment-context-engine-专项说明)
13+
5. [chrome-devtools 专项说明](#chrome-devtools-专项说明)
14+
6. [常见问题与解决方案](#常见问题与解决方案)
15+
7. [调试技巧](#调试技巧)
1416

1517
---
1618

@@ -37,6 +39,20 @@ cd agent-mcp && python3 sync_mcp.py --config ../config/manager.json --def-file .
3739

3840
---
3941

42+
## 当前仓库默认受管 MCP 服务器
43+
44+
| Server | 用途 | 受管命令 | 凭证 | 默认策略 |
45+
|--------|------|----------|------|----------|
46+
| `augment-context-engine` | 代码库检索、语义搜索、codebase-retrieval | `auggie --mcp --mcp-auto-workspace` | `AUGMENT_SESSION_AUTH` | 启用 |
47+
| `chrome-devtools` | Chrome DevTools 浏览器调试、性能分析、network / console / screenshot | `npx -y chrome-devtools-mcp@latest` || 启用 |
48+
49+
**维护约定**:
50+
- `chrome-devtools` 跟随官方 `@latest`,source-of-truth 维护在 `config/mcp.json`,由 `sync_mcp.py` 统一分发到所有受支持 Agent。
51+
- 首次调用 `chrome-devtools` 时,`npx` 可能会下载最新包版本;需要本机有可用的 Node.js / npm 运行时。
52+
- 如果后续需要统一增加 `--browserUrl``--headless``--isolated` 等参数,应修改 `config/mcp.json`,不要手改单个 Agent 的 MCP 配置文件。
53+
54+
---
55+
4056
## 各 Agent 的 MCP 配置格式
4157

4258
**关键发现**:不同 Agent 使用不同的 MCP 配置格式!这是最大的坑。
@@ -344,6 +360,35 @@ gemini -p "请用 codebase-retrieval 查看当前项目的结构"
344360

345361
---
346362

363+
## chrome-devtools 专项说明
364+
365+
### 什么是 chrome-devtools
366+
367+
`chrome-devtools` 是 Chrome 官方提供的 MCP server,用于让 Agent 直接连接和控制 Chrome,执行页面调试、network 观察、console 检查、性能 trace、截图和其他 DevTools 级别诊断。
368+
369+
### 当前维护策略
370+
371+
本项目默认通过以下命令受管分发给所有支持 MCP 的 Agent:
372+
373+
```bash
374+
npx -y chrome-devtools-mcp@latest
375+
```
376+
377+
这样可以跟随 Chrome DevTools 官方 MCP server 的最新发布,而不需要在每个 Agent 的本地配置里分别升级版本。
378+
379+
### 使用约束
380+
381+
- `chrome-devtools` 不依赖额外 secrets,占位符注入链不会为它加载专用凭证。
382+
- `npx` 会在首次运行或本地缓存失效时解析并下载最新版本,因此应将版本波动视为上游变更,而不是本仓库内的 drift。
383+
- 如果需要连接已运行的 Chrome、统一打开 headless、接受自签名证书或追加其他浏览器参数,应在 `config/mcp.json``args` 中集中维护,而不是在各 Agent 侧手工追加。
384+
385+
### 官方参考
386+
387+
- Chrome 官方博客:<https://developer.chrome.com/blog/chrome-devtools-mcp>
388+
- 官方仓库:<https://github.com/mcp/chromedevtools/chrome-devtools-mcp>
389+
390+
---
391+
347392
## 常见问题与解决方案
348393

349394
### Q1: OpenCode 报错 "Invalid input mcp.*"

tests/test_sync_mcp.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import subprocess
33
import tempfile
44
import unittest
5+
from copy import deepcopy
56
from pathlib import Path
67

78
from src.toml_compat import tomllib
@@ -13,6 +14,65 @@
1314

1415

1516
class SyncMcpTests(unittest.TestCase):
17+
def test_committed_mcp_policy_enables_chrome_devtools_latest(self):
18+
definitions = json.loads((ROOT / "config" / "mcp.json").read_text(encoding="utf-8"))
19+
policy = json.loads((ROOT / "config" / "manager.json").read_text(encoding="utf-8"))
20+
21+
chrome_devtools = definitions["servers"]["chrome-devtools"]
22+
self.assertEqual(chrome_devtools["command"], "npx")
23+
self.assertEqual(chrome_devtools["args"], ["-y", "chrome-devtools-mcp@latest"])
24+
self.assertEqual(chrome_devtools.get("env", {}), {})
25+
self.assertIsNone(chrome_devtools["agents"])
26+
self.assertTrue(policy["mcp"]["chrome-devtools"]["enabled"])
27+
28+
def test_committed_chrome_devtools_definition_syncs_into_json_and_codex_toml(self):
29+
definitions = json.loads((ROOT / "config" / "mcp.json").read_text(encoding="utf-8"))
30+
chrome_devtools = deepcopy(definitions["servers"]["chrome-devtools"])
31+
chrome_devtools.update(
32+
{
33+
"enabled": True,
34+
"_declared_in_policy": True,
35+
"_sync_ready": True,
36+
}
37+
)
38+
39+
with tempfile.TemporaryDirectory() as temp_dir:
40+
temp_root = Path(temp_dir)
41+
json_config_path = temp_root / "agent.json"
42+
toml_config_path = temp_root / "config.toml"
43+
toml_config_path.write_text('model = "gpt-5.4"\n', encoding="utf-8")
44+
45+
ok = sync_mcp.manage_mcp_config(
46+
{
47+
"TmpAgent": str(json_config_path),
48+
"codex": {"path": str(toml_config_path), "format": "toml"},
49+
},
50+
{"chrome-devtools": chrome_devtools},
51+
)
52+
53+
self.assertTrue(ok)
54+
json_updated = json.loads(json_config_path.read_text(encoding="utf-8"))
55+
self.assertEqual(json_updated["mcpServers"]["chrome-devtools"]["command"], "npx")
56+
self.assertEqual(
57+
json_updated["mcpServers"]["chrome-devtools"]["args"],
58+
["-y", "chrome-devtools-mcp@latest"],
59+
)
60+
self.assertEqual(
61+
json_updated["mcpServers"]["chrome-devtools"]["env"]["_MANAGED_BY"],
62+
"agent-manager",
63+
)
64+
65+
toml_updated = tomllib.loads(toml_config_path.read_text(encoding="utf-8"))
66+
self.assertEqual(toml_updated["mcp_servers"]["chrome-devtools"]["command"], "npx")
67+
self.assertEqual(
68+
toml_updated["mcp_servers"]["chrome-devtools"]["args"],
69+
["-y", "chrome-devtools-mcp@latest"],
70+
)
71+
self.assertEqual(
72+
toml_updated["mcp_servers"]["chrome-devtools"]["env"]["_MANAGED_BY"],
73+
"agent-manager",
74+
)
75+
1676
def test_invalid_policy_config_exits_non_zero(self):
1777
with tempfile.TemporaryDirectory() as temp_dir:
1878
temp_root = Path(temp_dir)

0 commit comments

Comments
 (0)