Tool MCP: send_maintenance_email
Tool del servidor MCP de CreaRack Workspace que permite al Agente de Mantenimiento Semanal (y futuros agentes remotos) entregar informes directamente al inbox del staff, sin pasar por borradores de Gmail.
Contexto / motivación
El connector oficial de Gmail en claude.ai solo expone create_draft, no send_email. Esto causaba que el informe ejecutivo del Agente de Mantenimiento Semanal quedara en la carpeta Borradores y nunca llegara al inbox de Edu. Este tool resuelve el problema de forma definitiva delegando el envío a Resend, cuyo dominio crearack.com ya estaba verificado para el SaaS.
Ubicación en el código
| Artefacto | Ruta |
|---|---|
| Handler principal | functions/api/mcp/handlers/email.ts |
Registro en executeTool | functions/api/mcp/index.ts |
| Definición de schema | functions/api/mcp/tools.ts |
| Env type | functions/types.ts (RESEND_API_KEY?: string) |
Especificación del tool
Nombre
send_maintenance_email
Input schema
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
to | string | No | Destinatario. Default: edudomo2@gmail.com. Debe estar en la allowlist. |
subject | string | Sí | Asunto del email. |
text | string | Condicional | Cuerpo en texto plano. Requerido si no se proporciona html. |
html | string | Condicional | Cuerpo HTML. Requerido si no se proporciona text. |
Respuesta (éxito)
{
"id": "<resend-message-id>",
"to": "edudomo2@gmail.com",
"subject": "Informe semanal ...",
"status": "sent",
"from": "Mantenimiento CreaRackSL <noreply@crearack.com>"
}
Errores posibles
| Condición | Mensaje de error |
|---|---|
RESEND_API_KEY no configurada | RESEND_API_KEY not configured in Worker env |
Sin subject | subject is required |
Sin text ni html | at least one of text or html body is required |
| Destinatario fuera de allowlist | Recipient '<to>' not in allowlist + lista de permitidos |
| Error HTTP de Resend | Resend API <status> + detalle |
Seguridad y defensa en profundidad
Autenticación de transporte
El endpoint /api/mcp valida Bearer token via authenticate() en index.ts antes de llegar a cualquier handler. handleEmail asume que la request ya está autenticada.
Allowlist de destinatarios (hardcoded)
El handler tiene una Set<string> con los únicos destinatarios permitidos. Si el agente pide enviar a cualquier otro correo, el tool devuelve error con la lista de permitidos. Esto acota el blast radius ante prompt injection o prompt comprometido.
Allowlist activa (commit f9aba6a):
edudomo2@gmail.com✅ activatfuentes@esfericlabs.com— pendiente activación cuenta Esferic Labsdfuentes@esfericlabs.com— pendiente activación cuenta Esferic Labseesquembri@esfericlabs.com— pendiente activación cuenta Esferic Labs
FROM hardcoded
Mantenimiento CreaRackSL <noreply@crearack.com>
El display name es deliberadamente distinto del SaaS (CreaRack Pro) para separar visualmente ambos flujos en el inbox.
Logging
Registrado en LOGGED_TOOLS con:
send_maintenance_email: { action: 'send', entity_type: 'email' }
Cada invocación queda trazada en el log de actividad del MCP.
Variables de entorno requeridas
| Variable | Scope | Estado |
|---|---|---|
RESEND_API_KEY | CF Pages env (Worker) | ✅ configurada (fase A completada por @Esquembri) |
Pasos pendientes (post-commit f9aba6a)
- Confirmar deploy CF Pages verde — incorpora
RESEND_API_KEY. - Actualizar prompt
maintenance-weeklya v1.3 — sustituirmcp__Gmail__create_draftporsend_maintenance_email. - Run manual de verificación — comprobar que el email llega al inbox real.
Historial
| Fecha | Cambio |
|---|---|
| 2026-05-13 | Tool creada (f9aba6a). Reemplaza flujo via Gmail__create_draft del connector claude.ai. |
Véase también
- [[workspace—agentes-ia]]
- [[workspace—que-es-workspace]]