Email Processing

Un servidor de procesamiento de correos electrónicos que utiliza MongoDB para búsqueda semántica y SQLite para almacenamiento y recuperación eficientes.

Documentación

MseeP.ai Security Assessment Badge

Servidor MCP de Email Processing

Un servidor MCP multiplataforma que procesa correos electrónicos de Microsoft Outlook, genera embeddings vectoriales usando Ollama y proporciona capacidades de búsqueda semántica. Funciona en Windows, macOS y cualquier plataforma mediante la API de Microsoft Graph.

El servidor cumple con la especificación del Model Context Protocol (MCP) 2025-06-18 y usa el SDK oficial de MCP.

Características

Capacidades principales

  • Procesa correos de Outlook con filtrado por rango de fechas
  • Almacena correos en una base de datos SQLite con gestión adecuada de conexiones
  • Genera embeddings vectoriales usando Ollama (nomic-embed-text)
  • Búsqueda semántica en el contenido de los correos mediante el almacén vectorial de MongoDB
  • Soporte multi-buzón y multi-cuenta
  • Soporte para las carpetas de Bandeja de entrada, Elementos enviados y, opcionalmente, Elementos eliminados

Soporte multiplataforma

  • Windows: Automatización COM nativa de Outlook mediante pywin32
  • macOS: Integración con AppleScript para Outlook para Mac
  • Cualquier plataforma: API de Microsoft Graph para acceso basado en la nube (Windows, macOS, Linux, contenedores)

Cumplimiento de MCP 2025-06-18

  • Resultados estructurados de herramientas: Las herramientas devuelven modelos Pydantic correctamente tipados y validados
  • Transporte HTTP: Admite transportes STDIO y HTTP (Streamable HTTP)
  • Negociación de protocolo: Declara la versión del protocolo durante el handshake
  • Metadatos mejorados: Títulos y descripciones de herramientas para una mejor integración con la interfaz de usuario

Herramientas disponibles (12+)

CategoríaHerramientas
Procesamiento de correosprocess_emails
Búsqueda y análisissearch_emails, analyze_email_sentiment, find_actionable_items
Exportación de datosexport_email_data (CSV, JSON, HTML, Excel)
Gestión de carpetaslist_outlook_folders, get_folder_statistics, organize_emails_by_rules
Gestión de contactosextract_contacts
Estadísticasget_email_statistics, check_data_consistency

Requisitos previos

Requeridos (todas las plataformas)

  • Python 3.10 o superior
  • Ollama ejecutándose localmente con el modelo nomic-embed-text
  • Servidor MongoDB (para almacenar embeddings)

Requisitos específicos por plataforma

PlataformaRequisito
WindowsMicrosoft Outlook instalado + pywin32
macOSMicrosoft Outlook para Mac instalado
Graph APIRegistro de aplicación de Azure AD con permiso Mail.Read

Instalación

1. Instalar uv (si aún no está instalado)

pip install uv

2. Crear y activar el entorno virtual

uv venv .venv

# Windows
.venv\Scripts\activate

# macOS/Linux
source .venv/bin/activate

3. Instalar dependencias

Instalación principal (requerida):

uv pip install -e .

Extras específicos por plataforma:

# Windows (adds pywin32 for COM automation)
uv pip install -e ".[windows]"

# Graph API support (cross-platform cloud access)
uv pip install -e ".[graph]"

# All optional dependencies
uv pip install -e ".[all]"

4. Instalar el modelo de embeddings de Ollama

ollama pull nomic-embed-text

5. (Solo Graph API) Registrar la aplicación de Azure AD

Si usas la API de Microsoft Graph, debes registrar una aplicación en Azure AD:

  1. Ve a Azure Portal → Azure Active Directory → Registros de aplicaciones
  2. Haz clic en "Nuevo registro"
  3. Nombra tu aplicación y selecciona "Solo cuentas en este directorio organizativo"
  4. Después de la creación, anota el ID de aplicación (cliente) y el ID de directorio (inquilino)
  5. Ve a "Certificados y secretos" → "Nuevo secreto de cliente" → anota el valor del secreto
  6. Ve a "Permisos de API" → "Agregar un permiso" → "Microsoft Graph" → "Permisos de aplicación"
  7. Agrega: Mail.Read, User.Read.All (para la detección de múltiples cuentas)
  8. Haz clic en "Conceder consentimiento de administrador"

Configuración

Agrega el servidor a tu archivo de configuración de Claude for Desktop:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Variables de entorno

VariableDescripciónRequerida
MONGODB_URICadena de conexión de MongoDBSí
SQLITE_DB_PATHRuta al archivo de base de datos SQLiteSí
EMBEDDING_BASE_URLURL del servidor de Ollama (predeterminado: http://localhost:11434)No
EMBEDDING_MODELNombre del modelo de embeddings (predeterminado: nomic-embed-text)No
COLLECTION_NAMENombre de la colección de MongoDBSí
PROCESS_DELETED_ITEMSProcesar la carpeta de Elementos eliminados (predeterminado: "false")No
OUTLOOK_PROVIDERProveedor: auto, windows, mac, graph (predeterminado: "auto")No
LOCAL_TIMEZONEZona horaria para fechas (predeterminado: "UTC", p. ej., "America/Chicago")No

Variables de Graph API (requeridas cuando OUTLOOK_PROVIDER=graph):

VariableDescripción
GRAPH_CLIENT_IDID de aplicación (cliente) de Azure AD
GRAPH_CLIENT_SECRETSecreto de cliente de Azure AD
GRAPH_TENANT_IDID de inquilino de Azure AD
GRAPH_USER_EMAILSBuzones: lista separada por comas o "All" para autodetección

Configuración de Windows (automatización COM)

Usa automatización COM nativa de Outlook mediante pywin32.

{
  "mcpServers": {
    "outlook-email": {
      "command": "C:/path/to/.venv/Scripts/python",
      "args": ["C:/path/to/src/mcp_server.py"],
      "env": {
        "MONGODB_URI": "mongodb://localhost:27017/MCP?authSource=admin",
        "SQLITE_DB_PATH": "C:\\path\\to\\data\\emails.db",
        "EMBEDDING_BASE_URL": "http://localhost:11434",
        "EMBEDDING_MODEL": "nomic-embed-text",
        "COLLECTION_NAME": "outlook-emails",
        "OUTLOOK_PROVIDER": "windows",
        "LOCAL_TIMEZONE": "America/Chicago"
      }
    }
  }
}

Configuración de macOS (AppleScript)

Usa AppleScript para comunicarse con Outlook para Mac.

{
  "mcpServers": {
    "outlook-email": {
      "command": "/path/to/.venv/bin/python",
      "args": ["/path/to/src/mcp_server.py"],
      "env": {
        "MONGODB_URI": "mongodb://localhost:27017/MCP?authSource=admin",
        "SQLITE_DB_PATH": "/path/to/data/emails.db",
        "EMBEDDING_BASE_URL": "http://localhost:11434",
        "EMBEDDING_MODEL": "nomic-embed-text",
        "COLLECTION_NAME": "outlook-emails",
        "OUTLOOK_PROVIDER": "mac",
        "LOCAL_TIMEZONE": "America/Los_Angeles"
      }
    }
  }
}

Configuración de Graph API (multiplataforma)

Funciona en cualquier plataforma con credenciales de Azure AD. Admite uno o varios buzones.

Buzón único o buzones específicos:

{
  "mcpServers": {
    "outlook-email": {
      "command": "python",
      "args": ["src/mcp_server.py"],
      "env": {
        "MONGODB_URI": "mongodb://localhost:27017/MCP",
        "SQLITE_DB_PATH": "/data/emails.db",
        "EMBEDDING_BASE_URL": "http://localhost:11434",
        "EMBEDDING_MODEL": "nomic-embed-text",
        "COLLECTION_NAME": "outlook-emails",
        "OUTLOOK_PROVIDER": "graph",
        "GRAPH_CLIENT_ID": "your-azure-ad-client-id",
        "GRAPH_CLIENT_SECRET": "your-client-secret",
        "GRAPH_TENANT_ID": "your-tenant-id",
        "GRAPH_USER_EMAILS": "user1@example.com,user2@example.com"
      }
    }
  }
}

Todos los buzones del inquilino (autodetección):

{
  "mcpServers": {
    "outlook-email": {
      "command": "python",
      "args": ["src/mcp_server.py"],
      "env": {
        "MONGODB_URI": "mongodb://localhost:27017/MCP",
        "SQLITE_DB_PATH": "/data/emails.db",
        "EMBEDDING_BASE_URL": "http://localhost:11434",
        "EMBEDDING_MODEL": "nomic-embed-text",
        "COLLECTION_NAME": "outlook-emails",
        "OUTLOOK_PROVIDER": "graph",
        "GRAPH_CLIENT_ID": "your-azure-ad-client-id",
        "GRAPH_CLIENT_SECRET": "your-client-secret",
        "GRAPH_TENANT_ID": "your-tenant-id",
        "GRAPH_USER_EMAILS": "All"
      }
    }
  }
}

Autodetección de proveedor

Cuando OUTLOOK_PROVIDER está configurado como auto (predeterminado), el servidor selecciona automáticamente el mejor proveedor:

PlataformaProveedor seleccionado automáticamente
Windowswindows (automatización COM)
macOSmac (AppleScript)
Linux/Otrosgraph (requiere configuración de Azure AD)

Transporte HTTP (compatible con 2025-06-18)

Para el transporte HTTP, ejecuta el servidor con la bandera --http:

python src/mcp_server.py --http

Esto iniciará el servidor en http://localhost:8000/mcp con cumplimiento completo del protocolo 2025-06-18, incluyendo:

  • Negociación de la versión del protocolo
  • Esquemas de salida estructurada
  • Validación de cabeceras HTTP
  • Manejo adecuado de errores

El transporte HTTP admite modos de operación con estado y sin estado.


Herramientas disponibles

1. process_emails

Procesa correos de un rango de fechas especificado y devuelve resultados estructurados:

Entrada:

{
  "start_date": "2024-01-01",    # ISO format date (YYYY-MM-DD)
  "end_date": "2024-02-15",      # ISO format date (YYYY-MM-DD)
  "mailboxes": ["All"]           # List of mailbox names or ["All"] for all mailboxes
}

Salida (estructurada):

{
  "success": true,
  "processed_count": 150,
  "retrieved_count": 200,
  "stored_count": 180,
  "failed_count": 20,
  "message": "Successfully processed 150 emails (retrieved: 200, stored: 180, failed: 20)",
  "error": null
}

La herramienta:

  1. Se conectará a los buzones de Outlook especificados
  2. Recuperará correos de las carpetas de Bandeja de entrada y Elementos enviados (y Elementos eliminados si está habilitado)
  3. Almacenará correos en la base de datos SQLite
  4. Generará embeddings usando Ollama
  5. Almacenará embeddings en MongoDB para búsqueda semántica
  6. Devolverá resultados estructurados con estadísticas detalladas

Ejemplo de uso en Claude

"Process emails from February 1st to February 17th from all mailboxes"

Arquitectura

Diseño de conectores basado en proveedores

El servidor usa una abstracción basada en proveedores para el acceso multiplataforma a correos:

src/connectors/
├── base.py               # OutlookConnectorBase (abstract interface)
├── factory.py            # create_connector() with auto-detection
├── windows_connector.py  # Windows COM via pywin32
├── mac_connector.py      # macOS AppleScript via osascript
└── graph_connector.py    # Microsoft Graph API (cross-platform)

Todos los conectores implementan la misma interfaz y devuelven objetos EmailMetadata estandarizados independientemente de la plataforma.

Arquitectura de doble base de datos

El servidor usa un enfoque de almacenamiento híbrido:

Base de datos SQLite:

  • Almacenamiento principal de correos y metadatos
  • Capacidades de búsqueda de texto completo
  • Seguimiento del estado de procesamiento
  • Filtrado por rango de fechas y carpeta
  • Consultas estructuradas rápidas

MongoDB:

  • Almacenamiento de embeddings vectoriales (768 dimensiones)
  • Búsqueda de similitud semántica
  • Metadatos almacenados junto con los embeddings
  • Habilita la búsqueda impulsada por IA

Manejo de errores

El servidor proporciona mensajes de error detallados para problemas comunes:

  • Formatos de fecha no válidos
  • Problemas de conexión con Outlook
  • Errores de MongoDB
  • Fallos en la generación de embeddings con lógica de reintento
  • Errores de almacenamiento de SQLite
  • Problemas de conexión con el servidor de Ollama con reintentos automáticos

Gestión de recursos

El servidor implementa una gestión adecuada de recursos para prevenir problemas:

  • Las conexiones de base de datos (SQLite y MongoDB) se mantienen abiertas durante la vida útil del servidor para evitar errores de "No se puede operar en una base de datos cerrada"
  • Las conexiones solo se cierran cuando el servidor se apaga, mediante un manejador atexit
  • Se usan destructores y administradores de contexto como respaldo para garantizar que las conexiones se cierren cuando los objetos se recolectan como basura
  • La gestión de conexiones está diseñada para equilibrar el uso de recursos con la fiabilidad operativa
  • Lógica de reintento robusta para servicios externos como Ollama para manejar problemas temporales de conexión

Cumplimiento de MCP 2025-06-18

Este servidor se ha actualizado para cumplir con la especificación MCP 2025-06-18:

Características del protocolo

  • Versión del protocolo: Declara protocolVersion: "2025-06-18" durante el handshake
  • Salida estructurada: Todas las herramientas devuelven modelos Pydantic tipados y validados
  • Transporte HTTP: Admite Streamable HTTP con validación adecuada de cabeceras
  • Metadatos de herramientas: Descripciones mejoradas de herramientas con títulos y esquemas
  • Manejo de errores: Respuestas de error estructuradas con información detallada

Soporte de transporte

  • STDIO: Comunicación tradicional stdin/stdout (predeterminado)
  • HTTP: Streamable HTTP en localhost:8000/mcp con validación de cabeceras
  • Cabeceras de protocolo: Valida las cabeceras MCP-Protocol-Version y Origin
  • JSON-RPC de mensaje único: Sin soporte de solicitudes por lotes según la especificación 2025-06-18

Salida estructurada

La herramienta process_emails devuelve un ProcessEmailsResult estructurado con:

  • success: Booleano que indica el éxito de la operación
  • processed_count: Número de correos procesados correctamente
  • retrieved_count: Total de correos recuperados de Outlook
  • stored_count: Número de correos almacenados en SQLite
  • failed_count: Número de correos que fallaron en el procesamiento
  • message: Mensaje de estado legible por humanos
  • error: Detalles del error si la operación falló

Notas de seguridad

  • El servidor solo procesa correos de buzones especificados
  • Todos los datos se almacenan localmente (SQLite) y en MongoDB
  • Sin llamadas API externas excepto al servidor local de Ollama (y Microsoft Graph si se usa ese proveedor)
  • Requiere aprobación explícita del usuario para el procesamiento de correos
  • No se exponen datos sensibles de correos a través de la interfaz MCP
  • El transporte HTTP se vincula solo a localhost por seguridad
  • Graph API usa el flujo de credenciales de cliente OAuth 2.0 con Azure AD
  • Almacena las credenciales de Azure AD de forma segura (variables de entorno, no en el código)

Depuración

Si encuentras problemas:

  1. Verifica que los correos se procesaron correctamente (revisa la respuesta de process_emails)
  2. Asegúrate de que el servidor de Ollama esté ejecutándose para la generación de embeddings
  3. Comprueba que la base de datos SQLite sea accesible
  4. Verifica que la conexión de MongoDB funcione correctamente
  5. Usa la herramienta check_data_consistency para verificar la sincronización de SQLite/MongoDB

Depuración específica por plataforma

Windows:

  • Asegúrate de que Outlook esté ejecutándose y sea accesible
  • Comprueba que pywin32 esté instalado: pip show pywin32
  • Verifica que la automatización COM funcione: python -c "import win32com.client; print('OK')"

macOS:

  • Asegúrate de que Outlook para Mac esté instalado (no solo la aplicación web "New Outlook")
  • Prueba el acceso a AppleScript: osascript -e 'tell application "Microsoft Outlook" to get name'
  • Concede permiso a Terminal/IDE en Preferencias del Sistema → Seguridad y privacidad → Automatización

Graph API:

  • Verifica que la aplicación de Azure AD tenga los permisos correctos (Mail.Read, User.Read.All)
  • Comprueba que se haya concedido el consentimiento de administrador
  • Prueba la adquisición de tokens: las credenciales se registran al inicio
  • Verifica que GRAPH_USER_EMAILS esté configurado correctamente ("All" o correos separados por comas)

Limitaciones de la plataforma

PlataformaLimitación
WindowsRequiere la aplicación de escritorio de Outlook ejecutándose
macOS"New Outlook" puede tener soporte limitado de AppleScript; usa Graph API como alternativa
Graph APIRequiere configuración de Azure AD; se aplica un rango máximo de fechas de 30 días
TodasRango máximo de procesamiento de 30 días por solicitud

Próximas funciones

  • Resumen de correos mediante LLM
  • Categorización automática de correos
  • Informes de correos personalizables
  • Redacción de respuestas de correo en Outlook
  • Sugerencias de reglas de Outlook
  • Opciones ampliadas de base de datos con integración de Neo4j y ChromaDB