Servidor simplificado para enviar correos electrónicos, siguiendo el patrón de los servidores MCP de OpenAI y Twilio.
Single tool 'send_email' has a complete JSON Schema with typed parameters and descriptions, but critical issues undermine production readiness. The tool description (Spanish, ~150 chars) is adequate but lacks actionable guidance on when/why to use it. Parameter descriptions exist but are generic ('Lista de destinatarios'). The schema embeds a 'role' field that violates MCP patterns, role should not be a tool parameter. Hardcoded sender address ('[email protected]') is exposed in code, not injected via secrets. No error handling guidance, no recovery paths, no idempotency markers. The tool combines email composition + SMTP transmission (two concerns). Output schema is not documented, callers don't know what fields to expect. Missing tool annotations (destructiveHint for send operations). Overall: functional but not production-grade.
Envía un correo electrónico a través de SMTP con soporte para múltiples destinatarios, cuerpo de texto y HTML, y configuración SMTP personalizada.
Hardcoded credentials in source code. Sender address '[email protected]' is hardcoded in _send_email_logic(), not injected via environment or vault. Violates secret-injection pattern.
No output schema documented. Tool returns success/error but callers cannot see what fields are in the response. Breaks tool chaining and forces LLMs to guess response structure.
Missing tool annotations. 'send_email' is a destructive operation (irreversible side effect) but lacks destructiveHint annotation. LLMs cannot distinguish safe vs risky tools.
No error recovery guidance. Error responses are generic ('Error SMTP: ...') without actionable next steps. LLMs cannot self-correct or retry intelligently.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 39 | <=2025-11-25 | v2 |
Tool parameter 'role' violates MCP patterns. Role is a protocol-level concept, not a tool input. Should be removed; role comes from the request context, not the tool caller.