Email Processing

Um servidor de processamento de e-mail que utiliza MongoDB para busca semântica e SQLite para armazenamento e recuperação eficientes.

Documentação

MseeP.ai Security Assessment Badge

Servidor MCP de Processamento de Email

Um servidor MCP multiplataforma que processa emails do Microsoft Outlook, gera embeddings vetoriais usando Ollama e oferece recursos de busca semântica. Funciona em Windows, macOS e qualquer plataforma via API do Microsoft Graph.

O servidor está em conformidade com a especificação Model Context Protocol (MCP) 2025-06-18 e usa o SDK oficial do MCP.

Recursos

Capacidades Principais

  • Processa emails do Outlook com filtro por intervalo de datas
  • Armazena emails em banco de dados SQLite com gerenciamento adequado de conexões
  • Gera embeddings vetoriais usando Ollama (nomic-embed-text)
  • Busca semântica no conteúdo dos emails via armazenamento vetorial MongoDB
  • Suporte a múltiplas caixas de entrada e múltiplas contas
  • Suporte às pastas Caixa de Entrada, Itens Enviados e, opcionalmente, Itens Excluídos

Suporte Multiplataforma

  • Windows: Automação COM nativa do Outlook via pywin32
  • macOS: Integração com AppleScript no Outlook para Mac
  • Qualquer Plataforma: API do Microsoft Graph para acesso em nuvem (Windows, macOS, Linux, contêineres)

Conformidade com MCP 2025-06-18

  • Resultados Estruturados de Ferramentas: As ferramentas retornam modelos Pydantic tipados e validados
  • Transporte HTTP: Suporta transportes STDIO e HTTP (HTTP Streamable)
  • Negociação de Protocolo: Declara a versão do protocolo durante o handshake
  • Metadados Aprimorados: Títulos e descrições de ferramentas para melhor integração com a interface

Ferramentas Disponíveis (12+)

CategoriaFerramentas
Processamento de Emailprocess_emails
Busca e Análisesearch_emails, analyze_email_sentiment, find_actionable_items
Exportação de Dadosexport_email_data (CSV, JSON, HTML, Excel)
Gerenciamento de Pastaslist_outlook_folders, get_folder_statistics, organize_emails_by_rules
Gerenciamento de Contatosextract_contacts
Estatísticasget_email_statistics, check_data_consistency

Pré-requisitos

Obrigatórios (Todas as Plataformas)

  • Python 3.10 ou superior
  • Ollama rodando localmente com o modelo nomic-embed-text
  • Servidor MongoDB (para armazenar embeddings)

Requisitos Específicos por Plataforma

PlataformaRequisito
WindowsMicrosoft Outlook instalado + pywin32
macOSMicrosoft Outlook para Mac instalado
Graph APIRegistro de aplicativo no Azure AD com permissão Mail.Read

Instalação

1. Instalar o uv (se ainda não estiver instalado)

pip install uv

2. Criar e ativar o ambiente virtual

uv venv .venv

# Windows
.venv\Scripts\activate

# macOS/Linux
source .venv/bin/activate

3. Instalar as dependências

Instalação principal (obrigatória):

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 o modelo de embedding do Ollama

ollama pull nomic-embed-text

5. (Somente Graph API) Registrar o aplicativo no Azure AD

Se estiver usando a API do Microsoft Graph, você precisa registrar um aplicativo no Azure AD:

  1. Vá para Portal Azure → Azure Active Directory → Registros de aplicativos
  2. Clique em "Novo registro"
  3. Dê um nome ao seu aplicativo e selecione "Contas somente neste diretório organizacional"
  4. Após a criação, anote o ID do aplicativo (cliente) e o ID do diretório (locatário)
  5. Vá para "Certificados e segredos" → "Novo segredo do cliente" → anote o valor do segredo
  6. Vá para "Permissões de API" → "Adicionar uma permissão" → "Microsoft Graph" → "Permissões de aplicativo"
  7. Adicione: Mail.Read, User.Read.All (para descoberta de múltiplas contas)
  8. Clique em "Conceder consentimento do administrador"

Configuração

Adicione o servidor ao seu arquivo de configuração do Claude for Desktop:

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

Variáveis de Ambiente

VariávelDescriçãoObrigatória
MONGODB_URIString de conexão do MongoDBSim
SQLITE_DB_PATHCaminho para o arquivo do banco de dados SQLiteSim
EMBEDDING_BASE_URLURL do servidor Ollama (padrão: http://localhost:11434)Não
EMBEDDING_MODELNome do modelo de embedding (padrão: nomic-embed-text)Não
COLLECTION_NAMENome da coleção no MongoDBSim
PROCESS_DELETED_ITEMSProcessar pasta Itens Excluídos (padrão: "false")Não
OUTLOOK_PROVIDERProvedor: auto, windows, mac, graph (padrão: "auto")Não
LOCAL_TIMEZONEFuso horário para datas (padrão: "UTC", ex.: "America/Chicago")Não

Variáveis do Graph API (obrigatórias quando OUTLOOK_PROVIDER=graph):

VariávelDescrição
GRAPH_CLIENT_IDID do aplicativo (cliente) do Azure AD
GRAPH_CLIENT_SECRETSegredo do cliente do Azure AD
GRAPH_TENANT_IDID do locatário do Azure AD
GRAPH_USER_EMAILSCaixas de correio: lista separada por vírgulas ou "All" para descoberta automática

Configuração no Windows (Automação COM)

Usa automação COM nativa do Outlook via 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"
      }
    }
  }
}

Configuração no macOS (AppleScript)

Usa AppleScript para se comunicar com o 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"
      }
    }
  }
}

Configuração do Graph API (Multiplataforma)

Funciona em qualquer plataforma com credenciais do Azure AD. Suporta caixas de correio únicas ou múltiplas.

Caixa de correio única ou caixas específicas:

{
  "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"
      }
    }
  }
}

Todas as caixas de correio no locatário (descoberta automática):

{
  "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"
      }
    }
  }
}

Detecção Automática de Provedor

Quando OUTLOOK_PROVIDER está definido como auto (padrão), o servidor seleciona automaticamente o melhor provedor:

PlataformaProvedor Selecionado Automaticamente
Windowswindows (automação COM)
macOSmac (AppleScript)
Linux/Outrosgraph (requer configuração do Azure AD)

Transporte HTTP (Conformidade com 2025-06-18)

Para transporte HTTP, execute o servidor com o sinalizador --http:

python src/mcp_server.py --http

Isso iniciará o servidor em http://localhost:8000/mcp com conformidade total com o protocolo 2025-06-18, incluindo:

  • Negociação de versão do protocolo
  • Esquemas de saída estruturados
  • Validação de cabeçalhos HTTP
  • Tratamento adequado de erros

O transporte HTTP suporta modos de operação com e sem estado.


Ferramentas Disponíveis

1. process_emails

Processa emails de um intervalo de datas especificado e retorna resultados estruturados:

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
}

Saída (Estruturada):

{
  "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
}

A ferramenta irá:

  1. Conectar-se às caixas de correio do Outlook especificadas
  2. Recuperar emails das pastas Caixa de Entrada e Itens Enviados (e Itens Excluídos, se habilitado)
  3. Armazenar emails no banco de dados SQLite
  4. Gerar embeddings usando Ollama
  5. Armazenar embeddings no MongoDB para busca semântica
  6. Retornar resultados estruturados com estatísticas detalhadas

Exemplo de Uso no Claude

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

Arquitetura

Design de Conectores Baseado em Provedores

O servidor usa uma abstração baseada em provedores para acesso multiplataforma a emails:

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 os conectores implementam a mesma interface, retornando objetos EmailMetadata padronizados, independentemente da plataforma.

Arquitetura de Banco de Dados Duplo

O servidor usa uma abordagem de armazenamento híbrido:

Banco de Dados SQLite:

  • Armazenamento primário de emails e metadados
  • Recursos de busca em texto completo
  • Rastreamento de status de processamento
  • Filtragem por intervalo de datas e pastas
  • Consultas estruturadas rápidas

MongoDB:

  • Armazenamento de embeddings vetoriais (768 dimensões)
  • Busca por similaridade semântica
  • Metadados armazenados junto com embeddings
  • Habilita busca com IA

Tratamento de Erros

O servidor fornece mensagens de erro detalhadas para problemas comuns:

  • Formatos de data inválidos
  • Problemas de conexão com o Outlook
  • Erros do MongoDB
  • Falhas na geração de embeddings com lógica de repetição
  • Erros de armazenamento no SQLite
  • Problemas de conexão com o servidor Ollama com repetições automáticas

Gerenciamento de Recursos

O servidor implementa gerenciamento adequado de recursos para evitar problemas:

  • As conexões de banco de dados (SQLite e MongoDB) são mantidas abertas durante a vida útil do servidor para evitar erros de "Não é possível operar em um banco de dados fechado"
  • As conexões são fechadas apenas quando o servidor é encerrado, usando um manipulador atexit
  • Destrutores e gerenciadores de contexto são usados como fallback para garantir que as conexões sejam fechadas quando os objetos são coletados pelo garbage collector
  • O gerenciamento de conexões é projetado para equilibrar o uso de recursos com a confiabilidade operacional
  • Lógica robusta de repetição para serviços externos como Ollama para lidar com problemas temporários de conexão

Conformidade com MCP 2025-06-18

Este servidor foi atualizado para estar em conformidade com a especificação MCP 2025-06-18:

Recursos do Protocolo

  • Versão do Protocolo: Declara protocolVersion: "2025-06-18" durante o handshake
  • Saída Estruturada: Todas as ferramentas retornam modelos Pydantic tipados e validados
  • Transporte HTTP: Suporta HTTP Streamable com validação adequada de cabeçalhos
  • Metadados de Ferramentas: Descrições aprimoradas de ferramentas com títulos e esquemas
  • Tratamento de Erros: Respostas de erro estruturadas com informações detalhadas

Suporte a Transporte

  • STDIO: Comunicação tradicional stdin/stdout (padrão)
  • HTTP: HTTP Streamable em localhost:8000/mcp com validação de cabeçalhos
  • Cabeçalhos de Protocolo: Valida cabeçalhos MCP-Protocol-Version e Origin
  • JSON-RPC de Mensagem Única: Sem suporte a solicitações em lote conforme especificação 2025-06-18

Saída Estruturada

A ferramenta process_emails retorna um ProcessEmailsResult estruturado com:

  • success: Booleano indicando sucesso da operação
  • processed_count: Número de emails processados com sucesso
  • retrieved_count: Total de emails recuperados do Outlook
  • stored_count: Número de emails armazenados no SQLite
  • failed_count: Número de emails que falharam no processamento
  • message: Mensagem de status legível por humanos
  • error: Detalhes do erro se a operação falhou

Notas de Segurança

  • O servidor processa apenas emails de caixas de correio especificadas
  • Todos os dados são armazenados localmente (SQLite) e no MongoDB
  • Nenhuma chamada de API externa, exceto para o servidor Ollama local (e Microsoft Graph se estiver usando esse provedor)
  • Requer aprovação explícita do usuário para processamento de emails
  • Nenhum dado confidencial de email é exposto pela interface MCP
  • O transporte HTTP vincula-se apenas a localhost por segurança
  • O Graph API usa fluxo de credenciais de cliente OAuth 2.0 com Azure AD
  • Armazene as credenciais do Azure AD com segurança (variáveis de ambiente, não no código)

Depuração

Se você encontrar problemas:

  1. Verifique se os emails foram processados com sucesso (verifique a resposta do process_emails)
  2. Certifique-se de que o servidor Ollama esteja rodando para geração de embeddings
  3. Verifique se o banco de dados SQLite está acessível
  4. Verifique se a conexão com o MongoDB está funcionando corretamente
  5. Use a ferramenta check_data_consistency para verificar a sincronização SQLite/MongoDB

Depuração Específica por Plataforma

Windows:

  • Certifique-se de que o Outlook esteja rodando e acessível
  • Verifique se o pywin32 está instalado: pip show pywin32
  • Verifique se a automação COM funciona: python -c "import win32com.client; print('OK')"

macOS:

  • Certifique-se de que o Outlook para Mac esteja instalado (não apenas o aplicativo web "Novo Outlook")
  • Teste o acesso via AppleScript: osascript -e 'tell application "Microsoft Outlook" to get name'
  • Conceda permissão ao Terminal/IDE em Preferências do Sistema → Segurança e Privacidade → Automação

Graph API:

  • Verifique se o aplicativo do Azure AD tem as permissões corretas (Mail.Read, User.Read.All)
  • Verifique se o consentimento do administrador foi concedido
  • Teste a aquisição de token: as credenciais são registradas na inicialização
  • Verifique se GRAPH_USER_EMAILS está definido corretamente ("All" ou emails separados por vírgula)

Limitações por Plataforma

PlataformaLimitação
WindowsRequer o aplicativo de desktop do Outlook em execução
macOSO "Novo Outlook" pode ter suporte limitado a AppleScript; use o Graph API como alternativa
Graph APIRequer configuração do Azure AD; intervalo máximo de datas de 30 dias imposto
TodasIntervalo máximo de processamento de 30 dias por solicitação

Recursos Futuros

  • Resumo de emails usando LLMs
  • Categorização automática de emails
  • Relatórios de email personalizáveis
  • Rascunho de respostas de email no Outlook
  • Sugestões de regras do Outlook
  • Opções expandidas de banco de dados com integração Neo4j e ChromaDB