Pular para o conteúdo

Permissões

Cada autorização traz uma lista explícita de scopes: seis permissões, nem uma a mais. Cada ferramenta declara a permissão de que precisa; se a autorização não a traz, a hackÜ responde 403 e a ferramenta se recusa. Adicionar uma ferramenta nova nunca amplia o que uma credencial pode ler por conta própria.

Scope Rótulo O que libera
users:read Listar usuários O quadro de pessoas da empresa, uma pessoa por vez, o ranking e as cargas em massa.
users:pii Ver nomes, e-mails e telefones Faz com que as respostas que já devolvem pessoas incluam os dados identificáveis delas, em vez de só o user_id. Não abre nenhuma ferramenta nova sozinho.
courses:read Consultar o catálogo de cursos O catálogo de cursos da empresa e o detalhe de um deles, com seus módulos.
communications:read Consultar comunicados e seus envios Os comunicados preparados ou enviados, e o que aconteceu com cada destinatário.
learning:read Consultar avaliações, pesquisas e pensums Desafios, pesquisas, avaliações, tentativas e pensums — o grosso das ferramentas.
reports:generate Pedir relatórios em Excel ou CSV e ver os já gerados Ver os relatórios já pedidos, e pedir um novo.

get_context não pede scope nenhum: ele descreve a própria credencial (de qual empresa ela é, em nome de quem, com quais limites), e quem consegue se autenticar já tem direito a saber isso.

Os outros cinco scopes abrem ou fecham uma ferramenta inteira. users:pii não abre nenhuma: ele modifica o que já é devolvido por list_users, get_user e list_communication_deliveries, acrescentando nome, e-mail, telefone ou número de documento a linhas que de outra forma só trazem um id.

Isso é deliberado, segundo o próprio modelo:

USERS_PII está separado de USERS_READ de propósito. Se um deployment pode devolver dados pessoais é uma decisão de configuração; se uma credencial específica os recebe é uma decisão por pessoa. As duas precisam dizer sim.

Na prática isso significa duas chaves independentes, não uma: a do deployment (MCP_EXPOSE_PII, veja Privacidade e alcance) e a do scope da credencial. Toda resposta que pode trazer dados pessoais inclui pii_included: true|false para deixar explícito qual dos dois modos você está vendo — nunca é para supor isso pelo resultado.

users:read (5): get_company_overview · list_ranking · list_bulks · list_users · get_user

courses:read (2): list_courses · get_course

communications:read (3): list_communications · get_communication · list_communication_deliveries

learning:read (9): list_challenges · list_surveys · get_survey_results · list_evaluations · list_evaluation_attempts · get_evaluation_attempt · list_pensums · get_pensum · list_pensum_enrolments

reports:generate (2): list_reports · request_report

Sem scope (1): get_context

5 + 2 + 3 + 9 + 2 + 1 = 22 ferramentas — o total exato que o servidor expõe.

Das 22, request_report é a única que não é um read. Ela grava uma linha e enfileira um trabalho em segundo plano; todo o resto neste servidor é uma consulta. Por isso ela vive atrás do seu próprio scope, reports:generate, em vez de compartilhar users:read ou outro scope de leitura — conceder essa ação tem que ser uma decisão separada de conceder visibilidade.