Skip to main content
Glama
README.md
# mcp-adalove

Servidor MCP (leitura, somente GET) para o Adalove — plataforma acadêmica do
Inteli. Ver [CLAUDE.md](CLAUDE.md) para as regras de segurança do projeto e
[docs/v1.md](docs/v1.md) para a especificação completa desta versão.

## O que esta versão faz

Uma única tool: `listar_semana(numero_semana?, turma?, detalhado?)`, que
retorna markdown com as atividades de uma semana de uma turma.

## Instalação

Requer Python ≥ 3.11 e [`uv`](https://docs.astral.sh/uv/).

```bash
uv sync
```

## Configuração — `ADALOVE_REFRESH_TOKEN`

O servidor renova o access token automaticamente via Cognito, então só
precisa de um refresh token configurado uma vez (dura semanas — ver
[docs/01-auth-tokenizacao.md](docs/01-auth-tokenizacao.md)).

### Como obter o refresh token

1. Faça login normalmente em <https://adalove.inteli.edu.br>.
2. Abra o DevTools do navegador (F12) → aba **Application** (Chrome) ou
   **Storage** (Firefox) → **Local Storage** → `https://adalove.inteli.edu.br`.
3. Procure uma chave no formato
   `CognitoIdentityServiceProvider.6v6iqlcv6hl5p3u628geho1cjp.<sub>.refreshToken`
   (o `<sub>` é um UUID específico da sua conta).
4. Copie o valor — é uma string opaca longa (não é um JWT).

**Nunca cole esse valor em um arquivo do projeto, em um commit, ou em
qualquer lugar que não seja a configuração de ambiente da sua ferramenta
MCP.** Trate-o como uma senha: com ele, qualquer cliente HTTP consegue gerar
access tokens novos em seu nome (ver docs/01, seção "Renovação via
`refresh_token`").

### Claude Desktop

Edite o arquivo de configuração do Claude Desktop
(`claude_desktop_config.json`) e adicione:

```json
{
  "mcpServers": {
    "adalove": {
      "command": "uv",
      "args": ["--directory", "/caminho/absoluto/para/mcp-adalove", "run", "mcp-adalove"],
      "env": {
        "ADALOVE_REFRESH_TOKEN": "<seu refresh token>"
      }
    }
  }
}
```

Reinicie o Claude Desktop depois de editar.

Se `ADALOVE_REFRESH_TOKEN` não estiver configurado, o servidor sobe
normalmente (não derruba o processo) — a tool apenas responde explicando
como configurá-lo.

## Rodando os testes

Todos os testes rodam contra fixtures locais, sem rede e sem token:

```bash
uv run pytest
```

## Testando contra a API real

```bash
uv run scripts/smoke_test.py
```

Esse script faz chamadas reais (`GET /sections`, `GET /sections/{uuid}/userdata`)
usando o `ADALOVE_REFRESH_TOKEN` do ambiente e imprime o markdown formatado.
Não é executado automaticamente — é o passo de validação manual do usuário,
fora do escopo do build.

## Escopo

Ver [docs/v1.md](docs/v1.md) §9 ("Escopo negativo") para o que foi
deliberadamente deixado de fora desta versão.

TDQS

A4.3/5.0

Scored across 1 tool

Disambiguation5/5

With only a single tool, there is no possibility of confusion between tools. The purpose of listing week activities is clear and unambiguous.

Naming Consistency5/5

The single tool name 'listar_semana' follows a consistent verb-noun pattern (list + week). While there's no broader pattern to compare, the name is descriptive and internally consistent.

Tool Count3/5

A single tool for an LMS (Adalove) feels thin. The scope appears to be at least course management, but only listing weekly activities is provided, making the count borderline low.

Completeness1/5

The tool surface is severely incomplete for an LMS domain. Only a read-only list operation exists, with no create, update, delete, or management capabilities for courses, students, or activities.

Maintenance

ActivityMaintained
ResponsivenessNo issues