from fastmcp import FastMCP
from fastapi import FastAPI
from fastmcp.server.auth import StaticTokenVerifier
from dotenv import load_dotenv
import smtplib
from email.mime.text import MIMEText
import os
import sys
load_dotenv()
print("=" * 50, file=sys.stderr)
print("INICIANDO SERVIDOR FGJ MULTIMEDIOS", file=sys.stderr)
print("=" * 50, file=sys.stderr)
SMTP_SERVER = "smtp.gmail.com"
EMAIL_USER = os.getenv("EMAIL_USER")
EMAIL_PASS = os.getenv("EMAIL_PASS")
# Obtener el token - usar valor por defecto si no está configurado
MCP_TOKEN = os.getenv("MCP_TOKEN", "NGgba3XYHcwzQpKv9wcC_yor6pfaYSDaBfvxvwxP51k")
print(f"EMAIL_USER: {'Configurado' if EMAIL_USER else 'NO CONFIGURADO'}", file=sys.stderr)
print(f"EMAIL_PASS: {'Configurado' if EMAIL_PASS else 'NO CONFIGURADO'}", file=sys.stderr)
print(f"MCP_TOKEN: {MCP_TOKEN}", file=sys.stderr)
print("=" * 50, file=sys.stderr)
# Configurar tokens para autenticación (formato simplificado como en el ejemplo)
tokens = {
MCP_TOKEN: {
"client_id": "fgj-client",
"scopes": ["email"]
}
}
verifier = StaticTokenVerifier(tokens=tokens)
mcp = FastMCP("FGJ MCP Server", auth=verifier)
mcp_app = mcp.http_app()
api = FastAPI(lifespan=mcp_app.lifespan)
@api.get("/api/status")
def status():
return {"status": "ok"}
@mcp.tool(
name="send_email",
description="Envía un correo institucional FGJ Multimedios"
)
def send_email(to: str, subject: str, body: str):
msg = MIMEText(body, "html")
msg["From"] = EMAIL_USER
msg["To"] = to
msg["Subject"] = subject
with smtplib.SMTP(SMTP_SERVER, 587) as server:
server.starttls()
server.login(EMAIL_USER, EMAIL_PASS)
server.sendmail(EMAIL_USER, [to], msg.as_string())
return {"status": "success", "to": to, "subject": subject}
@mcp.prompt(
name="email_context",
description="Contexto institucional FGJ Multimedios"
)
def email_context():
return """
Eres FGJ Multimedios, SRL, una agencia dominicana de comunicación,
marketing digital y tecnología con experiencia en el sector público
y privado, cumpliendo la Ley 340-06.
Redacta correos profesionales, institucionales y claros.
No uses emojis ni lenguaje informal.
IMPORTANTE:
- El correo DEBE iniciar con un saludo personalizado usando el nombre del cliente que se te proporcionará.
- El correo DEBE terminar con la siguiente firma:
Atentamente,
Bélgica Jiménez
Gerente General
FGJ Multimedios, SRL
Tel: 849-634-9634
Email: info@fgjmedios.com
"""
api.mount("/api", mcp_app)
# Exponer la app para FastMCP Cloud
app = api
if __name__ == "__main__":
import uvicorn
uvicorn.run(api, host="0.0.0.0", port=8000)