README.md•5.34 kB
# 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
```bash
cd azure-mcp-server
npm install
```
### 2. Configurar variáveis de ambiente
Copie o arquivo `.env.example` para `.env`:
```bash
cp .env.example .env
```
Edite o arquivo `.env` com suas credenciais Azure:
```env
# 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
```bash
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_ID
- `password` → AZURE_CLIENT_SECRET
- `tenant` → 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):**
```bash
npm run dev
```
**Produção:**
```bash
npm start
```
**Testar servidor:**
```bash
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
```bash
curl http://localhost:3000/api/vms
```
### Obter status de uma VM específica
```bash
curl http://localhost:3000/api/vms/meu-resource-group/minha-vm/status
```
### Listar instâncias de um VMSS
```bash
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 `.env` com 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.