Skip to main content
Glama

Firefox MCP Server

Advanced Firefox browser automation with comprehensive debugging capabilities

A powerful Model Context Protocol (MCP) server that provides sophisticated Firefox browser automation through 28 specialized tools. Designed for AI assistants and automation workflows requiring multi-session management, real-time debugging, and comprehensive web interaction capabilities.

🌟 Key Features

Multi-Session Architecture

  • Isolated Browser Sessions: Each session runs in a completely separate context with independent cookies, storage, and debugging

  • Perfect for Multiplayer Testing: Test multiplayer games and multi-user applications seamlessly

  • Concurrent Operations: Manage multiple browser sessions simultaneously from a single interface

Comprehensive Debugging Suite

  • Real-time Console Monitoring: Capture all console output (log, error, warn, info, debug)

  • JavaScript Error Tracking: Monitor unhandled errors with full stack traces

  • Network Activity Monitoring: Track HTTP requests, responses, and timing data

  • WebSocket Traffic Capture: Perfect for Phoenix LiveView and real-time application debugging

  • Performance Metrics: Monitor DOM timing, paint events, and memory usage

Advanced Interaction Capabilities

  • Precise Element Interaction: Click, type, and interact with any web element

  • Keyboard Event Simulation: Send complex key combinations and shortcuts

  • Drag & Drop Operations: Smooth drag operations with customizable timing and steps

  • JavaScript Execution: Run custom JavaScript in browser contexts

Related MCP server: Playwright MCP

πŸš€ Quick Start

Installation

npm install firefox-mcp-server
npx playwright install firefox

Basic Usage

Add to your MCP client configuration:

{
  "mcpServers": {
    "firefox": {
      "command": "npx",
      "args": ["firefox-mcp-server"],
      "env": {}
    }
  }
}

Example: Multi-User Testing

// Launch browser and create isolated sessions
await browser_launch({headless: false})
await session_create({sessionId: "user1", url: "https://app.example.com"})
await session_create({sessionId: "user2", url: "https://app.example.com"})

// User 1 creates a game
await element_click({sessionId: "user1", selector: "button.create-game"})

// User 2 joins the game
await element_click({sessionId: "user2", selector: "button.join-game"})
await input_type({sessionId: "user2", selector: "input.game-code", text: "ABC123"})

// Monitor both sessions for real-time updates
await debug_websocket_messages({sessionId: "user1", limit: 10})
await debug_websocket_messages({sessionId: "user2", limit: 10})

πŸ› οΈ Complete Tool Reference

Browser Management

  • browser_launch - Launch Firefox with debugging capabilities

  • browser_close - Close browser and clean up all resources

Session Management

  • session_create - Create isolated browser session with independent state

  • session_list - List all active sessions with URLs and status

  • session_close - Close specific session and free resources

  • session_set_active - Set default session for subsequent operations

Page Navigation

  • page_navigate - Navigate to any URL

  • page_reload - Refresh current page

  • history_back / history_forward - Browser history navigation

  • url_get_current - Get current page URL

Element Interaction

  • element_click - Click elements by selector or coordinates

  • element_drag - Drag and drop with smooth animations

  • input_type - Type text into input fields and text areas

  • keyboard_press - Send keyboard events with modifier support

  • element_wait - Wait for elements to appear or become visible

Content Extraction

  • html_extract - Extract HTML content from page or elements

  • text_extract - Get visible text content

  • page_screenshot - Capture screenshots with flexible options

Advanced Capabilities

  • javascript_execute - Run custom JavaScript in browser context

Comprehensive Debugging Tools

  • debug_console_logs - Monitor browser console output

  • debug_javascript_errors - Track JavaScript errors and exceptions

  • debug_network_activity - Monitor HTTP requests and responses

  • debug_websocket_messages - Capture WebSocket traffic (LiveView-friendly)

  • debug_performance_metrics - Get timing and memory usage data

  • debug_activity_all - Combined feed of all debugging information

  • debug_monitoring_start - Start comprehensive monitoring

  • debug_buffers_clear - Clear accumulated debug data

  • debug_helpers_inject - Inject custom debugging utilities

🎯 Use Cases

Web Application Testing

  • Automated UI testing with visual verification

  • Form submission and validation testing

  • Cross-browser compatibility verification

  • Performance monitoring and optimization

Multiplayer Game Development

  • Multi-player session simulation

  • Real-time state synchronization testing

  • WebSocket message flow debugging

  • Client-side prediction validation

Phoenix LiveView Development

  • LiveView event flow monitoring

  • Real-time update verification

  • WebSocket connection debugging

  • Multi-user interaction testing

E-commerce and SaaS Testing

  • Multi-user checkout flows

  • Session isolation for different user roles

  • Real-time inventory updates

  • Payment flow testing

πŸ“Š Debugging Capabilities

Console Monitoring

// Get recent console activity
await debug_console_logs({
  sessionId: "user1",
  types: ["error", "warn"],
  limit: 20,
  since: Date.now() - 60000  // Last minute
})

Network Analysis

// Monitor API calls and responses
await debug_network_activity({
  sessionId: "user1",
  filter: "xhr",
  limit: 10
})

WebSocket Debugging

// Perfect for Phoenix LiveView
await debug_websocket_messages({
  sessionId: "user1",
  limit: 5
})

Performance Monitoring

// Get comprehensive performance data
await debug_performance_metrics({
  sessionId: "user1"
})

βš™οΈ Troubleshooting

Playwright Browser Not Found Error

If you encounter an error like:

browserType.launch: Executable doesn't exist at /home/luke/.cache/ms-playwright/firefox-1482/firefox/firefox

Solution: The Playwright browsers need to be installed. Run:

# From the firefox-mcp-server directory
./node_modules/.bin/playwright install firefox

This downloads the Firefox browser binary that Playwright uses for automation. This issue was resolved on 2025-08-03 when the MCP server failed to launch due to missing browser binaries.

πŸ”§ Claude Code Configuration

Local Configuration

Claude Code uses a project-specific configuration located at:

/home/luke/workbench/drabardi/.claude/settings.local.json

This configuration includes:

  1. Enabled MCP Servers: The firefox-control server is enabled in enabledMcpjsonServers

  2. Permissions: Various tool permissions are whitelisted including all Firefox MCP tools

MCP Server Configuration

The Firefox MCP server is configured in Claude Code using:

# Check configured MCP servers
claude mcp list

# Output shows:
firefox-control: node /home/luke/workbench/firefox-mcp-server/index.js
tidewave: http://localhost:4000/tidewave/mcp (SSE)

The server runs from /home/luke/workbench/firefox-mcp-server/ using the main index.js file (which internally uses the index-multi-debug.js implementation).

πŸ”§ Configuration Options

Session Creation

await session_create({
  sessionId: "unique-id",
  url: "https://example.com",
  contextId: "optional-context",
  enableMonitoring: true  // Enable real-time debugging
})

Screenshot Options

await page_screenshot({
  sessionId: "user1",
  path: "screenshot.png",
  fullPage: true  // Capture entire page
})

Drag Operations

await element_drag({
  sessionId: "user1",
  selector: ".slider",
  offsetX: 100,
  duration: 1000,  // Smooth 1-second animation
  steps: 20        // 20 intermediate positions
})

πŸ“ Project Structure

firefox-mcp-server/
β”œβ”€β”€ index.js              # Main MCP server implementation
β”œβ”€β”€ package.json           # Project configuration
β”œβ”€β”€ README.md             # This file
β”œβ”€β”€ CLAUDE.md             # Claude Code integration guide
β”œβ”€β”€ examples/             # Usage examples
β”‚   β”œβ”€β”€ demo-tibia-simple.js
β”‚   β”œβ”€β”€ demo-tibia.js
β”‚   └── demo-multiplayer.js
β”œβ”€β”€ tests/                # Test files
β”‚   └── test.js
└── docs/                 # Additional documentation
    β”œβ”€β”€ ENHANCEMENT_USAGE.md
    └── README-multi.md

🀝 Contributing

We welcome contributions! This project is designed to be:

  • LLM-Friendly: Tool names and descriptions optimized for AI assistant discovery

  • Extensible: Easy to add new browser automation capabilities

  • Well-Documented: Comprehensive examples and documentation

πŸ“‹ Requirements

  • Node.js: 18.0.0 or higher

  • Firefox: Automatically installed via Playwright

  • MCP Client: Claude Code, Cline, or other MCP-compatible tools

πŸ”’ Security

This server provides comprehensive browser automation capabilities. Use with trusted MCP clients only. The server can:

  • Execute arbitrary JavaScript in browser contexts

  • Monitor all network traffic and WebSocket messages

  • Access page content and user interactions

  • Take screenshots and access media devices

πŸ“„ License

MIT License - see LICENSE file for details.


Perfect for AI assistants working with web applications, multiplayer games, and real-time debugging scenarios.

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

Latest Blog Posts

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/JediLuke/firefox-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server