返回市场
火狐-MCP服务器

火狐-MCP服务器

作者:JediLuke15 星标更新:2025-07-05

项目介绍

Firefox MCP 服务器

此MCP服务器通过Playwright提供了Firefox浏览器的自动化功能,允许您在MCP启用的应用程序中控制Firefox。该服务器支持基本自动化和高级多标签调试功能。

功能

基本自动化

  • 启动Firefox浏览器(无头模式或可见模式)
  • 导航到URL
  • 通过选择器或坐标点击元素
  • 在输入字段中键入文本
  • 截取屏幕
  • 获取页面内容和文本
  • 执行JavaScript
  • 浏览器导航(后退、前进、重新加载)
  • 等待元素出现

多标签会话支持

  • 创建多个具有独立上下文的隔离浏览器标签
  • 多玩家测试的独立会话管理
  • 切换活动标签
  • 列出所有活动标签
  • 关闭特定标签

高级调试与监控

  • 控制台日志监控:捕获所有console.log、错误、警告、信息、调试消息
  • JavaScript错误跟踪:监控未处理的错误和带有堆栈跟踪的承诺拒绝
  • WebSocket流量监控:实时捕获WebSocket消息(适用于Phoenix LiveView)
  • 网络活动监控:HTTP请求/响应及其头部和时间
  • 性能指标:DOM计时、绘制事件、内存使用情况跟踪
  • 综合调试流:所有调试活动的统一视图
  • 实时事件捕获:自动监控无需手动注入

安装

  1. 安装依赖项:
npm install
  1. 为Playwright安装Firefox浏览器:
npx playwright install firefox

配置

标准配置

将此服务器添加到您的MCP配置文件中(通常为~/.config/mcp/cline.json或类似文件):

{
  "mcpServers": {
    "firefox-control": {
      "command": "node",
      "args": ["index.js"],
      "cwd": "/home/luke/workbench/drabardi/firefox-mcp-server"
    }
  }
}

调试增强型配置(推荐)

为了实现完整的调试功能,请使用增强型服务器:

{
  "mcpServers": {
    "firefox-control": {
      "type": "stdio",
      "command": "node", 
      "args": ["/path/to/firefox-mcp-server/index-multi-debug.js"],
      "env": {"DISPLAY": ":1"}
    }
  }
}

注意:更新配置后,请重启Claude Code以激活新的调试工具。

可用工具

基本浏览器控制

launch_firefox_multi

启动支持多标签和调试的Firefox浏览器

  • headless (布尔值):运行在无头模式下(默认:false)
  • enableDebugLogging (布尔值):启用调试日志记录(默认:true)

create_tab

创建一个新的具有独立会话和调试功能的标签

  • tabId (字符串,必需):标签的唯一标识符
  • url (字符串):初始导航的URL(默认:"about:blank")
  • enableMonitoring (布尔值):启用实时监控(默认:true)
  • contextId (字符串):用于隔离的浏览器上下文ID

list_tabs

列出所有活动标签及其URL和状态

close_tab

关闭特定标签

  • tabId (字符串,必需):要关闭的标签ID

set_active_tab

设置后续操作的活动标签

  • tabId (字符串,必需):要设为活动的标签ID

navigate

导航到一个URL

  • url (字符串,必需):要导航到的URL
  • tabId (字符串):特定的标签(如果未指定,则使用活动标签)

click

点击一个元素

  • selector (字符串):要点击的CSS选择器
  • coordinates (对象):替代方案——点击特定的x,y坐标
  • tabId (字符串):目标标签ID

type_text

在输入字段中键入文本

  • selector (字符串,必需):输入字段的CSS选择器
  • text (字符串,必需):要键入的文本
  • tabId (字符串):目标标签ID

send_key

发送键盘事件

  • key (字符串,必需):要发送的键
  • modifiers (数组):修饰键(ctrl, shift, alt, meta)
  • repeat (数字):重复次数(默认:1)
  • selector (字符串):目标元素选择器
  • tabId (字符串):目标标签ID

drag

执行拖动操作

  • selector (字符串):要拖动的元素
  • fromCoordinates (对象):起始坐标 {x, y}
  • toCoordinates (对象):结束坐标 {x, y}
  • offsetX (数字):拖动的X偏移量
  • offsetY (数字):拖动的Y偏移量
  • duration (数字):拖动持续时间(毫秒,默认:0)
  • steps (数字):中间步骤的数量(默认:1)
  • tabId (字符串):目标标签ID

内容与媒体

get_page_content

获取页面的HTML内容

  • selector (字符串):可选的CSS选择器,用于特定元素
  • tabId (字符串):目标标签ID

get_page_text

获取页面的可见文本内容

  • selector (字符串):可选的CSS选择器,用于特定元素
  • tabId (字符串):目标标签ID

screenshot

截取屏幕

  • path (字符串):保存截图的文件路径(默认:"screenshot.png")
  • fullPage (布尔值):捕获整个页面(默认:false)
  • tabId (字符串):目标标签ID

wait_for_element

等待元素出现

  • selector (字符串,必需):要等待的CSS选择器
  • timeout (数字):超时时间(毫秒,默认:30000)
  • tabId (字符串):目标标签ID

execute_script

在浏览器中执行JavaScript

  • script (字符串,必需):要执行的JavaScript代码
  • tabId (字符串):目标标签ID

导航

get_current_url

获取当前页面的URL

  • tabId (字符串):目标标签ID

back

在浏览器历史中后退

  • tabId (字符串):目标标签ID

forward

在浏览器历史中前进

  • tabId (字符串):目标标签ID

reload

重新加载当前页面

  • tabId (字符串):目标标签ID

close_browser

关闭Firefox浏览器及所有标签

高级调试工具

get_console_logs

获取从浏览器捕获的控制台日志

  • tabId (字符串):目标标签ID
  • limit (数字):返回的日志最大数量(默认:50)
  • since (数字):过滤日志的时间戳
  • types (数组):按日志类型过滤 ["log", "error", "warn", "info", "debug"]

get_javascript_errors

获取捕获的JavaScript错误

  • tabId (字符串):目标标签ID
  • limit (数字):返回的错误最大数量(默认:20)
  • since (数字):过滤错误的时间戳

get_network_activity

获取捕获的网络请求和响应

  • tabId (字符串):目标标签ID
  • limit (数字):返回的请求最大数量(默认:30)
  • since (数字):过滤请求的时间戳
  • filter (字符串):按请求类型过滤 ["all", "xhr", "websocket", "fetch"](默认:"all")

get_websocket_messages

获取捕获的WebSocket消息(适用于LiveView调试)

  • tabId (字符串):目标标签ID
  • limit (数字):返回的消息最大数量(默认:50)
  • since (数字):过滤消息的时间戳

get_performance_metrics

获取性能指标(计时、内存使用情况)

  • tabId (字符串):目标标签ID

get_all_debug_activity

获取所有调试事件的综合流

  • tabId (字符串):目标标签ID
  • limit (数字):返回的事件最大数量(默认:100)
  • since (数字):过滤事件的时间戳

inject_debugging_helpers

向页面注入调试辅助函数

  • tabId (字符串):目标标签ID
  • includeWebSocketMonitoring (布尔值):包含WebSocket监控(默认:true)

start_monitoring

开始/重新开始对标签的监控

  • tabId (字符串):目标标签ID
  • types (数组):要监控的类型 ["console", "errors", "network", "websocket", "performance"](默认:全部)

clear_debug_buffers

清除标签的调试事件缓冲区

  • tabId (字符串):目标标签ID
  • types (数组):要清除的缓冲区类型 ["console", "errors", "network", "websocket"]

使用示例

基本浏览器自动化

// 启动浏览器并启用调试
mcp__firefox-control__launch_firefox_multi({headless: false, enableDebugLogging: true})

// 创建标签并导航
mcp__firefox-control__create_tab({tabId: "main", url: "https://example.com", enableMonitoring: true})

// 与页面交互
mcp__firefox-control__click({selector: "button#submit", tabId: "main"})
mcp__firefox-control__type_text({selector: "input[name='search']", text: "hello world", tabId: "main"})

// 截取屏幕
mcp__firefox-control__screenshot({path: "page.png", fullPage: true, tabId: "main"})

// 关闭
mcp__firefox-control__close_browser()

多人游戏测试

// 启动浏览器并创建多个玩家标签
mcp__firefox-control__launch_firefox_multi({headless: false, enableDebugLogging: true})
mcp__firefox-control__create_tab({tabId: "player1", url: "http://localhost:4000/squid-ball", enableMonitoring: true})
mcp__firefox-control__create_tab({tabId: "player2", url: "http://localhost:4000/squid-ball", enableMonitoring: true})

// 玩家1创建游戏
mcp__firefox-control__set_active_tab({tabId: "player1"})
mcp__firefox-control__click({selector: 'button[phx-click="create_game"]', tabId: "player1"})

// 玩家2加入游戏(假设游戏ID可用)
mcp__firefox-control__set_active_tab({tabId: "player2"})
mcp__firefox-control__type_text({selector: 'input[name="game_id"]', text: "GameID123", tabId: "player2"})
mcp__firefox-control__click({selector: 'button[type="submit"]', tabId: "player2"})

// 分别监控两个玩家
mcp__firefox-control__get_all_debug_activity({tabId: "player1", limit: 10})
mcp__firefox-control__get_all_debug_activity({tabId: "player2", limit: 10})

Phoenix LiveView 调试

// 监控LiveView的WebSocket流量
mcp__firefox-control__get_websocket_messages({tabId: "player1", limit: 5})

// 过滤获取控制台日志
mcp__firefox-control__get_console_logs({tabId: "player1", types: ["error", "warn"], limit: 10})

// 监控网络活动
mcp__firefox-control__get_network_activity({tabId: "player1", filter: "xhr", limit: 20})

// 获取性能指标
mcp__firefox-control__get_performance_metrics({tabId: "player1"})

// 综合调试流以进行全面监控
mcp__firefox-control__get_all_debug_activity({tabId: "player1", limit: 50})

实时游戏状态监控

// 捕获实时游戏节拍和状态变化
mcp__firefox-control__get_websocket_messages({tabId: "player1", limit: 3})
// 返回:球的位置、挡板移动、节拍数、玩家状态

// 监控LiveView更新的控制台
mcp__firefox-control__get_console_logs({tabId: "player1", types: ["log"], limit: 5})
// 返回:Phoenix LiveView更新日志中的游戏状态变化

// 清除缓冲区并重新开始监控
mcp__firefox-control__clear_debug_buffers({tabId: "player1", types: ["console", "websocket"]})
mcp__firefox-control__start_monitoring({tabId: "player1", types: ["console", "websocket"]})

使用场景

游戏开发与测试

  • 多人测试:创建多个浏览器会话以模拟不同玩家
  • 实时调试:监控WebSocket流量、控制台日志和游戏状态变化
  • 客户端预测:追踪客户端与服务器之间的同步和计时
  • 性能监控:测量帧率、内存使用情况和网络延迟

Phoenix LiveView 开发

  • LiveView调试:监控Phoenix LiveView的WebSocket消息和状态更新
  • 实时应用:追踪双向通信和状态同步
  • 错误跟踪:捕获JavaScript错误和控制台警告
  • 性能分析:监控DOM更新和渲染性能

Web应用测试

  • 跨标签测试:模拟不同浏览器上下文中的多个用户
  • 会话管理:测试隔离会话和用户交互
  • 网络监控:追踪API调用、响应和错误处理
  • UI测试:自动化交互并捕获屏幕截图

要求

  • Node.js 18+
  • Firefox(由Playwright自动安装)
  • 兼容MCP的客户端(如Claude Code等)
  • 显示服务器(非无头模式,DISPLAY环境变量)

调试功能

自动监控

  • 控制台日志:所有console.log、错误、警告、信息、调试消息自动捕获
  • JavaScript错误:未处理的错误和带有堆栈跟踪的承诺拒绝
  • WebSocket流量:实时捕获所有WebSocket消息(发送/接收)
  • 网络活动:HTTP请求/响应及其头部、时间和状态码
  • 性能指标:DOM计时、绘制事件、内存使用情况和导航计时

数据过滤

  • 基于时间的过滤:根据特定时间戳过滤事件
  • 类型过滤:按类型过滤控制台日志(错误、警告、信息、调试)
  • 网络过滤:按类型过滤网络请求(xhr、websocket、fetch)
  • 限制控制:控制返回的事件数量以管理数据量

多标签支持

  • 隔离上下文:每个标签在其自己的浏览器上下文中运行,并具有独立的调试功能
  • 会话管理:为不同的用户/玩家维护独立的会话
  • 独立监控:每个标签捕获其自身的调试事件,互不干扰
  • 轻松切换:在不同标签之间切换以测试不同的用户交互

架构

调试增强型服务器 (index-multi-debug.js)

  • 基于Playwright实现Firefox自动化
  • 使用Chrome DevTools协议进行实时事件捕获
  • 每个浏览器标签/上下文的独立监控
  • 自动缓冲区管理,具有可配置的限制
  • 事件时间戳,以便精确调试

浏览器上下文隔离

  • 每个标签都有自己的浏览器上下文以实现完全隔离
  • 独立的cookie存储、本地存储和会话数据
  • 每个上下文的独立网络监控和调试
  • 不同玩家会话之间没有交叉污染

安全说明

此服务器提供了广泛的浏览器自动化和调试访问能力。请谨慎使用,并确保信任将控制Firefox的MCP客户端。该服务器可以:

  • 在浏览器上下文中执行任意JavaScript
  • 监控所有网络流量和WebSocket消息
  • 访问页面内容和用户交互
  • 截取屏幕并访问媒体设备