Skip to main content
Glama
pcsouzafv
by pcsouzafv
README.md
# 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.