Bakaláři
Accede a datos del sistema escolar Bakaláři, incluyendo horarios, ausencias y calificaciones, a través de una API estandarizada.
Documentación
Servidor MCP de Bakaláři
Servidor MCP (Model Context Protocol) para la API de Bakaláři v3. Permite el acceso al sistema escolar Bakaláři a través de una interfaz MCP estandarizada.
Advertencia
!! Para usar este proyecto se necesita un poco de conocimiento de docker/python y saber cómo funciona la conexión MCP al cliente LLM correspondiente !!
Funciones
- rozvrh - Obtener el horario para una fecha específica o el horario actual
- staly_rozvrh - Obtener el horario fijo (horario base sin cambios)
- absence - Obtener información sobre ausencias
- znamky - Obtener información sobre calificaciones
Instalación y ejecución
Métodos de transporte disponibles
El servidor admite tres métodos de transporte:
- CLI (stdio) - Comunicación MCP directa a través de stdin/stdout
- Proxy (HTTP) - Servidor HTTP mediante mcp-proxy en el puerto 8805
- HTTP Streaming - Transporte nativo de HTTP streaming en el puerto 8806
Ejecución como servidor HTTP Streaming
Para ejecutar con transporte nativo de HTTP streaming en el puerto 8806:
# Build HTTP streaming image
./build-http.sh
# nebo manuálně
docker build -f Dockerfile.http -t mirecekd/bakalari-mcp:http .
# Spuštění
docker run -p 8806:8806 mirecekd/bakalari-mcp:http \
--user YOUR_USERNAME \
--password YOUR_PASSWORD \
--url https://your-school.bakalari.cz
El servidor estará disponible como MCP de HTTP streaming en http://localhost:8806.
Ejecución como servidor HTTP mediante MCP proxy
Para ejecutar como servidor HTTP en el puerto 8805:
# Build MCP proxy image
./build-proxy.sh
# nebo manuálně
docker build -f Dockerfile.proxy -t mirecekd/bakalari-mcp:proxy .
# Spuštění s environment variables
docker run -e BAKALARI_USER=your_user -e BAKALARI_PASSWORD=your_pass -e BAKALARI_URL=your_url -p 8805:8805 mirecekd/bakalari-mcp:proxy
El servidor estará disponible como MCP SSE en http://localhost:8805.
Ejecución con Docker (modo stdio)
Inicio rápido
# Build CLI Docker image
./build-cli.sh
# nebo manuálně
docker build -f Dockerfile.cli -t mirecekd/bakalari-mcp:cli .
# Spuštění přes Docker
docker run --rm -i mirecekd/bakalari-mcp:cli \
--user USERNAME \
--password PASSWORD \
--url https://your-school.bakalari.cz
Ejecución con docker-compose
# Zkopíruj a upravuješ konfiguraci
cp .env.example .env
# Edituj .env s tvými údaji
# Spuštění
docker-compose up bakalari-mcp-server
# Nebo pro development (s live reloading)
docker-compose --profile dev up bakalari-mcp-dev
Ejecución directa con un solo comando
# Pro MCP konfiguraci - nahraď uvx příkaz tímto:
docker run --rm -i ghcr.io/mirecekd/bakalari-mcp:latest-cli \
--user YOUR_USER \
--password YOUR_PASSWORD \
--url https://skola.bakalari.cz
Ejecución con uvx (alternativa)
Si ya tienes el paquete compilado:
# Z místního wheel souboru
uvx --from ./dist/bakalari_mcp_server-1.0.0-py3-none-any.whl bakalari-mcp-server --user USERNAME --password PASSWORD --url https://your-school.bakalari.cz
# Nebo z aktuálního adresáře během vývoje
uvx --from . bakalari-mcp-server --user USERNAME --password PASSWORD --url https://your-school.bakalari.cz
Cómo funciona
Compilar el paquete
Para crear un paquete de distribución:
# Instalace build nástrojů
pip install build
# Vytvoření balíčku
python3 -m build
# Výsledné soubory najdeš v dist/
Ejecución desde el código fuente
# Instalace závislostí
pip install fastmcp aiohttp
# Spuštění ze zdrojového kódu
python3 src/bakalari_mcp_server/server.py --user USERNAME --password PASSWORD --url https://your-school.bakalari.cz
Parámetros
--user(obligatorio): Nombre de usuario para Bakaláři--password(obligatorio): Contraseña para Bakaláři--url(opcional): URL del servidor Bakaláři (predeterminado: https://skola.bakalari.cz)
Herramientas disponibles
rozvrh(datum)
Obtiene el horario para la fecha especificada con información decodificada.
Parámetros:
datum(opcional): Fecha en formato YYYY-MM-DD. Si no se especifica, se usa la fecha de hoy.
Ejemplo de respuesta:
{
"datum": "2025-05-15",
"den_tydne": 5,
"hodiny": [
{
"hodina": "1",
"cas": "8:00 - 8:45",
"predmet": "Matematika",
"zkratka_predmetu": "M",
"ucitel": "Nov",
"mistnost": "123",
"tema": "Kvadratické rovnice",
"zmena": {
"typ": "Modified",
"popis": "Změna učitele"
}
}
],
"pocet_hodin": 6
}
staly_rozvrh()
Obtiene el horario fijo (horario base sin cambios).
Ejemplo de respuesta:
{
"typ": "staly_rozvrh",
"dny": [
{
"den_tydne": 1,
"den_cislo": 1,
"hodiny": [
{
"hodina": "1",
"cas": "8:00 - 8:45",
"predmet": "Matematika",
"zkratka_predmetu": "M",
"ucitel": "Nov",
"mistnost": "123",
"skupina": null
}
]
}
]
}
Configuración en el cliente MCP (Claude Desktop / n8n)
Para modo stdio (método original)
Para usar con Docker en lugar de uvx, actualiza la configuración de MCP:
{
"mcpServers": {
"bakalari-mcp-server": {
"autoApprove": [
"rozvrh",
"staly_rozvrh"
],
"disabled": false,
"timeout": 60,
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/mirecekd/bakalari-mcp:latest-cli",
"--user",
"YOUR_USER",
"--password",
"YOUR_PASSWORD",
"--url",
"https://skola.bakalari.cz"
],
"transportType": "stdio"
}
}
}
Para modo HTTP (nuevo método con MCP proxy)
Para usar como servidor HTTP a través de MCP proxy:
{
"mcpServers": {
"bakalari-mcp-server": {
"autoApprove": [
"rozvrh",
"staly_rozvrh"
],
"disabled": false,
"timeout": 60,
"url": "http://localhost:8805",
"transportType": "http"
}
}
}
Para modo HTTP Streaming (el más reciente)
Para usar con transporte nativo de HTTP streaming:
{
"mcpServers": {
"bakalari-mcp-server": {
"autoApprove": [
"rozvrh",
"staly_rozvrh"
],
"disabled": false,
"timeout": 60,
"url": "http://localhost:8806",
"transportType": "http"
}
}
}
Registro de contenedores de GitHub (GHCR)
Las imágenes Docker precompiladas están disponibles en el Registro de contenedores de GitHub:
Imágenes disponibles:
- CLI (stdio):
ghcr.io/mirecekd/bakalari-mcp:latest-cli - Proxy (HTTP):
ghcr.io/mirecekd/bakalari-mcp:latest-proxy - HTTP Streaming:
ghcr.io/mirecekd/bakalari-mcp:latest-http
Uso de imágenes GHCR:
# CLI version
docker run --rm -i ghcr.io/mirecekd/bakalari-mcp:latest-cli \
--user USERNAME --password PASSWORD --url https://school.bakalari.cz
# Proxy version (port 8805)
docker run -p 8805:8805 \
-e BAKALARI_USER=USERNAME \
-e BAKALARI_PASSWORD=PASSWORD \
-e BAKALARI_URL=https://school.bakalari.cz \
ghcr.io/mirecekd/bakalari-mcp:latest-proxy
# HTTP Streaming version (port 8806)
docker run -p 8806:8806 ghcr.io/mirecekd/bakalari-mcp:latest-http \
--user USERNAME --password PASSWORD --url https://school.bakalari.cz
Soporte multi-arquitectura:
Todas las imágenes admiten:
- linux/amd64 (Intel/AMD x64)
- linux/arm64 (Apple Silicon, ARM64)
Procedimientos para la configuración de MCP
-
Compila la imagen Docker:
cd bakalari-mcp-server # Pro stdio mode: ./build-cli.sh # Pro HTTP mode: ./build-proxy.sh # Nebo oba najednou: ./build-all.sh -
Ejecuta el contenedor (para modo HTTP):
docker run -d -e BAKALARI_USER=your_user -e BAKALARI_PASSWORD=your_pass -e BAKALARI_URL=your_url -p 8805:8805 mirecekd/bakalari-mcp:proxy -
Actualiza la configuración de MCP de la aplicación en
claude_desktop_config.json,anythingllm_mcp_servers.json,cline_mcp_settings.json -
Reinicia la aplicación para cargar la nueva configuración
Autenticación
El servidor gestiona automáticamente la autenticación:
- En el primer uso, inicia sesión con nombre de usuario/contraseña
- Obtiene access_token y refresh_token
- Cuando expira el access_token, lo renueva automáticamente con el refresh_token
- Si también expira el refresh_token, vuelve a iniciar sesión con nombre de usuario/contraseña
Estados de error
Todas las herramientas devuelven mensajes de error en caso de problemas:
{
"error": "Popis chyby"
}
Tipos de error posibles:
- Error de autenticación: Credenciales no válidas o problemas con el token
- Error de API: Problema de comunicación con la API de Bakaláři
- Formato de fecha no válido: Fecha especificada incorrectamente
Ejemplo de uso en el cliente MCP
# Získání dnešního rozvrhu
result = await mcp_client.call_tool("rozvrh")
# Získání rozvrhu pro konkrétní datum
result = await mcp_client.call_tool("rozvrh", {"datum": "2024-03-15"})
# Získání stálého rozvrhu
result = await mcp_client.call_tool("staly_rozvrh")
Funciones avanzadas
Decodificación del horario
El servidor decodifica inteligentemente el horario mediante:
- Tablas de búsqueda: Traducción de ID a nombres legibles de materias, profesores y aulas
- Inferencia de materias: Reconocimiento automático de la materia a partir del tema de la clase
- Procesamiento de cambios: Detección de clases canceladas, sustituciones y otros cambios
- Validación de datos: Verificación del formato de fecha y validación básica
Soporte de cambios en el horario
El servidor reconoce y procesa correctamente:
- Clases canceladas: Marcadas como ❌ conservando la información original
- Sustituciones: Nuevo profesor con referencia al original
- Clases combinadas: Fusión de varias clases en una
- Cambios de aula: Ubicación actualizada
Detalles técnicos
- Protocolo: MCP a través de stdio o HTTP (con mcp-proxy)
- Framework: FastMCP
- Cliente HTTP: aiohttp (async)
- Versión de Python: 3.8+
- Distribución: código fuente
- Proxy: mcp-proxy para transporte HTTP
Desarrolladores
Para desarrollo local:
# Klonování a setup
git clone <repository-url>
cd bakalari-mcp-server
# Instalace dev závislostí
pip install -e .
# Spuštění pro testování
python3 src/bakalari_mcp_server/server.py --user TEST --password TEST --url https://test.bakalari.cz
Soporte
Si esta herramienta te resulta útil, puedes apoyar el desarrollo:

