web-recorder
Records Chrome network requests and responses for LLM knowledge bases, and exposes query and browser control capabilities via MCP tools like list_sessions, navigate, and evaluate.
README
WebRecorder
录制 Chrome 浏览器请求/响应作为大模型知识库,通过 MCP Server 暴露查询与浏览器控制能力。
- 录制:popup 手动开关,录当前 tab 或所有 tab 的所有请求/响应
- 存储:SQLite 单文件,按 session 组织
- 静态资源:录制时只存元数据,大模型按需 replay 重新请求拿响应体
- 动态资源:存请求体 + 响应体
- 查询:MCP 暴露 list_sessions / list_requests / get_request / get_response_body / search_requests / replay_static
- 控制:MCP 暴露 navigate / evaluate,大模型可主动操作浏览器
详细设计见 ../docs/superpowers/specs/2026-07-10-chrome-web-recorder-design.md。
安装
1. 编译并安装 service-go
cd service-go
bash build.sh # 交叉编译 4 平台二进制到 bin/
bash install.sh # macOS:安装 launchd 常驻服务
# 或 Linux:bash install-linux.sh
安装后:
- 二进制在
~/.webrecorder/bin/web-recorder-service - 监听
127.0.0.1:9130(HTTP)和9131(WS),开机自启 + 崩溃重启 - 数据库
~/.webrecorder/sessions.db - 日志
~/Library/Logs/webrecorder-service.log(macOS)或~/.webrecorder/webrecorder.log(Linux)
2. 加载 Chrome 扩展
- 打开
chrome://extensions/ - 右上角开启「开发者模式」
- 点「加载已解压的扩展程序」
- 选择
chrome-web-recorder/根目录(即本仓库根目录,含manifest.json)
3. 配置 Claude Code MCP
在 ~/.claude.json(或项目 .mcp.json)加:
{
"mcpServers": {
"web-recorder": {
"command": "/Users/<你的用户名>/.webrecorder/bin/web-recorder-service",
"args": []
}
}
}
args 为空(默认 MCP stdio 模式)。重启 Claude Code 后 MCP 工具可用。
使用
录制
- 点扩展图标打开 popup
- 输入会话名(留空用时间戳)
- 选范围(当前 tab / 所有)
- 可选:勾选过滤统计/广告域名,加额外屏蔽子串
- 点「开始录制」
- 在目标页面操作(导航、点击、提交等)
- 点「停止录制」
录制中页面右上角有红色浮标显示实时计数。
大模型查询
Claude Code 里直接调 MCP 工具:
list_sessions() # 列出所有会话
list_requests(session_id="sess_xxx") # 列出某会话的请求
get_request(request_id="req_xxx") # 拿单个请求详情
get_response_body(request_id="req_xxx") # 拿动态资源响应体
search_requests(session_id="sess_xxx", query="login") # 全文搜索
replay_static(request_id="req_xxx") # 重新请求静态资源
大模型控制浏览器
navigate(url="https://example.com") # 跳转
evaluate(script="document.title") # 执行 JS 拿返回值
navigate/evaluate 触发的请求也会录进当前 session(如果正在录制)。
验证
验证 service-go
curl -s http://127.0.0.1:9130/ping # 期望 pong
curl -s http://127.0.0.1:9130/config # 期望 {"http_port":9130,"ws_port":9131}
验证录制
# 录制一个会话后
sqlite3 ~/.webrecorder/sessions.db "SELECT id, name, request_count FROM sessions ORDER BY started_at DESC LIMIT 5"
sqlite3 ~/.webrecorder/sessions.db "SELECT method, url, resource_type FROM requests WHERE session_id='<某session_id>' LIMIT 10"
验证 MCP
在 Claude Code 里调 list_sessions,应返回最近会话列表。
故障排查
service-go 启动失败
查日志:
tail -f ~/Library/Logs/webrecorder-service.log # macOS
journalctl --user -u webrecorder -f # Linux
端口冲突
默认 9130/9131 被占用时,用环境变量改:
# 手动跑(改端口测试)
WEBRECORDER_HTTP_PORT=9140 WEBRECORDER_WS_PORT=9141 ~/.webrecorder/bin/web-recorder-service --http
若要让 launchd 常驻服务用新端口,编辑 ~/Library/LaunchAgents/com.xwx.webrecorder.plist,在 ProgramArguments 后加 EnvironmentVariables 字段:
<key>EnvironmentVariables</key>
<dict>
<key>WEBRECORDER_HTTP_PORT</key>
<string>9140</string>
<key>WEBRECORDER_WS_PORT</key>
<string>9141</string>
</dict>
改完 launchctl unload && launchctl load 重载。扩展会通过 GET /config 自动发现端口。
macOS 11 上崩溃
如果二进制在 macOS 11 上报 dyld: Symbol not found: _SecTrustCopyCertificateChain,说明编译时部署目标没设到 11.0。
原因(Go 1.25 已知问题):Go 1.25 默认用 internal linker,internal linking 下 mach-o 的 LC_BUILD_VERSION.minos 被 cmd/link 硬编码为 12.0.0,完全不读 MACOSX_DEPLOYMENT_TARGET 环境变量。必须在编译时加 -ldflags="-linkmode=external" 强制走 external linking(经 clang),clang 才会读取 MACOSX_DEPLOYMENT_TARGET=11.0 并生成 minos=11.0 的 LC_BUILD_VERSION。
当前 build.sh 已处理:同时设 MACOSX_DEPLOYMENT_TARGET=11.0、CGO_ENABLED=1、-ldflags="-linkmode=external",并用 otool 验证 LC_BUILD_VERSION.minos 字段(注意不是旧的 LC_BUILD_MACOSX_VERSION)。编译输出应看到:
✓ arm64: deployment target = 11.0.0
✓ amd64: deployment target = 11.0.0
如果你自己改 build.sh,注意这三者缺一不可,否则 macOS 11 会崩溃。
扩展浮标不出现
- 确认扩展已加载且启用
- 刷新目标页面(content script 在
document_start注入) - 检查 service worker console(
chrome://extensions/→ 扩展 → 「检查视图 service worker」)有无报错
MCP 工具不出现
- 确认 Claude Code 配置里 command 路径正确且二进制可执行
- 确认 service-go 以 MCP 模式启动(无
--http参数;MCP 模式由 Claude Code 拉起,与 launchd 的--http常驻实例是两个独立进程) - 重启 Claude Code
录制后数据库为空
- 确认 service-go 在跑(
curl http://127.0.0.1:9130/ping) - service worker console 检查
fetch('http://127.0.0.1:9130/record')是否报错 - 确认 popup 显示「录制中」状态
权限说明
| 权限 | 用途 |
|---|---|
webRequest |
监听请求/响应 |
storage |
存录制状态、过滤配置 |
alarms |
WS keep-alive |
tabs |
navigate |
scripting |
evaluate |
<all_urls> |
拦截任意 URL + WS 连本地 + evaluate 任意页面 |
安全提示
evaluate能执行任意 JS,等于完全控制当前页面(读 cookie、调 API、改 DOM)- service-go 默认仅监听
127.0.0.1,不要暴露到公网 - 录制数据含敏感字段(cookie/authorization),数据库文件注意保护
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。