TraeBridge MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TraeBridge MCP Servertake a snapshot of my current page and click the login button"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Language / 语言: English | 简体中文
项目名称
TraeBridge — 面向 AI 编程助手的实时浏览器控制桥
TraeBridge 是一款浏览器扩展(Chrome / Edge Manifest V3),让 Trae(或任意支持 MCP 的 AI 客户端)无需浏览器驱动(无 Playwright / Puppeteer / Selenium),直接通过本机 WebSocket 通道实时操控用户当前已打开、已登录、带有完整 Cookie 会话的浏览器页面。
Related MCP server: agent-browser-mcp
一、项目背景与需求
1.1 现状痛点
场景 | 传统方案 | 痛点 |
Trae 自动化操作网页 | Playwright / Puppeteer 启动新浏览器实例 | 新实例没有用户 Cookie,需要重新扫码/登录;每次启动开销大 |
操作已登录的系统后台 | 手动导出 Cookie 注入或 CDP attach | 流程繁琐、易失效、安全性差 |
AI 实时读取当前页面信息 | 截图 + OCR / 复制粘贴 | 延迟高、信息丢失、无法结构化 |
核心诉求: AI 需要像"远程之手"一样,直接接管用户正在使用的那个浏览器会话。
1.2 需求定义
开发一个浏览器插件,满足以下需求:
R1 免驱动操控:不依赖任何浏览器自动化框架,通过 Chrome Extension API + CDP(Chrome DevTools Protocol)直接在已运行的浏览器中执行操作。
R2 会话继承:天然使用当前浏览器配置文件的 Cookie、LocalStorage、登录态,零登录成本。
R3 实时双向通信:插件与本机 MCP Server 通过 WebSocket 保持长连接,Trae 调用 MCP 工具 → MCP Server → WebSocket → 插件 → 执行 → 结果原路返回,端到端延迟 < 100ms。
R4 结构化页面感知:利用 CDP Accessibility Tree(AX Tree)生成页面可交互元素的语义化快照(而非原始 HTML dump),让 AI 高效理解页面结构。
R5 安全可控:连接需要用户显式授权;敏感操作(如提交表单、跳转支付页)需二次确认;通信仅限本机回环地址。
R6 标签页管理:支持多标签页发现、切换、关闭、分组,AI 可并行操作多个页面。
二、竞品对比:Playwright Extension / Kimi WebBridge / TraeBridge
2.1 架构对比
维度 | Playwright Extension | Kimi WebBridge | TraeBridge(本项目) |
架构模式 | 浏览器插件 + 外部 Node.js 进程 | 纯浏览器插件(MV3) | 纯浏览器插件(MV3)+ 轻量 MCP Server |
通信方式 | WebSocket + CDP | Native Messaging(绑定桌面端) | WebSocket + JSON-RPC 2.0(MCP 标准) |
外部依赖 | 必须安装 Node.js + Playwright 内核 | 必须安装 Kimi 桌面客户端 | 仅需 Node.js(MCP Server 一键启动) |
AI 接入 | 无内置 AI 通道,需自行封装 | 仅支持 Kimi 自家 AI | 任意 MCP 客户端(Trae / Claude Desktop / Cursor 等) |
开源程度 | 开源(Microsoft) | 闭源(Kimi 桌面端) | 完全开源 |
协议标准 | 私有协议 | 私有协议 | 标准 MCP Protocol,生态互通 |
2.2 功能对比
功能 | Playwright Extension | Kimi WebBridge | TraeBridge | 备注 |
页面导航 / 刷新 | ✅ | ✅ | ✅ | |
元素点击(DOM 级) | ✅ | ✅ | ✅ | |
元素点击(物理级,绕过反爬) | ❌ | ✅ | ✅ | Input.dispatchMouseEvent |
表单填写 / 文本输入 | ✅ | ✅ | ✅ | |
按键 / 组合键发送 | ✅ | ✅ | ✅ | |
任意 JavaScript 执行 | ✅ | ✅ | ✅ | |
截图(整页 / 元素) | ✅ | ✅ | ✅ | |
页面另存为 PDF | ❌ | ✅ | ✅ | |
Cookie 读取 | ❌ | ✅ | ✅ | |
Cookie 写入 / 删除 | ❌ | ❌ | ✅ | |
文件上传 | ✅ | ❌ | ✅ | |
网络请求实时监听 | ❌ | ❌ | ✅ | Network.enable + 事件流 |
标签页管理(列表/切换/关闭/分组) | ✅ | ✅ | ✅ | |
语义快照(AX Tree) | ❌ | ✅ | ✅ | Accessibility.getFullAXTree |
CDP 原始命令透传 | ✅ | ❌ | ✅ | 逃生舱,无限扩展 |
Cookie 脱敏显示 | ❌ | ❌ | 🚧 | Phase 4 安全功能 |
敏感操作二次确认 | ❌ | ❌ | 🚧 | Phase 4 安全功能 |
域名白名单 | ❌ | ❌ | 🚧 | Phase 4 安全功能 |
审计日志 | ❌ | ❌ | 🚧 | Phase 4 安全功能 |
✅ 已实现 🚧 代码结构已预留,待 Phase 4 迭代 ❌ 不支持
结论:Playwright Extension 与 Kimi WebBridge 已有的功能,TraeBridge 全部具备,并额外提供 Cookie 管理、网络抓包、CDP 透传、安全审计等企业级能力。
2.3 Token 消耗对比(AI 操作网页的关键指标)
方案 | 页面感知方式 | 单次操作典型 Token 消耗 | 说明 |
截图驱动(传统方案) | base64 PNG 图片 | 20万 – 80万 | 1920×1080 截图经 base64 编码后约 70万–270万字符 |
TraeBridge 语义快照 | AX Tree 文本结构 | 500 – 5,000 | 只返回可交互元素的 role/name/ref,AI 直接理解 |
TraeBridge 精确操作 |
| 100 – 2,000 | 无需视觉确认,直接通过引用操作 |
TraeBridge 的 Token 优化策略:
语义快照优先:
browser_snapshot返回文本化 AX Tree,比截图节省 99%+ Token精准元素引用:
@eN引用直接定位元素,无需反复截图确认坐标截图是备选而非默认:仅在以下场景才使用
browser_screenshot:验证码 / 图形识别
视觉布局回归测试
语义快照无法定位的极端复杂页面
✅ 推荐流程(低 Token):
browser_snapshot → AI 分析 → browser_click(@e14) → browser_evaluate 验证
总消耗:约 1,000–3,000 tokens
❌ 应避免流程(高 Token):
browser_screenshot → AI 视觉分析 → browser_click(x, y) → 再截图确认
总消耗:约 400,000+ tokens2.4 TraeBridge 的核心优势总结
优势 | 说明 |
免驱动 + 会话继承 | 直接操作用户当前浏览器,Cookie / 登录态零成本复用,无需 Playwright / Puppeteer / Selenium |
Token 效率最优 | 语义快照(AX Tree)替代截图,单次操作节省 99%+ Token,适合高频 AI 交互 |
协议标准化 | 基于 MCP Protocol,一次开发,任意 AI 客户端(Trae / Claude Desktop / Cursor)即插即用 |
能力全覆盖 | 覆盖 Playwright Extension 与 Kimi WebBridge 全部功能,并独有网络抓包、Cookie 管理、CDP 透传 |
安全可控 | 敏感操作确认、域名白名单、Cookie 脱敏、审计日志(Phase 4 陆续落地) |
完全开源 | 代码透明,可自由扩展、审计、定制,无黑盒依赖 |
后台静默运行,不抢占用户桌面 | 支持 Windows 多桌面(Virtual Desktop):把受控浏览器窗口放到桌面 2,桌面 1 继续给用户办公使用。AI 通过物理级模拟点击、网络抓包等方式在后台查询资料,完全不影响桌面 1 用户正在使用的浏览器(详见 2.5 节) |
2.5 场景:Windows 多桌面下的后台浏览器自动化
TraeBridge 的物理级点击(Input.dispatchMouseEvent)与网络抓包(Network.enable)能力,使其天然适合后台静默自动化场景——AI 操作的浏览器窗口可以完全独立于用户当前正在使用的桌面环境。
桌面 1(用户办公) 桌面 2(AI 后台操作)
┌─────────────────────────┐ ┌─────────────────────────┐
│ 用户在用的 Edge/Chrome │ │ 受控 Edge 窗口 │
│ ─ 正常浏览、办公 │ 互不相干 │ ─ AI 自动搜索资料 │
│ ─ 不受任何干扰 │ │ ─ 自动抓取网页数据 │
│ │ │ ─ 自动填表、点击 │
└─────────────────────────┘ └─────────────────────────┘
▲ ▲
│ Trae 下发命令 │ chrome.debugger
│ (browser_* 工具) │ CDP 物理级操作
└────────────────────────────────────┘
全程无窗口抢占、无焦点冲突、无鼠标干扰典型工作流:
在桌面 2 打开一个 Edge 窗口,加载 TraeBridge 扩展并连接 MCP Server
用户在桌面 1 正常办公,使用自己日常浏览器
通过 Trae 下发指令,例如:"帮我搜索某技术方案并抓取前三条结果"
AI 在桌面 2 的受控浏览器中完成:导航 → 快照 → 点击 → 抓包 → 提取数据
结果返回给 Trae,用户桌面 1 的体验完全不受影响
优势:
零干扰:不抢占鼠标焦点、不弹出窗口、不切换桌面
并行工作:用户办公与 AI 查询资料同时进行,互不阻塞
会话隔离:桌面 2 的浏览器可保持独立的登录态(Cookie),与用户日常浏览器完全隔离
三、总体架构设计
┌─────────────────────────────────────────────────────────────┐
│ Trae IDE (AI 客户端) │
│ 通过 stdio / streamable HTTP 调用 MCP │
└──────────────────────┬──────────────────────────────────────┘
│ MCP Protocol
▼
┌──────────────────────────────────────────────────────────────┐
│ TraeBridge MCP Server (Node.js) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐│
│ │ MCP Tool │ │ Session │ │ WebSocket Server ││
│ │ Registry │◄─┤ Manager │◄─┤ (ws://127.0.0.1) ││
│ │ (17+ tools) │ │ (tab路由) │ │ 端口: 8765 ││
│ └──────────────┘ └──────────────┘ └──────────────────────┘│
└──────────────────────┬───────────────────────────────────────┘
│ WebSocket (JSON-RPC 2.0)
▼
┌──────────────────────────────────────────────────────────────┐
│ TraeBridge Browser Extension (MV3) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐│
│ │ WS Client │ │ Tool │ │ CDP Controller ││
│ │ (reconnect) │◄─┤ Dispatcher │◄─┤ (chrome.debugger) ││
│ └──────────────┘ └──────────────┘ └──────────────────────┘│
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐│
│ │ Popup UI │ │ Confirm │ │ AX Tree ││
│ │ (连接控制) │ │ Interceptor │ │ Snapshot Builder ││
│ └──────────────┘ └──────────────┘ └──────────────────────┘│
└──────────────────────┬───────────────────────────────────────┘
│ chrome.debugger.attach
▼
┌──────────────────────────────────────────────────────────────┐
│ 用户当前浏览器 (已登录 / 有 Cookie) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Tab 1 │ │ Tab 2 │ │ Tab N │ │
│ │ (知乎) │ │ (GitHub)│ │ (后台) │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└──────────────────────────────────────────────────────────────┘四、核心模块设计
4.1 浏览器插件端(Extension)
4.1.1 manifest.json
{
"manifest_version": 3,
"name": "TraeBridge",
"version": "1.0.0",
"description": "Bridge your browser to Trae AI via MCP — no driver needed.",
"permissions": [
"tabs",
"activeTab",
"debugger",
"storage",
"alarms",
"tabGroups",
"windows",
"cookies"
],
"host_permissions": ["<all_urls>"],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
}
}4.1.2 核心组件
组件 | 职责 | 关键实现 |
WS Client | 与 MCP Server 保持 WebSocket 长连接 | 断线指数退避重连;心跳 ping/pong;消息序列化 JSON-RPC 2.0 |
Tool Dispatcher | 接收 tool_call,路由到对应执行器 | 注册表模式: |
CDP Controller | 管理 | 单例 attach/detach;tab 关闭自动 detach;超时保护 |
AX Snapshot Builder | 构建语义化页面快照 |
|
Confirm Interceptor | 敏感操作二次确认 |
|
Popup UI | 连接状态展示、手动连接/断开、当前 session 列表 | 原生 HTML + JS,无框架依赖 |
4.1.3 CDP 工具执行器
每个工具是一个 class,实现 execute(args) 接口:
CDPExecutor
├── NavigateExecutor → Page.navigate / Page.reload
├── SnapshotExecutor → Accessibility.getFullAXTree → 语义树
├── ClickExecutor → DOM.resolveNode + Runtime.callFunctionOn (DOM级)
├── MouseClickExecutor → DOM.getBoxModel + Input.dispatchMouseEvent (物理级)
├── FillExecutor → Runtime.callFunctionOn (原生 setter + input/change 事件)
├── TypeExecutor → Input.insertText
├── SendKeysExecutor → Input.dispatchKeyEvent (组合键、功能键)
├── EvaluateExecutor → Runtime.evaluate (自定义 JS)
├── ScreenshotExecutor → Page.captureScreenshot (支持 clip 元素区域)
├── NetworkExecutor → Network.enable / disable / list / detail
├── CookieExecutor → Network.getCookies / setCookies / deleteCookies
├── PDFExecutor → Page.printToPDF
├── UploadExecutor → DOM.setFileInputFiles
├── TabManagerExecutor → tabs.query / create / remove / group / activate
└── CDPRawExecutor → 透传任意 CDP 方法 (escape hatch)4.1.4 连接状态机
disconnected ──[user click connect / auto-reconnect]──► connecting
│
[ws open] │
▼
connected ◄────────────────────────────────────────── connected
│ │
│ [ws close / error] │ [user click disconnect]
▼ ▼
reconnecting (backoff: 1s → 2s → 4s → ... max 30s) disconnected4.2 MCP Server 端(Node.js + TypeScript)
4.2.1 项目结构
traebridge-mcp-server/
├── package.json
├── tsconfig.json
├── src/
│ ├── index.ts # 入口:启动 MCP Server + WS Server
│ ├── mcp/
│ │ ├── server.ts # MCP Server 初始化 (streamable HTTP + stdio)
│ │ ├── tools/ # 每个 MCP Tool 一个文件
│ │ │ ├── navigate.ts
│ │ │ ├── snapshot.ts
│ │ │ ├── click.ts
│ │ │ ├── fill.ts
│ │ │ ├── type_text.ts
│ │ │ ├── send_keys.ts
│ │ │ ├── evaluate.ts
│ │ │ ├── screenshot.ts
│ │ │ ├── network.ts
│ │ │ ├── cookies.ts
│ │ │ ├── pdf.ts
│ │ │ ├── upload.ts
│ │ │ ├── tabs.ts
│ │ │ └── cdp.ts
│ │ └── schemas/ # Zod 输入校验
│ ├── ws/
│ │ ├── ws-server.ts # WebSocket Server (端口 8765)
│ │ ├── session-manager.ts # 管理多个浏览器连接 (支持多浏览器实例)
│ │ └── protocol.ts # JSON-RPC 2.0 消息类型定义
│ └── utils/
│ ├── logger.ts
│ └── config.ts
└── dist/ # 编译输出4.2.2 MCP Tool 定义(暴露给 Trae 的工具列表)
MCP Tool | 说明 | 危险等级 |
| 导航到 URL(支持新标签页 / 当前页) | 低 |
| 获取当前页 AX Tree 语义快照 | 只读 |
| 点击元素(CSS selector 或 | 中 |
| 填充输入框(支持 contenteditable) | 中 |
| 在当前焦点元素输入文本 | 中 |
| 发送按键 / 组合键(Enter, Ctrl+A, F5...) | 中 |
| 在页面执行任意 JavaScript | 高 |
| 截图(整页或指定元素) | 只读 |
| 开始网络抓包 | 只读 |
| 列出已捕获请求 | 只读 |
| 获取请求/响应详情 | 只读 |
| 停止抓包 | 只读 |
| 获取当前域 Cookie | 只读 |
| 设置 Cookie | 高 |
| 页面另存为 PDF | 低 |
| 上传文件到 file input | 高 |
| 列出所有标签页 | 只读 |
| 切换到指定标签页 | 低 |
| 关闭标签页 | 中 |
| 透传任意 CDP 命令 | 高 |
4.2.3 通信协议(JSON-RPC 2.0 over WebSocket)
MCP Server → Extension(tool_call):
{
"jsonrpc": "2.0",
"id": "req-uuid-001",
"method": "tool_call",
"params": {
"tool": "browser_click",
"args": {
"selector": "@e3"
},
"sessionId": "browser-session-abc123"
}
}Extension → MCP Server(tool_result):
{
"jsonrpc": "2.0",
"id": "req-uuid-001",
"result": {
"success": true,
"tag": "BUTTON",
"text": "提交"
}
}Extension → MCP Server(事件推送):
{
"jsonrpc": "2.0",
"method": "event",
"params": {
"type": "page_navigated",
"data": { "url": "https://example.com", "title": "Example" }
}
}4.2.4 安装方式
方式一:本地开发(推荐,当前仓库)
// Trae MCP 配置 (~/.trae/mcp.json 或项目 .trae/mcp.json)
{
"mcpServers": {
"traebridge": {
"command": "node",
// 注意:将下面的路径改成你自己项目的实际路径
"args": ["D:\\TraeBridge\\mcp-server\\dist\\index.js"],
"env": {
"TRAEBRIDGE_WS_PORT": "8765"
}
}
}
}方式二:npm 全局安装(未来发布)
{
"mcpServers": {
"traebridge": {
"command": "npx",
"args": ["traebridge-mcp-server@latest"],
"env": {
"TRAEBRIDGE_WS_PORT": "8765"
}
}
}
}4.3 安全设计
层面 | 措施 |
网络隔离 | WebSocket 只监听 |
连接授权 | 首次连接时插件弹窗显示配对码,MCP Server 需携带相同配对码 |
操作分级 | 只读操作直接执行;中危操作记录日志;高危操作需用户在浏览器弹窗中点击确认 |
Cookie 保护 |
|
域名白名单 | 用户可在插件设置中配置允许 AI 操作的域名列表(如仅允许 |
审计日志 | 所有 tool_call 记录到本地文件,含时间戳、工具名、参数摘要、执行结果 |
evaluate 沙箱 |
|
4.4 与其他方案的关键差异
维度 | 传统闭源方案 | TraeBridge |
服务端 | 闭源桌面客户端 | 开源 MCP Server |
AI 客户端 | 单一 AI 产品绑定 | Trae / Claude Desktop / 任意 MCP 客户端 |
协议 | 自定义 JSON | 标准 MCP Protocol + JSON-RPC 2.0 |
Cookie 管理 | 无 | 新增 get/set/delete cookies 工具 |
多浏览器支持 | 单实例 | Session Manager 支持多浏览器同时连接 |
安全确认 | 无 | 敏感操作浏览器端弹窗确认 |
域名白名单 | 无 | 支持 |
审计日志 | 无 | 本地完整日志 |
五、技术选型
组件 | 技术 | 理由 |
浏览器插件 | Chrome Extension MV3 | 标准支持,兼容 Chrome/Edge/Brave |
CDP 通道 |
| 免驱动核心,无需额外权限 |
MCP Server | TypeScript + | 官方 SDK,类型安全 |
WebSocket |
| 成熟稳定,支持高并发 |
输入校验 | Zod | 与 MCP SDK 深度集成 |
打包 | tsup | 零配置 TS 打包 |
插件 UI | 原生 HTML/CSS/JS | 无框架依赖,体积小 |
六、开发计划
Phase 1:插件端 MVP ✅ 已完成
manifest.json + background service worker 骨架
WebSocket Client(连接/断线重连/消息路由)
CDP Controller(attach/detach/sendCommand 封装)
核心工具:navigate, snapshot, click, fill, evaluate, screenshot
Popup UI(连接状态 + 手动连接)
Phase 2:MCP Server MVP ✅ 已完成
MCP Server 初始化(stdio transport)
WebSocket Server(端口 8765)
Tool Registry(映射到 WebSocket 消息)
20 个 MCP Tool 实现
Trae MCP 配置集成验证(contract-test.js 30/30 PASS)
Phase 3:完整工具集 ✅ 已完成
send_keys, type_text
network 抓包(start/stop/list/detail)
cookies 管理(get/set)
pdf, upload, tabs 管理
cdp raw 透传
Phase 4:安全与体验(部分完成,待后续迭代)
敏感操作弹窗确认
域名白名单
Cookie 脱敏显示
审计日志
配对码授权机制
Phase 5:高级功能(待后续迭代)
多浏览器 Session 管理(代码已预留,UI 未实现)
页面变化事件推送(导航、弹窗、DOM 变更)
AX Tree 智能压缩(大页面分页/过滤)
录制回放(操作序列保存为可重放脚本)
七、使用场景示例
场景 1:Trae 自动操作已登录的 GitHub
用户: "帮我把这个 PR 的 CI 失败日志抓出来"
Trae: 调用 browser_navigate → https://github.com/org/repo/pull/123
Trae: 调用 browser_snapshot → 获取页面结构
Trae: 调用 browser_click("@e5") → 点击 "Checks" 标签
Trae: 调用 browser_click("@e12") → 点击失败的 job
Trae: 调用 browser_evaluate → 提取日志文本
Trae: 分析日志,给出修复建议场景 2:批量填写表单
用户: "把这 20 条数据录入到后台系统"
Trae: browser_navigate → 后台系统(已登录)
Trae: 循环 browser_fill + browser_click 完成录入
Trae: browser_screenshot 确认提交结果场景 3:抓取需要登录才能访问的数据
用户: "帮我看看知乎热榜前 10 都是什么"
Trae: browser_navigate → zhihu.com(使用已登录 Cookie)
Trae: browser_snapshot → 获取热榜列表
Trae: browser_evaluate → 提取标题 + 链接
Trae: 整理输出八、风险与应对
风险 | 应对 |
| 在文档中说明;操作完成后自动 detach |
大页面 AX Tree 非常庞大 | 实现分页快照 + 智能过滤(只保留可交互元素) |
WebSocket 断连导致 tool_call 丢失 | 每条消息带唯一 ID;超时未响应返回明确错误;客户端可重试 |
插件被浏览器自动停用(MV3 service worker 休眠) | 使用 |
恶意网页通过 JS 检测 debugger | 接受此限制(CDP 的固有特征);文档中说明适用场景 |
九、运行条件
Chrome / Edge 浏览器(版本 ≥ 109,支持 MV3)
Node.js ≥ 18
Trae IDE(或任意支持 MCP 的客户端)
本机 8765 端口可用
十、运行说明
10.1 安装插件
打开
chrome://extensions/,开启"开发者模式"点击"加载已解压的扩展程序",选择
extension/目录点击浏览器工具栏中的 TraeBridge 图标,在弹窗中点击"连接"按钮,确认 WebSocket 状态显示为"已连接(ws://127.0.0.1:8765)"
10.2 启动 MCP Server
npx traebridge-mcp-server
# 或指定端口
TRAEBRIDGE_WS_PORT=8765 npx traebridge-mcp-server10.3 配置 Trae MCP
在 Trae 设置中添加 MCP Server 配置(见 4.2.4 节),重启 Trae 后即可在 AI 对话中使用 browser_* 系列工具。
十一、部署清单
11.1 文件结构
TraeBridge/
├── extension/ # 浏览器插件(MV3)
│ ├── manifest.json # 插件清单
│ ├── background.js # Service Worker(WebSocket 客户端 + CDP 执行器)
│ ├── popup.html # 弹窗 UI
│ ├── popup.js # 弹窗逻辑
│ └── icons/ # 插件图标(16/32/48/128)
├── mcp-server/ # MCP Server(Node.js + TypeScript)
│ ├── package.json
│ ├── tsconfig.json
│ ├── contract-test.js # 契约一致性测试(30 项)
│ ├── src/
│ │ ├── index.ts # 入口
│ │ ├── mcp/
│ │ │ ├── server.ts # MCP Server 初始化
│ │ │ ├── types.ts # 工具定义类型
│ │ │ └── tools/ # 14 个工具文件(20 个 MCP 工具)
│ │ ├── ws/
│ │ │ ├── ws-server.ts # WebSocket Server
│ │ │ ├── session-manager.ts # 会话管理
│ │ │ └── protocol.ts # JSON-RPC 2.0 协议
│ │ └── utils/
│ └── dist/ # 编译输出(tsc)
├── .gitignore
├── LICENSE # MIT
├── package.json # 根目录脚本入口
├── logo.png # 项目 Logo
└── README.md # 本文档11.2 部署步骤
Step 1:编译 MCP Server
cd mcp-server
npm install
npm run build # tsc -> dist/Step 2:加载浏览器插件
打开 Chrome/Edge,访问
chrome://extensions/(或edge://extensions/)开启右上角"开发者模式"
点击"加载已解压的扩展程序",选择
TraeBridge/extension/目录记住插件 ID(例如
abcdefghijklmnop)
Step 3:启动 MCP Server
cd mcp-server
npm start # node dist/index.js
# 或开发模式
npm run dev # tsx src/index.tsStep 4:配置 Trae MCP
编辑 ~/.trae/mcp.json(Windows: %USERPROFILE%\.trae\mcp.json):
{
"mcpServers": {
"traebridge": {
"command": "node",
// 注意:将下面的路径改成你自己项目的实际路径
"args": ["D:\\TraeBridge\\mcp-server\\dist\\index.js"],
"env": {
"TRAEBRIDGE_WS_PORT": "8765"
}
}
}
}Step 5:验证连接
点击浏览器工具栏中的 TraeBridge 图标,确认状态为"已连接"
在 Trae 中打开 MCP 面板,确认
traebridge显示为已连接运行集成测试:
node mcp-server/contract-test.js(应输出 30/30 PASS)
11.3 注意事项
事项 | 说明 |
chrome.debugger 警告条 | 插件 attach 后浏览器顶部会显示"正在调试"黄色警告条,这是 CDP 的固有特征,操作完成后自动消失 |
Service Worker 休眠 | MV3 SW 可能被浏览器自动休眠,插件使用 |
端口占用 | 确保 8765 端口未被其他程序占用 |
Cookie 权限 |
|
多浏览器 | 支持多个浏览器实例同时连接,MCP Server 通过 sessionId 路由 |
Available Tools
20 toolsbrowser_cdpCDP passthroughC
Send an arbitrary Chrome DevTools Protocol command to the current tab and return the raw response. Use with care.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | The Chrome DevTools Protocol method, e.g. "Page.captureScreenshot" | |
| params | No | Parameters for the CDP method |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses only that the target is the current tab and the return is raw. It does not say that arbitrary CDP commands can mutate or destroy page state, whether the call blocks or times out, or how errors surface.
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 short sentences, front-loaded with the action and target, with no wasted words. The trailing 'Use with care' is terse but carries little information.
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 an open-ended passthrough tool with a free-form params object and no output schema, the description covers scope (current tab) and return shape (raw response) but omits risk profile, failure behavior, and any hint about the domain of valid CDP methods.
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% and both parameters (method, params) are already documented in the schema with an example. The description adds nothing beyond 'arbitrary command', so the baseline 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?
States a specific verb ('Send') and resource ('an arbitrary Chrome DevTools Protocol command to the current tab') plus the response shape ('raw response'). It is clearly distinct in kind from the high-level siblings, though it never names the escape-hatch relationship explicitly.
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?
'Use with care' is a vague caution, not guidance. There is no statement of when to prefer this over browser_evaluate, browser_screenshot, browser_click, or other task-specific siblings, nor any prerequisites for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_clickClickB
Click an element on the page identified by a CSS selector or an @eN snapshot handle.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | Element selector: a CSS selector or an @eN handle obtained from browser_snapshot |
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, and it discloses little beyond the action itself. It does not say whether the click waits for navigation or network idle, how it behaves on hidden/disabled/covered elements, whether it auto-scrolls, or what errors to expect.
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 front-loaded sentence with no wasted words; the action and its identifier mechanism are stated immediately.
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 one-parameter tool with no output schema, the description is minimally adequate. However, with no annotations covering safety or side effects and no mention of navigation waiting or failure modes, an agent lacks the behavioral context needed to invoke it confidently.
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 a single parameter at 100% schema description coverage, the schema already documents the selector format. The description restates that the selector may be a CSS selector or an @eN handle, which is redundant with the schema and adds no format or precedence details.
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) and resource (an element on the page) and names the two accepted identifier forms (CSS selector or @eN snapshot handle). It is clear on its own, though it does not explicitly differentiate itself from siblings like browser_fill or browser_type that also act on 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?
There is no statement of when to use this tool versus alternatives such as browser_fill, browser_type, or browser_send_keys, all of which also target elements. Usage is only implied by the tool name and the mention of the @eN handle sourcing from browser_snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_close_tabClose tabB
Close the given browser tab.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | The id of the tab to close (from browser_list_tabs) |
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 that this is an irreversible mutation, what happens to the active tab or session afterwards, or what errors occur for an invalid/already-closed tab id.
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 clean sentence with the action and target front-loaded and zero filler. Nothing could be trimmed without losing meaning.
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 tool with a fully documented schema and no output schema, the essentials are covered. The gap is that, as an unannotated mutation, the description never says the close is irreversible or how failures surface.
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% and the schema itself documents tabId including its source (browser_list_tabs), so the description adds no parameter meaning beyond structured data. Baseline 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 states a specific verb (Close) and resource (the given browser tab), so purpose is unambiguous. It does not, however, differentiate itself from siblings like browser_switch_tab or browser_list_tabs, which share the same tab domain.
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 alternatives, nor prerequisites such as whether the tab must be the active tab or whether the id must come from browser_list_tabs. Usage is only implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_evaluateEvaluate JavaScriptC
Evaluate arbitrary JavaScript code in the context of the current page and return the result (JSON-serializable values only).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The JavaScript code to evaluate in the page context |
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 one useful trait (returns JSON-serializable values only), but says nothing about whether the code runs in the page's main world, whether it can mutate the DOM/state, async/timeout behavior, or sandboxing/security implications of executing arbitrary code.
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, front-loaded sentence with no filler; the key constraint (JSON-serializable return) is placed at the end efficiently. It is tight and earns its length.
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 one-parameter tool with full schema coverage and no output schema, the description is adequate but thin: it hints at the return type but not its structure, and omits mutation/security context that matters for arbitrary code execution.
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% for the single 'code' parameter, so the schema already documents it fully. The description adds nothing beyond what the schema provides, which is the expected baseline when the schema does the heavy lifting.
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 (Evaluate) and resource (arbitrary JavaScript in the current page context), so the agent knows exactly what it does. It is reasonably distinct from siblings like browser_click/browser_snapshot, though it doesn't explicitly position itself against the potentially overlapping browser_cdp.
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 alternatives such as browser_cdp or the DOM-specific siblings, nor any mention of prerequisites. The agent must infer that this is the escape hatch for arbitrary script execution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_fillFillB
Fill an input or textarea element (identified by CSS selector or @eN handle) with the given value, replacing any existing content.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | The value to fill into the input | |
| selector | Yes | Input element selector: a CSS selector or an @eN handle obtained from browser_snapshot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that existing content is replaced (idempotent set rather than append), which is real behavioral value. However, it omits whether input/change events fire, what happens if the selector matches nothing, or whether the element must be visible — significant gaps for an unannotated browser-automation 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?
A single front-loaded sentence with zero filler; the core action, target, and replacement behavior all appear before any trailing detail.
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 two-parameter, no-annotation, no-output-schema tool, the description covers the action and the key replacement semantic. It is adequate but not complete: nothing explains failure modes, event triggering, or what the tool returns, which an agent calling a DOM mutation would benefit from.
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 schema already documents both parameters, establishing a baseline of 3. The description repeats the selector-handle detail ('CSS selector or @eN handle') without adding syntax, format, or constraint information beyond 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 states a specific verb (Fill) and resource (input or textarea element), plus the value semantics. It is clear and unambiguous, but it never distinguishes itself from the close sibling browser_type, which an agent will reasonably confuse with it.
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-to-use guidance and no named alternative. The phrase 'replacing any existing content' hints at how it differs from a character-by-character type operation, but the description never says 'use browser_type instead when...' or otherwise routes the agent, leaving the fill-vs-type decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_cookiesGet cookiesB
Read cookies from the browser, optionally filtered by URL and/or name.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Only return cookies that would be sent to this URL | |
| name | No | Only return cookies with this name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it only implies that an active browser session is required ('from the browser'). It says nothing about which browsing context/tab cookies come from, what happens with no active session, or whether httpOnly/secure cookies are included. The read-only nature is inherently low-risk, which keeps this from dropping further.
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 12-word sentence that front-loads the action and resource and appends the filter qualifier. Nothing is wasted and nothing important is buried.
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?
With no output schema and no annotations, the description should say more about the returned shape (names, values, domains, expiry) and the required browser-session precondition. For a simple two-param read tool it is adequate, but an agent still lacks the return-value picture.
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's 'optionally filtered by URL and/or name' merely restates the two documented properties. It adds no matching semantics beyond the schema, such as how URL matching interacts with cookie domain/path scoping.
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?
States a specific verb and resource ('Read cookies from the browser') plus the two optional filter dimensions, which is enough for an agent to distinguish it from browser_set_cookie. It does not explicitly name or contrast against any sibling, so it stops short of a 5.
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 when-to-use or when-not-to-use guidance and no routing to the obvious alternative (browser_set_cookie for writing, browser_evaluate for JS-level access). The optional-filter mention describes parameters, not tool selection, so usage must be inferred 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.
browser_list_tabsList tabsA
List all open browser tabs with their id, URL, title and active state.
| 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 carries the full burden. It does disclose the shape of the result (id, URL, title, active state), which signals a non-destructive read, but it says nothing about scope beyond 'all' — e.g. whether tabs across multiple windows or contexts are included, or ordering. Adequate but thin for a tool with zero annotation coverage.
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 front-loaded sentence with no filler; the verb, scope, and returned fields are stated immediately.
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 no-parameter read tool with no output schema, the description compensates well by enumerating the returned fields. Minor gap: it does not state whether the listing spans all windows/contexts or in what order tabs are returned.
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 takes zero parameters and the schema is empty with additionalProperties false, so there is nothing for the description to clarify. Baseline of 4 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 gives a specific verb (List) and resource (open browser tabs) and even names the returned fields: id, URL, title, active state. It is immediately distinguishable from browser_switch_tab and browser_close_tab by intent, though it never explicitly contrasts itself with sibling tools.
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 when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as browser_snapshot or browser_network_list. Usage is only implied by the tool name and the listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_network_detailNetwork capture: detailA
Get the full details (headers, body, timing) of one captured request.
| Name | Required | Description | Default |
|---|---|---|---|
| captureId | Yes | The capture id returned by browser_network_start | |
| requestId | Yes | The request id from browser_network_list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the return contents (headers, body, timing), which is genuinely useful for a read-only fetch, but says nothing about payload size, truncation, performance cost, or error behavior for a detail endpoint that may return large bodies.
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 front-loaded sentence with no filler. The verb and resource come first and the return contents follow, so nothing needs to be skimmed for or re-read.
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?
No output schema exists, so the description must hint at return values, and it does so by naming headers, body, and timing. That is enough for an agent to know what it gets back, though it does not describe the shape or size of the payload.
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%, and the schema itself explains where captureId and requestId come from, so the baseline is 3. The description adds only the notion that the requestId identifies "one captured request" and does not go beyond 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 gives a specific verb ("Get") and resource ("the full details of one captured request"), and even enumerates what those details are (headers, body, timing). This distinguishes it from browser_network_list, which returns the request list, but the description never names that sibling to make the contrast explicit.
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?
Usage is only implied: the phrase "one captured request" signals it operates on an already-captured request, and the schema parameter descriptions chain it to browser_network_start and browser_network_list. There is no explicit statement of when to use this tool versus browser_network_list or when it is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_network_listNetwork capture: listA
List the requests captured so far by an active (or stopped) network capture.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max requests to return | |
| filter | No | Optional URL substring to filter the returned requests | |
| captureId | Yes | The capture id returned by browser_network_start |
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. 'List' correctly implies a read-only operation and the 'active (or stopped)' clause usefully signals that captures can be queried after stopping, but return format, pagination behavior, and truncation semantics are not disclosed.
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 front-loaded sentence with no filler. The key constraint (requires an existing/stopped capture) is stated in the fewest possible words.
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?
There is no output schema, so the description could have explained what a listed request contains and how ordering/pagination works. For a simple three-parameter list tool this is adequate but leaves return-value context unaddressed.
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%, with limit, filter, and captureId all documented in the schema itself, so the baseline is 3. The description adds no extra meaning about parameter behavior or defaults beyond what the schema already provides.
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) and resource (requests captured by a network capture), which is clear and immediately understandable. It does not contrast itself with the sibling browser_network_detail, which also returns request data, so an agent must infer the difference between listing and detailing.
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?
It implies when the tool is usable by noting the capture may be 'active (or stopped)', which tells the agent a capture must already exist. However, it never names browser_network_detail or browser_network_start as alternatives, nor states when to prefer this over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_network_startNetwork capture: startA
Start capturing network requests made by the page. Returns a captureId used with the other browser_network_* tools.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional URL substring / pattern to filter captured requests | |
| includeBodies | No | Also capture request/response bodies (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It valuably discloses that the tool is stateful (a capture session started here feeds sibling tools) and returns a captureId, but says nothing about lifecycle limits, what happens if started twice, whether capture survives navigation, or the performance cost of includeBodies.
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 short sentences with zero padding; the action and the return value are both front-loaded and every 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?
Without an output schema, the description correctly names the returned captureId, which is the key consume-side detail. For a stateful capture-start tool with no annotations, it leaves open session lifetime, per-tab vs per-page scope, and failure modes.
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 `filter` and `includeBodies` are already documented in the schema; the description adds no parameter detail beyond that. Baseline of 3 is appropriate when the schema does all the heavy lifting.
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?
States a specific verb and resource ("Start capturing network requests made by the page") and explicitly situates itself in the browser_network_* family. It is clearly distinguishable from browser_network_stop/list/detail, though it doesn't spell out the start-vs-stop relationship beyond the captureId hand-off.
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 mention that the returned captureId is "used with the other browser_network_* tools" implies this must run before list/detail/stop, giving usable context. However, there is no explicit when-to-use statement, no exclusion (e.g. one active capture per page), and no prerequisites such as an active tab.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_network_stopNetwork capture: stopB
Stop a running network capture and return the captured requests.
| Name | Required | Description | Default |
|---|---|---|---|
| captureId | Yes | The capture id returned by browser_network_start |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and falls short. It says it returns captured requests but does not disclose whether the capture is deleted/terminated afterward, what happens if the captureId is invalid or already stopped, or whether the returned data is complete or partial.
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 well-formed sentence that front-loads the action (stop) and then the outcome (returned requests). Zero waste or 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?
There is no output schema and no annotations, so the description does most of the work; it correctly notes the return of captured requests. However, for a state-changing stop operation it omits error conditions and post-stop capture state, leaving it only minimally adequate.
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 single captureId parameter is fully documented in the schema, including that it comes from browser_network_start. The description adds no parameter detail beyond that, 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 states a specific verb ("Stop") and resource ("running network capture") plus the return behavior ("return the captured requests"). It is clear on its own, but it does not differentiate itself from sibling capture tools like browser_network_list or browser_network_detail, so it stops short of a 5.
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 no explicit when-to-use guidance, no prerequisites (e.g. that a capture must be running), and no mention of alternatives. The agent must infer that this pairs with browser_network_start and is distinct from browser_network_list purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_save_as_pdfSave as PDFA
Print the current page to a PDF and return it as base64-encoded data.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | Scale factor (0.1-2, default 1) | |
| landscape | No | Use landscape orientation | |
| paperWidth | No | Paper width in inches (default 8.5) | |
| paperHeight | No | Paper height in inches (default 11) | |
| printBackground | No | Print background graphics (default true) | |
| preferCSSPageSize | No | Use the page's own @page size if present |
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. It discloses the return format (base64) which is useful, but omits whether the operation mutates state (printing is generally non-destructive but this is not stated), whether it requires the page to be loaded, and any size or rate limits.
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 front-loaded sentence with no filler; 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 description covers the core action and return shape, which is enough for an agent to invoke the tool. However, with no annotations and no output schema, it leaves behavioral aspects like preconditions, non-destructiveness, and error conditions undocumented, making it only minimally complete for a 6-parameter 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 100%, so every one of the six optional parameters is already documented with type, default, and constraints. The description adds no parameter-level information beyond what the schema provides, 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?
States a specific verb (Print) and resource (current page) and the output form (PDF, base64-encoded data). This clearly distinguishes it from browser_screenshot, which would produce an image rather than a PDF.
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?
Implied usage is clear from the purpose, but there is no explicit when-to-use guidance or contrast with the sibling browser_screenshot. For a tool whose main alternative (screenshot) is present in the sibling list, an explicit routing sentence is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotScreenshotB
Take a screenshot of the current page (or a specific element) and return it as a base64-encoded image.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Image format of the screenshot (default: png) | |
| quality | No | JPEG quality 0-100 (only used with format jpeg) | |
| selector | No | Optional CSS selector or @eN handle; when provided only that element is captured |
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. It discloses the output being base64-encoded, which is useful, but omits critical behavioral details: whether it requires the page to be loaded, whether it captures only visible content or the full page, any size or performance implications, and whether it modifies browser state. For a tool with zero annotation coverage, this is a significant gap.
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 concise sentence that front-loads the core action and return format with zero waste. It is appropriately sized 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?
With no annotations, no output schema, and a simple parameter set, the description is too sparse. It fails to disclose behavioral traits like page-load requirements, full-page vs. viewport capture, or error conditions, which are essential for correct invocation in a browser automation context.
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 schema already documents all three parameters and their defaults fully. The description adds no parameter-specific semantics beyond what the schema provides. A baseline of 3 is appropriate when the schema does the heavy lifting.
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 ('Take a screenshot') and resource ('current page or a specific element'), and it clearly names the return format ('base64-encoded image'). This distinguishes it from siblings like browser_snapshot (likely DOM snapshot) and browser_save_as_pdf (PDF output).
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 such as browser_snapshot or browser_save_as_pdf. It neither states when it is appropriate nor when it should be avoided. An agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_send_keysSend keysA
Send individual key presses / keyboard shortcuts to the focused element. For typing literal text prefer browser_type.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | List of keys to press in sequence, e.g. ["Control", "a"] or ["Enter"]. Use key names like "Enter", "Tab", "Escape", "ArrowDown", "Control", "Shift", etc. | |
| repeat | No | Repeat the key sequence this many times (default 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds one genuinely useful behavioral fact — keys go to the focused element — but is silent on what happens when nothing is focused, whether the call blocks or waits, and how modifier sequences are handled.
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 short sentences, with the core action stated first and the disambiguation second. Every clause earns its place and nothing is 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?
For a two-parameter input tool with no output schema, the description supplies purpose plus the key routing decision, which is most of what an agent needs. Only the preconditions around focus and blocking behavior remain unaddressed.
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 schema already documents both 'keys' (with key-name examples) and 'repeat'. The description adds no syntax, ordering, or default details beyond that, so the baseline 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?
States a specific verb and resource ('Send individual key presses / keyboard shortcuts') and scopes it to 'the focused element'. It also explicitly separates itself from the nearest sibling by name, so an agent can pick it over browser_type without opening a 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?
Gives clear routing guidance: 'For typing literal text prefer browser_type.' This covers the primary confusion case but names only one alternative and gives no exclusions or prerequisites (e.g. how it relates to browser_fill or whether the page must be focused first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_set_cookieSet cookieC
Create or update a cookie in the browser for the current profile.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL the cookie belongs to (used to derive domain/path) | |
| name | Yes | Cookie name | |
| path | No | Cookie path (default: /) | |
| value | Yes | Cookie value | |
| domain | No | Explicit cookie domain | |
| secure | No | Only send over HTTPS | |
| httpOnly | No | Not accessible from JavaScript | |
| sameSite | No | SameSite policy | |
| expirationDate | No | Unix timestamp (seconds) when the cookie expires |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It conveys mutation ('create or update') and profile scope, but says nothing about whether an existing cookie is overwritten, persistence/session lifetime, required permissions, or domain/path inheritance behavior for a 9-parameter 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?
A single 12-word sentence with the action front-loaded and no filler. It is appropriately sized for the tool, though very lean given the parameter surface.
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 9-parameter mutation tool with no annotations and no output schema, the description is minimal. It omits the url-vs-domain interactions, secure/httpOnly/sameSite implications, and whether the cookie is immediately active in the current session, leaving meaningful gaps an agent would have to guess at.
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 every parameter is already documented in the schema (url derives domain/path, path default '/', expirationDate as Unix seconds, etc.). The description adds no parameter detail beyond that, matching the baseline 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 states a clear verb+resource ('Create or update a cookie') and scopes it to 'the current profile,' which is specific enough to distinguish it from read siblings like browser_get_cookies. It stops short of explicitly naming or contrasting with those siblings, so it doesn't reach the 5 tier.
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 when-to-use or when-not-to-use guidance. It never mentions browser_get_cookies for reading, nor does it note any prerequisite such as needing a page/tab context before setting a cookie. Usage must be inferred entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_snapshotSnapshotA
Capture an accessibility-tree (AX) snapshot of the current page. Element handles (@eN) returned by this tool can be used as selectors by the other tools.
| 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, and it does usefully disclose the returned artifact and the @eN handle syntax that other tools consume. It says nothing about the read-only nature of the call, page-loading prerequisites, or whether very large pages produce truncated output.
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, no filler, with the core purpose front-loaded and the handle-interop fact second. 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 zero-parameter tool with no output schema, the description covers the essential facts an agent needs: what is produced and how the @eN handles feed the other tools. Only minor gaps remain around preconditions and output size behavior.
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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. Schema coverage is 100% and no enum or nested structure exists.
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?
States a specific verb (capture) and a precise resource (accessibility-tree snapshot of the current page), which is distinct from sibling browser_screenshot and the network tools. It does not explicitly name an alternative, but 'AX snapshot' is specific enough that an agent will not confuse it with the other capture/interaction tools.
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?
Usage is only implied: the note that returned @eN handles can be used as selectors by other tools suggests this is the precursor step before click/fill/type, but the description never states when to call it, whether a page must already be loaded, or when to prefer browser_screenshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_switch_tabSwitch tabB
Activate (focus) the given browser tab.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | The id of the tab to activate (from browser_list_tabs) |
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 states that focus shifts, but says nothing about what happens if the tabId is stale or invalid, whether the containing window is raised, or whether the operation has any other 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?
A single four-word sentence, front-loaded with the verb and containing no filler. Nothing is wasted and there is nothing further to trim.
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 one-parameter tool with full schema coverage and no output schema, the description covers the core action adequately. However, it omits failure behavior and any note about the resulting UI state, which are the only remaining gaps an agent would care about.
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%, and the schema itself already documents tabId with its provenance ('from browser_list_tabs'), so the baseline of 3 applies. The description adds no constraints, ranges, or format notes beyond what the schema provides.
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 pairs a specific verb ('Activate (focus)') with a specific resource ('the given browser tab'), so an agent immediately knows this changes which tab is active rather than cloning or closing one. It does not explicitly contrast itself with siblings like browser_close_tab or browser_list_tabs, keeping it just short of a 5.
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 when-to-use guidance, no mention of how to obtain a valid tabId, and no statement of alternatives such as browser_list_tabs for discovery or browser_close_tab for removal. The intended usage (after a tab is listed) is only implied by the tool name and is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeType textA
Type text into the element that currently has focus, as if the user was typing on the keyboard.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to type into the focused element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and 'as if the user was typing on the keyboard' usefully signals per-character keyboard events rather than a direct value set (contrasting with fill semantics). It does not disclose what happens when no element is focused, whether existing text is cleared, or how errors surface.
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 front-loaded sentence with no filler; the focus constraint and the keyboard-emulation behavior both do work and are stated immediately.
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 one-parameter, no-annotation tool this is minimally adequate, but it omits failure modes (no focused element, non-editable target) and any note on return behavior or element state after typing, which an agent would need to sequence calls 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?
One parameter with 100% schema description coverage, so the schema already defines 'text' fully. The description's only added semantic is that the text goes to the focused element, which is marginal given the schema already says 'text to type into the focused element'.
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?
States a specific verb (type) and a precise target (the element that currently has focus), which implicitly separates it from sibling browser_fill, which presumably targets an element by selector. It never names that sibling explicitly, so an agent must infer the distinction, but the 'currently has focus' scoping makes the core 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 phrase 'into the element that currently has focus' carries an implied prerequisite (focus must already be set) but the description never says when to choose this over browser_fill or browser_send_keys. Usage is inferable from the focus constraint rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_uploadUpload filesB
Attach local files to a file input element on the page (as if picked via the file chooser).
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Absolute paths of the files to upload | |
| selector | Yes | The file input element (CSS selector or @eN handle) to set files on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and for a page-mutating action it is thin. The 'as if picked via the file chooser' clause is genuinely useful because it tells the agent the native dialog is bypassed and the input's change events fire, but nothing is said about failure modes, permission/visibility requirements, or whether files must exist locally.
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 front-loaded sentence with no filler or repetition. It is efficient, though arguably under-specified rather than optimally tight for an action 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?
For a simple two-parameter tool with 100% schema coverage and no output schema, the description covers the core action adequately. However, given the absence of annotations on a mutating tool, it could say more about what the call changes and when it fails.
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 (files and selector) are already fully documented in the schema, including absolute paths and CSS selector/@eN handle formats. The description adds no parameter detail beyond that, 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 states a specific verb and resource ('Attach local files to a file input element'), and the parenthetical clarifies the mechanism. It does not explicitly differentiate from siblings like browser_fill or browser_type, but the phrase 'file input element' implicitly narrows the 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?
There is no explicit when-to-use guidance, no prerequisites, and no named alternatives. The agent must infer that this is for file-input uploads versus browser_fill/browser_type for text fields, with nothing in the text to confirm that routing decision.
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.
20 tool updates
v1.0.0- First observed
browser_cdp - First observed
browser_click - First observed
browser_close_tab - First observed
browser_evaluate - First observed
browser_fill - First observed
browser_get_cookies - First observed
browser_list_tabs - First observed
browser_navigate - First observed
browser_network_detail - First observed
browser_network_list - First observed
browser_network_start - First observed
browser_network_stop - First observed
browser_save_as_pdf - First observed
browser_screenshot - First observed
browser_send_keys - First observed
browser_set_cookie - First observed
browser_snapshot - First observed
browser_switch_tab - First observed
browser_type - First observed
browser_upload
TDQS
Scored across 20 tools
Tools are clearly separated by action and target, with explicit differentiation between browser_fill (replace content), browser_type (literal typing into focus), and browser_send_keys (key presses/shortcuts). Network capture and cookie tools form distinct logical groups. No significant overlap or ambiguity.
All 20 tools use a consistent snake_case pattern with a browser_ prefix, followed by either verb_noun (browser_navigate) or noun_verb (browser_network_start) conventions. There are no mixed camelCase or inconsistent verb styles.
20 tools is slightly above the typical 3–15 range but appropriate for a comprehensive browser automation server. Each tool covers a unique capability (navigation, interaction, network, cookies, tabs, CDP) and earns its place.
The surface covers core browser workflows including navigation, interaction, snapshots, screenshots, network capture, cookies, PDF, upload, and tabs. Minor gaps exist for explicit back/forward/reload, select option, hover, or wait primitives, but browser_evaluate can work around most of them.
Maintenance
Related MCP Connectors
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
Undetectable cloud browser sessions for AI agents and scrapers. Navigate, extract, click, captcha.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, network monitoring, and DOM interaction through Chrome DevTools Protocol.1,516,489 npmApache 2.0
- AlicenseBqualityFmaintenanceEnables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.20243MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI clients to directly control a real Chrome/Edge browser via a WebSocket extension, supporting operations like navigation, clicks, screenshots, and JavaScript evaluation.18 npm1MIT
- AlicenseNot gradedqualityDmaintenanceLets AI coding assistants control and inspect a live Chrome browser using full Chrome DevTools capabilities for browser automation, debugging, and performance analysis.1,516,489 npmApache 2.0