Skip to main content
Glama
JoaoVitorp33

IMAP MCP Server

by JoaoVitorp33
README.md
# IMAP MCP Server

Servidor MCP (Model Context Protocol) que expõe suas contas de e-mail via IMAP como ferramentas — para usar no ChatGPT (Developer Mode / Connectors) ou no Claude. Funciona com qualquer provedor IMAP padrão: no seu caso, os dois e-mails profissionais (um acessado hoje pelo Nextcloud Mail, outro pelo Roundcube). O Gmail pessoal fica de fora, já que você o conecta por outro plugin no ChatGPT.

Nextcloud Mail e Roundcube são só "vitrines" web — por trás deles sempre existe uma caixa IMAP de verdade, hospedada em algum servidor de e-mail. Este servidor conecta direto nessa caixa, sem depender do Nextcloud/Roundcube estarem abertos.

## O que ele expõe

- `imap_list_accounts` — lista as contas configuradas
- `imap_list_folders` — lista as pastas de uma conta (Inbox, Enviados, Spam...)
- `imap_list_messages` — lista as mensagens mais recentes de uma pasta
- `imap_search_messages` — busca por texto (assunto/remetente/corpo) numa conta
- `imap_search_all_accounts` — busca o mesmo texto nas DUAS contas de uma vez
- `imap_get_message` — lê o conteúdo completo de uma mensagem
- `imap_mark_seen` — marca como lida/não lida (reversível; o servidor não apaga nada)

## Passo 1 — Descobrir o servidor IMAP de cada conta

Você vai precisar, para CADA uma das 2 contas: endereço do servidor IMAP (host), porta, e se usa SSL/TLS. O login é o mesmo e-mail e senha que você já usa no Nextcloud Mail / Roundcube.

**Conta acessada pelo Nextcloud Mail:**
1. Abra o app Mail do Nextcloud → ícone de engrenagem (⚙) → clique na conta → "Configurações da conta" / "Editar conta".
2. Ele mostra os campos IMAP: servidor, porta e tipo de criptografia (normalmente SSL/TLS, porta 993).

**Conta acessada pelo Roundcube:**
1. O Roundcube geralmente não mostra essas configurações direto na interface (quem define é o provedor de hospedagem).
2. Caminhos mais rápidos: veja o painel de controle da hospedagem (cPanel, Plesk, etc.) na seção de contas de e-mail — costuma ter uma página "Configurar cliente de e-mail" com host/porta prontos. Ou pergunte ao suporte/TI responsável pelo domínio.
3. Palpite comum (nem sempre certo): `mail.seudominio.com.br`, porta `993`, SSL/TLS.

Se quiser, me diga os domínios dos dois e-mails (sem me mandar a senha) que te ajudo a sugerir os hosts mais prováveis a testar.

## Passo 2 — Testar as credenciais antes de colocar no servidor (opcional, recomendado)

Com Node instalado localmente, num terminal:

```bash
node -e "
const {ImapFlow} = require('imapflow');
const c = new ImapFlow({host:'SEU_HOST', port:993, secure:true, auth:{user:'seu@email.com', pass:'sua-senha'}, logger:false});
c.connect().then(() => { console.log('OK, conectou!'); return c.logout(); }).catch(e => console.error('ERRO:', e.message));
"
```
(rode `npm install imapflow` numa pasta qualquer antes, se der erro de módulo não encontrado)

## Passo 3 — Subir o código para o GitHub

```bash
cd imap-mcp
git init
git add -A
git config user.email "seu-email@exemplo.com"
git config user.name "Seu Nome"
git commit -m "IMAP MCP server"
git branch -M main
git remote add origin https://github.com/SEU-USUARIO/imap-mcp.git
git push -u origin main
```

(crie o repositório vazio antes em https://github.com/new, nome `imap-mcp`)

## Passo 4 — Deploy no Render (grátis)

1. https://dashboard.render.com → **New +** → **Web Service** → conecte o repositório `imap-mcp`.
2. Confirme:
   - Build Command: `npm install && npm run build`
   - Start Command: `npm start`
   - Plan: Free
3. Em **Environment Variables**, adicione:

   - `IMAP_ACCOUNTS` → um JSON com as duas contas, tudo em uma linha só, por exemplo:
     ```json
     [{"id":"trabalho1","label":"Trabalho (Nextcloud)","host":"mail.dominio1.com","port":993,"secure":true,"user":"voce@dominio1.com","pass":"SUA_SENHA_1"},{"id":"trabalho2","label":"Trabalho (Roundcube)","host":"mail.dominio2.com","port":993,"secure":true,"user":"voce@dominio2.com","pass":"SUA_SENHA_2"}]
     ```
   - `MCP_SHARED_SECRET` → invente uma senha longa e aleatória (essencial aqui — sem isso, qualquer um com a URL leria seus e-mails)

4. Clique em **Deploy**. Anote a URL pública gerada, ex: `https://imap-mcp-xxxx.onrender.com`

O endpoint MCP fica em `https://imap-mcp-xxxx.onrender.com/mcp`.

> Nota: no plano free o serviço "dorme" após inatividade e demora ~30-50s pra acordar na primeira chamada seguinte.

## Passo 5 — Conectar no ChatGPT

1. ChatGPT → Settings → Connectors → Advanced → Developer mode (ou Create custom connector, dependendo do plano).
2. Nome: "E-mails (IMAP)".
3. URL: `https://imap-mcp-xxxx.onrender.com/mcp`
4. Autenticação: API Key / Bearer Token, colando o mesmo valor de `MCP_SHARED_SECRET`.
5. Teste pedindo: "busca em todos os meus e-mails por [assunto]" — isso aciona `imap_search_all_accounts`.

## Segurança

- Este servidor guarda as senhas das suas caixas de e-mail como variáveis de ambiente no Render — nunca no código.
- `MCP_SHARED_SECRET` é obrigatório na prática: e-mail é dado sensível.
- O servidor só lê e marca como lida/não lida — não apaga, não move e não envia e-mails. Se quiser essas funções depois, dá pra adicionar.
- Se alguma senha vazar ou precisar trocar, é só gerar uma nova no provedor de e-mail e atualizar a env var `IMAP_ACCOUNTS` no Render (o serviço reinicia sozinho).