Servidor MCP — /mcp-tokens

O CMS publica um servidor MCP (Model Context Protocol): um endereço que um assistente de IA — Claude Desktop, Claude Code, ou qualquer cliente que fale o protocolo — usa para ler e configurar integrações, conversando com o sistema em vez de conversar sobre ele.
Na prática, o que era “abra a tela de Aplicações, crie uma Interface, depois uma Entrega, escolha o tipo, preencha os campos obrigatórios daquele tipo” passa a ser uma frase: “crie uma entrega HTTP POST para o MES na aplicação SAP, validando o retorno”. A IA descobre o que existe, monta o plano, confere e aplica.
Este servidor não é um canal de mensagens. Ele configura e diagnostica. Enviar e coletar mensagem continua sendo a API pública, com API Key — ou, para um agente de IA, o Servidor MCP de integrações, que expõe as Entregas e Coletas marcadas como ferramentas, num endereço por Aplicação. São mecanismos com propósitos e riscos diferentes.
O que o token é, e o que não é
API Key (/api-tokens) | Token MCP (/mcp-tokens) | |
|---|---|---|
| Autentica | Envio e coleta de mensagem | Configuração e diagnóstico |
| Escopo | Aplicação + Interfaces | O Perfil de um usuário de serviço |
| Guardado | Em texto, para reexibir na tela | Só o hash — o valor aparece uma vez |
| Na auditoria aparece como | O token | O login do usuário de serviço |
A decisão central: um token MCP não tem permissões próprias. Ele aponta para um usuário de serviço, e é o Perfil desse usuário que decide tudo — quais ferramentas a IA enxerga, quais Aplicações e Interfaces ela alcança, o que ela pode alterar.
O mesmo token pode ainda chamar as ferramentas do Servidor MCP de
integrações — enviar por uma Entrega, executar uma Coleta —,
mas só se o Perfil tiver também a Ferramenta /mcp/integration-tools. Configurar uma Entrega e
acioná-la são permissões separadas.
Um token MCP nunca vê mais do que o usuário de serviço veria na tela. Se você quer uma IA que só lê, crie um usuário com Perfil de leitura e aponte o token para ele — não existe um segundo lugar onde afrouxar isso por engano.
Criar um token
Crie o usuário de serviço
Em Usuários, um usuário dedicado ao cliente MCP, com o Perfil que define o alcance. Vale tratá-lo como uma pessoa: ele aparece na auditoria de tudo que a IA fizer, e é o e-mail dele que recebe o token.
Abra a tela e clique em Novo token
| Campo | O que decide |
|---|---|
| Usuário de serviço | O Perfil que o token carrega. Precisa estar ativo |
| Descrição | Como você reconhece este token na lista. Ex.: Claude Desktop do time de integração |
| Expira em | Data de validade. Vazio = não expira |
| Permitir ver conteúdo de mensagem | Libera o corpo das mensagens no diagnóstico. Desligado por padrão |
Copie o valor — ele aparece uma vez
O CMS guarda apenas o hash. O valor cru existe fora do cliente só nesta tela: perdeu, revogue e gere outro. Junto vem a configuração pronta do cliente, já com a URL desta instalação.
O botão Enviar para… manda o token e a configuração por e-mail — sempre para o endereço do usuário de serviço, nunca para quem apertou o botão nem para um endereço digitado. O envio, e também a falha de envio, ficam no Log de Auditoria.
Ligue o cliente
{
"mcpServers": {
"cms": {
"type": "http",
"url": "https://seu-cms/api/mcp",
"headers": { "Authorization": "Bearer cms_mcp_..." }
}
}
}O valor começa com cms_mcp_ de propósito: quem encontrar a string num arquivo de configuração sabe
de onde ela é, e uma varredura por cms_mcp_ acha token vazado em repositório.
O que a IA consegue fazer
As ferramentas são filtradas pelo Perfil do usuário de serviço antes de serem oferecidas — a IA não enxerga uma ferramenta que levaria 403 ao chamar. Por isso o mesmo servidor se comporta de formas diferentes conforme o token.
Ler
| Ferramenta | O que devolve |
|---|---|
cms_list_applications · cms_get_application | Aplicações visíveis ao token, com Keep Alive e status |
cms_list_interfaces · cms_list_definitions · cms_get_definition | Interfaces e Definições, com a configuração legível de cada uma. Numa Entrega, cms_get_definition traz também o Transformador de cada Aplicação produtora, com o Content-Type dela |
cms_list_connections · cms_list_credentials | Conexões e Credenciais — sem senha e sem token |
cms_list_transformers | Onde cada Transformador é usado — o uso por Aplicação produtora conta como Entrega. O script não sai |
cms_list_business_errors | Erros de Negócio configurados |
cms_describe_types | Catálogo de tipos: os enums do domínio e os campos obrigatórios de cada Tipo de Entrega, Coleta e Conexão |
cms_describe_types é a peça que evita a maior parte dos erros: sem ela o modelo chuta valor de enum
e nome de campo; com ela, consulta o contrato antes de montar qualquer coisa.
Diagnosticar
| Ferramenta | Responde |
|---|---|
cms_search_messages | “Essa mensagem passou?” — por Interface, Definição, status e período |
cms_interface_status | Fila acumulada, se está bloqueada e por quê, último processamento |
cms_application_health | Keep Alive atual e o último período de indisponibilidade |
cms_recent_errors | Últimos erros agrupados por Definição, para achar a origem antes de abrir mensagem por mensagem |
cms_screen_link | O endereço de uma tela do CMS já filtrada, com a contagem exata do filtro |
cms_search_messages devolve metadados — id, status, datas, tentativas. O corpo só sai se o
token tiver a permissão de conteúdo ligada, e payload criptografado nunca sai, com ou sem essa
permissão: decifrar exige a Ferramenta própria, com justificativa e reautenticação, e está fora do
alcance do MCP.
cms_screen_link não devolve dado: devolve para onde olhar. É o caminho barato de responder
“essa mensagem passou?” — a contagem sai de uma consulta só, o conteúdo não entra na resposta, e a
lista de telas alcançáveis é fechada. Cada tela é conferida contra a permissão do token antes de o
endereço sair. O caminho vem relativo: quem sabe o endereço público da instalação é quem a
hospeda, não a API.
Para janelas relativas a agora, cms_screen_link aceita periodo (hoje, ontem, 1h, 24h,
7d…) no lugar de dataInicio/dataFim: o endereço leva o atalho, e a tela resolve as datas a
cada consulta.
Testar antes de gravar
| Ferramenta | O que faz |
|---|---|
cms_test_connection | Testa uma Conexão Externa já cadastrada — o mesmo teste do botão da tela |
cms_preview_transform | Aplica um Transformador, salvo ou avulso, a um payload de exemplo |
cms_test_read | Executa a leitura de uma Coleta sem gravar mensagem, devolvendo uma amostra |
cms_test_read recusa, explicando, o que teria efeito colateral: Coleta com comando pós-coleta, ação
pós-leitura de arquivo, RFC que pode escrever, e os tipos orientados a evento — que não têm o que ler
sob demanda.
Criar e alterar
cms_create_* e cms_update_* cobrem Aplicação, Interface, Entrega, Coleta, Erro de Negócio e
Conexão Externa. Criar uma Aplicação cuja sigla já existe não duplica: devolve a existente,
marcada como já existente.
Para uma integração inteira de uma vez, o caminho é outro:
| Ferramenta | Papel |
|---|---|
cms_validate_integration | Confere o plano inteiro sem gravar: siglas em conflito, enum inválido, campo obrigatório faltando, referência que não existe |
cms_apply_integration | Aplica o plano. Roda em simulação por padrão — a primeira chamada devolve o que seria criado |
As Entregas e Coletas criadas por cms_apply_integration nascem desativadas. Ligar é ato
humano: alguém abre a tela, confere e ativa. Reaplicar o mesmo plano não duplica, e o que estiver
marcado como customizado só é sobrescrito se você autorizar explicitamente.
Documentação e roteiro embutidos
Além das ferramentas, o servidor publica resources — conteúdo que o cliente lê uma vez e mantém no contexto:
cms://catalog/types— o mesmo catálogo decms_describe_typescms://docs/como-criar-integracao— o que é Aplicação, Interface, Definição e Erro de Negócio, e em que ordem criarcms://docs/direcao-e-tipos— por que quem inicia a conversa decide entre ENTREGA e COLETA
E um prompt pronto, configurar_integracao, que o cliente oferece como comando: você descreve o
objetivo em uma frase e ele conduz o roteiro até a validação e a pré-visualização.
Por que é seguro deixar uma IA aqui
A pergunta certa não é “a IA é confiável?”, e sim “o que ela alcança, mesmo se sair do roteiro?”.
- Segredo não sai. Cada resposta é montada campo a campo, por lista de permitidos — senha, token e chave privada não estão nessa lista. Por cima disso, uma varredura final percorre a resposta inteira, inclusive mensagens de erro, e corta o que casar com padrão de segredo. Se essa rede precisar agir, o incidente é registrado.
- Conteúdo cifrado não sai, em nenhuma hipótese, nem com a permissão de conteúdo ligada.
- Nada é criado ligado. Entregas e Coletas nascem desativadas.
- Nada se expõe sozinho. As chaves que abrem uma saída de dado — Expor como ferramenta MCP,
Devolver o conteúdo coletado para a IA e Devolver o resultado da coleta na resposta da API — só
são ligadas por uma pessoa, na tela. As ferramentas de criar e alterar, e o
cms_apply_integration, recusam ligá-las; desligar continua permitido. - Tudo passa pelo Perfil. As mesmas checagens de Ferramenta e de Interfaces permitidas que valem na tela valem aqui, no mesmo código.
- Tudo fica na auditoria, com o login do usuário de serviço.
Revogar
Na lista, Revogar desliga o token na hora sem apagá-lo — o histórico de uso continua legível. Excluir remove o registro, e qualquer cliente que estivesse usando aquele valor perde o acesso imediatamente. Um token com data de expiração passada para de autenticar sozinho.
O token também vale só enquanto o usuário de serviço vale: desativar o usuário derruba todos os tokens dele na hora, sem esperar a expiração — como acontece com a sessão de tela de um usuário desativado.
A coluna Último uso é a forma rápida de achar token esquecido: o que nunca foi usado, ou não é usado há meses, provavelmente não deveria continuar existindo.
Desligar o servidor inteiro
Para fechar a porta de uma vez, sem mexer em token nenhum, desligue o recurso Servidor MCP em Configurações → IA: a partir daí nenhum token é aceito.
A recusa acontece depois da validação do token, de propósito — quem chamasse sem credencial descobriria que o servidor existe e está desligado, e a resposta única para token ausente/inválido/expirado/revogado perderia a graça.
Essa chave é a única do painel de IA que não tem a ver com custo: o servidor MCP não consome o provedor configurado no CMS — quem paga o modelo do outro lado é quem se conecta. Aqui ela é controle de acesso.
Permissão da tela
A Ferramenta é /mcp-tokens. Quem a tem consegue criar e revogar tokens — ou seja, consegue
conceder a uma IA o acesso de qualquer usuário de serviço disponível. Trate-a com o mesmo cuidado
de Perfis de Acesso, e não a inclua em perfis operacionais.