Skip to main content
Glama
497187419

TraeBridge MCP Server

by 497187419

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 精确操作

@eN 引用 + JS 求值

100 – 2,000

无需视觉确认,直接通过引用操作

TraeBridge 的 Token 优化策略:

  1. 语义快照优先browser_snapshot 返回文本化 AX Tree,比截图节省 99%+ Token

  2. 精准元素引用@eN 引用直接定位元素,无需反复截图确认坐标

  3. 截图是备选而非默认:仅在以下场景才使用 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+ tokens

2.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 物理级操作
         └────────────────────────────────────┘
              全程无窗口抢占、无焦点冲突、无鼠标干扰

典型工作流:

  1. 在桌面 2 打开一个 Edge 窗口,加载 TraeBridge 扩展并连接 MCP Server

  2. 用户在桌面 1 正常办公,使用自己日常浏览器

  3. 通过 Trae 下发指令,例如:"帮我搜索某技术方案并抓取前三条结果"

  4. AI 在桌面 2 的受控浏览器中完成:导航 → 快照 → 点击 → 抓包 → 提取数据

  5. 结果返回给 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,路由到对应执行器

注册表模式:Map<toolName, executor>

CDP Controller

管理 chrome.debugger 生命周期

单例 attach/detach;tab 关闭自动 detach;超时保护

AX Snapshot Builder

构建语义化页面快照

Accessibility.getFullAXTree → 过滤 none/generic → 生成 @eN 引用

Confirm Interceptor

敏感操作二次确认

chrome.notifications + 用户点击确认后才执行

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)    disconnected

4.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

说明

危险等级

browser_navigate

导航到 URL(支持新标签页 / 当前页)

browser_snapshot

获取当前页 AX Tree 语义快照

只读

browser_click

点击元素(CSS selector 或 @eN ref)

browser_fill

填充输入框(支持 contenteditable)

browser_type

在当前焦点元素输入文本

browser_send_keys

发送按键 / 组合键(Enter, Ctrl+A, F5...)

browser_evaluate

在页面执行任意 JavaScript

browser_screenshot

截图(整页或指定元素)

只读

browser_network_start

开始网络抓包

只读

browser_network_list

列出已捕获请求

只读

browser_network_detail

获取请求/响应详情

只读

browser_network_stop

停止抓包

只读

browser_get_cookies

获取当前域 Cookie

只读

browser_set_cookie

设置 Cookie

browser_save_as_pdf

页面另存为 PDF

browser_upload

上传文件到 file input

browser_list_tabs

列出所有标签页

只读

browser_switch_tab

切换到指定标签页

browser_close_tab

关闭标签页

browser_cdp

透传任意 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 只监听 127.0.0.1,不暴露到局域网

连接授权

首次连接时插件弹窗显示配对码,MCP Server 需携带相同配对码

操作分级

只读操作直接执行;中危操作记录日志;高危操作需用户在浏览器弹窗中点击确认

Cookie 保护

browser_get_cookies 默认脱敏(隐藏 value 中间部分);browser_set_cookie 必须确认

域名白名单

用户可在插件设置中配置允许 AI 操作的域名列表(如仅允许 *.company.com

审计日志

所有 tool_call 记录到本地文件,含时间戳、工具名、参数摘要、执行结果

evaluate 沙箱

browser_evaluate 默认禁止访问 chrome.* API;禁止 fetch 到非当前域


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 通道

chrome.debugger API

免驱动核心,无需额外权限

MCP Server

TypeScript + @modelcontextprotocol/sdk

官方 SDK,类型安全

WebSocket

ws (Node.js)

成熟稳定,支持高并发

输入校验

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: 整理输出

八、风险与应对

风险

应对

chrome.debugger 会在标签页显示"正在调试"黄色警告条

在文档中说明;操作完成后自动 detach

大页面 AX Tree 非常庞大

实现分页快照 + 智能过滤(只保留可交互元素)

WebSocket 断连导致 tool_call 丢失

每条消息带唯一 ID;超时未响应返回明确错误;客户端可重试

插件被浏览器自动停用(MV3 service worker 休眠)

使用 chrome.alarms 保活;WS 连接本身也是保活信号

恶意网页通过 JS 检测 debugger

接受此限制(CDP 的固有特征);文档中说明适用场景


九、运行条件

  • Chrome / Edge 浏览器(版本 ≥ 109,支持 MV3)

  • Node.js ≥ 18

  • Trae IDE(或任意支持 MCP 的客户端)

  • 本机 8765 端口可用


十、运行说明

10.1 安装插件

  1. 打开 chrome://extensions/,开启"开发者模式"

  2. 点击"加载已解压的扩展程序",选择 extension/ 目录

  3. 点击浏览器工具栏中的 TraeBridge 图标,在弹窗中点击"连接"按钮,确认 WebSocket 状态显示为"已连接(ws://127.0.0.1:8765)"

10.2 启动 MCP Server

npx traebridge-mcp-server
# 或指定端口
TRAEBRIDGE_WS_PORT=8765 npx traebridge-mcp-server

10.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:加载浏览器插件

  1. 打开 Chrome/Edge,访问 chrome://extensions/(或 edge://extensions/

  2. 开启右上角"开发者模式"

  3. 点击"加载已解压的扩展程序",选择 TraeBridge/extension/ 目录

  4. 记住插件 ID(例如 abcdefghijklmnop

Step 3:启动 MCP Server

cd mcp-server
npm start            # node dist/index.js
# 或开发模式
npm run dev          # tsx src/index.ts

Step 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:验证连接

  1. 点击浏览器工具栏中的 TraeBridge 图标,确认状态为"已连接"

  2. 在 Trae 中打开 MCP 面板,确认 traebridge 显示为已连接

  3. 运行集成测试:node mcp-server/contract-test.js(应输出 30/30 PASS)

11.3 注意事项

事项

说明

chrome.debugger 警告条

插件 attach 后浏览器顶部会显示"正在调试"黄色警告条,这是 CDP 的固有特征,操作完成后自动消失

Service Worker 休眠

MV3 SW 可能被浏览器自动休眠,插件使用 chrome.alarms 每 30 秒保活

端口占用

确保 8765 端口未被其他程序占用

Cookie 权限

cookies 权限需要在 host_permissions 中包含目标域名

多浏览器

支持多个浏览器实例同时连接,MCP Server 通过 sessionId 路由

Available Tools

20 tools
browser_cdpCDP passthroughC

Send an arbitrary Chrome DevTools Protocol command to the current tab and return the raw response. Use with care.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesThe Chrome DevTools Protocol method, e.g. "Page.captureScreenshot"
paramsNoParameters for the CDP method

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesElement selector: a CSS selector or an @eN handle obtained from browser_snapshot

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdYesThe id of the tab to close (from browser_list_tabs)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe JavaScript code to evaluate in the page context

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe value to fill into the input
selectorYesInput element selector: a CSS selector or an @eN handle obtained from browser_snapshot

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoOnly return cookies that would be sent to this URL
nameNoOnly return cookies with this name

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_navigateNavigateC

Navigate the current browser tab (or a new tab) to the given URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to navigate to
newTabNoOpen the URL in a new tab (default: current tab)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It does not say whether navigation waits for page load, what happens on failure, or that navigating away from the current page may lose unsaved state, which are meaningful traits for a navigation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler; the primary action and target are stated immediately. It is efficient, though verging on under-specified rather than optimally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 a fully documented schema and no output schema, the description is minimally adequate. It omits behavioral details such as navigation timing or failure handling that would complete the picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both url and newTab are already documented in the schema, establishing a baseline of 3. The description's '(or a new tab)' merely restates the newTab parameter without adding format or default guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Navigate) and resource (browser tab / URL), making the action immediately clear. It does not explicitly distinguish itself from siblings like browser_switch_tab or browser_list_tabs, but the URL-navigation purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use versus when-not guidance and names no alternatives. The parenthetical '(or a new tab)' hints that the newTab parameter exists but offers no condition for choosing tab behavior, leaving routing 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_network_detailNetwork capture: detailA

Get the full details (headers, body, timing) of one captured request.

ParametersJSON Schema
NameRequiredDescriptionDefault
captureIdYesThe capture id returned by browser_network_start
requestIdYesThe request id from browser_network_list

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax requests to return
filterNoOptional URL substring to filter the returned requests
captureIdYesThe capture id returned by browser_network_start

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOptional URL substring / pattern to filter captured requests
includeBodiesNoAlso capture request/response bodies (default: false)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
captureIdYesThe capture id returned by browser_network_start

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoScale factor (0.1-2, default 1)
landscapeNoUse landscape orientation
paperWidthNoPaper width in inches (default 8.5)
paperHeightNoPaper height in inches (default 11)
printBackgroundNoPrint background graphics (default true)
preferCSSPageSizeNoUse the page's own @page size if present

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoImage format of the screenshot (default: png)
qualityNoJPEG quality 0-100 (only used with format jpeg)
selectorNoOptional CSS selector or @eN handle; when provided only that element is captured

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYesList of keys to press in sequence, e.g. ["Control", "a"] or ["Enter"]. Use key names like "Enter", "Tab", "Escape", "ArrowDown", "Control", "Shift", etc.
repeatNoRepeat the key sequence this many times (default 1)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabIdYesThe id of the tab to activate (from browser_list_tabs)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesThe text to type into the focused element

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesAbsolute paths of the files to upload
selectorYesThe file input element (CSS selector or @eN handle) to set files on

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 20 tool updatesv1.0.0
    • First observedbrowser_cdp
    • First observedbrowser_click
    • First observedbrowser_close_tab
    • First observedbrowser_evaluate
    • First observedbrowser_fill
    • First observedbrowser_get_cookies
    • First observedbrowser_list_tabs
    • First observedbrowser_navigate
    • First observedbrowser_network_detail
    • First observedbrowser_network_list
    • First observedbrowser_network_start
    • First observedbrowser_network_stop
    • First observedbrowser_save_as_pdf
    • First observedbrowser_screenshot
    • First observedbrowser_send_keys
    • First observedbrowser_set_cookie
    • First observedbrowser_snapshot
    • First observedbrowser_switch_tab
    • First observedbrowser_type
    • First observedbrowser_upload

TDQS

A3.5/5.0

Scored across 20 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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 npm
    Apache 2.0
  • A
    license
    B
    quality
    F
    maintenance
    Enables 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.
    20
    243
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI clients to directly control a real Chrome/Edge browser via a WebSocket extension, supporting operations like navigation, clicks, screenshots, and JavaScript evaluation.
    18 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Lets 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 npm
    Apache 2.0