MCP server by pcsouzafv
Azure MCP Server
Servidor MCP (Model Context Protocol) desenvolvido com Node.js e Express para monitorar serviços da Azure, incluindo Virtual Machines (VMs) e Virtual Machine Scale Sets (VMSS).
Funcionalidades
- Monitoramento de Virtual Machines (VMs)
- Monitoramento de Virtual Machine Scale Sets (VMSS)
- Obtenção de status e detalhes de recursos Azure
- API RESTful com endpoints organizados
- Autenticação segura com Azure via Service Principal
Pré-requisitos
- Node.js 14+ instalado
- Conta Azure ativa
- Service Principal configurado com permissões adequadas
- Subscription ID da Azure
Configuração
1. Instalação
cd azure-mcp-server
npm install
2. Configurar variáveis de ambiente
Copie o arquivo .env.example para .env:
cp .env.example .env
Edite o arquivo .env com suas credenciais Azure:
# Azure Configuration
AZURE_SUBSCRIPTION_ID=sua-subscription-id
AZURE_TENANT_ID=seu-tenant-id
AZURE_CLIENT_ID=seu-client-id
AZURE_CLIENT_SECRET=seu-client-secret
# Server Configuration
PORT=3000
NODE_ENV=development
# Resource Groups to Monitor (comma-separated)
RESOURCE_GROUPS=rg-production,rg-staging
3. Criar Service Principal na Azure
az login
az ad sp create-for-rbac --name "azure-mcp-server" --role "Reader" --scopes /subscriptions/{subscription-id}
Anote os valores retornados:
appId→ AZURE_CLIENT_IDpassword→ AZURE_CLIENT_SECRETtenant→ AZURE_TENANT_ID
Uso
Iniciar o servidor
IMPORTANTE: O servidor pode iniciar mesmo sem as credenciais Azure configuradas, mas as chamadas à API falharão. Configure o arquivo .env antes de usar os endpoints da API.
Desenvolvimento (com hot-reload):
npm run dev
Produção:
npm start
Testar servidor:
npm test
O servidor estará disponível em http://localhost:3000
Ao iniciar, você verá:
- ✓ Azure Config: Configurado → Credenciais OK, API funcionará
- ✗ Azure Config: Não configurado → Configure o .env antes de usar a API
Endpoints da API
Health Check
GET /health
Verifica se o servidor está funcionando.
Informações do Serviço
GET /
Retorna informações sobre o serviço e lista de endpoints disponíveis.
Virtual Machines (VMs)
Listar todas as VMs
GET /api/vms
Listar VMs por Resource Group
GET /api/vms/resource-group/:resourceGroup
Obter detalhes de uma VM
GET /api/vms/:resourceGroup/:vmName
Obter status de uma VM
GET /api/vms/:resourceGroup/:vmName/status
Virtual Machine Scale Sets (VMSS)
Listar todos os VMSS
GET /api/vmss
Listar VMSS por Resource Group
GET /api/vmss/resource-group/:resourceGroup
Obter detalhes de um VMSS
GET /api/vmss/:resourceGroup/:vmssName
Obter status de um VMSS
GET /api/vmss/:resourceGroup/:vmssName/status
Listar instâncias de um VMSS
GET /api/vmss/:resourceGroup/:vmssName/instances
Obter view de uma instância específica
GET /api/vmss/:resourceGroup/:vmssName/instances/:instanceId
Exemplos de Uso
Listar todas as VMs
curl http://localhost:3000/api/vms
Obter status de uma VM específica
curl http://localhost:3000/api/vms/meu-resource-group/minha-vm/status
Listar instâncias de um VMSS
curl http://localhost:3000/api/vmss/meu-resource-group/meu-vmss/instances
Estrutura do Projeto
azure-mcp-server/
├── src/
│ ├── config/
│ │ └── azure.js # Configuração de autenticação Azure
│ ├── services/
│ │ ├── vmService.js # Serviço para gerenciar VMs
│ │ └── vmssService.js # Serviço para gerenciar VMSS
│ ├── routes/
│ │ ├── vmRoutes.js # Rotas para VMs
│ │ └── vmssRoutes.js # Rotas para VMSS
│ └── server.js # Servidor Express principal
├── .env.example # Exemplo de variáveis de ambiente
├── .gitignore
├── package.json
└── README.md
Segurança
- Nunca commite o arquivo
.envcom credenciais reais - Use Service Principal com princípio de menor privilégio
- Em produção, considere usar Azure Key Vault para armazenar secrets
- O servidor usa Helmet.js para headers de segurança HTTP
Troubleshooting
Erro de autenticação
Verifique se as credenciais no .env estão corretas e se o Service Principal tem permissões adequadas.
Timeout ao listar recursos
Aumente o timeout no cliente ou verifique a conectividade com Azure.
Resource Group não encontrado
Certifique-se de que o Resource Group existe e que o Service Principal tem acesso a ele.
Melhorias Futuras
- [ ] Adicionar cache para melhorar performance
- [ ] Implementar webhooks para notificações
- [ ] Adicionar monitoramento de App Services
- [ ] Implementar autenticação no próprio servidor
- [ ] Adicionar métricas e logs estruturados
- [ ] Criar dashboard web para visualização
- [ ] Adicionar testes unitários e de integração
Licença
ISC
Contribuindo
Pull requests são bem-vindos. Para mudanças maiores, abra uma issue primeiro para discutir o que você gostaria de mudar.