Skip to main content
Glama

mcp-beaker

PyPI Version PyPI Downloads CI License Python

Servidor MCP para la automatización de laboratorio Beaker -- aprovisionamiento de sistemas, gestión de trabajos, descubrimiento de distribuciones y diagnóstico de fallos.

Funciona con cualquier instancia de servidor Beaker. Construido sobre FastMCP v3 y diseñado para su uso con asistentes de codificación con IA (Cursor, Claude Desktop, etc.).

Características

  • 27 herramientas que cubren el ciclo de vida completo de Beaker: sistemas, trabajos, distribuciones, tareas

  • Compatible con Beaker Py3: funciona con las API REST de Beaker tanto heredadas como modernizadas

  • Autenticación flexible: Kerberos (GSSAPI/SPNEGO nativo o respaldo de CLI bkr) y contraseña (XML-RPC)

  • Validación de XML de trabajos: rellena automáticamente campos faltantes, infiere familias de distribuciones

  • Diagnóstico de fallos: análisis profundo con reintento automático en fallos corregibles

  • 10 temas de documentación expuestos como recursos MCP

  • 2 indicaciones de flujo de trabajo para tareas comunes (reservar sistema, diagnosticar trabajo)

  • Genérico: funciona con cualquier URL de Beaker, configuración SSL/CA ajustable

Related MCP server: zuul-mcp

Instalación

Contenedor (recomendado)

La imagen del contenedor incluye todo -- no hay dependencias del host más allá de podman (o docker). La autenticación Kerberos ocurre dentro del contenedor mediante las variables de entorno KRB5_PRINCIPAL y KRB5_PASSWORD.

# Pull the pre-built image from GHCR
podman pull ghcr.io/faizbawa/mcp-beaker:latest

# Or build locally from the repo
podman build -t mcp-beaker:latest -f Containerfile .

Pip / uvx

# Using uv (recommended)
pip install uv
uvx mcp-beaker

# Using pip
pip install mcp-beaker
mcp-beaker

# With native Kerberos support (no bkr CLI needed -- requires krb5-devel on host)
pip install mcp-beaker[kerberos]

# Local development
uv run --directory /path/to/mcp-beaker mcp-beaker

Configuración

Cursor / VS Code

Añade a tu .cursor/mcp.json (o .vscode/mcp.json):

Contenedor (recomendado)

{
  "mcpServers": {
    "beaker": {
      "command": "podman",
      "args": [
        "run", "--rm", "-i", "--network=host",
        "-e", "BEAKER_URL=https://beaker.example.com",
        "-e", "KRB5_PRINCIPAL=your-user@YOUR.REALM",
        "-e", "KRB5_PASSWORD=your-kerberos-password",
        "ghcr.io/faizbawa/mcp-beaker:latest"
      ]
    }
  }
}

El contenedor ejecuta kinit internamente -- sin montajes de volúmenes, sin dependencias del host. Usa --network=host para que el contenedor pueda alcanzar tu KDC de Kerberos y el servidor Beaker (especialmente a través de VPN).

Contenedor con caché de tickets montada (sin contraseña en la configuración)

En lugar de almacenar tu contraseña de Kerberos en mcp.json, puedes montar una caché de tickets preexistente desde el host:

Paso 1 -- Crear un ticket basado en archivo en el host:

kinit -c FILE:/tmp/krb5cc_beaker your-user@YOUR.REALM

Vuelve a ejecutar esto cuando el ticket expire (normalmente cada 10 horas).

Paso 2 -- Montar el ticket en el contenedor:

{
  "mcpServers": {
    "beaker": {
      "command": "podman",
      "args": [
        "run", "--rm", "-i", "--network=host",
        "-v", "/tmp/krb5cc_beaker:/tmp/krb5cc_0:ro,Z",
        "-e", "BEAKER_URL=https://beaker.example.com",
        "ghcr.io/faizbawa/mcp-beaker:latest"
      ]
    }
  }
}

El contenedor detecta el ticket válido y omite kinit por completo. No se necesitan KRB5_PRINCIPAL ni KRB5_PASSWORD. Las banderas de montaje :ro,Z aseguran acceso de solo lectura con el etiquetado SELinux adecuado.

Nota: El host normalmente usa KCM (D-Bus) para el almacenamiento de credenciales, al que los contenedores no pueden acceder. Por eso necesitas kinit -c FILE:... para crear una caché basada en archivos que pueda montarse por bind.

Certificados SSL: Muchos servidores Beaker usan certificados de CA internos que no están en el almacén de confianza predeterminado del contenedor. Tienes tres opciones:

  1. Deshabilitar la verificación (lo más simple, adecuado en una red corporativa confiable):

"-e", "BEAKER_SSL_VERIFY=false",
  1. Pasar el certificado CA en línea mediante BEAKER_CA_CERT_DATA (sin necesidad de montaje de volumen):

"-e", "BEAKER_CA_CERT_DATA=-----BEGIN CERTIFICATE-----\nMIID...your-ca-cert...\n-----END CERTIFICATE-----",
  1. Montar un paquete de CA (archivo único):

"-v", "/path/to/ca-bundle.crt:/tmp/ca-bundle.crt:ro",
"-e", "BEAKER_CA_CERT=/tmp/ca-bundle.crt",

Pip / uvx

{
  "mcpServers": {
    "beaker": {
      "command": "uvx",
      "args": ["mcp-beaker[kerberos]"],
      "env": {
        "BEAKER_URL": "https://beaker.example.com",
        "BEAKER_AUTH_METHOD": "kerberos",
        "BEAKER_KERBEROS_BACKEND": "http"
      }
    }
  }
}

Modo HTTP transmisible

uvx mcp-beaker --transport streamable-http --port 8000
{
  "mcpServers": {
    "beaker": {
      "url": "http://localhost:8000/mcp",
      "type": "streamableHttp"
    }
  }
}

Variables de entorno

Variable

¿Requerida?

Predeterminado

Descripción

BEAKER_URL

--

URL base de tu servidor Beaker

BEAKER_AUTH_METHOD

No

kerberos

kerberos o password

BEAKER_KERBEROS_BACKEND

No

http

http (SPNEGO nativo) o bkr (CLI bkr)

BEAKER_USERNAME

Para autenticación por contraseña

--

Nombre de usuario de Beaker

BEAKER_PASSWORD

Para autenticación por contraseña

--

Contraseña de Beaker

BEAKER_OWNER

No

$USER

Propietario predeterminado para consultas de trabajos

BEAKER_SSL_VERIFY

No

true

Verificar certificados SSL

BEAKER_CA_CERT

No

--

Ruta al paquete de certificados CA

KRB5_PRINCIPAL

Solo contenedor

--

Principal de Kerberos para kinit dentro del contenedor

KRB5_PASSWORD

Solo contenedor

--

Contraseña de Kerberos para kinit dentro del contenedor

BEAKER_CA_CERT_DATA

Solo contenedor

--

Certificado CA codificado en PEM escrito a un archivo al inicio

Opciones de CLI

mcp-beaker [OPTIONS]

Options:
  --transport [stdio|sse|streamable-http]  Transport type (default: stdio)
  --port INTEGER                           Port for HTTP transports (default: 8000)
  --host TEXT                              Host for HTTP transports (default: 0.0.0.0)
  --path TEXT                              Path for streamable-http (default: /mcp)
  --beaker-url TEXT                        Beaker server URL
  --ssl-verify / --no-ssl-verify           Verify SSL certs (default: verify)
  --ca-cert TEXT                           CA certificate bundle path
  --auth-method [kerberos|password]        Authentication method
  --kerberos-backend [http|bkr]            Kerberos backend (default: http)
  --read-only                              Disable all write tools
  --enabled-tools TEXT                     Comma-separated tools to enable
  -v, --verbose                            Increase verbosity (-v info, -vv debug)
  --version                                Show version
  --help                                   Show this message

Herramientas

Herramientas de lectura (15)

Herramienta

Descripción

list_systems

Listar sistemas por disponibilidad (todos/disponibles/libres)

search_systems

Buscar sistemas por CPU, arquitectura, memoria, pool y otros atributos de hardware

get_system_details

Especificaciones de hardware, información de CPU, membresía de pool, propiedad, estado de un sistema

get_system_status

Condición actual, reserva y estado de préstamo de un sistema

get_system_history

Historial de actividad de un sistema

get_system_arches

Familias de SO y arquitecturas soportadas

list_jobs

Filtrar trabajos por propietario, estado, pizarra

get_job_status

Estado del trabajo con diagnóstico de fallos

get_job_results_xml

Exportar resultados del trabajo como XML

get_job_logs

Listar archivos de registro de un trabajo/receta/tarea

list_distro_trees

Buscar distribuciones por nombre, familia, arquitectura, etiquetas

list_os_families

Listar todas las familias de SO conocidas

whoami

Mostrar información del usuario autenticado

list_lab_controllers

Listar todos los controladores de laboratorio

search_tasks

Buscar en la biblioteca de tareas

Herramientas de escritura (12)

Herramienta

Descripción

submit_job

Enviar un trabajo desde XML (con validación y autocompletado)

clone_job

Clonar y reenviar un trabajo existente

cancel_job

Cancelar un trabajo en ejecución/en cola

watch_job

Sondeo hasta completar con análisis de fallos y reintento automático

reserve_system

Reservar manualmente un sistema

release_system

Liberar un sistema reservado manualmente

loan_system

Otorgar un préstamo de un sistema a un usuario

return_loan

Devolver un préstamo de sistema actual

power_system

Encender/apagar/reiniciar un sistema

provision_system

Aprovisionar un sistema reservado con una distribución

extend_watchdog

Extender el temporizador de vigilancia de una tarea en ejecución

set_job_response

Ack/nak (renunciar) a un resultado de conjunto de recetas

Autenticación

Kerberos (recomendado)

Asegúrate de tener un ticket válido:

kinit your-username@YOUR.REALM

El servidor soporta dos backends de Kerberos, controlados por BEAKER_KERBEROS_BACKEND:

Valor

Backend

Instalación

http (predeterminado)

GSSAPI/SPNEGO nativo -- ligero, instalable con pip

pip install mcp-beaker[kerberos]

bkr

Subprocesos de CLI bkr -- tradicional, requiere RPM

yum install beaker-client

Ambos backends usan el mismo ticket de Kerberos de kinit.

Contraseña

Establece BEAKER_AUTH_METHOD=password junto con BEAKER_USERNAME y BEAKER_PASSWORD. El servidor se autentica mediante el método auth.login_password() de XML-RPC. Nota: esto requiere que LDAP del lado del servidor esté habilitado.

Arquitectura

src/mcp_beaker/
  __init__.py           # Click CLI entry point
  config.py             # BeakerConfig dataclass
  exceptions.py         # Custom exceptions
  client.py             # BeakerClient (XML-RPC + REST)
  models/               # Pydantic response models
  servers/
    __init__.py         # FastMCP server, lifespan, DI helper
    systems.py          # System tools (6 read + 6 write)
    jobs.py             # Job tools (4 read + 6 write)
    distros.py          # Distro tools (2 read)
    tasks.py            # Task tools (1 read)
    general.py          # General tools (2 read)
    prompts.py          # Workflow prompt templates
    resources.py        # Beaker documentation resources
  utils/
    xml_validation.py   # Job XML validation/auto-fill
    diagnosis.py        # Failure analysis engine
    formatting.py       # Human-readable formatters
    bkr_cli.py          # bkr CLI helpers
    parsing.py          # ID parsing utilities

Desarrollo

cd mcp-beaker
uv sync --dev
uv run pytest
uv run ruff check src/

Licencia

MIT

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
19Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Zuul CI/CD with 25 tools for builds, pipelines, queue management (enqueue/dequeue/promote), infrastructure visibility, and autohold management. Supports stdio, HTTP, and SSE transports.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for infrastructure discovery and remote management, enabling SSH command execution, file transfer, log tailing, and machine/service inventory with a companion web dashboard.
    1

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

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/faizbawa/mcp-beaker'

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