Plugin do Moodle
O que o plugin faz
O local_mcpconnector é a parte do MoodleMCP que vive no Moodle. Liga o seu site ao painel através de uma API assinada, cria serviços web limitados por papel e transforma tokens do Moodle em chaves MCP revogáveis para os utilizadores que escolher.
Comunica com o painel e com mais nenhum terceiro. Requer uma conta MoodleMCP: sozinho, o plugin não faz nada.
Instalação
- Instale o plugin em Administração do site → Plugins → Instalar plugins (carregue o zip, ou copie a pasta para raizmoodle/local/mcpconnector) e conclua a atualização.
- Abra Administração do site → Plugins → Plugins locais → MCP Connector → Licença.
- Cole o URL do painel, a chave de licença, o segredo do painel e o URL do ponto de acesso MCP que obteve ao ligar o seu site.
- Clique em Validar licença. Uma confirmação a verde significa que a assinatura e o URL do site estão corretos.
O que acrescenta ao Moodle
| Secção | Para que serve |
|---|---|
| Licença | URL do painel, chave de licença, segredo de assinatura e ponto de acesso MCP. |
| Serviços | As definições de serviços web por papel e as funções permitidas. |
| Utilizadores | Associar ou remover um utilizador de um serviço — o que emite ou revoga a sua chave. |
| Chaves | Ciclo de vida por utilizador: suspender, ativar, revogar, regenerar e enviar por email, e reconciliar o estado com o painel. |
| Definições | Sincronização automática por papel e modelo do email de entrega das chaves. |
Atribuir acesso a utilizadores
Em Utilizadores, associe alguém ao serviço correspondente ao seu papel. O plugin gera um token de serviço web para essa pessoa, envia-o ao painel, e o painel devolve uma chave MCP. O valor é enviado por email ao utilizador e mostrado uma única vez: o Moodle guarda apenas os últimos quatro caracteres e o estado.
Ative a sincronização automática de um papel se quiser que todos os utilizadores com esse papel recebam acesso automaticamente.
Revogar o acesso
Suspender ou revogar uma chave no plugin propaga-se ao painel, e a chave deixa de funcionar na chamada seguinte. Eliminar o utilizador do Moodle também a revoga. Pode fazer o mesmo no painel, em Organização → Moodle → Chaves MCP: as duas vistas reconciliam-se.
O que é enviado ao painel
Ao atribuir acesso, o plugin envia o nome completo do utilizador, os seus papéis efetivos no Moodle e o token de serviço web gerado para ele; a chave segue para o seu endereço de email. O painel guarda o token cifrado e a chave em hash. As definições de privacidade do plugin incluem a declaração legível por máquina.
Os tokens de serviço web e os valores das chaves MCP nunca são escritos nos registos do Moodle. As chaves são entregues por email, por isso trate essas caixas de correio em conformidade.
Para programadores do plugin
Todos os pontos de acesso entre plugin e painel são assinados e limitados por licença:
| Ponto de acesso | Finalidade |
|---|---|
| POST /api/moodle/verify | Verificação de licença e URL a partir das definições do plugin |
| POST /api/moodle/keys | Registar um token → chave MCP (valor devolvido uma vez) |
| POST /api/moodle/keys/list | Listagem só de metadados (ids, últimos 4, estado — nunca segredos) |
| POST /api/moodle/keys/revoke | Revogar por id da chave (idempotente e definitivo) |
| POST /api/moodle/keys/suspend | Suspender ou reativar por id da chave |
A assinatura viaja num cabeçalho:
x-panel-signature: t=<segundos-unix>,v1=<hex hmac_sha256(segredoPainel, `${t}.${corpoBruto}`)>
- O que é assinado é o corpo bruto do pedido, unido por um ponto após a marca temporal — qualquer alteração ao corpo invalida a assinatura.
- Pedidos com mais de 300 segundos (ou adiantados) são rejeitados, o que fecha a janela de repetição.
- Uma licença desconhecida e uma assinatura inválida devolvem ambas 403 invalid_credentials, pelo que a API não serve para enumerar instalações.
- O plugin envia x-panel-version: 2 em cada pedido, para que o protocolo possa evoluir sem quebrar instalações mais antigas.
O plugin é distribuído sob GPL v3 ou posterior; o código e os problemas estão em github.com/studiolxd/moodle-local_mcpconnector.