Gmail AutoAuth MCP Server
Um servidor MCP para integrar o Gmail com suporte a autenticação automática.
Documentação
Gmail AutoAuth MCP Server
Um servidor Model Context Protocol (MCP) para integração com o Gmail no Claude Desktop com suporte a autenticação automática. Este servidor permite que assistentes de IA gerenciem o Gmail por meio de interações em linguagem natural.
Recursos
- Envio de e-mails com assunto, conteúdo, anexos e destinatários
- Suporte completo a anexos - envie e receba arquivos anexados
- Download de anexos de e-mail para o sistema de arquivos local
- Suporte a e-mails HTML e mensagens multipartes com versões em HTML e texto simples
- Suporte completo a caracteres internacionais em linhas de assunto e conteúdo de e-mails
- Leitura de mensagens de e-mail por ID com tratamento avançado de estrutura MIME
- Exibição aprimorada de anexos mostrando nomes de arquivo, tipos, tamanhos e IDs de download
- Pesquisa de e-mails com vários critérios (assunto, remetente, intervalo de datas)
- Gerenciamento abrangente de rótulos com capacidade de criar, atualizar, excluir e listar rótulos
- Listagem de todos os rótulos disponíveis do Gmail (do sistema e definidos pelo usuário)
- Listagem de e-mails na caixa de entrada, enviados ou rótulos personalizados
- Marcação de e-mails como lidos/não lidos
- Movimentação de e-mails para diferentes rótulos/pastas
- Exclusão de e-mails
- Operações em lote para processar eficientemente vários e-mails de uma vez
- Integração completa com a API do Gmail
- Fluxo de autenticação OAuth2 simples com abertura automática do navegador
- Suporte a credenciais de aplicativos Desktop e Web
- Armazenamento global de credenciais para conveniência
Instalação e Autenticação
Instalação via Smithery
Para instalar o Gmail AutoAuth para Claude Desktop automaticamente via Smithery:
npx -y @smithery/cli install @gongrzhe/server-gmail-autoauth-mcp --client claude
Instalação Manual
-
Crie um projeto no Google Cloud e obtenha as credenciais:
a. Crie um projeto no Google Cloud:
- Acesse o Google Cloud Console
- Crie um novo projeto ou selecione um existente
- Ative a API do Gmail para o seu projeto
b. Crie credenciais OAuth 2.0:
- Acesse "APIs & Services" > "Credentials"
- Clique em "Create Credentials" > "OAuth client ID"
- Escolha "Desktop app" ou "Web application" como tipo de aplicativo
- Dê um nome e clique em "Create"
- Para aplicativos Web, adicione
http://localhost:3000/oauth2callbackaos URIs de redirecionamento autorizados - Baixe o arquivo JSON com as chaves OAuth do seu cliente
- Renomeie o arquivo de chave para
gcp-oauth.keys.json
-
Execute a Autenticação:
Você pode autenticar de duas maneiras:
a. Autenticação Global (Recomendada):
# First time: Place gcp-oauth.keys.json in your home directory's .gmail-mcp folder mkdir -p ~/.gmail-mcp mv gcp-oauth.keys.json ~/.gmail-mcp/ # Run authentication from anywhere npx @gongrzhe/server-gmail-autoauth-mcp authb. Autenticação Local:
# Place gcp-oauth.keys.json in your current directory # The file will be automatically copied to global config npx @gongrzhe/server-gmail-autoauth-mcp authO processo de autenticação irá:
- Procurar por
gcp-oauth.keys.jsonno diretório atual ou em~/.gmail-mcp/ - Se encontrado no diretório atual, copiá-lo para
~/.gmail-mcp/ - Abrir seu navegador padrão para autenticação do Google
- Salvar as credenciais como
~/.gmail-mcp/credentials.json
Nota:
- Após a autenticação bem-sucedida, as credenciais são armazenadas globalmente em
~/.gmail-mcp/e podem ser usadas de qualquer diretório - Credenciais de aplicativos Desktop e Web são suportadas
- Para credenciais de aplicativos Web, certifique-se de adicionar
http://localhost:3000/oauth2callbackaos seus URIs de redirecionamento autorizados
- Procurar por
-
Configure no Claude Desktop:
{
"mcpServers": {
"gmail": {
"command": "npx",
"args": [
"@gongrzhe/server-gmail-autoauth-mcp"
]
}
}
}
Suporte a Docker
Se você preferir usar Docker:
- Autenticação:
docker run -i --rm \
--mount type=bind,source=/path/to/gcp-oauth.keys.json,target=/gcp-oauth.keys.json \
-v mcp-gmail:/gmail-server \
-e GMAIL_OAUTH_PATH=/gcp-oauth.keys.json \
-e "GMAIL_CREDENTIALS_PATH=/gmail-server/credentials.json" \
-p 3000:3000 \
mcp/gmail auth
- Uso:
{
"mcpServers": {
"gmail": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"mcp-gmail:/gmail-server",
"-e",
"GMAIL_CREDENTIALS_PATH=/gmail-server/credentials.json",
"mcp/gmail"
]
}
}
}
Autenticação em Servidor na Nuvem
Para ambientes de servidor na nuvem (como n8n), você pode especificar uma URL de callback personalizada durante a autenticação:
npx @gongrzhe/server-gmail-autoauth-mcp auth https://gmail.gongrzhe.com/oauth2callback
Instruções de Configuração para Ambiente na Nuvem
-
Configure o Proxy Reverso:
- Configure seu contêiner n8n para expor uma porta para autenticação
- Configure um proxy reverso para encaminhar o tráfego do seu domínio (por exemplo,
gmail.gongrzhe.com) para esta porta
-
Configuração de DNS:
- Adicione um registro A nas suas configurações de DNS para resolver seu domínio para o endereço IP do seu servidor na nuvem
-
Configuração no Google Cloud Platform:
- No seu Google Cloud Console, adicione a URL de callback do seu domínio personalizado (por exemplo,
https://gmail.gongrzhe.com/oauth2callback) à lista de URIs de redirecionamento autorizados
- No seu Google Cloud Console, adicione a URL de callback do seu domínio personalizado (por exemplo,
-
Execute a Autenticação:
npx @gongrzhe/server-gmail-autoauth-mcp auth https://gmail.gongrzhe.com/oauth2callback -
Configure no seu aplicativo:
{ "mcpServers": { "gmail": { "command": "npx", "args": [ "@gongrzhe/server-gmail-autoauth-mcp" ] } } }
Essa abordagem permite que os fluxos de autenticação funcionem corretamente em ambientes onde localhost não é acessível, como aplicativos em contêineres ou servidores na nuvem.
Ferramentas Disponíveis
O servidor fornece as seguintes ferramentas que podem ser usadas através do Claude Desktop:
1. Enviar E-mail (send_email)
Envia um novo e-mail imediatamente. Suporta e-mails em texto simples, HTML ou multipartes com anexos de arquivo opcionais.
E-mail Básico:
{
"to": ["recipient@example.com"],
"subject": "Meeting Tomorrow",
"body": "Hi,\n\nJust a reminder about our meeting tomorrow at 10 AM.\n\nBest regards",
"cc": ["cc@example.com"],
"bcc": ["bcc@example.com"],
"mimeType": "text/plain"
}
E-mail com Anexos:
{
"to": ["recipient@example.com"],
"subject": "Project Files",
"body": "Hi,\n\nPlease find the project files attached.\n\nBest regards",
"attachments": [
"/path/to/document.pdf",
"/path/to/spreadsheet.xlsx",
"/path/to/presentation.pptx"
]
}
Exemplo de E-mail HTML:
{
"to": ["recipient@example.com"],
"subject": "Meeting Tomorrow",
"mimeType": "text/html",
"body": "<html><body><h1>Meeting Reminder</h1><p>Just a reminder about our <b>meeting tomorrow</b> at 10 AM.</p><p>Best regards</p></body></html>"
}
Exemplo de E-mail Multiparte (HTML + Texto Simples):
{
"to": ["recipient@example.com"],
"subject": "Meeting Tomorrow",
"mimeType": "multipart/alternative",
"body": "Hi,\n\nJust a reminder about our meeting tomorrow at 10 AM.\n\nBest regards",
"htmlBody": "<html><body><h1>Meeting Reminder</h1><p>Just a reminder about our <b>meeting tomorrow</b> at 10 AM.</p><p>Best regards</p></body></html>"
}
2. Rascunho de E-mail (draft_email)
Cria um rascunho de e-mail sem enviá-lo. Também suporta anexos.
{
"to": ["recipient@example.com"],
"subject": "Draft Report",
"body": "Here's the draft report for your review.",
"cc": ["manager@example.com"],
"attachments": ["/path/to/draft_report.docx"]
}
3. Ler E-mail (read_email)
Recupera o conteúdo de um e-mail específico pelo seu ID. Agora mostra informações aprimoradas de anexos.
{
"messageId": "182ab45cd67ef"
}
Resposta aprimorada inclui detalhes dos anexos:
Subject: Project Files
From: sender@example.com
To: recipient@example.com
Date: Thu, 19 Jun 2025 10:30:00 -0400
Email body content here...
Attachments (2):
- document.pdf (application/pdf, 245 KB, ID: ANGjdJ9fkTs-i3GCQo5o97f_itG...)
- spreadsheet.xlsx (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, 89 KB, ID: BWHkeL8gkUt-j4HDRp6o98g_juI...)
4. Baixar Anexo (download_attachment)
NOVO: Baixa anexos de e-mail para o seu sistema de arquivos local.
{
"messageId": "182ab45cd67ef",
"attachmentId": "ANGjdJ9fkTs-i3GCQo5o97f_itG...",
"savePath": "/path/to/downloads",
"filename": "downloaded_document.pdf"
}
Parâmetros:
messageId: O ID do e-mail que contém o anexoattachmentId: O ID do anexo (mostrado na exibição aprimorada de e-mail)savePath: Diretório para salvar o arquivo (opcional, padrão é o diretório atual)filename: Nome de arquivo personalizado (opcional, usa o nome original se não for fornecido)
5. Pesquisar E-mails (search_emails)
Pesquisa e-mails usando a sintaxe de pesquisa do Gmail.
{
"query": "from:sender@example.com after:2024/01/01 has:attachment",
"maxResults": 10
}
6. Modificar E-mail (modify_email)
Adiciona ou remove rótulos de e-mails (mover para diferentes pastas, arquivar, etc.).
{
"messageId": "182ab45cd67ef",
"addLabelIds": ["IMPORTANT"],
"removeLabelIds": ["INBOX"]
}
7. Excluir E-mail (delete_email)
Exclui permanentemente um e-mail.
{
"messageId": "182ab45cd67ef"
}
8. Listar Rótulos de E-mail (list_email_labels)
Recupera todos os rótulos disponíveis do Gmail.
{}
9. Criar Rótulo (create_label)
Cria um novo rótulo do Gmail.
{
"name": "Important Projects",
"messageListVisibility": "show",
"labelListVisibility": "labelShow"
}
10. Atualizar Rótulo (update_label)
Atualiza um rótulo existente do Gmail.
{
"id": "Label_1234567890",
"name": "Urgent Projects",
"messageListVisibility": "show",
"labelListVisibility": "labelShow"
}
11. Excluir Rótulo (delete_label)
Exclui um rótulo do Gmail.
{
"id": "Label_1234567890"
}
12. Obter ou Criar Rótulo (get_or_create_label)
Obtém um rótulo existente pelo nome ou o cria se não existir.
{
"name": "Project XYZ",
"messageListVisibility": "show",
"labelListVisibility": "labelShow"
}
13. Modificar E-mails em Lote (batch_modify_emails)
Modifica rótulos de vários e-mails em lotes eficientes.
{
"messageIds": ["182ab45cd67ef", "182ab45cd67eg", "182ab45cd67eh"],
"addLabelIds": ["IMPORTANT"],
"removeLabelIds": ["INBOX"],
"batchSize": 50
}
14. Excluir E-mails em Lote (batch_delete_emails)
Exclui permanentemente vários e-mails em lotes eficientes.
{
"messageIds": ["182ab45cd67ef", "182ab45cd67eg", "182ab45cd67eh"],
"batchSize": 50
}
14. Criar Filtro (create_filter)
Cria um novo filtro do Gmail com critérios e ações personalizados.
{
"criteria": {
"from": "newsletter@company.com",
"hasAttachment": false
},
"action": {
"addLabelIds": ["Label_Newsletter"],
"removeLabelIds": ["INBOX"]
}
}
15. Listar Filtros (list_filters)
Recupera todos os filtros do Gmail.
{}
16. Obter Filtro (get_filter)
Obtém detalhes de um filtro específico do Gmail.
{
"filterId": "ANe1Bmj1234567890"
}
17. Excluir Filtro (delete_filter)
Exclui um filtro do Gmail.
{
"filterId": "ANe1Bmj1234567890"
}
18. Criar Filtro a partir de Modelo (create_filter_from_template)
Cria um filtro usando modelos pré-definidos para cenários comuns.
{
"template": "fromSender",
"parameters": {
"senderEmail": "notifications@github.com",
"labelIds": ["Label_GitHub"],
"archive": true
}
}
Recursos de Gerenciamento de Filtros
Critérios de Filtro
Você pode criar filtros com base em vários critérios:
| Critério | Exemplo | Descrição |
|---|---|---|
from | "sender@example.com" | E-mails de um remetente específico |
to | "recipient@example.com" | E-mails enviados para um destinatário específico |
subject | "Meeting" | E-mails com texto específico no assunto |
query | "has:attachment" | Sintaxe de consulta de pesquisa do Gmail |
negatedQuery | "spam" | Texto que NÃO deve estar presente |
hasAttachment | true | E-mails com anexos |
size | 10485760 | Tamanho do e-mail em bytes |
sizeComparison | "larger" | Comparação de tamanho (larger, smaller) |
Ações de Filtro
Os filtros podem executar as seguintes ações:
| Ação | Exemplo | Descrição |
|---|---|---|
addLabelIds | ["IMPORTANT", "Label_Work"] | Adicionar rótulos a e-mails correspondentes |
removeLabelIds | ["INBOX", "UNREAD"] | Remover rótulos de e-mails correspondentes |
forward | "backup@example.com" | Encaminhar e-mails para outro endereço |
Modelos de Filtro
O servidor inclui modelos pré-construídos para cenários comuns de filtragem:
1. Modelo de Remetente (fromSender)
Filtra e-mails de um remetente específico e opcionalmente os arquiva.
{
"template": "fromSender",
"parameters": {
"senderEmail": "newsletter@company.com",
"labelIds": ["Label_Newsletter"],
"archive": true
}
}
2. Modelo de Filtro por Assunto (withSubject)
Filtra e-mails com texto específico no assunto e opcionalmente os marca como lidos.
{
"template": "withSubject",
"parameters": {
"subjectText": "[URGENT]",
"labelIds": ["Label_Urgent"],
"markAsRead": false
}
}
3. Modelo de Filtro por Anexo (withAttachments)
Filtra todos os e-mails com anexos.
{
"template": "withAttachments",
"parameters": {
"labelIds": ["Label_Attachments"]
}
}
4. Modelo de E-mail Grande (largeEmails)
Filtra e-mails maiores que um tamanho especificado.
{
"template": "largeEmails",
"parameters": {
"sizeInBytes": 10485760,
"labelIds": ["Label_Large"]
}
}
5. Modelo de Filtro por Conteúdo (containingText)
Filtra e-mails contendo texto específico e opcionalmente os marca como importantes.
{
"template": "containingText",
"parameters": {
"searchText": "invoice",
"labelIds": ["Label_Finance"],
"markImportant": true
}
}
6. Modelo de Lista de Discussão (mailingList)
Filtra e-mails de listas de discussão e opcionalmente os arquiva.
{
"template": "mailingList",
"parameters": {
"listIdentifier": "dev-team",
"labelIds": ["Label_DevTeam"],
"archive": true
}
}
Exemplos Comuns de Filtro
Aqui estão alguns exemplos práticos de filtros:
Organizar newsletters automaticamente:
{
"criteria": {
"from": "newsletter@company.com"
},
"action": {
"addLabelIds": ["Label_Newsletter"],
"removeLabelIds": ["INBOX"]
}
}
Lidar com e-mails promocionais:
{
"criteria": {
"query": "unsubscribe OR promotional"
},
"action": {
"addLabelIds": ["Label_Promotions"],
"removeLabelIds": ["INBOX", "UNREAD"]
}
}
E-mails prioritários do chefe:
{
"criteria": {
"from": "boss@company.com"
},
"action": {
"addLabelIds": ["IMPORTANT", "Label_Boss"]
}
}
Anexos grandes:
{
"criteria": {
"size": 10485760,
"sizeComparison": "larger",
"hasAttachment": true
},
"action": {
"addLabelIds": ["Label_LargeFiles"]
}
}
Sintaxe Avançada de Pesquisa
A ferramenta search_emails suporta os poderosos operadores de pesquisa do Gmail:
| Operador | Exemplo | Descrição |
|---|---|---|
from: | from:john@example.com | E-mails de um remetente específico |
to: | to:mary@example.com | E-mails enviados para um destinatário específico |
subject: | subject:"meeting notes" | E-mails com texto específico no assunto |
has:attachment | has:attachment | E-mails com anexos |
after: | after:2024/01/01 | E-mails recebidos após uma data |
before: | before:2024/02/01 | E-mails recebidos antes de uma data |
is: | is:unread | E-mails com um estado específico |
label: | label:work | E-mails com um rótulo específico |
Você pode combinar vários operadores: from:john@example.com after:2024/01/01 has:attachment
Recursos Avançados
Suporte a Anexos de E-mail
O servidor fornece funcionalidade abrangente de anexos:
- Envio de Anexos: Inclua caminhos de arquivo no array
attachmentsao enviar ou criar rascunhos de e-mails - Detecção de Anexos: Detecta automaticamente tipos MIME e tamanhos de arquivo
- Capacidade de Download: Baixe qualquer anexo de e-mail para o seu sistema de arquivos local
- Exibição Aprimorada: Visualize informações detalhadas dos anexos, incluindo nomes de arquivo, tipos, tamanhos e IDs de download
- Múltiplos Formatos: Suporte a todos os tipos comuns de arquivo (documentos, imagens, arquivos compactados, etc.)
- Conformidade RFC822: Usa Nodemailer para formatação adequada de mensagens MIME
Tipos de Arquivo Suportados: Todos os tipos de arquivo padrão, incluindo PDF, DOCX, XLSX, PPTX, imagens (PNG, JPG, GIF), arquivos compactados (ZIP, RAR) e mais.
Extração de Conteúdo de E-mail
O servidor extrai inteligentemente o conteúdo de e-mails de estruturas MIME complexas:
- Prioriza o conteúdo em texto simples quando disponível
- Usa o conteúdo HTML como alternativa se o texto simples não estiver disponível
- Trata mensagens MIME multipartes com partes aninhadas
- Processa informações de anexos (nome do arquivo, tipo, tamanho, ID de download)
- Preserva os cabeçalhos originais do e-mail (De, Para, Assunto, Data)
Suporte a Caracteres Internacionais
O servidor suporta totalmente caracteres não ASCII em assuntos e conteúdo de e-mails, incluindo:
- Alfabetos turco, chinês, japonês, coreano e outros não latinos
- Caracteres especiais e símbolos
- Codificação adequada garante exibição correta em clientes de e-mail
Gerenciamento Abrangente de Rótulos
O servidor fornece um conjunto completo de ferramentas para gerenciar rótulos do Gmail:
- Criar Rótulos: Crie novos rótulos com configurações de visibilidade personalizáveis
- Atualizar Rótulos: Renomeie rótulos ou altere suas configurações de visibilidade
- Excluir Rótulos: Remova rótulos criados pelo usuário (rótulos do sistema são protegidos)
- Encontrar ou Criar: Obtenha um rótulo pelo nome ou crie-o automaticamente se não for encontrado
- Listar Todos os Rótulos: Veja todos os rótulos do sistema e do usuário com informações detalhadas
- Opções de Visibilidade de Rótulos: Controle como os rótulos aparecem nas listas de mensagens e de rótulos
As configurações de visibilidade de rótulos incluem:
messageListVisibility: Controla se o rótulo aparece na lista de mensagens (showouhide)labelListVisibility: Controla como o rótulo aparece na lista de rótulos (labelShow,labelShowIfUnreadoulabelHide)
Esses recursos de gerenciamento de rótulos permitem uma organização sofisticada de e-mails diretamente pelo Claude, sem precisar alternar para a interface do Gmail.
Operações em Lote
O servidor inclui recursos eficientes de processamento em lote:
- Processe até 50 e-mails de uma vez (tamanho do lote configurável)
- Divisão automática de grandes conjuntos de e-mails para evitar limites da API
- Relatórios detalhados de sucesso/ falha para cada operação
- Tratamento gracioso de erros com novas tentativas individuais
- Perfeito para gerenciamento de caixa de entrada e tarefas de organização em massa
Notas de Segurança
- As credenciais OAuth são armazenadas com segurança no seu ambiente local (
~/.gmail-mcp/) - O servidor usa acesso offline para manter a autenticação persistente
- Nunca compartilhe ou envie suas credenciais para o controle de versão
- Revise e revogue regularmente acessos não utilizados nas configurações da sua Conta Google
- As credenciais são armazenadas globalmente, mas só podem ser acessadas pelo usuário atual
- Os arquivos anexos são processados localmente e nunca são armazenados permanentemente pelo servidor
Solução de Problemas
-
Chaves OAuth não encontradas
- Certifique-se de que o
gcp-oauth.keys.jsonesteja no seu diretório atual ou no~/.gmail-mcp/ - Verifique as permissões do arquivo
- Certifique-se de que o
-
Formato de credenciais inválido
- Certifique-se de que o arquivo de chaves OAuth contenha credenciais do tipo
webouinstalled - Para aplicações web, verifique se o URI de redirecionamento está configurado corretamente
- Certifique-se de que o arquivo de chaves OAuth contenha credenciais do tipo
-
Porta já em uso
- Se a porta 3000 já estiver em uso, libere-a antes de executar a autenticação
- Você pode encontrar e interromper o processo que usa essa porta
-
Falhas em operações em lote
- Se as operações em lote falharem, elas tentam automaticamente novamente os itens individuais
- Verifique as mensagens de erro detalhadas para falhas específicas
- Considere reduzir o tamanho do lote se encontrar limitação de taxa
-
Problemas com anexos
- Arquivo não encontrado: Garanta que os caminhos dos arquivos de anexo estejam corretos e acessíveis
- Erros de permissão: Verifique se o servidor tem permissão de leitura para os arquivos de anexo
- Limites de tamanho: O Gmail tem um limite de anexo de 25MB por e-mail
- Falhas de download: Verifique se você tem permissões de escrita no diretório de download
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.
Executando evals
O pacote de evals carrega um cliente mcp que então executa o arquivo index.ts, então não há necessidade de recompilar entre os testes. Você pode carregar variáveis de ambiente prefixando o comando npx. Documentação completa pode ser encontrada aqui.
OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/index.ts
Licença
MIT
Suporte
Se você encontrar algum problema ou tiver dúvidas, por favor registre uma issue no repositório GitHub.