mcp-beaker
mcp-beaker
MCP-Server für die Beaker-Laborautomatisierung – Systembereitstellung, Jobverwaltung, Distro-Erkennung und Fehlerdiagnose.
Funktioniert mit jeder Beaker-Serverinstanz. Basierend auf FastMCP v3 und entwickelt für den Einsatz mit KI-Coding-Assistenten (Cursor, Claude Desktop usw.).
Funktionen
27 Tools für den gesamten Beaker-Lebenszyklus: Systeme, Jobs, Distros, Aufgaben
Beaker Py3-kompatibel: funktioniert mit sowohl älteren als auch modernisierten Beaker-REST-APIs
Flexible Authentifizierung: Kerberos (natives GSSAPI/SPNEGO oder
bkr-CLI-Fallback) und Passwort (XML-RPC)Job-XML-Validierung: füllt fehlende Felder automatisch aus, leitet Distro-Familien ab
Fehlerdiagnose: tiefgehende Analyse mit automatischem Wiederholungsversuch bei korrigierbaren Fehlern
10 Dokumentationsthemen als MCP-Ressourcen verfügbar
2 Workflow-Prompts für häufige Aufgaben (System reservieren, Job diagnostizieren)
Generisch: funktioniert mit jeder Beaker-URL, konfigurierbare SSL/CA-Einstellungen
Related MCP server: zuul-mcp
Installation
Container (empfohlen)
Das Container-Image bündelt alles – keine Host-Abhängigkeiten außer
podman (oder docker). Die Kerberos-Authentifizierung erfolgt innerhalb des Containers
über die Umgebungsvariablen KRB5_PRINCIPAL und 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-beakerKonfiguration
Cursor / VS Code
Fügen Sie zu Ihrer .cursor/mcp.json (oder .vscode/mcp.json) hinzu:
Container (empfohlen)
{
"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"
]
}
}
}Der Container führt kinit intern aus – keine Volume-Mounts, keine Host-
Abhängigkeiten. Verwenden Sie --network=host, damit der Container Ihr
Kerberos-KDC und den Beaker-Server erreichen kann (insbesondere über VPN).
Container mit gemountetem Ticket-Cache (kein Passwort in der Konfiguration)
Anstatt Ihr Kerberos-Passwort in mcp.json zu speichern, können Sie
einen bereits vorhandenen Ticket-Cache vom Host mounten:
Schritt 1 – Erstellen Sie ein dateibasiertes Ticket auf dem Host:
kinit -c FILE:/tmp/krb5cc_beaker your-user@YOUR.REALMFühren Sie dies erneut aus, wenn das Ticket abläuft (normalerweise alle 10 Stunden).
Schritt 2 – Mounten Sie das Ticket in den Container:
{
"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"
]
}
}
}Der Container erkennt das gültige Ticket und überspringt kinit vollständig.
Keine KRB5_PRINCIPAL- oder KRB5_PASSWORD-Angabe erforderlich. Die :ro,Z-Mount-Flags
gewährleisten schreibgeschützten Zugriff mit korrekter SELinux-Kennzeichnung.
Hinweis: Der Host verwendet normalerweise KCM (D-Bus) für die Speicherung von Anmeldeinformationen, auf die Container keinen Zugriff haben. Deshalb benötigen Sie
kinit -c FILE:..., um einen dateibasierten Cache zu erstellen, der bind-gemountet werden kann.
SSL-Zertifikate: Viele Beaker-Server verwenden interne CA-Zertifikate, die nicht im Standard-Vertrauensspeicher des Containers enthalten sind. Sie haben drei Optionen:
Verifizierung deaktivieren (am einfachsten, in einem vertrauenswürdigen Unternehmensnetzwerk in Ordnung):
"-e", "BEAKER_SSL_VERIFY=false",CA-Zertifikat inline übergeben über
BEAKER_CA_CERT_DATA(kein Volume-Mount erforderlich):
"-e", "BEAKER_CA_CERT_DATA=-----BEGIN CERTIFICATE-----\nMIID...your-ca-cert...\n-----END CERTIFICATE-----",CA-Bundle mounten (eine einzelne Datei):
"-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"
}
}
}
}Streamable-HTTP-Modus
uvx mcp-beaker --transport streamable-http --port 8000{
"mcpServers": {
"beaker": {
"url": "http://localhost:8000/mcp",
"type": "streamableHttp"
}
}
}Umgebungsvariablen
Variable | Erforderlich | Standard | Beschreibung |
| Ja | -- | Basis-URL Ihres Beaker-Servers |
| Nein |
|
|
| Nein |
|
|
| Für Passwort-Auth | -- | Beaker-Benutzername |
| Für Passwort-Auth | -- | Beaker-Passwort |
| Nein |
| Standard-Eigentümer für Job-Abfragen |
| Nein |
| SSL-Zertifikate verifizieren |
| Nein | -- | Pfad zum CA-Zertifikatsbundle |
| Nur Container | -- | Kerberos-Prinzipal für |
| Nur Container | -- | Kerberos-Passwort für |
| Nur Container | -- | PEM-kodiertes CA-Zertifikat, das beim Start in eine Datei geschrieben wird |
CLI-Optionen
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 messageTools
Lesetools (15)
Tool | Beschreibung |
| Systeme nach Verfügbarkeit auflisten (alle/verfügbar/frei) |
| Systeme nach CPU, Architektur, Speicher, Pool und anderen Hardware-Attributen suchen |
| Hardwarespezifikationen, CPU-Info, Pool-Mitgliedschaft, Eigentümer, Status für ein System |
| Aktueller Zustand, Reservierung und Leihstatus für ein System |
| Aktivitätsverlauf für ein System |
| Unterstützte OS-Familien und Architekturen |
| Jobs nach Eigentümer, Status, Whiteboard filtern |
| Jobstatus mit Fehlerdiagnose |
| Job-Ergebnisse als XML exportieren |
| Logdateien für einen Job/Rezept/Aufgabe auflisten |
| Distros nach Name, Familie, Arch, Tags durchsuchen |
| Alle bekannten OS-Familien auflisten |
| Authentifizierte Benutzerinformationen anzeigen |
| Alle Lab-Controller auflisten |
| Die Aufgabenbibliothek durchsuchen |
Schreibwerkzeuge (12)
Tool | Beschreibung |
| Job aus XML einreichen (mit Validierung und automatischem Ausfüllen) |
| Vorhandenen Job klonen und erneut einreichen |
| Laufenden/wartenden Job abbrechen |
| Bis zum Abschluss pollen, mit Fehleranalyse und automatischem Wiederholungsversuch |
| System manuell reservieren |
| Manuell reserviertes System freigeben |
| Einem Benutzer ein System leihen |
| Aktuelle Systemleihe zurückgeben |
| System ein-/ausschalten oder neu starten |
| Reserviertes System mit einer Distro bereitstellen |
| Watchdog-Timer einer laufenden Aufgabe verlängern |
| Ack/nak (verwerfen) eines Rezeptsatzes festlegen |
Authentifizierung
Kerberos (empfohlen)
Stellen Sie sicher, dass Sie ein gültiges Ticket haben:
kinit your-username@YOUR.REALMDer Server unterstützt zwei Kerberos-Backends, gesteuert über BEAKER_KERBEROS_BACKEND:
Wert | Backend | Installation |
| Natives GSSAPI/SPNEGO – leichtgewichtig, per pip installierbar |
|
|
|
|
Beide Backends verwenden dasselbe Kerberos-Ticket von kinit.
Passwort
Setzen Sie BEAKER_AUTH_METHOD=password zusammen mit BEAKER_USERNAME und BEAKER_PASSWORD. Der Server authentifiziert sich über die XML-RPC-Methode auth.login_password(). Hinweis: Dies erfordert, dass serverseitig LDAP aktiviert ist.
Architektur
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 utilitiesEntwicklung
cd mcp-beaker
uv sync --dev
uv run pytest
uv run ruff check src/Lizenz
MIT
Maintenance
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
- FlicenseCqualityDmaintenanceMCP server that enables deployment and management of MCP servers through a simple configuration-based interface.1
- AlicenseNot gradedqualityBmaintenanceMCP 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
- FlicenseNot gradedqualityDmaintenanceA highly configurable, deployment-ready MCP server with modular architecture for dynamic tool loading and external package support.1
- FlicenseNot gradedqualityCmaintenanceMCP 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
Related MCP Connectors
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
MCP Server for JFrog, providing tools for development and artifact management.
A MCP server built for developers enabling Git based project management with project and personal…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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