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).
- 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
- Node.js 14+ instalado
- Conta Azure ativa
- Service Principal configurado com permissões adequadas
- Subscription ID da Azure
cd azure-mcp-server
npm installCopie o arquivo .env.example para .env:
cp .env.example .envEdite 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-stagingaz 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
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 devProdução:
npm startTestar servidor:
npm testO 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
GET /health
Verifica se o servidor está funcionando.
GET /
Retorna informações sobre o serviço e lista de endpoints disponíveis.
GET /api/vms
GET /api/vms/resource-group/:resourceGroup
GET /api/vms/:resourceGroup/:vmName
GET /api/vms/:resourceGroup/:vmName/status
GET /api/vmss
GET /api/vmss/resource-group/:resourceGroup
GET /api/vmss/:resourceGroup/:vmssName
GET /api/vmss/:resourceGroup/:vmssName/status
GET /api/vmss/:resourceGroup/:vmssName/instances
GET /api/vmss/:resourceGroup/:vmssName/instances/:instanceId
curl http://localhost:3000/api/vmscurl http://localhost:3000/api/vms/meu-resource-group/minha-vm/statuscurl http://localhost:3000/api/vmss/meu-resource-group/meu-vmss/instancesazure-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
- 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
Verifique se as credenciais no .env estão corretas e se o Service Principal tem permissões adequadas.
Aumente o timeout no cliente ou verifique a conectividade com Azure.
Certifique-se de que o Resource Group existe e que o Service Principal tem acesso a ele.
- 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
ISC
Pull requests são bem-vindos. Para mudanças maiores, abra uma issue primeiro para discutir o que você gostaria de mudar.