=========================================================
SMARTEROS MCP CLOUDFLARE
=========================================================
Módulo MCP para gestión automática de subdominios en Cloudflare.
Propietario: SmarterMCP (tenant raíz) Función: Provisionar subdominios dinámicos para tenants de SmarterOS
🎯 Funcionalidad
Este módulo permite:
✅ Crear subdominios automáticamente para cada tenant ✅ Validar disponibilidad antes de crear ✅ Eliminar subdominios cuando un tenant se da de baja ✅ Sincronizar con Supabase (tabla tenant_domains) ✅ Health checks para verificar conectividad
📦 Instalación
cd /root/smarteros-mcp-cloudflare
npm install
npm run build⚙️ Configuración
- Copiar archivo de ejemplo:
cp .env.example .env- Configurar credenciales en
.env:
CLOUDFLARE_API_TOKEN=your_token_here
CLOUDFLARE_ZONE_ID=your_zone_id
CLOUDFLARE_ACCOUNT_ID=your_account_id
PRIMARY_DOMAIN=smarterbot.cl
SECONDARY_DOMAIN=smos.cl
SUPABASE_URL=https://rjfcmmzjlguiititkmyh.supabase.co
SUPABASE_SERVICE_ROLE_KEY=your_key_here
SMARTERMCP_TENANT_ID=3db1a82a-028b-48c5-b20f-da873724c069- Obtener credenciales de Cloudflare:
- Ve a: https://dash.cloudflare.com/profile/api-tokens
- Crea un token con permisos:
- Zone.DNS → Edit - Zone.Zone → Read
- Copia el API Token
- Copia el Zone ID desde la página de tu dominio
🧪 Testing
Test de conexión
npm run testEsto verifica:
- ✅ Conectividad con Cloudflare
- ✅ Acceso a la zona DNS
- ✅ Conexión con Supabase
- ✅ Validación de dominios
Provisionar tenant (dry run)
npm run provision -- --tenant=TENANT_ID --slug=company-name --dry-runEjemplo real:
npm run provision -- \
--tenant=d2f2a7e0-c328-41e7-babf-1788cccbc0a5 \
--slug=nunex \
--domain=smarterbot.cl \
--dry-runProvisionar tenant (producción)
npm run provision -- --tenant=TENANT_ID --slug=company-name🔌 Uso programático
import { CloudflareMCP } from '@smarteros/mcp-cloudflare';
const config = {
apiToken: process.env.CLOUDFLARE_API_TOKEN!,
zoneId: process.env.CLOUDFLARE_ZONE_ID!,
accountId: process.env.CLOUDFLARE_ACCOUNT_ID!,
primaryDomain: 'smarterbot.cl',
};
const mcp = new CloudflareMCP(
config,
process.env.SUPABASE_URL!,
process.env.SUPABASE_SERVICE_ROLE_KEY!
);
// Crear subdominio
const result = await mcp.createTenantSubdomain({
tenantId: 'uuid-here',
tenantSlug: 'mycompany',
domain: 'smarterbot.cl',
type: 'CNAME',
target: 'smarterbot.cl',
proxied: true,
});
console.log(result);
// {
// success: true,
// subdomain: 'mycompany.smarterbot.cl',
// recordId: 'cloudflare-record-id',
// metadata: { ... }
// }📡 API REST (Integración con tenant-api)
POST /api/tenant/provision-domain
Request:
{
"tenant_id": "d2f2a7e0-c328-41e7-babf-1788cccbc0a5",
"slug": "nunex",
"domain": "smarterbot.cl"
}Response:
{
"success": true,
"subdomain": "nunex.smarterbot.cl",
"record_id": "abc123...",
"metadata": {
"created_at": "2025-11-30T12:00:00Z",
"tenant_id": "d2f2a7e0-c328-41e7-babf-1788cccbc0a5",
"proxied": true,
"ttl": 3600
}
}🔄 Integración con N8N
Puedes crear un workflow de onboarding que:
- Recibe signup desde Supabase Auth
- Crea tenant en la base de datos
- Llama al MCP para crear subdominio
- Registra en
tenant_domains - Notifica por WhatsApp/Telegram
Endpoint N8N:
POST https://n8n.smarterbot.cl/webhook/provision-tenantPayload:
{
"tenant_id": "uuid",
"slug": "company-name",
"email": "user@company.com"
}🗂️ Estructura de archivos
smarteros-mcp-cloudflare/
├── src/
│ └── index.ts # Lógica principal del MCP
├── types/
│ └── index.ts # Type definitions
├── scripts/
│ ├── test-connection.js # Test de conectividad
│ └── provision-tenant.js # CLI para provisionar
├── config/
├── .env.example # Plantilla de configuración
├── package.json
├── tsconfig.json
└── README.md🔐 Seguridad
- ✅ API Token limitado (solo DNS Write + Zone Read)
- ✅ Service Role Key de Supabase (nunca expuesto a frontend)
- ✅ Validación de formato y blacklist de subdominios
- ✅ Dry run mode para testing sin riesgo
- ✅ Logs detallados para auditoría
🚀 Próximos pasos
Cuando tengas el API Token listo:
# 1. Configurar .env
nano .env
# 2. Test de conexión
npm run test
# 3. Provisionar tenant demo
npm run provision -- \
--tenant=d2f2a7e0-c328-41e7-babf-1788cccbc0a5 \
--slug=demo
# 4. Integrar con tenant-api
# (agregar endpoint /api/tenant/provision-domain)
# 5. Conectar con N8N onboarding
# (webhook para provisión automática)📚 Recursos
📝 Notas
- Este módulo NO debe ser público en repos
- El API Token tiene permisos limitados (principio de menor privilegio)
- Los subdominios se crean con Cloudflare Proxy activado (protección DDoS)
- TTL default: 3600s (1 hora)
- El sistema soporta dry-run para testing seguro
✅ Status: Listo para activar cuando tengas el API Token 🔧 Propietario: SmarterMCP 📅 Última actualización: 2025-11-30
