Web Accessibility Testing (A11y MCP)

Prueba páginas web y HTML para detectar problemas de accesibilidad y cumplimiento de WCAG utilizando Axe-core y Puppeteer.

Documentación

Servidor MCP de Pruebas de Accesibilidad Web (A11y MCP)

Web Accessibility Testing MCP - Give LLMs access to web accessibility testing APIs | Product Hunt

MseeP.ai Security Assessment Badge

Verified on MseeP

https://github.com/user-attachments/assets/316c6d44-e677-433e-b4d5-63630b4bab2b

A11y MCP es un servidor MCP (Model Context Protocol) que brinda a los LLMs acceso a APIs de pruebas de accesibilidad web.

Este servidor utiliza la API Deque Axe-core y Puppeteer para permitir que los LLMs analicen contenido web para verificar el cumplimiento de WCAG e identifiquen problemas de accesibilidad.

Nota: Este no es un servidor MCP oficial de Deque Labs.

Características

  • Probar páginas web: Pruebe cualquier URL pública para detectar problemas de accesibilidad con dimensiones de viewport personalizables
  • Probar fragmentos HTML: Pruebe cadenas HTML sin procesar para detectar problemas de accesibilidad
  • Pruebas de cumplimiento WCAG: Verifique el contenido contra varios estándares WCAG (2.0, 2.1, 2.2)
  • Pruebas personalizables: Especifique qué etiquetas/estándares de accesibilidad probar
  • Exploración de reglas: Obtenga información sobre las reglas de accesibilidad disponibles
  • Análisis de contraste de color: Verifique combinaciones de colores para el cumplimiento de WCAG
  • Validación de ARIA: Pruebe el uso correcto de los atributos ARIA
  • Detección de bloqueo de orientación: Identifique contenido que fuerza orientaciones específicas de pantalla

Instalación

Requisitos previos

  • Node.js 18 o posterior
  • Un cliente compatible con MCP (Claude Desktop, Claude Code, VS Code, Cursor, etc.)

Claude Desktop

Edite su archivo de configuración de MCP:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

Agregue el servidor al objeto mcpServers:

{
  "mcpServers": {
    "a11y-accessibility": {
      "command": "npx",
      "args": ["-y", "a11y-mcp-server"]
    }
  }
}

Claude Code (CLI)

claude mcp add a11y-accessibility -- npx -y a11y-mcp-server

Esto registra el servidor para el proyecto actual. Para que esté disponible en todos los proyectos:

claude mcp add --scope user a11y-accessibility -- npx -y a11y-mcp-server

Verifique que el servidor esté registrado:

claude mcp list

Nota: Las herramientas MCP están disponibles después de reiniciar su sesión de Claude Code.

VS Code (Copilot)

Agregue a su settings.json o .vscode/settings.json de VS Code:

{
  "mcp": {
    "servers": {
      "a11y-accessibility": {
        "command": "npx",
        "args": ["-y", "a11y-mcp-server"]
      }
    }
  }
}

Cursor

Agregue a su configuración de MCP de Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "a11y-accessibility": {
      "command": "npx",
      "args": ["-y", "a11y-mcp-server"]
    }
  }
}

Windsurf

Agregue a su configuración de MCP de Windsurf (~/.codeium/windsurf/mcp_config.json):

{
  "mcpServers": {
    "a11y-accessibility": {
      "command": "npx",
      "args": ["-y", "a11y-mcp-server"]
    }
  }
}

Herramientas disponibles

test_accessibility

Prueba una URL para detectar problemas de accesibilidad.

Parámetros:

ParámetroRequeridoDescripción
urlLa URL de la página web a probar
tagsNoMatriz de etiquetas WCAG para probar (por ejemplo, ["wcag2aa"])
widthNoAncho del viewport en píxeles (predeterminado: 1280)
heightNoAlto del viewport en píxeles (predeterminado: 800)

Ejemplo — viewport de escritorio (predeterminado):

{
  "url": "https://example.com",
  "tags": ["wcag2aa"]
}

Ejemplo — viewport móvil (iPhone 12/13):

{
  "url": "https://example.com",
  "tags": ["wcag2aa"],
  "width": 390,
  "height": 844
}

test_html_string

Prueba una cadena HTML para detectar problemas de accesibilidad.

Parámetros:

ParámetroRequeridoDescripción
htmlEl contenido HTML a probar
tagsNoMatriz de etiquetas WCAG para probar (por ejemplo, ["wcag2aa"])
widthNoAncho del viewport en píxeles (predeterminado: 1280)
heightNoAlto del viewport en píxeles (predeterminado: 800)

Ejemplo — viewport predeterminado:

{
  "html": "<div><img src='image.jpg'></div>",
  "tags": ["wcag2aa"]
}

Ejemplo — viewport móvil:

{
  "html": "<div><img src='image.jpg'></div>",
  "tags": ["wcag2aa"],
  "width": 375,
  "height": 812
}

get_rules

Obtenga información sobre las reglas de accesibilidad disponibles con filtrado opcional. Devuelve una matriz de objetos de reglas, cada uno con ruleId, description, help, helpUrl y tags.

Parámetros:

ParámetroRequeridoDescripción
tagsNoFiltrar reglas por etiquetas (por ejemplo, ["wcag2a", "wcag2aa", "best-practice"])

Ejemplo — filtrar reglas por WCAG 2.1 AA:

{
  "tags": ["wcag21aa"]
}

Ejemplo — obtener todas las reglas (sin filtro):

{}

check_color_contrast

Verifica si una combinación de colores de primer plano y fondo cumple con los requisitos de contraste de WCAG.

Parámetros:

ParámetroRequeridoDescripción
foregroundColor de primer plano (por ejemplo, "#000000", "rgb(0,0,0)")
backgroundColor de fondo (por ejemplo, "#FFFFFF", "rgb(255,255,255)")
fontSizeNoTamaño de fuente en píxeles (predeterminado: 16)
isBoldNoSi el texto está en negrita (predeterminado: false)

Ejemplo:

{
  "foreground": "#777777",
  "background": "#EEEEEE",
  "fontSize": 16,
  "isBold": false
}

check_aria_attributes

Verifica si los atributos ARIA se usan correctamente en HTML.

Parámetros:

ParámetroRequeridoDescripción
htmlContenido HTML para probar el uso de atributos ARIA

Ejemplo:

{
  "html": "<div role='button' aria-pressed='false'>Click me</div>"
}

check_orientation_lock

Verifica si el contenido fuerza una orientación específica.

Parámetros:

ParámetroRequeridoDescripción
htmlContenido HTML para probar problemas de bloqueo de orientación

Ejemplo:

{
  "html": "<html><head><meta name='viewport' content='width=device-width, orientation=portrait'></head><body>Content</body></html>"
}

Formato de respuesta

El servidor devuelve resultados de pruebas de accesibilidad en JSON estructurado:

{
  "violations": [
    {
      "id": "color-contrast",
      "impact": "serious",
      "description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
      "help": "Elements must meet minimum color contrast ratio thresholds",
      "helpUrl": "https://dequeuniversity.com/rules/axe/4.10/color-contrast",
      "affectedNodes": [
        {
          "html": "<div style=\"color: #aaa; background-color: #eee;\">Low contrast text</div>",
          "target": ["div"],
          "failureSummary": "Fix any of the following: Element has insufficient color contrast of 1.98 (foreground color: #aaa, background color: #eee, font size: 12.0pt, font weight: normal)"
        }
      ]
    }
  ],
  "passes": 1,
  "incomplete": 0,
  "inapplicable": 2,
  "timestamp": "2025-04-25T16:45:33.655Z",
  "url": "about:blank",
  "testEngine": {
    "name": "axe-core",
    "version": "4.10.3"
  }
}

Referencia de etiquetas WCAG

Etiquetas comunes que puede usar con el parámetro tags:

EtiquetaDescripción
wcag2aWCAG 2.0 Nivel A
wcag2aaWCAG 2.0 Nivel AA
wcag2aaaWCAG 2.0 Nivel AAA
wcag21aWCAG 2.1 Nivel A
wcag21aaWCAG 2.1 Nivel AA
wcag22aaWCAG 2.2 Nivel AA
best-practiceMejores prácticas (no estrictamente WCAG)

Dependencias

Licencia

MIT