qualien-mcp

Puerta de enlace MCP para trabajo de QA/SDET: Playwright, sistema de archivos, GitHub, Jira, Postgres y más de 15 servidores MCP detrás de una sola conexión, con permisos de permitir/denegar por herramienta y bases de datos de solo lectura por defecto.

Documentación

qualien-mcp

Un servidor MCP que le brinda a tu asistente de IA un kit de herramientas de QA: Playwright, tus archivos de prueba, GitHub, Jira, Postgres y más, detrás de una sola conexión.

npm license: MIT

qualien-mcp es una puerta de enlace MCP compuesta para trabajo de SDET/QE. Agrega servidores del Protocolo de Contexto de Modelo detrás de una conexión, con un catálogo curado de 21 servidores relevantes para pruebas, permisos de permitir/denegar por herramienta y salvaguardas de solo lectura por defecto. Agrega un servidor a Claude Code, Claude Desktop, Cursor o VS Code en lugar de cinco.

npx qualien-mcp

De fábrica, sirve el par inicial de QE: Playwright MCP (automatización de navegador, DOM, capturas de pantalla) y Filesystem MCP (lectura/edición de archivos de proyecto, objetos de página, utilidades de prueba), con configuración cero. Las herramientas se exponen a tu asistente con el espacio de nombres playwright__… y filesystem__….

¿Por qué una puerta de enlace?

Tu asistente ya puede conectarse directamente a muchos servidores MCP, por lo que una puerta de enlace se gana su lugar haciendo lo que un montón de servidores no puede:

  • Un solo punto final para agregar a cualquier cliente (Claude Code, Claude Desktop, Cursor, …).
  • Curación: habilitar/deshabilitar por servidor y por herramienta. Menos herramientas, mejor nombradas = mejor selección de herramientas por parte del modelo (arrojarle 200 herramientas lo empeora peor).
  • Una superficie de enrutamiento/registro: cada llamada se registra en stderr con el servidor descendente, la herramienta y la latencia.
  • Ciclo de vida limpio: inicia cada servidor descendente como un proceso hijo y los cierra todos al salir (sin procesos de navegador huérfanos).
  • Curado para QE: un kit de herramientas SDET con opinión, no un proxy genérico.

Úsalo con tu asistente

Claude Code:

claude mcp add qualien -- npx -y qualien-mcp

o en .mcp.json / configuración de usuario:

{
  "mcpServers": {
    "qualien": { "command": "npx", "args": ["-y", "qualien-mcp"] }
  }
}

Claude Desktop (claude_desktop_config.json) y Cursor (~/.cursor/mcp.json o .cursor/mcp.json): la misma forma bajo mcpServers.

VS Code (.vscode/mcp.json):

{
  "servers": {
    "qualien": { "command": "npx", "args": ["-y", "qualien-mcp"] }
  }
}

Esa única entrada le da a tu asistente todas las herramientas de cada servidor agregado.

Agrega más servidores

Coloca un qualien-mcp.config.json en tu directorio de trabajo (o pasa --config <path>). Las entradas se fusionan sobre los valores predeterminados integrados: redefine una clave para cambiarla, o establece enabled: false para desactivar un valor predeterminado. No se necesita una nueva versión.

{
  "servers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/abs/path/to/allow"]
    },
    "sequential-thinking": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
    },
    "chrome-devtools": {
      "command": "npx",
      "args": ["-y", "chrome-devtools-mcp@latest"]
    },
    "playwright": {
      "command": "npx",
      "args": ["-y", "@playwright/mcp@latest"],
      "tools": { "deny": ["browser_close"] }
    }
  }
}

Consulta qualien-mcp.config.example.json para ver la forma completa (command, args, env, enabled, tools.allow / tools.deny).

Catálogo integrado

qualien-mcp incluye un catálogo curado de 21 servidores conocidos (cada uno verificado contra npm), por lo que puedes habilitar uno por clave solo con tus secretos, sin necesidad de recordar paquetes o comandos:

{
  "servers": {
    "chrome-devtools": { "enabled": true },
    "postgres":  { "enabled": true, "env": { "DATABASE_URI": "postgres://…" } },
    "slack":     { "enabled": true, "env": { "SLACK_MCP_XOXP_TOKEN": "xoxp-…" } }
  }
}

Ejecuta npx qualien-mcp catalog para listarlos todos con lo que cada uno necesita. Catálogo actual:

ClaveQué haceNecesita
playwright (predeterminado)Automatización de navegador, DOM, capturas de pantalla—
filesystem (predeterminado)Leer/editar archivos de proyectoun directorio permitido (por defecto, el directorio de trabajo)
githubPRs, issues, revisión de códigologin github (ver abajo)
sequential-thinkingRazonamiento estructurado / depuración—
memoryGrafo de conocimiento persistente—
chrome-devtoolsRed, consola, rendimiento, almacenamiento—
postgresSQL / validar datos de backendDATABASE_URI
mysqlSQL / validar datos de backendvariables de entorno de MySQL
slackLeer/publicar en SlackSLACK_MCP_XOXP_TOKEN
dockerGestionar contenedoresdemonio de Docker
kubernetesInspeccionar/operar un clústerkubeconfig
openapiManejar cualquier API REST desde su especificaciónAPI_BASE_URL, OPENAPI_SPEC_PATH
jiraLeer/actualizar issues de Jiratoken de API de Atlassian en variable de entorno
figmaLeer diseños de FigmaFIGMA_API_KEY
confluencePlanes de prueba, notas de versión, documentación vivatoken de API de Atlassian en variable de entorno
azure-devopsElementos de trabajo, repos, pipelines, planes de pruebatu organización de ADO como argumento + inicio de sesión
seleniumManejar un navegador mediante Selenium WebDriverun navegador + controlador en PATH
webdriverioAutomatización de navegador y móvil nativo— (credenciales de nube opcionales)
browserstackNube real de navegador/dispositivo; leer ejecuciones de pruebaBROWSERSTACK_USERNAME, BROWSERSTACK_ACCESS_KEY
ms-365Excel, Word, Outlook, Teams, SharePointAZURE_CLIENT_ID, AZURE_TENANT_ID
sentryErrores reales visibles por el usuario → nuevas pruebasun token de autenticación de Sentry

use monta un servidor del catálogo bajo una clave diferente (por ejemplo, dos bases de datos): { "db-prod": { "use": "postgres", "enabled": true, "env": {…} } }. Cualquier cosa que no esté en el catálogo la defines por completo (command/args o type/url).

Servidores remotos y OAuth (por ejemplo, GitHub)

Los servidores descendentes pueden ser remotos (HTTP Streamable) además de locales. Un servidor remoto es { "type": "http", "url": "…" }, y si necesita OAuth, cada usuario inicia sesión con su propia cuenta: los tokens se almacenan por usuario en ~/.qualien-mcp/credentials.json (0600), en la máquina de ese usuario, y nunca se agrupan, comparten ni envían a ningún lugar por qualien-mcp.

El MCP alojado de GitHub es el caso de referencia, y no necesita configuración más allá de un comando:

  1. Actívalo en qualien-mcp.config.json:
    { "servers": { "github": { "enabled": true } } }
    
  2. Autoriza una vez:
    npx qualien-mcp login github
    

login imprime un código corto y una URL; lo apruebas en github.com y listo. No hay una aplicación OAuth que registrar ni un secreto de cliente en ningún lugar.

¿Por qué el flujo de dispositivo?

GitHub requiere un client_secret para intercambiar un código de autorización: PKCE no elimina eso, porque GitHub no distingue entre clientes públicos y confidenciales. qualien-mcp se distribuye en npm, por lo que un secreto en el paquete sería un secreto publicado. El flujo de dispositivo es la única concesión que GitHub permite sin un secreto, y es la concesión que GitHub recomienda para CLI. Por lo tanto, qualien-mcp solo incluye un id de cliente público: un identificador, no una credencial, y los tokens de cada usuario se acuñan en su propia máquina y permanecen allí.

Para usar tu propia aplicación OAuth de GitHub en lugar de la incluida, establece clientId (y habilita el flujo de dispositivo en ella en Configuración → Configuración de desarrollador → Aplicaciones OAuth):

{
  "servers": {
    "github": { "clientId": "<your client id>", "enabled": true }
  }
}

Si un servidor remoto aún no ha iniciado sesión, la puerta de enlace lo omite con una pista (run: npx qualien-mcp login github) y sigue sirviendo todo lo demás: nunca bloquea el inicio. Los servidores que admiten registro dinámico de clientes no necesitan clientId en absoluto.

Seguro por defecto

qualien-mcp aplica salvaguardas de forma centralizada, antes de reenviar una llamada, por lo que se mantienen sin importar lo que permita el servidor descendente, y las herramientas compuestas tampoco pueden omitirlas:

  • Las bases de datos son de solo lectura: las llamadas postgres/mysql que contienen SQL de escritura/DDL (INSERT/UPDATE/DELETE/DROP/…) se rechazan. Opta por participar con { "postgres": { "readOnly": false } }.
  • Raíces del sistema de archivos: { "filesystem": { "roots": ["./src", "./tests"] } } rechaza cualquier llamada cuyo argumento de ruta escape de esos directorios.
  • Herramientas de infraestructura destructivas bloqueadas: las herramientas docker/kubernetes cuyo nombre parezca destructivo (delete/remove/prune/kill/…) se rechazan a menos que { "allowDestructive": true }.
  • Además, curación por servidor de tools.deny / tools.allow.

Alcance honesto: estas detienen a un LLM de causar daño accidentalmente. La verificación de SQL se basa en palabras clave (heurística), no en un analizador sintáctico: no es un sandbox adversarial. El aislamiento real requiere los permisos propios del servidor descendente o un contenedor.

Herramientas QE compuestas

Más allá del paso directo, qualien-mcp incluye herramientas que implementa él mismo (espacio de nombres qe__) que orquestan varios servidores descendentes en una sola llamada: el beneficio QE de una puerta de enlace.

qe__verify_api_vs_db: consistencia integral API↔DB en una sola llamada. Dale dos subllamadas (herramientas con espacio de nombres que puedes descubrir mediante tools/list); ejecuta ambas y compara las cargas útiles:

{
  "api": { "tool": "openapi__getUser", "arguments": { "id": 1 } },
  "db":  { "tool": "postgres__query", "arguments": { "sql": "select id, name from users where id = 1" } },
  "match": "subset"        // every field the DB returns must match the API (default)
}
// → { "match": false, "differences": [ { "path": "name", "api": "Ann", "db": "Bob" } ], … }

Las herramientas compuestas aparecen solo cuando sus servidores descendentes requeridos están conectados (qe__verify_api_vs_db necesita un servidor database). Habrá más (reproducir desde Jira, objeto de página desde URL, clasificación de pruebas inestables).

Cómo funciona

En un solo proceso, qualien-mcp es a la vez un servidor MCP para tu asistente y un cliente MCP para cada servidor descendente:

assistant ⇄ qualien-mcp ⇄ playwright-mcp
                         ⇄ filesystem-mcp
                         ⇄ …
  • tools/list se distribuye a cada servidor descendente, filtra según tus reglas de curación y asigna espacio de nombres a cada uno como <server>__<tool>.
  • tools/call enruta por ese prefijo al servidor propietario y pasa la respuesta directamente.
  • Los recursos y avisos se agregan de la misma manera cuando un servidor descendente los proporciona.
  • Un servidor descendente que no se inicia se registra y se omite: la puerta de enlace sigue sirviendo el resto.
  • Los registros van a stderr (stdout es el protocolo); tu host los muestra en sus registros MCP.

Hoja de ruta

  • ✅ Playwright + Filesystem, espacios de nombres, curación, registro, ciclo de vida limpio
  • ✅ Catálogo de 21 servidores configurable, servidores remotos/OAuth (GitHub mediante flujo de dispositivo), salvaguardas seguras por defecto, qe__verify_api_vs_db
  • Siguiente: más herramientas QE compuestas (reproducir desde Jira, objeto de página desde URL, clasificación de pruebas inestables)

Comentarios

¿Encontraste un error, quieres que se agregue un servidor al catálogo o tienes una idea? Envía un correo a contact@qualien.ai o abre un issue. qualien-mcp es parte de qualien.ai, que también crea agentes de IA que prueban aplicaciones web (Olympus) y aplicaciones nativas de Android (Pulse) desde inglés sencillo.

Licencia

MIT