Skip to main content
Glama

Servidor MCP Chromium ARM64

🚀 Dos enfoques de implementación disponibles

📦 Comparación de versiones

Característica

CDP directo (v1.4.0)RECOMENDADO

Basado en Puppeteer (v1.2.0)

Dependencias

Solo ws + MCP SDK (89 paquetes)

Puppeteer + MCP SDK (163 paquetes)

Uso de memoria

Menor (chromium nativo)

Mayor (sobrecarga del envoltorio de Node.js)

Tiempo de inicio

Más rápido (WebSocket directo)

Más lento (inicialización de puppeteer)

Control del navegador

Protocolo nativo Chrome DevTools

Capa de abstracción de Puppeteer

Optimización ARM64

ARM64 nativo completo

Depende del soporte ARM64 de Puppeteer

Depuración

Mensajes CDP sin procesar visibles

Abstraído por Puppeteer

Mantenimiento

Solo cambios en el protocolo Chrome

Cambios en Puppeteer + protocolo Chrome

Rendimiento

Mejor (comunicación directa)

Bueno (comunicación envuelta)

🎯 Cuándo usar cada versión

Use CDP directo (v1.4.0) si:

  • ✅ Desea el máximo rendimiento y el mínimo de dependencias

  • ✅ Necesita optimización nativa para ARM64

  • ✅ Desea un control directo del protocolo Chrome DevTools

  • ✅ Está creando sistemas de automatización en producción

  • ✅ Desea las últimas funciones y las actualizaciones más rápidas

Use la versión basada en Puppeteer (v1.2.0) si:

  • ✅ Está migrando desde código de Puppeteer existente

  • ✅ Prefiere la abstracción de la API de Puppeteer

  • ✅ Necesita funciones específicas de Puppeteer que aún no se han implementado en CDP directo

  • ✅ Desea minimizar los cambios en los flujos de trabajo existentes

🔄 Cambio entre versiones

# Switch to Direct CDP (recommended)
git checkout direct-chromium
npm install  # Only 89 packages

# Switch back to Puppeteer version
git checkout main  
npm install  # 163 packages

Related MCP server: mcp-browser-use

📚 Documentación y guías especializadas

Este repositorio incluye múltiples enfoques de documentación para diferentes audiencias:

🎯 Para desarrolladores e ingenieros DevOps

📖 README TÉCNICO - Documentación técnica completa que incluye:

  • Diagramas de arquitectura y referencia de API

  • Benchmarks de rendimiento y guías de optimización

  • Ejemplos de integración CI/CD y flujos de trabajo de pruebas E2E

  • Opciones avanzadas de depuración y personalización

🍓 Para creadores y emprendedores

📖 README DE RASPBERRY PI - Guía centrada en el presupuesto que incluye:

  • Configuración completa de desarrollo de IA por $480

  • Flujos de trabajo de desarrollo SaaS sin código

  • Casos de uso de startups del mundo real y análisis de ROI

  • Enfoque en accesibilidad global y el movimiento maker

Enlaces rápidos


✨ Características principales

🤖 Automatización de navegador ARM64 nativa

  • Implementación directa del protocolo Chrome DevTools

  • 27 herramientas MCP integrales para un control total del navegador

  • Optimizado para arquitecturas Raspberry Pi y Apple Silicon

  • Sin dependencia de binarios de Puppeteer x86_64 rotos

⚡ Arquitectura de alto rendimiento

  • Solo 2 dependencias (ws + MCP SDK) frente a 163 paquetes en Puppeteer

  • Menor uso de memoria y tiempos de inicio más rápidos

  • Comunicación WebSocket directa con Chrome

  • Capacidades integrales de registro y auditoría

🛠️ Desarrollo listo para empresas

  • Suite de depuración completa con monitoreo de consola/red

  • Auditorías de accesibilidad, SEO y rendimiento integradas

  • Ejemplos de integración CI/CD y flujos de trabajo de pruebas E2E

  • Compatibilidad multiplataforma (Linux ARM64, macOS Apple Silicon)

💰 Plataforma de innovación asequible

  • Configuración completa de desarrollo de IA por menos de $500

  • Mismas capacidades que estaciones de trabajo empresariales de más de $50,000

  • Accesibilidad global para creadores y startups de todo el mundo

  • Sin costos recurrentes en la nube: sea dueño de su infraestructura


🚀 Inicio rápido universal

Requisitos previos

# Install system dependencies
sudo apt update
sudo apt install chromium-browser nodejs npm python3

# Verify Chromium works
chromium-browser --version

Instalación

git clone https://github.com/nfodor/mcp-chromium-arm64
cd mcp-chromium-arm64
npm install
chmod +x *.py *.sh

Prueba rápida (una línea)

# Verify it works immediately after install:
python3 -c "import sys; sys.path.append('.'); import arm64_browser; print('[OK] ARM64 Browser Works!' if 'error' not in arm64_browser.navigate('https://example.com').lower() else '[FAIL] Failed')"

Resultado esperado: [OK] ARM64 Browser Works!

Prueba y demostración

# Quick demo with immediate visible results (30 seconds)
python3 instant_demo.py

# Or comprehensive demo showing all capabilities (2-3 minutes)
./run_demo.sh

Probar la configuración

# Test MCP server directly
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | node index.js

# Test Python wrapper
python3 simple_browser.py

🛠️ Guía del desarrollador y depuración

🔧 Herramientas MCP disponibles (27 en total)

Control básico del navegador

  • navigate - Navegar a URLs con carga completa de página

  • screenshot - Capturar capturas de pantalla PNG (página completa o ventana gráfica)

  • click - Hacer clic en elementos mediante selector CSS con posicionamiento preciso

  • fill - Rellenar campos de entrada con texto o valores

  • hover - Pasar el ratón sobre elementos para interacciones de menús desplegables/información sobre herramientas

  • select - Seleccionar opciones de menús desplegables por valor

  • evaluate - Ejecutar JavaScript y devolver resultados

  • get_content - Extraer HTML de la página o contenido de texto plano

Funcionalidad avanzada

  • get_console_logs - Recuperar la salida de la consola del navegador

  • get_console_errors - Obtener solo mensajes de error de la consola

  • get_network_logs - Monitorear todas las solicitudes/respuestas de red

  • get_network_errors - Rastrear solicitudes de red fallidas (4xx/5xx)

  • wipe_logs - Borrar todos los registros almacenados de la memoria

  • get_selected_element - Obtener información sobre el elemento enfocado actualmente

Emulación de dispositivos móviles

  • emulate_device - Emular dispositivos móviles con 17 preajustes o ventana gráfica/UA/DPR/táctil personalizados, con soporte horizontal

    • iPhones: iphone-16, iphone-16-pro, iphone-16-pro-max, iphone-16e, iphone-15, iphone-15-pro-max, iphone-se

    • Pixels: pixel-9, pixel-9-pro, pixel-9-pro-xl, pixel-9-pro-fold

    • Samsung: galaxy-s24, galaxy-s24-ultra, galaxy-z-fold-5

    • Tablets: ipad-air-m2, ipad-pro-13, galaxy-tab-s9

  • reset_emulation - Restablecer la emulación del dispositivo al modo de escritorio

Grabación de screencast

  • start_screencast - Iniciar la grabación de la actividad del navegador mediante screencast CDP (formato, calidad, resolución, salto de fotogramas configurables)

  • stop_screencast - Detener la grabación y codificar a MP4, GIF o WebM mediante ffmpeg (detecta automáticamente los FPS a partir de las marcas de tiempo de los fotogramas)

  • screencast_status - Verificar el estado de la grabación, el recuento de fotogramas y la duración transcurrida

Herramientas de auditoría y análisis

  • run_accessibility_audit - Verificar texto alternativo, etiquetas, encabezados, contraste

  • run_performance_audit - Medir tiempos de carga, uso de memoria, recursos

  • run_seo_audit - Validar título, meta descripción, etiquetas H1, canónicas

  • run_best_practices_audit - Verificar HTTPS, HTML obsoleto, ventana gráfica

  • run_nextjs_audit - Verificaciones de optimización específicas de Next.js

  • run_debugger_mode - Información de depuración completa

  • run_audit_mode - Ejecutar todas las auditorías juntas con un resumen

  • close_browser - Apagado limpio del proceso de chromium

🐛 Depuración y desarrollo

Prueba directa de MCP

# Test individual tools directly
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"navigate","arguments":{"url":"https://example.com"}}}' | node index.js

echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"evaluate","arguments":{"script":"document.title"}}}' | node index.js

echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"screenshot","arguments":{"name":"debug.png"}}}' | node index.js

Grabación de screencast

# Start recording, interact with the page, then stop and encode
# 1. Start screencast
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"start_screencast","arguments":{"format":"jpeg","quality":80,"maxWidth":1280,"maxHeight":720}}}' | node index.js

# 2. Perform actions (navigate, click, fill, etc.)
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"navigate","arguments":{"url":"https://example.com"}}}' | node index.js

# 3. Check recording progress
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"screencast_status","arguments":{}}}' | node index.js

# 4. Stop and encode to MP4
echo '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"stop_screencast","arguments":{"output":"mp4","name":"my-demo"}}}' | node index.js
# Output: /tmp/my-demo.mp4

# Encode as GIF instead (2-pass palette for quality)
echo '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"stop_screencast","arguments":{"output":"gif","name":"bug-repro"}}}' | node index.js
# Output: /tmp/bug-repro.gif

# Or WebM (VP9)
echo '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"stop_screencast","arguments":{"output":"webm"}}}' | node index.js

Requiere: ffmpeg instalado en el sistema. Los FPS se detectan automáticamente a partir de las marcas de tiempo de los fotogramas de CDP. La salida GIF está limitada a 15 fps para tamaños de archivo razonables.

Emulación de dispositivos móviles

# Emulate iPhone 16 Pro
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"emulate_device","arguments":{"device":"iphone-16-pro"}}}' | node index.js

# Emulate in landscape mode
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"emulate_device","arguments":{"device":"ipad-pro-13","landscape":true}}}' | node index.js

# Custom viewport with DPR
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"emulate_device","arguments":{"width":390,"height":844,"deviceScaleFactor":3,"mobile":true}}}' | node index.js

# Reset back to desktop
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"reset_emulation","arguments":{}}}' | node index.js

Monitoreo de red y consola

# Navigate to a page, then check console logs
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_console_logs","arguments":{}}}' | node index.js

# Get only errors
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_console_errors","arguments":{}}}' | node index.js

# Check network activity (all requests with status codes)
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_network_logs","arguments":{}}}' | node index.js

# Check for failed requests (4xx/5xx)
echo '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"get_network_errors","arguments":{}}}' | node index.js

# Clear all logs when done
echo '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"wipe_logs","arguments":{}}}' | node index.js

Auditorías

# Run all audits at once (accessibility + performance + SEO + best practices + Next.js)
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"run_audit_mode","arguments":{}}}' | node index.js

# Or run individual audits
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"run_accessibility_audit","arguments":{}}}' | node index.js
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"run_performance_audit","arguments":{}}}' | node index.js
echo '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"run_seo_audit","arguments":{}}}' | node index.js

# Get full debug info (URL, viewport, memory, timing)
echo '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"run_debugger_mode","arguments":{}}}' | node index.js

Inspección de elementos

# Get info about the currently focused element
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_selected_element","arguments":{}}}' | node index.js
# Returns: tagName, id, className, textContent, value, and a CSS selector

Depuración del protocolo Chrome DevTools

# Manual CDP connection test
node -e "
const { WebSocket } = require('ws');
const { spawn } = require('child_process');

const chrome = spawn('/usr/bin/chromium-browser', [
  '--headless', '--remote-debugging-port=9227'
]);

setTimeout(() => {
  fetch('http://localhost:9227/json')
    .then(r => r.json())
    .then(tabs => {
      console.log('Available tabs:', tabs.length);
      const ws = new WebSocket(tabs[0].webSocketDebuggerUrl);
      ws.on('open', () => {
        console.log('CDP WebSocket connected!');
        ws.send(JSON.stringify({id: 1, method: 'Runtime.evaluate', params: {expression: '2+2'}}));
      });
      ws.on('message', (data) => {
        console.log('CDP Response:', JSON.parse(data));
        chrome.kill();
        process.exit(0);
      });
    });
}, 2000);
"

Monitoreo de rendimiento

# Monitor system resources during operation
htop &
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"navigate","arguments":{"url":"https://httpbin.org/delay/5"}}}' | time node index.js

# Check memory usage
ps aux | grep chromium
free -h

Depuración de red

# Check if debugging port is accessible
curl -s http://localhost:9222/json | jq '.[] | {id, title, type}'

# Monitor WebSocket traffic (install websocat)
websocat ws://localhost:9222/devtools/page/[TAB_ID] --text -v

🔍 Escenarios de depuración comunes

1. Problemas de conexión WebSocket

# Symptoms: "CDP command timeout" errors
# Check if chrome debugging port is running
lsof -i :9222

# Test manual connection
node -e "
const { WebSocket } = require('ws');
const ws = new WebSocket('ws://localhost:9222/devtools/browser');
ws.on('open', () => console.log('✓ WebSocket OK'));
ws.on('error', (e) => console.log('✗ WebSocket Error:', e.message));
setTimeout(() => process.exit(0), 2000);
"

2. Problemas con el proceso de Chrome

# Symptoms: Browser won't start or hangs
# Kill any stuck processes
pkill -f chromium-browser
pkill -f remote-debugging-port

# Test chrome startup manually
timeout 10s /usr/bin/chromium-browser --headless --remote-debugging-port=9223 --no-sandbox

# Check chrome logs
journalctl --user -u chromium --since "1 hour ago"

3. Problemas de selección de elementos

# Debug CSS selectors interactively
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"evaluate","arguments":{"script":"document.querySelectorAll(\"button\").length"}}}' | node index.js

# Get element information
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"evaluate","arguments":{"script":"document.querySelector(\"#mybutton\") ? \"found\" : \"not found\""}}}' | node index.js

4. Problemas de memoria y rendimiento

# Monitor memory during operation
watch -n 1 'ps aux | grep -E "(chromium|node)" | grep -v grep'

# Chrome memory debugging
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"evaluate","arguments":{"script":"JSON.stringify(performance.memory)"}}}' | node index.js

🎯 Funciones de depuración avanzadas

Habilitar registro detallado

# Set environment variables for detailed output
export DEBUG=puppeteer:*
export NODE_ENV=development

# Run with detailed Chrome logs
/usr/bin/chromium-browser --headless --enable-logging --log-level=0 --remote-debugging-port=9222

Seguimiento de mensajes CDP

# Create debug version with message logging
cp index.js debug-index.js

# Add to sendCDPCommand method:
# console.log('→ CDP:', JSON.stringify(command));
# console.log('← CDP:', JSON.stringify(response));

node debug-index.js

Integración con las herramientas de desarrollo del navegador

# Connect regular Chrome DevTools to the headless instance
# 1. Start the MCP server
# 2. Open regular Chrome/Chromium
# 3. Navigate to: chrome://inspect
# 4. Click "Configure..." and add localhost:9222
# 5. Click "inspect" on the page you want to debug

📊 Benchmarks de rendimiento

Comparación de tiempo de inicio

# Direct CDP (v1.3.0)
time echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"evaluate","arguments":{"script":"Date.now()"}}}' | node index.js

# Puppeteer version (v1.2.0)  
git checkout main
time echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"evaluate","arguments":{"script":"Date.now()"}}}' | node index.js

Monitoreo del uso de memoria

# Before operation
free -h && ps aux | grep -E "(chromium|node)" | grep -v grep

# During operation (run in another terminal)
watch -n 1 'echo "=== $(date) ===" && free -h && echo && ps aux | grep -E "(chromium|node)" | grep -v grep'

🚨 Códigos de error y soluciones

Error

Causa

Solución

CDP command timeout

Conexión WebSocket perdida

Reiniciar navegador, verificar disponibilidad de puerto

WebSocket not ready

Chrome no iniciado completamente

Aumentar retraso de inicio, verificar proceso de chrome

Element not found

Selector CSS no válido

Verificar selector con la herramienta evaluate

ECONNREFUSED

Puerto de depuración bloqueado

Verificar firewall, cerrar procesos de chrome existentes

Navigation timeout

Problemas de carga de página

Verificar red, aumentar tiempo de espera, probar página más simple

🔧 Personalización y extensión

Agregar nuevas herramientas MCP

// In index.js, add to tools array:
{
  name: 'my_custom_tool',
  description: 'My custom functionality',
  inputSchema: {
    type: 'object',
    properties: {
      param: { type: 'string', description: 'Parameter description' }
    },
    required: ['param']
  }
}

// Add to switch statement in CallToolRequestSchema handler:
case 'my_custom_tool':
  return await this.myCustomTool(args.param);

// Implement the method:
async myCustomTool(param) {
  await this.ensureChromium();
  const result = await this.sendCDPCommand('Page.navigate', { url: param });
  return { content: [{ type: 'text', text: `Custom result: ${result}` }] };
}

Variables de entorno

# Set browser window size (default: 1280,720)
export CHROMIUM_WINDOW_SIZE=1920,1080

Opciones de inicio de Chrome

// Modify in startChromium() method:
const customArgs = [
  '--headless',
  '--no-sandbox',
  '--disable-extensions',
  '--disable-plugins',
  '--disable-background-timer-throttling',
  '--disable-backgrounding-occluded-windows',
  '--disable-renderer-backgrounding',
  '--remote-debugging-port=9222',
  '--window-size=1920,1080',        // Custom viewport
  '--user-agent=CustomUA/1.0',      // Custom user agent
  '--disable-web-security',         // For CORS testing
  '--allow-running-insecure-content' // For mixed content
];

🌐 Compatibilidad multiplataforma ARM64

Matriz de soporte de plataforma

Plataforma

Estado

Ruta de Chrome

Método de instalación

Notas

Linux ARM64

Totalmente compatible

/usr/bin/chromium-browser

apt install chromium-browser

Probado en Raspberry Pi OS

macOS Apple Silicon ⚠️

Requiere modificaciones

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome

Descargar de Google o brew install chromium

Necesita actualizaciones de ruta y flags

Windows ARM64

No probado

C:\Program Files\Google\Chrome\Application\chrome.exe

Descargar de Google

Necesitaría cambios específicos para Windows

Configuración de macOS Apple Silicon

Requisitos previos

# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Node.js and Chromium
brew install node chromium --no-quarantine

Cambios de código requeridos

Actualmente, el servidor está optimizado para Linux ARM64. Para la compatibilidad con macOS, modifique index.js:

// Detect platform and set appropriate chrome path
function getChromePath() {
  const platform = process.platform;
  
  switch(platform) {
    case 'linux':
      return '/usr/bin/chromium-browser';
    case 'darwin': // macOS
      // Try multiple possible paths
      const macPaths = [
        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
        '/Applications/Chromium.app/Contents/MacOS/Chromium',
        '/opt/homebrew/bin/chromium'
      ];
      
      for (const path of macPaths) {
        if (require('fs').existsSync(path)) {
          return path;
        }
      }
      throw new Error('Chrome/Chromium not found on macOS');
    case 'win32':
      return 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe';
    default:
      throw new Error(`Unsupported platform: ${platform}`);
  }
}

// Update startChromium method
async startChromium() {
  const chromePath = getChromePath();
  const platform = process.platform;
  
  // Platform-specific arguments
  const baseArgs = [
    '--headless',
    '--disable-extensions',
    '--disable-plugins',
    `--remote-debugging-port=${debuggingPort}`,
    '--no-first-run',
    '--disable-gpu',
    '--window-size=1280,720'
  ];
  
  // Add Linux-specific sandbox flags
  if (platform === 'linux') {
    baseArgs.push('--no-sandbox', '--disable-setuid-sandbox');
  }
  
  // Add macOS-specific flags if needed
  if (platform === 'darwin') {
    baseArgs.push('--disable-dev-shm-usage');
  }
  
  chromiumProcess = spawn(chromePath, baseArgs);
  // ... rest of method
}

Problemas y soluciones específicos de macOS

1. Error "Chromium está dañado"

# Remove quarantine flag if downloading manually
sudo xattr -r -d com.apple.quarantine /Applications/Chromium.app

# Or install via Homebrew with no-quarantine flag
brew install chromium --no-quarantine

2. Elección entre Chrome y Chromium

# Option 1: Use Google Chrome (recommended)
# Download from: https://www.google.com/chrome/
# Path: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

# Option 2: Use Chromium via Homebrew
brew install chromium --no-quarantine
# Path: /opt/homebrew/bin/chromium

3. Problemas de permisos

# Ensure Chrome has required permissions
# System Preferences > Security & Privacy > Privacy tab
# Grant Camera, Microphone access if needed for specific use cases

Prueba de compatibilidad multiplataforma

Prueba rápida de detección de plataforma

node -e "
console.log('Platform:', process.platform);
console.log('Architecture:', process.arch);
const fs = require('fs');

const paths = {
  linux: '/usr/bin/chromium-browser',
  darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
  win32: 'C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe'
};

const chromePath = paths[process.platform];
console.log('Expected Chrome path:', chromePath);
console.log('Chrome exists:', fs.existsSync(chromePath));
"

Prueba MCP multiplataforma

# Test basic functionality across platforms
echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"evaluate\",\"arguments\":{\"script\":\"navigator.platform\"}}}' | node index.js

# Should return the current platform

Consideraciones de Windows ARM64

Aunque no se ha probado, el soporte para Windows ARM64 necesitaría:

// Windows-specific chrome path detection
case 'win32':
  const winPaths = [
    'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
    'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
    process.env.LOCALAPPDATA + '\\Google\\Chrome\\Application\\chrome.exe'
  ];
  // Similar path checking logic...

Diferencias de rendimiento

Plataforma

Tiempo de inicio

Uso de memoria

Notas

Linux ARM64 (Pi 4)

~3-4s

~150MB

Optimizado, bien probado

macOS Apple Silicon

~2-3s

~200MB

CPU más rápida, más memoria

Windows ARM64

Desconocido

Desconocido

Dependería del hardware

Se necesita contribución

¡Agradecemos las contribuciones para un soporte multiplataforma completo!

  • Probadores de macOS: Prueben los cambios propuestos en Apple Silicon

  • Windows ARM64: Prueben en Surface Pro X o dispositivos similares

  • Optimización de rendimiento: Optimizaciones específicas de la plataforma

  • Scripts de instalación: Configuración automatizada para cada plataforma


Integración con Claude CLI

Requisitos previos

# Install Claude Code CLI if you haven't already
npm install -g @anthropic-ai/claude-code

Agregar a Claude CLI

# From the project directory after cloning
claude mcp add chromium-arm64 "$(pwd)/mcp-wrapper.sh" --scope user

Verificar conexión

claude mcp list
# Should show: chromium-arm64: /path/to/mcp-wrapper.sh - ✓ Connected

⚠️ Importante: Reinicie Claude después de agregar

DEBE iniciar una nueva sesión de Claude después de agregar el servidor MCP:

# Exit current session if in one
exit
# Start fresh session
claude

Uso en Claude CLI

Pídale a Claude que use las herramientas de chromium-arm64:

List available MCP servers and use chromium-arm64 to navigate to https://example.com

Take a screenshot using the chromium-arm64 tool

Use chromium-arm64 to click the button with selector #submit

Fill the email field using chromium-arm64 with test@example.com

Record a screencast of the login flow and save it as a GIF

Emulate an iPhone 16 Pro and take a screenshot of the homepage

Run a full audit on https://example.com using chromium-arm64

Sea explícito para evitar Playwright/Puppeteer:

  • "Usa chromium-

Install Server
A
security – no known vulnerabilities
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/nfodor/claude-arm64-browser'

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