Pular para o conteúdo principal

Servidor de catálogo MCP

Instalação, configuração, as três ferramentas de leitura que ele expõe, e o que ele faz quando o papel do chamador não alcança.

Expõe o catálogo interno como ferramentas MCP, sobre o cliente Python do catálogo. Ele não tem credencial própria: repassa o papel do chamador, e é isso que faz a resposta ser a mesma que o terminal daria.

Instalação

pip install --index-url "$PANLABS_INDICE" "panlabs-mcp-catalogo>=1.2"

Configuração

Duas variáveis, e nenhuma delas é segredo. O perfil escolhe o papel que já está na máquina; a base escolhe o ambiente do catálogo.

export PANLABS_PERFIL=dev
export PANLABS_CATALOGO_BASE=https://catalogo.interno/v2
panlabs-mcp-catalogo --conferir
# perfil dev · papel-<equipe>-leitura-dev · 3 ferramentas registradas

As três ferramentas

Todas de leitura. A regra que as escolheu é uma só: o servidor expõe o que o catálogo já publica, e nada além.

# panlabs_mcp_catalogo/ferramentas.py
@servidor.ferramenta()
def buscar_recurso(termo: str, limite: int = 20) -> list[Recurso]:
"""Busca no catálogo por nome ou identificador parcial."""

@servidor.ferramenta()
def obter_recurso(identificador: str) -> Recurso:
"""Devolve um recurso pelo identificador exato."""

@servidor.ferramenta()
def listar_por_dono(equipe: str, limite: int = 50) -> list[Recurso]:
"""Todos os recursos de uma equipe."""

Tratamento de erro

O servidor traduz as exceções do cliente para mensagens que fazem sentido para quem lê a resposta do assistente, e a tradução mantém a causa, que é o defeito descrito em O mesmo erro em três formas.

try:
return catalogo.obter(identificador)
except ErroDeAcesso as erro:
# a causa vai na mensagem, não só a categoria
return Erro(f"sessão de {perfil} expirada ou papel sem acesso: {erro}")
except RecursoAusente:
return Erro(f"{identificador!r} não existe no catálogo de {perfil}")

O que ele não faz

Ele não escreve, não rotaciona e não implanta. A tabela de decisão está no índice da seção, e a linha que a resume é uma: uma ferramenta de escrita executada por um assistente é uma mudança sem revisão.