Skip to content

ComputerNetworks-UFRGS/compose-kg-mcp

Repository files navigation

Representação Baseada em Grafos de Infraestrutura como Código: Possibilitando o Raciocínio Semântico para Sistemas Conteinerizados

Este artigo propõe um novo framework que integra um Grafo de Conhecimento baseado em ontologia com o Model Context Protocol (MCP) para o gerenciamento semântico de infraestruturas conteinerizadas. A estrutura aborda uma lacuna nas plataformas de orquestração ao fornecer uma representação semântica unificada da topologia, alimentada por processo de Extração, Transformação e Carga (ETL) que analisa arquivos do Docker Compose e disponibiliza o conhecimento para Large Language Models via uma camada de ferramentas. Essa abordagem permite que usuários realizem consultas em linguagem natural para obter insights profundos sobre a configuração da infraestrutura. A abordagem foi validada por meio de um experimento controlado simulando um cenário DevOps, no qual o sistema identificou com sucesso falhas de integridade em volumes e riscos de movimentação lateral — problemas que a análise tradicional dificilmente detectaria. Os resultados demonstram a superioridade da estrutura na auditoria automatizada e na detecção de conflitos, preenchendo a lacuna entre artefatos brutos de Infraestrutura como Código e o raciocínio dinâmico do sistema para um gerenciamento de contêineres mais inteligente e explicável.


Selos Considerados

Os autores julgam como considerados no processo de avaliação os selos:

  • Artefatos Disponíveis (SeloD)
  • Artefatos Funcionais (SeloF)
  • Artefatos Sustentáveis (SeloS)
  • Experimentos Reprodutíveis (SeloR)

Com base nos códigos e documentação disponibilizados neste e nos repositórios relacionados.


Requisitos do Sistema

  • Docker e Docker Compose (Para levantar o banco de dados de grafos Neo4j).
  • Python 3.9+ (Para executar o parser ETL e rodar o Servidor MCP).
  • Claude Desktop instalado localmente (Requisito para o teste mínimo de raciocínio).

Instalação

Siga as instruções abaixo para instanciar o grafo e popular a base de dados com os artefatos avaliados no artigo:

1. Clone o repositório e acesse a pasta do projeto:

git clone [https://github.com/ComputerNetworks-UFRGS/compose-kg-mcp.git](https://github.com/ComputerNetworks-UFRGS/compose-kg-mcp.git)
cd compose-kg-mcp

2. Configure as Variáveis de Ambiente: Renomeie o arquivo .env.example para .env na raiz do projeto.

cp .env.example .env

3. Inicialize o Banco de Dados Neo4j:

docker compose up -d

4. Instale as Dependências Python: Recomendamos o uso de um ambiente virtual para não gerar conflitos.

python -m venv venv
source venv/bin/activate  # Em windows utilize: venv\Scripts\activate
pip install -r requirements.txt

5. Execute a Ingestão do Grafo (ETL): Esta etapa processa os arquivos em parser_neo4j/docker_composes/ (Cenários 1, 2, 3 e 4) e constrói o grafo.

Uma mensagem de "Processamento concluído!" indicará que a base de conhecimento está pronta.


Teste Mínimo

O teste mínimo proposto para validar a integração se dá via a conexão do servidor MCP com o Claude Desktop do avaliador. Atualmente o Claude Desktop só está disponível para Windows e MacOS. Porém, há diversos clientes compatíveis, podendo ser acessado em: https://modelcontextprotocol.io/clients.

Para o Claude, abra as configurações do Claude Desktop e adicione seu servidor MCP, substituíndo CAMINHO/ABSOLUTO/PARA/ pelo local exato onde você clonou este repositório:

{
  "mcpServers": {
    "docker-infra-manager": {
      "command": "python",
      "args": [
        "/CAMINHO/ABSOLUTO/PARA/compose-kg-mcp/mcp_server/server.py"
      ]
    }
  }
}

Reinicie o Claude Desktop e em um novo chat, verifique se o MCP foi ativo e se as ferramentas estão prontas para uso.


Experimentos

No artigo, apresentamos 4 casos de estudo:

Cenário A: Análise de Impacto em Cadeia:

parser_neo4j/docker_composes/case_1.yaml

  • Prompt: 'Utilize suas ferramentas MCP para fazer uma análise de impacto em cadeia. Se o serviço 'ecommerce-db' falhar, quais outros serviços da infraestrutura serão afetados direta ou indiretamente?'
  • Resultado Esperado: O agente deve rastrear a cadeia completa de dependências e identificar que, além do inventory-api (dependente direto), o serviço final de frontend storefront-ui será severamente impactado pela falha do banco de dados.

Cenário B: Integridade de Volumes:

parser_neo4j/docker_composes/case_2.yaml

  • Prompt: 'Faça uma varredura na infraestrutura usando as ferramentas e me informe se existe algum conflito crítico de volume, ou seja, múltiplos serviços gravando no mesmo Host Path.'
  • Resultado Esperado: O agente deve alertar preventivamente para uma condição crítica de corrupção de dados (colisão de HostPath). Ele identificará que dois projetos distintos estão configurados erroneamente para montar o mesmo diretório local simultaneamente para a persistência de dados.

Cenário C: Detecção de Movimentação Lateral

parser_neo4j/docker_composes/case_3.yaml

  • Prompt: 'Execute uma análise de alcançabilidade de rede (network reachability) entre o 'load-balancer' e o 'vault-database'. Existe um caminho possível de ataque lateral entre eles?'
  • Resultado Esperado: O sistema deve detetar uma violação da política de segmentação de rede. O agente traçará o caminho de transição, revelando que um atacante que comprometa o load-balancer (na zona pública) poderia alcançar o vault-database (na zona segura) utilizando o serviço legacy-auth-service como ponto de pivô.

Cenário D: Conflito de Portas

parser_neo4j/docker_composes/case_4.yaml

  • Prompt: ''Audite todas as portas da infraestrutura. Existe algum conflito de portas instanciadas no host? Se sim, quais serviços estão em colisão?
  • Resultado Esperado: O agente consultará o grafo global e identificará que dois nós de serviços distintos convergem para a mesma porta no host. O sistema alertará sobre a impossibilidade física desta implantação simultânea.

Estrutura do Projeto

├── docker-compose.yaml    # Arquivo de configuração do Docker Compose para iniciar o banco de dados Neo4j
├── LICENSE                # Arquivo de licença do projeto (MIT)
├── README.md              # Este arquivo, contendo instruções e documentação
├── requirements.txt       # Lista de dependências Python necessárias
├── mcp_server/
│   └── server.py          # Script principal do servidor MCP
├── ontology/
│   └── base_ontology.ttl  # Arquivo de ontologia em formato TTL
├── parser_neo4j/
│   └── parser.py          # Script do parser que processa os arquivos Docker Compose e constrói o grafo
│   └── docker_composes/
│        ├── case_1.yaml        # Cenário A: Análise de Impacto em Cadeia
│        ├── case_2.yaml        # Cenário B: Integridade de Volumes
│        ├── case_3.yaml        # Cenário C: Detecção de Movimentação Lateral
│        └── case_4.yaml        # Cenário D: Conflito de Portas

LICENSE Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter mais detalhes.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages