gmail-mcp-server
gmail-mcp-server
Servidor MCP que expone una sola herramienta, send_email, que envía mensajes de Gmail (con archivos adjuntos opcionales) vía Gmail API. Diseñado para usarse como un servidor MCP local de stdio dentro de Claude Code.
El alcance es deliberadamente limitado: solo gmail.send (sin acceso de lectura/modificación al buzón) — privilegio mínimo para una herramienta cuyo único trabajo es enviar correo.
Esta README está escrita a partir de una configuración real de primera vez, incluidos todos los errores que surgieron por el camino. Síguela de principio a fin y no deberías toparte con ninguno.
Nota sobre PowerShell:
&&no funciona como separador de comandos en Windows PowerShell (eso es sintaxis de bash/cmd). Cada línea con varios comandos más abajo está escrita en líneas separadas, o usa;si quieres una sola línea:cd C:\Users\GaneshGupta\gmail-mcp-server; python auth_setup.py
1. Google Cloud: habilita la API y crea credenciales OAuth
La interfaz de la consola de Google para esto se renombró recientemente de "pantalla de consentimiento de OAuth" a Google Auth Platform, con los ajustes repartidos en páginas separadas de la barra de navegación izquierda (Marca / Audiencia / Clientes / Acceso a datos / Centro de verificación). Los pasos siguientes usan los nombres actuales.
Ve a console.cloud.google.com. Crea un proyecto nuevo o reutiliza uno existente.
API y servicios → Biblioteca → busca "Gmail API" → Habilitar.
API y servicios → Pantalla de consentimiento de OAuth (esto te lleva a la nueva sección de Google Auth Platform) → rellena la página Marca:
Nombre de la aplicación: lo que quieras, p. ej.
gmail-mcp-toolCorreo electrónico de asistencia al usuario: tu dirección de Gmail
Correo electrónico de contacto del desarrollador: tu dirección de Gmail
Deja los campos de logotipo/Dominio de la aplicación en blanco por ahora — volverás al Dominio de la aplicación en el paso 4 si te aparece el error de "configuración incompleta". No los rellenes especulativamente; hazlo solo si realmente ves ese error.
Página Audiencia (barra de navegación izquierda) → en Usuarios de prueba → + Añadir usuarios → introduce tu propia dirección de Gmail (la que enviará el correo) → Guardar.
Si "Añadir usuarios" está bloqueado por un banner amarillo que dice "La configuración de OAuth de tu aplicación está incompleta... Visita la página Marca" — esto ocurre porque
gmail.sendes un ámbito sensible, que exige que los campos de Dominio de la aplicación no estén vacíos incluso para una aplicación solo de Testing. Solución:Ve a Marca → Dominio de la aplicación y rellena:
Página de inicio de la aplicación:
https://example.comEnlace de política de privacidad de la aplicación:
https://example.com/privacyEnlace de términos de servicio de la aplicación:
https://example.com/terms
Esto hará que aparezca un campo Dominios autorizados. Introduce solo el dominio desnudo, sin prefijo
https://:Correcto:
example.comIncorrecto (rechazado con "Dominio no válido: no debe especificar el esquema"):
https://example.com
Guarda en Marca (deberías ver un aviso "Cambios de marca guardados").
Vuelve a Audiencia → Añadir usuarios e inténtalo de nuevo — esta vez funcionará.
Estas URLs no necesitan ser reales/funcionales — Google no las verifica mientras la aplicación siga en estado Testing; solo exige que los campos estén rellenados.
Página Clientes (barra de navegación izquierda) → + Crear cliente:
Tipo de aplicación: Aplicación de escritorio
Nombre: lo que quieras, p. ej.
gmail-mcp-desktopCrear → Descargar JSON (el botón aparece justo después de crear)
El archivo descargado se llamará algo así como
client_secret_<long-id>.apps.googleusercontent.com.json. Renómbralo exactamente aclient_secret.jsony muévelo a:C:\Users\GaneshGupta\gmail-mcp-server\credentials\client_secret.jsonEl nombre exacto del archivo importa:
gmail_auth.pylo busca con ese nombre y lanzaFileNotFoundErrorsi no coincide (esto es lo que más se suele hacer mal aquí).
Related MCP server: Gmail MCP Server
2. Instala las dependencias
cd C:\Users\GaneshGupta\gmail-mcp-server
pip install -r requirements.txt3. Inicio de sesión de una sola vez
python auth_setup.pyQué ocurre:
Se abre una ventana del navegador con un inicio de sesión normal de Google.
Llegarás a la pantalla "Google no ha verificado esta aplicación". Esto es lo esperado: es tu propio cliente OAuth, en modo Testing, solicitando un ámbito sensible. Haz clic en Continuar (interfaz anterior: Avanzado → Ir a [nombre de la aplicación] (no seguro)).
Concede el permiso "Enviar correo electrónico en tu nombre".
El navegador muestra "El flujo de autenticación se ha completado. Puedes cerrar esta ventana."
La terminal imprime
Authorized. Token saved to ...credentials\token.json.
Si en el paso 2, en cambio, aparece Error 403: access_denied / "no ha completado el proceso de verificación de Google... solo pueden acceder los evaluadores aprobados por el desarrollador" — tu dirección de Gmail aún no está en la lista Audiencia → Usuarios de prueba. Vuelve al paso 1.4 anterior.
Haz esto una sola vez. Después, server.py solo renueva silenciosamente el token guardado — nunca vuelve a abrir un navegador por su cuenta.
4. Comprueba el token (opcional pero recomendado)
python -c "from gmail_auth import load_credentials; c = load_credentials(); print('valid:', c.valid); print('scopes:', c.scopes); print('has refresh token:', bool(c.refresh_token))"Espera valid: True, scopes: ['https://www.googleapis.com/auth/gmail.send'], has refresh token: True.
5. Regístrate con Claude Code
claude mcp add gmail-sender --scope user -- python C:\Users\GaneshGupta\gmail-mcp-server\server.py--scope user lo registra globalmente — a partir de entonces queda disponible en todas las sesiones de Claude Code en esta máquina, no solo en la que ejecutaste el comando. No aparecerá retroactivamente en una sesión que ya esté en marcha — los servidores MCP se cargan al inicio de la sesión, así que usa una terminal nueva / una sesión nueva de claude para verlo.
Verifica:
claude mcp listDeberías ver gmail-sender en la lista.
6. Cómo usarlo
En cualquier sesión de Claude Code (después del registro anterior), basta con pedirlo en lenguaje natural:
Envía un correo electrónico a jane@example.com con el asunto "Following up" y el cuerpo "..." — adjunta C:\path\to\file.pdf
Claude Code llamará directamente a la herramienta send_email. No se necesita más configuración por sesión.
Referencia de la herramienta
send_email(to, subject, body, attachments=None, cc=None, bcc=None, html=False)
to/cc/bcc: direcciones separadas por comasattachments: lista de rutas de archivo locales absolutas, límite combinado de 15MB (el límite de envío en bruto de Gmail es de 25MB; 15MB de archivos en bruto deja margen para la inflación de base64 + cabeceras)html: ponlo a true para enviar un cuerpo HTML en lugar de texto planoDevuelve
{status, message_id, thread_id, to, subject, attachment_count}
Índice de solución de problemas
Síntoma | Causa | Solución |
| El JSON descargado conservaba el nombre largo predeterminado de Google | Renómbralo exactamente a |
| Tu cuenta aún no es un usuario de prueba | Audiencia → Usuarios de prueba → Añade tu dirección de Gmail |
Página Audiencia: el banner "La configuración de OAuth de tu aplicación está incompleta" bloquea Añadir usuarios | El ámbito sensible ( | Rellena Marca → Dominio de la aplicación (página de inicio/privacidad/términos) con cualquier URL |
"Dominio no válido: no debe especificar el esquema" en el campo Dominios autorizados | Introdujiste | Introduce solo |
Aviso "Google no ha verificado esta aplicación" durante el inicio de sesión | Es lo esperado: tu propio cliente OAuth en modo Testing | Haz clic en Continuar (o en Avanzado → Ir a la aplicación); es normal, no es un error |
| Eso es sintaxis de bash, no de PowerShell | Usa |
| Se registró después de que la sesión actual iniciara, o el alcance es incorrecto | Abre una sesión nueva de |
Necesitas enviar desde una cuenta de Gmail distinta | El token está vinculado a la cuenta con la que iniciaste sesión | Elimina |
Adjunto rechazado / el envío falla con archivos grandes | Los adjuntos combinados superan los 15MB | Divídelos en varios correos o comprímelos |
Notas
credentials/client_secret.jsonycredentials/token.jsonestán en.gitignore— nunca hagas commit de ellos.Para enviar desde una cuenta de Gmail distinta, elimina
credentials/token.jsony vuelve a ejecutarauth_setup.py.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage Gmail messages, threads, labels, drafts, and settings from your workflows. Send and organiz…
Send transactional email over a verified domain — templates, attachments, custom headers.
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Permissioned access to Gmail, Drive and Calendar via the user's own Google account
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables comprehensive Gmail management including sending, reading, and organizing emails, managing labels, drafts, threads, and configuring account settings through the Gmail API with secure OAuth2 authentication.641,723MIT
- AlicenseNot gradedqualityBmaintenanceEnables reading, sending, archiving, and managing Gmail emails and labels through Google OAuth authentication, acting as an OAuth proxy to the Gmail API.20511MIT
- FlicenseNot gradedqualityDmaintenanceEnables sending emails through Gmail using Google's Gmail API. Requires OAuth authentication setup through Google Cloud Console.
- AlicenseNot gradedqualityDmaintenanceEnables programmatic interaction with Gmail using OAuth 2.0 authentication, allowing users to search, read, send, and manage emails through a standardized interface.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ganeshhgupta/gmail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server