Bakaláři
Acesse dados do sistema escolar Bakaláři, incluindo horários, faltas e notas, por meio de uma API padronizada.
Documentação
Servidor MCP Bakaláři
Servidor MCP (Model Context Protocol) para a API Bakaláři v3. Permite acesso ao sistema escolar Bakaláři por meio de uma interface MCP padronizada.
Aviso
!! Para usar este projeto, é necessário ter um pouco de conhecimento com docker/python e saber como funciona a conexão MCP com o cliente LLM correspondente !!
Funcionalidades
- rozvrh - Obter o horário para uma data específica ou o horário atual
- staly_rozvrh - Obter o horário fixo (horário básico sem alterações)
- absence - Obter informações sobre faltas
- znamky - Obter informações sobre notas
Instalação e execução
Métodos de transporte disponíveis
O servidor suporta três métodos de transporte:
- CLI (stdio) - Comunicação MCP direta via stdin/stdout
- Proxy (HTTP) - Servidor HTTP usando mcp-proxy na porta 8805
- HTTP Streaming - Transporte nativo de streaming HTTP na porta 8806
Execução como servidor HTTP Streaming
Para executar com transporte nativo de streaming HTTP na porta 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
O servidor estará disponível como MCP de streaming HTTP em http://localhost:8806.
Execução como servidor HTTP usando proxy MCP
Para executar como servidor HTTP na porta 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
O servidor estará disponível como MCP SSE em http://localhost:8805.
Execução com Docker (modo stdio)
Execução rápida
# 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
Execução com 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
Execução direta com um único 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
Execução com uvx (alternativa)
Se você já tiver o pacote 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
Como funciona
Compilar o pacote
Para criar um pacote de distribuição:
# Instalace build nástrojů
pip install build
# Vytvoření balíčku
python3 -m build
# Výsledné soubory najdeš v dist/
Execução a partir do código-fonte
# 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(obrigatório): Nome de usuário para Bakaláři--password(obrigatório): Senha para Bakaláři--url(opcional, mas recomendado): URL do servidor Bakaláři (padrão: https://skola.bakalari.cz)
Ferramentas disponíveis
rozvrh(datum)
Obtém o horário para a data especificada com informações decodificadas.
Parâmetros:
datum(opcional): Data no formato YYYY-MM-DD. Se não for informada, será usada a data de hoje.
Exemplo de resposta:
{
"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()
Obtém o horário fixo (horário básico sem alterações).
Exemplo de resposta:
{
"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
}
]
}
]
}
Configuração no cliente MCP (Claude Desktop / n8n)
Para o modo stdio (método original)
Para usar com Docker em vez de uvx, atualize a configuração do 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 o modo HTTP (novo método com proxy MCP)
Para usar como servidor HTTP via proxy MCP:
{
"mcpServers": {
"bakalari-mcp-server": {
"autoApprove": [
"rozvrh",
"staly_rozvrh"
],
"disabled": false,
"timeout": 60,
"url": "http://localhost:8805",
"transportType": "http"
}
}
}
Para o modo HTTP Streaming (mais recente)
Para usar com transporte nativo de streaming HTTP:
{
"mcpServers": {
"bakalari-mcp-server": {
"autoApprove": [
"rozvrh",
"staly_rozvrh"
],
"disabled": false,
"timeout": 60,
"url": "http://localhost:8806",
"transportType": "http"
}
}
}
GitHub Container Registry (GHCR)
Imagens Docker pré-compiladas estão disponíveis no GitHub Container Registry:
Imagens disponíveis:
- 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 das imagens 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
Suporte multi-arquitetura:
Todas as imagens suportam:
- linux/amd64 (Intel/AMD x64)
- linux/arm64 (Apple Silicon, ARM64)
Procedimentos para configuração do MCP
-
Compile a imagem Docker:
cd bakalari-mcp-server # Pro stdio mode: ./build-cli.sh # Pro HTTP mode: ./build-proxy.sh # Nebo oba najednou: ./build-all.sh -
Execute o contêiner (para o 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 -
Atualize as configurações do MCP do aplicativo em
claude_desktop_config.json,anythingllm_mcp_servers.json,cline_mcp_settings.json -
Reinicie o aplicativo para carregar a nova configuração
Autenticação
O servidor gerencia a autenticação automaticamente:
- No primeiro uso, faz login com nome de usuário/senha
- Obtém access_token e refresh_token
- Quando o access_token expira, renova automaticamente usando o refresh_token
- Se o refresh_token também expirar, faz login novamente com nome de usuário/senha
Estados de erro
Todas as ferramentas retornam mensagens de erro em caso de problemas:
{
"error": "Popis chyby"
}
Tipos possíveis de erro:
- Erro de autenticação: Credenciais inválidas ou problemas com token
- Erro de API: Problema na comunicação com a API Bakaláři
- Formato de data inválido: Data informada incorretamente
Exemplo de uso no 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")
Funcionalidades avançadas
Decodificação do horário
O servidor decodifica o horário de forma inteligente usando:
- Tabelas de consulta: Tradução de IDs para nomes legíveis de disciplinas, professores e salas
- Inferência de disciplinas: Reconhecimento automático da disciplina a partir do tema da aula
- Processamento de alterações: Detecção de aulas canceladas, substituições e outras alterações
- Validação de dados: Verificação do formato da data e validação básica
Suporte a alterações no horário
O servidor reconhece e processa corretamente:
- Aulas canceladas: Marcadas como ❌ com preservação das informações originais
- Substituições: Novo professor com referência ao professor original
- Aulas combinadas: União de várias aulas em uma só
- Alterações de salas: Local atualizado
Detalhes técnicos
- Protocolo: MCP via stdio ou HTTP (com mcp-proxy)
- Framework: FastMCP
- Cliente HTTP: aiohttp (assíncrono)
- Versão do Python: 3.8+
- Distribuição: código-fonte
- Proxy: mcp-proxy para transporte HTTP
Desenvolvedores
Para desenvolvimento 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
Suporte
Se esta ferramenta for útil para você, você pode apoiar o desenvolvimento:

