cdp-bridge
CDP Bridge MCP connects LLMs/agents to your real, already-logged-in browser sessions via a Chromium extension, enabling reading, interaction, and automation of live browser tabs—reusing existing cookies and login states.
Core capabilities:
browser_get_tabs– List all open browser tabs with IDs, URLs, and titles, including the currently active tab.browser_scan– Extract simplified, LLM-optimized HTML or plain text from the active tab (scripts, styles, and invisible elements stripped to reduce token usage).browser_execute_js– Run arbitrary JavaScript in the browser, capturing return values and DOM change diffs; can target a specific tab before execution.browser_switch_tab– Change which tab subsequent MCP tool calls operate on, without affecting what the user sees in Chrome.browser_focus_tab– Bring a specific tab to the foreground and focus its Chrome window, making it visible to the user.browser_batch– Execute multiple extension/CDP commands in a single request for complex, chained workflows.browser_wait– Poll a JavaScript expression until it returns truthy, with configurable timeout and interval.browser_navigate– Direct the active tab to a specified URL.browser_screenshot– Capture a screenshot of the active (or specified) tab as base64-encoded PNG.browser_save_image– Decode and save a base64 screenshot to a local PNG file.
Additional features: Supports multiple concurrent browser profiles/users with session isolation via auth tokens, and can run in stdio mode for local use or streamable-http mode for remote/persistent deployment.
Allows controlling a real browser session to interact with Bilibili, enabling reading pages, scanning content, executing JavaScript, taking screenshots, and performing automated operations on the platform.
Enables interaction with CSDN website via real browser control, including reading author backend data, scanning pages, and executing JavaScript automation.
Click on "Install 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., "@cdp-bridgescan the current browser page for key content"
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.
演示视频
项目介绍
CDP Bridge MCP 适合需要让大模型操作真实浏览器的场景。和无状态 HTTP 抓取不同,它连接的是你已经登录、已经打开的浏览器页面,因此可以复用真实浏览器里的登录态、Cookie、页面状态和前端渲染结果。
CDP Bridge MCP 还支持在单台电脑多Profile操作,也支持多用户操作。
代码仓库:https://github.com/Unagi-cq/cdp-bridge-mcp
本项目使用 Python 编写并发布。MCP 支持
stdio和streamable-http两种传输模式。
项目优势
为什么用 CDP Bridge MCP,而不是 Playwright MCP、Kimi Bridge 或 Chrome DevTools MCP?
Playwright MCP 和 Chrome DevTools MCP 都很强,但它们更偏向“自动化测试 / 调试协议 / 新开浏览器实例”的工作流。Kimi Bridge 的功能权限有限,倾向于通过截图发给视觉模型来完成任务。
CDP Bridge MCP 的目标不同:它更关注让 LLM 或 Agent 产品接管用户正在使用的真实浏览器会话。
复用真实登录态:CDP Bridge MCP 连接的是你已经打开、已经登录的浏览器标签页,很多需要账号态的网站,不需要重新登录或额外搬运 Cookie。
更适合日常浏览器协作:Playwright 更适合可重复、可脚本化的自动化流程,而 CDP Bridge MCP 更适合 LLM 在用户当前页面上做读取、分析、点击前判断、执行脚本、截图等交互式任务。
页面内容更适合 LLM 消费:
browser_scan会对页面 HTML 做简化,过滤脚本、样式和不可见元素,尽量保留对模型有用的正文、控件和结构信息,减少 token 浪费。启动链路轻量:服务端发布到 PyPI 后可直接
uvx cdp-bridge启动,浏览器端加载扩展即可连接,不需要编写 Playwright 脚本,也不需要为每个浏览器实例单独配置调试参数。适合远端部署和 Agent 产品开发:如果使用
streamable-http模式,cdp-bridge可以作为一个常驻服务部署在远端服务器上。Agent 后端通过 MCP HTTP 端点连接服务,用户浏览器里的扩展通过 WebSocket 连接同一个服务。这样产品侧不需要托管用户的浏览器,也不需要把账号态搬到云端;用户只要安装扩展并配置Bridge Host、Port和Token,Agent 就能在用户授权的真实浏览器会话里完成读取、分析和自动化操作。支持同一台电脑的多个浏览器 Profile 并行连接:如果你在同一台电脑上打开多个 Chrome / Chromium Profile,并分别给扩展配置不同 token,它们会被服务端隔离成不同会话空间。这意味着你可以在同一个平台上同时挂多个账号,并分别让 Agent 操作各自的真实浏览器页面。
支持不同电脑上的多用户同时接入:不同用户、不同电脑上的浏览器扩展都可以连接到同一个
streamable-http服务,只要各自使用不同 token,就能并行工作且互不干扰。适合客服坐席、运营团队、数据采集节点或远程协作场景。个人使用和团队产品都能覆盖:个人用户可以用默认
stdio + 127.0.0.1:18765快速接入本机浏览器;团队或产品开发者可以用streamable-http + 远端域名 + WebSocket + token搭建浏览器控制通道,把真实浏览器能力集成进自己的 Agent 产品、客服工作台、数据采集后台或内部自动化系统。
因此,如果你的目标是“让模型控制一个专门启动的自动化浏览器”,Playwright MCP 很合适;如果你的目标是“调试 Chrome 或精细操作 DevTools 协议”,Chrome DevTools MCP 很合适;如果你的目标是“让模型或 Agent 产品读取和操作用户当前正在使用的真实浏览器页面”,CDP Bridge MCP 更贴近这个场景。
系统架构
graph TB
subgraph Client["🖥️ MCP 客户端 / Agent"]
ClientA["客户端 A<br/>Bearer token_a"]
ClientB["客户端 B<br/>Bearer token_b"]
end
subgraph Server["⚙️ cdp-bridge MCP 服务 (Python)"]
FastMCP["FastMCP<br/>stdio / streamable-http"]
Middleware["Token Middleware<br/>Authorization Bearer"]
TokenManager["TokenManager<br/>按 token 隔离用户上下文"]
TMWD["TMWebDriver<br/>会话管理器"]
WS["Extension WebSocket<br/>默认 127.0.0.1:18765"]
HTTP["Extension HTTP Fallback<br/>默认 127.0.0.1:18766"]
FastMCP --- Middleware
Middleware --- TokenManager
TokenManager --- TMWD
TMWD --- WS
TMWD --- HTTP
end
subgraph DeviceA["💻 同一台电脑(多个 Browser Profile)"]
ProfileA1["Profile A1<br/>账号 A / token_a"]
ProfileA2["Profile A2<br/>账号 B / token_b"]
end
subgraph DeviceB["🧑💻 另一台电脑(另一位用户)"]
ProfileB1["Profile B1<br/>账号 C / token_c"]
end
subgraph BrowserRuntime["🌐 浏览器扩展与页面"]
BG["background.js<br/>Service Worker"]
CT["content.js<br/>Content Script"]
Tabs["浏览器标签页<br/>真实登录态 / 多账号页面"]
end
ClientA <-->|"MCP 协议\nstreamable-http / stdio"| FastMCP
ClientB <-->|"MCP 协议\nstreamable-http"| FastMCP
ProfileA1 <-->|"扩展连接\ntoken_a"| WS
ProfileA2 <-->|"扩展连接\ntoken_b"| WS
ProfileB1 <-->|"扩展连接\ntoken_c"| WS
WS <-->|"WebSocket (ext_ws)"| BG
HTTP <-->|"HTTP 长轮询"| BG
BG <-->|"chrome.scripting<br/>CDP Runtime.evaluate"| Tabs
BG <-->|"chrome.runtime.sendMessage"| CT
CT -->|"DOM 访问"| Tabs数据流简述:
MCP 客户端通过 stdio(子进程)或 streamable-http(HTTP 端点)连接
cdp-bridge服务;在streamable-http模式下,客户端可通过Authorization: Bearer <token>指定自己的用户上下文。服务端的
Token Middleware负责提取 token,TokenManager负责按 token 隔离会话;同一个 token 下的 MCP 请求和浏览器扩展连接会被路由到同一个上下文。TMWebDriver 启动供浏览器扩展连接的 WebSocket(默认 :18765)和内部 HTTP fallback(默认 :18766);不同电脑上的用户、或同一台电脑上不同 Browser Profile 的扩展,都可以同时接入。
每个浏览器扩展在连接时会上报自己的 token 和已打开标签页(
ext_ws模式);服务端据此把不同 profile、不同账号、不同用户的真实浏览器页面隔离开来。当 MCP 工具被调用(如
browser_execute_js),服务端只会把 JS 代码发送到当前 token 对应的浏览器会话;扩展的 background.js 优先使用chrome.scripting.executeScript在页面 MAIN world 执行,若页面有 CSP 限制则自动降级为 CDPRuntime.evaluate。执行结果通过 WebSocket 返回服务端,再由 MCP 协议返回给对应客户端;因此可以同时操作同一平台的多个账号,也可以支持多台电脑上的多用户并发使用而互不干扰。
Related MCP server: Tabrix
可用工具
MCP 服务当前暴露以下 10 个工具:
工具名 | 参数 | 说明 |
| 无 | 获取所有已连接的浏览器标签页,返回标签页 ID、URL 和标题列表,以及当前活动标签页 |
|
| 扫描活动标签页内容。 |
|
| 在浏览器中执行 JavaScript 并捕获返回值及 DOM 变更 diff。 |
|
| 切换 MCP 侧的活动标签页(不改变用户在 Chrome 中看到的标签页),后续工具调用将作用于该标签页 |
|
| 将 Chrome 标签页置于前台并聚焦窗口,使标签页对用户可见。区别于 |
|
| 一次请求批量执行多个扩展/CDP 命令,适合需要复用 CDP 上下文的复杂操作链 |
|
| 轮询等待 JavaScript 条件表达式返回真值。 |
|
| 导航活动标签页到指定 URL |
|
| 对活动标签页截图,返回 base64 编码的 PNG 图片数据 |
|
| 将 |
快速使用
下面是默认配置下最快的使用流程:
安装
uv。在 Chrome 或其他 Chromium 浏览器中打开
chrome://extensions/,开启“开发者模式”。点击“加载已解压的扩展程序”,选择
src/cdp_bridge/tmwd_cdp_bridge文件夹。在 MCP 客户端里添加
cdp-bridge。
在任意客户端配置MCP:
{
"mcpServers": {
"cdp-bridge": {
"command": "uvx",
"args": ["cdp-bridge@latest"]
}
}
}配置完成后,在浏览器里打开任意页面,然后在大模型客户端让模型执行网页操作即可。扩展会自动连接 MCP 进程启动的 WebSocket 服务;如果首次看到 ERR_CONNECTION_REFUSED,等待几秒自动重连即可。
详细使用
安装步骤
将项目中提供的浏览器插件
src/cdp_bridge/tmwd_cdp_bridge文件夹加载到 Chrome 或其他 Chromium 浏览器。在 MCP 客户端配置 CDP Bridge MCP。
然后就可以正常使用了。下面详细介绍上述安装步骤。
首次使用:加载扩展后首次连接 WebSocket 会产生
ERR_CONNECTION_REFUSED报错,这是正常的。扩展内置自动重连机制(每 ~5 秒探测一次),当检测到后端服务启动后会自动恢复连接,无需手动重启扩展。
使用流程
加载浏览器扩展(参考下方步骤)
配置 MCP 客户端(参考下方步骤)
使用任意浏览器工具(如
browser_get_tabs),MCP 服务启动后 WebSocket 服务会自动就绪浏览器扩展会在数秒内自动连接,之后即可正常使用所有工具
加载浏览器
在 Chrome 或其他 Chromium 浏览器中加载:
打开
chrome://extensions/。开启“开发者模式”。
点击“加载已解压的扩展程序”。
选择
src/cdp_bridge/tmwd_cdp_bridge文件夹。
默认情况下,扩展会连接本地 WebSocket 服务 127.0.0.1:18765。
扩展弹窗里可以修改连接配置:
Bridge Host:可填写127.0.0.1、localhost或域名。填写域名时可以不填端口,例如bridge.example.com。Port:WebSocket 端口。使用本地默认配置时是18765;如果 MCP 启动时使用了--ws-port,这里需要填同一个端口。域名接入并且服务走默认 WebSocket 端口时,可以留空。Token:streamable-http多用户模式下用于把浏览器扩展和 MCP 客户端绑定到同一个用户上下文。留空时扩展会自动写入默认值__default__。如果你使用 Bearer token 访问远端 MCP 服务,这里必须填写和客户端完全一致的 token。
配置 MCP
先确认电脑上已安装 uv。CDP Bridge MCP 通过 uvx cdp-bridge@latest 启动。
两种传输模式
CDP Bridge 支持两种 MCP 传输模式,可根据使用场景选择:
模式 | 原理 | 适用场景 |
| MCP 客户端以子进程启动服务,通过标准输入/输出通信 | Claude Desktop、Claude Code、Codex 等本地客户端 |
| 服务以独立 HTTP 进程运行,客户端通过 HTTP 请求连接 | 多客户端共享、Docker 部署、服务常驻 |
启动参数
参数 | 默认值 | 适用模式 | 说明 |
|
| 两种模式 | MCP 传输模式。可选 |
|
| 两种模式 | 浏览器扩展连接的 WebSocket 端口。无论使用 |
|
| 仅 | MCP HTTP 服务端口。只在 |
| 空 | 仅 | 允许接入的 token 白名单,多个 token 用英文逗号分隔;为空时接受任意 token。 |
--host | 127.0.0.1 | 仅 | 默认 |
注意:--ws-port 是浏览器扩展连接后端的端口;--port 是 MCP 客户端连接后端的 HTTP 端口。两者不是同一个端口。
脚本测试
# stdio 模式(默认)
uvx cdp-bridge@latest
# stdio 模式,指定 WebSocket 端口
uvx cdp-bridge@latest --ws-port 18767
# streamable-http 模式,指定 MCP HTTP 端口
uvx cdp-bridge@latest --transport streamable-http --port 8000
# streamable-http 模式,同时指定 MCP HTTP 端口和浏览器扩展 WebSocket 端口
uvx cdp-bridge@latest --transport streamable-http --port 8000 --ws-port 18767
# streamable-http 模式,只允许指定 token 接入
uvx cdp-bridge@latest --transport streamable-http --port 8000 --tokens "team_alice,team_bob"
# streamable-http 模式,同时指定 MCP HTTP 端口和监听的ip,远程机器可通过172.25.240.1:8000访问运行的MCP Server
uvx cdp-bridge@latest --transport streamable-http --host 172.25.240.1 --port 8000
# 也可以通过环境变量传入 token 白名单
CDP_BRIDGE_TOKENS="team_alice,team_bob" uvx cdp-bridge@latest --transport streamable-http --port 8000不传 --transport 时默认使用 stdio。stdio 模式没有 MCP HTTP 端口;streamable-http 模式的 MCP 服务地址为 http://127.0.0.1:<port>/mcp。
MCP 对比测评(V3)
V3 修正了 V2 “只要模型返回非空文本就算成功”的统计问题,改用场景级验收规则,并把场景分为确定性核心对比、真实登录态诊断和标签页诊断。核心对比会记录通过率、质量、工具成功率、API 轮次、Token 和耗时,同时生成 Markdown 报告与结构化 JSON。默认测试当前工作区源码,并固定 Playwright MCP 版本,避免 latest 漂移。
export ANTHROPIC_API_KEY="你的 API Key"
export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic" # 可选
export ANTHROPIC_MODEL="deepseek-v4-pro" # 可选
# 只做前置检查和本地构建,不调用 LLM
uv run python reports/V-003-2026-08-09/eval_mcp_compare_v3.py --preflight --build-check
# 核心对比,默认每个场景重复 3 次
uv run python reports/V-003-2026-08-09/eval_mcp_compare_v3.py --repeats 3
# 加入真实登录态和标签页诊断场景
uv run python reports/V-003-2026-08-09/eval_mcp_compare_v3.py --suite all --repeats 3查看 V3 测试报告 和 V3 测评脚本。脚本运行时还会在同一目录生成 eval_results.json;默认不保存完整工具正文,避免把真实标签页或页面隐私写入结果,确需审计时可增加 --save-tool-output。
2026-08-09 的 V3 样例使用 cdp-bridge 0.1.23、Playwright MCP 0.0.79 和 deepseek-v4-pro,在 core 模式下对 3 个场景各重复 3 次,共执行 18 次任务。两侧任务通过率和平均质量均为 100% / 1.00。
下表依次列出“中位耗时 / 平均工具调用 / 工具成功率 / 中位总 Token”:
场景 | CDP Bridge | Playwright |
本地确定性内容提取 | 12.56s / 2.0 / 100.0% / 940 | 11.03s / 2.0 / 100.0% / 773 |
本地确定性交互 | 16.37s / 3.0 / 100.0% / 1,084 | 22.54s / 5.0 / 80.0% / 1,451 |
NumPy 外部页面 | 37.24s / 4.7 / 100.0% / 7,212 | 60.52s / 8.0 / 83.3% / 21,535 |
本次运行中,Playwright 在简单内容提取场景耗时和 Token 更低;CDP Bridge 在交互与外部页面场景使用了更少的工具调用和 Token,并取得更低的中位耗时与更高的工具成功率。以上是特定模型、网络和浏览器会话下的端到端结果,不代表通用性能结论;真实登录态与标签页场景属于诊断项,未计入本次核心质量排名。
MCP 对比测评(V2)
仓库提供了 V2 测评脚本,用相同的用户 query、LLM 和 MCP 工具调用循环,对比 CDP Bridge 与 Playwright MCP 的实际任务表现。测评记录以下指标:
任务成功率、答案质量分数
API 调用轮次、工具调用次数及工具成功率
输入/输出 Token 和总耗时
每一次工具调用的参数、耗时、返回字符数和错误信息
脚本位置:reports/V-002-2026-07-12/eval_mcp_compare_v2.py。运行完整测评前,需要准备浏览器扩展、CDP Bridge 服务、Playwright MCP、Anthropic 兼容 API,以及 ANTHROPIC_API_KEY:
export ANTHROPIC_API_KEY="你的 API Key"
export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic" # 可选
export ANTHROPIC_MODEL="deepseek-v4-pro" # 可选
# 默认 3 个场景,每个场景重复 3 次
python reports/V-002-2026-07-12/eval_mcp_compare_v2.py
# 只测某个场景,或只测一侧
python reports/V-002-2026-07-12/eval_mcp_compare_v2.py --case numpy --repeats 3
python reports/V-002-2026-07-12/eval_mcp_compare_v2.py --cdp-only
# 只检查依赖并生成报告,不调用 LLM
python reports/V-002-2026-07-12/eval_mcp_compare_v2.py --preflight报告会写入 reports/V-002-2026-07-12/eval_compare_report.md。V2 的示例运行结果(2026-07-12、每个场景 1 次)如下,数值仅用于说明该次环境下的观测,不代表所有网络、浏览器登录态或模型配置:
场景 | CDP Bridge | Playwright | 观测 |
小红书首页首条内容 | 14.2s / 3 次工具调用 | 37.4s / 5 次工具调用 | CDP Bridge 更快、调用更少;页面内容受风控和登录态影响 |
菜鸟教程 NumPy 位运算 | 29.9s / 5 次调用 / 10,315 Token | 68.1s / 10 次调用 / 18,647 Token | CDP Bridge 在该场景耗时、调用次数和 Token 更低 |
当前标签页列表 | 8.8s / 1 次调用 | 4.4s / 1 次调用 | Playwright 更快;两侧浏览器会话中的标签页数量并不等价 |
测评中的“答案质量”是基于场景验收词的可解释启发式分数,不替代人工核验。CDP Bridge 连接用户的真实浏览器会话,而 Playwright 通常使用独立浏览器环境;两者的 Cookie、缓存、页面推荐流、网络和安全策略可能不同,因此该测评是端到端工作流参考,不是纯协议或浏览器引擎基准。
Token 与多用户隔离
streamable-http 模式下,服务端会按 token 隔离浏览器会话空间。
MCP 客户端通过 HTTP 请求头传 token:
Authorization: Bearer <token>浏览器扩展通过弹窗里的
Token字段传同一个 token客户端 token 和扩展 token 必须完全一致,这样服务端才能把它们路由到同一个用户上下文
如果扩展里没有填写 token,会自动使用默认值
__default__如果服务端没有配置
--tokens,任何 token 都可以接入;配置了--tokens后,只允许白名单中的 token在同一台电脑上,你可以让不同浏览器 Profile 使用不同 token,从而并行操作同一个平台的多个账号
在不同电脑上,你也可以让多个用户分别连接到同一个
streamable-http服务,并通过不同 token 实现隔离
标准配置
stdio 模式:
{
"mcpServers": {
"cdp-bridge": {
"command": "uvx",
"args": ["cdp-bridge@latest"]
}
}
}如果需要修改浏览器扩展连接的 WebSocket 端口,把 --ws-port 加到 args 里:
{
"mcpServers": {
"cdp-bridge": {
"command": "uvx",
"args": ["cdp-bridge@latest", "--ws-port", "18767"]
}
}
}streamable-http 模式:
先启动服务:
uvx cdp-bridge@latest --transport streamable-http --port 8000如果同时要修改浏览器扩展连接的 WebSocket 端口:
uvx cdp-bridge@latest --transport streamable-http --port 8000 --ws-port 18767再配置客户端连接:
{
"mcpServers": {
"cdp-bridge": {
"type": "streamableHttp",
"url": "http://127.0.0.1:8000/mcp"
}
}
}如果你启用了多用户隔离,客户端应显式携带 Bearer token:
{
"mcpServers": {
"cdp-bridge": {
"type": "streamableHttp",
"url": "http://127.0.0.1:8000/mcp",
"headers": {
"Authorization": "Bearer team_alice"
}
}
}
}此时浏览器扩展弹窗中的 Token 也要填写成 team_alice。
Claude Code
方式一:命令行添加
# stdio 模式
claude mcp add cdp-bridge uvx cdp-bridge@latest
# streamable-http 模式(先启动服务,再注册)
claude mcp add cdp-bridge --transport streamable-http http://127.0.0.1:8000/mcp方式二:配置文件(推荐用于 streamable-http 模式)
在 ~/.claude.json 中添加 mcpServers 配置:
{
"mcpServers": {
"cdp-bridge": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp"
}
}
}注意:使用配置文件方式时,需要先启动
cdp-bridge服务(uvx cdp-bridge@latest --transport streamable-http --port 8000 --ws-port 18765),然后重启 Claude Code。
Codex
# stdio 模式
codex mcp add cdp-bridge uvx cdp-bridge@latest
# streamable-http 模式
codex mcp add cdp-bridge --transport streamable-http --url http://127.0.0.1:8000/mcpopencode
在 ~/.config/opencode/opencode.json 里配置:
stdio 模式:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cdp-bridge": {
"type": "local",
"command": [
"uvx",
"cdp-bridge@latest"
],
"enabled": true
}
}
}streamable-http 模式:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cdp-bridge": {
"type": "remote",
"url": "http://127.0.0.1:8000/mcp",
"enabled": true
}
}
}OpenClaw
可以使用 OpenClaw CLI 写入 MCP 配置:
# stdio 模式
openclaw mcp set cdp-bridge '{"command":"uvx","args":["cdp-bridge@latest"]}'
# streamable-http 模式
openclaw mcp set cdp-bridge '{"transport":"streamable-http","url":"http://remoteip:8000/mcp"}'等价的 stdio 配置结构:
{
"mcp": {
"servers": {
"cdp-bridge": {
"command": "uvx",
"args": ["cdp-bridge@latest"]
}
}
}
}注意事项
本项目需要 Python 3.10 或更高版本。
浏览器扩展内置自动重连机制:首次连接失败后会持续探测 WebSocket 服务(每 ~5 秒),当 MCP 服务启动后会自动恢复连接。如果看到 ERR_CONNECTION_REFUSED,等待数秒即可自动恢复。
页面自动化会运行在你的真实浏览器会话中,请只连接你信任的 MCP 客户端。
致谢
本项目的浏览器插件和部分代码参考并来源于 GenericAgent。感谢原项目作者的开源工作。
Available Tools
10 toolsbrowser_batchA
Run multiple extension/CDP commands in one request.
Args: commands: Command objects supported by the extension, such as {"cmd":"cdp","method":"DOM.getDocument","params":{"depth":1}}. tab_id: Optional tab ID inherited by commands that omit tabId. timeout: Seconds to wait for the batch result.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | ||
| timeout | No | ||
| commands | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses inheritance of tab_id and timeout behavior, but does not mention error handling, execution order, or atomicity. This is adequate but not thorough for a complex batch operation.
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 reasonably concise, with the main purpose in the first sentence. The argument list is clear but slightly verbose. It is front-loaded and every sentence adds value.
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?
Given the existence of an output schema, it does not need to explain return values. It covers batching, inheritance, and timeout. However, missing details on error propagation and whether commands execute sequentially or in parallel slightly reduce completeness.
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 0%, so the description must compensate fully. It does: explains commands with an example, clarifies tab_id inheritance, and defines timeout. This adds significant meaning beyond the raw 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 'Run multiple extension/CDP commands in one request', which is a specific verb and resource. It clearly distinguishes from sibling tools like browser_navigate or browser_screenshot, which are single-purpose actions.
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 implies use for batching multiple commands but does not explicitly state when to use it versus alternatives, nor does it mention conditions for avoiding it. Some guidance is inferred from the sibling list, but lacks explicit when-not or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_execute_jsA
Execute JavaScript in the browser and capture results plus DOM changes.
Args: script: JavaScript code to execute (or JSON command for CDP operations). switch_tab_id: Switch to this tab before executing. no_monitor: Skip DOM change monitoring (faster, less info).
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | ||
| no_monitor | No | ||
| switch_tab_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals behavioral traits like DOM change monitoring and CDP support, but lacks details on security, error handling, or state modifications. Since no annotations are present, the description carries full burden and provides moderate value.
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 short and well-structured with a clear one-line summary followed by bulleted arguments. Every sentence adds value without redundancy.
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?
Given the tool's complexity and the existence of an output schema, the description covers core functionality (execution, result capture, DOM monitoring) but omits constraints (page load requirement) and security considerations, leaving room for improvement.
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 0% schema description coverage, the description partially compensates by explaining the script parameter (JavaScript or CDP JSON), switch_tab_id, and no_monitor flags. However, details like tab ID format or CDP command syntax are missing.
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 clearly states the tool executes JavaScript in the browser and captures results and DOM changes. This distinguishes it from sibling tools like browser_navigate or browser_screenshot which perform different actions.
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?
No guidance on when to use this tool versus alternatives (e.g., browser_batch for multiple actions). No when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_focus_tabA
Bring a Chrome tab to the foreground: activate the tab AND focus its window.
Unlike browser_switch_tab (which only changes the MCP-side active session without touching the visible Chrome UI), this actually makes the tab visible to the user. Use this when the user can't find the tab the agent is working on (e.g. across many windows / Spaces / minimized windows).
Goes through chrome.tabs.update + chrome.windows.update (extension-native APIs), avoiding the chrome.debugger CDP "Not allowed" restriction on Target.activateTarget.
Args: tab_id: The tab ID to focus (from browser_get_tabs).
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses behavior: it goes through chrome.tabs.update + chrome.windows.update, avoids CDP restriction, activates tab and focuses window. All relevant behavioral traits are explained.
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?
Description is concise and well-structured: first line states purpose, then contrast with sibling, use case, implementation details, and parameter explanation. Every sentence adds value with no redundancy.
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?
Tool is simple (1 param), has output schema, and description covers purpose, usage, behavioral details, and parameter source. Includes sibling differentiation and reasoning for implementation. Complete for its complexity.
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 has single parameter tab_id with no description, but tool description adds: 'The tab ID to focus (from browser_get_tabs).' This provides source context beyond the schema, though minimal. Score slightly below 5 due to brevity.
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?
Description clearly states the tool's action: 'Bring a Chrome tab to the foreground: activate the tab AND focus its window.' It also explicitly distinguishes from sibling tool browser_switch_tab by explaining what this tool does differently.
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?
Provides explicit guidance: 'Unlike browser_switch_tab... this actually makes the tab visible to the user. Use this when the user can't find the tab the agent is working on.' Clearly states when to use and contrasts with alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_get_tabsA
Get all open browser tabs with their IDs, URLs, and titles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 clearly indicates a read operation that returns tab metadata. It does not detail edge cases (e.g., empty tab list) or performance implications, but the behavior is straightforward.
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 sentence of 10 words, front-loading the key action and result. It contains no filler or redundant 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 a zero-parameter tool with an output schema, the description is almost complete. It specifies the return content but does not mention that the result is an array or what happens when no tabs are open. Minor improvement could be made, but overall 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?
The tool has zero parameters and the schema is fully covered. The description adds value by explaining what the output contains (IDs, URLs, titles), which is not part of the input schema. Baseline is 4 for zero parameters.
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 uses a specific verb ('Get') and resource ('all open browser tabs') and lists the returned fields (IDs, URLs, titles). It clearly distinguishes from sibling tools like browser_switch_tab or browser_navigate, which operate on individual tabs rather than listing them.
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 implies usage when an agent needs a list of all open tabs, but it does not explicitly state when to use this tool versus alternatives or mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_save_imageA
Save base64 screenshot data to PNG file.
Args: screenshot_json_str_or_file: JSON output from browser_screenshot tool, or path to a JSON file containing the screenshot data. output_path: Output PNG file path or directory. Behavior: - Existing directory: save as {directory}/screenshot_{timestamp}.png - File path with existing parent dir: save directly to that file - File path with non-existing parent dir: return error - Empty/not provided: auto-generate based on input path or timestamp
Returns: JSON with status, saved_path, and size_bytes.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| screenshot_json_str_or_file | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It comprehensively details output_path behavior (directory, file, error conditions) and return value structure (status, saved_path, size_bytes). Every aspect of the tool's behavior is 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?
The description is longer but well-structured with bullet points for output_path behavior. Every sentence adds value; however, minor redundancy (e.g., 'Args:' formatting) could be trimmed. Still efficient for the amount of 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?
Given 2 parameters, one required, and presence of output schema (implied by 'Returns:'), the description fully covers input handling, output behavior, and return values. No gaps in information for an agent to correctly invoke the 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 coverage is 0% with empty parameter descriptions. The description adds full semantic meaning: screenshot_json_str_or_file is JSON from browser_screenshot or file path; output_path behavior with three cases. This fully compensates for the missing schema descriptions.
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 clearly states 'Save base64 screenshot data to PNG file.' It specifies the verb (save), resource (screenshot data), and output format (PNG). It distinguishes from siblings like browser_screenshot which captures the screenshot, making its 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?
It explicitly mentions that input comes from browser_screenshot tool, and details the behavior of output_path. While it doesn't name alternative tools, the context shows it's the complementary save tool, and no sibling has overlapping functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_scanA
Get simplified HTML content of the active tab plus tab list. The HTML is optimized for LLM consumption (stripped of scripts, styles, invisible elements).
Args: tabs_only: Only return tab list without page content (saves tokens). switch_tab_id: Switch to this tab before scanning. text_only: Return plain text instead of simplified HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| tabs_only | No | ||
| text_only | No | ||
| switch_tab_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It reveals that the HTML is stripped of scripts, styles, and invisible elements, and that the tool returns a tab list. This adds value beyond the schema but does not mention error handling, permission needs, or whether the tool modifies state (it appears read-only but not confirmed).
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 concise, with a single sentence for the main purpose and a list of arguments. It front-loads the key information. However, the argument list is in a paragraph style; a structured format (e.g., bullet points) would enhance readability without adding 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?
The description covers the main behavior and output (simplified HTML plus tab list) and mentions the LLM optimization. The presence of an output schema reduces the need to detail return values, but the description is missing edge cases (e.g., behavior when no tabs exist) and does not explicitly state whether the tool is read-only.
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 0%, placing the full burden on the description. The description explains all three parameters ('tabs_only', 'text_only', 'switch_tab_id') with their effects and usage intent. For example, it notes 'tabs_only' saves tokens and 'switch_tab_id' switches tab before scanning. This is strong compensation, though additional details like data types or constraints would improve it.
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 clearly states the tool gets simplified HTML content of the active tab plus tab list. The verb 'Get' and resource 'simplified HTML content' are specific. However, it does not explicitly distinguish from sibling tool 'browser_get_tabs', which also deals with tabs. The mention of tab list indicates overlap, but the focus on scanned content differentiates 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?
The description provides some usage guidance via the 'tabs_only' argument, implying when to skip page content to save tokens, but lacks explicit when-to-use versus alternatives like 'browser_get_tabs' or 'browser_navigate'. No exclusion criteria or preconditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_screenshotA
Take a screenshot of the active tab (returns base64 PNG).
Args: tab_id: Optional tab ID to screenshot. Uses active tab if empty.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It mentions returns base64 PNG, but omits details like full-page vs viewport capture, size limits, or required permissions.
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 extremely concise with two sentences, no redundancy, and the purpose is front-loaded.
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?
Given the simple tool and the existence of an output schema, the description covers basic semantics but lacks crucial behavioral details (e.g., scroll handling, timeouts) that an agent might need.
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 has 0% description coverage; the tool description compensates by explaining the tab_id parameter: 'Optional tab ID to screenshot. Uses active tab if empty.' This adds meaningful context 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 clearly states the action ('Take a screenshot') and the resource ('active tab', optionally any tab). It distinguishes from siblings like browser_save_image and browser_scan by focusing on screenshot capture.
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 implies usage for capturing screenshots but provides no guidance on when to use this tool versus alternatives like browser_save_image or browser_batch, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_switch_tabA
Switch the active MCP browser tab without changing the visible Chrome tab.
Args: tab_id: The tab ID to switch to (from browser_get_tabs).
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It explicitly states that the Chrome tab is not changed, which is a key behavioral trait. However, it does not mention error handling or side effects for invalid 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?
The description is two sentences plus an Args section, with no wasted words. It is front-loaded with the core purpose and efficiently provides parameter guidance.
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?
Given the tool simplicity (1 param), no annotations, and an output schema, the description covers the main behavior and parameter origin. It could mention failure modes or constraints, but overall it is complete enough.
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 input schema has 0% description coverage, so the description must add meaning. It explains that tab_id comes from browser_get_tabs, which adds context beyond the schema. Could be more specific about format but is sufficient.
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 clearly states it switches the active MCP browser tab without changing the visible Chrome tab. This is a specific verb+resource and distinguishes from sibling tools like browser_focus_tab.
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 tells where to get tab_id (from browser_get_tabs) but does not explicitly guide when to use or avoid this tool compared to alternatives like browser_focus_tab. Usage context is implied but not clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_waitA
Wait until JavaScript condition returns a truthy value.
Args: condition_js: JavaScript expression or script. The return value is tested for truthiness. timeout: Maximum seconds to wait. interval: Seconds between checks. switch_tab_id: Optional tab ID to make active before waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| interval | No | ||
| condition_js | Yes | ||
| switch_tab_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses polling behavior with timeout and interval, and truthiness test. But doesn't state what happens on timeout (likely throws error) or if condition has side effects. No annotations provided, so description carries full burden but is adequate.
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?
Concise with clear bullet points for parameters. First sentence directly states purpose. Minor informality with 'Args:' but overall efficient and front-loaded.
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?
Covers purpose and parameters but lacks return value description. Output schema exists but description doesn't integrate it. Missing edge cases like timeout behavior. Adequate but not complete.
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 0%, but description adds meaning: condition_js is a 'JavaScript expression or script' with truthiness check, timeout is 'Maximum seconds to wait', interval is 'Seconds between checks', switch_tab_id is 'Optional tab ID to make active before waiting.' Adds value beyond 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?
Clearly states 'Wait until JavaScript condition returns a truthy value.' This is a specific verb+resource and distinguishes from siblings like browser_execute_js which executes JS without waiting.
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?
No explicit guidance on when to use this tool vs alternatives. Does not mention when-not to use or suggest sibling tools for different scenarios. Only mentions optional tab switch.
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. Dates show when Glama detected each change.
10 tool updates
v0.1.21- First observed
browser_batch - First observed
browser_execute_js - First observed
browser_focus_tab - First observed
browser_get_tabs - First observed
browser_navigate - First observed
browser_save_image - First observed
browser_scan - First observed
browser_screenshot - First observed
browser_switch_tab - First observed
browser_wait
TDQS
Tools have largely distinct purposes, but some overlap exists between browser_switch_tab and browser_focus_tab, and between browser_execute_js and browser_batch. The descriptions help disambiguate, so no major confusion.
All tools share the 'browser_' prefix, which is good. The verb part mostly follows verb_noun pattern (e.g., focus_tab, get_tabs), but browser_screenshot and browser_batch break that pattern slightly. Overall consistent.
With 10 tools, the server is well-scoped for browser automation. Each tool serves a clear purpose, and the count is neither too few (which would feel incomplete) nor too many (which would be overwhelming).
The tools cover core browser operations: navigation, tab management, screenshots, JS execution, and DOM scanning. Missing explicit form filling or network interception, but the batch tool allows arbitrary CDP commands, so agents can fill gaps. Minor but not significant.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Live browser debugging for AI assistants — DOM, console, network via MCP.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Related MCP Servers
- AlicenseBqualityCmaintenanceBrowser MCP server that connects to your existing browser, preserving sessions, passwords, and extensions, enabling AI agents to interact with web pages without bot detection.31121MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to control and interact with the user's real Chrome browser session, leveraging existing logins, cookies, and extensions for AI-driven automation.5MIT
- AlicenseNot gradedqualityBmaintenanceGives MCP-compatible AI agents direct control of your real browser with existing sessions, logins, and cookies. Supports multiple agents concurrently with tab targeting.81MIT
- AlicenseNot gradedqualityAmaintenanceConnects AI agents to your Chrome browser via MCP, enabling real-time control of existing tabs, sessions, and application state for development workflows.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Unagi-cq/cdp-bridge-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server