gmail-multi-mcp-server
gmail-multi-mcp-server
Un servidor MCP que conecta Claude con varias cuentas de Gmail a la vez, y expone el mismo conjunto de herramientas que el conector de Gmail integrado. Cada herramiento acepta un argumento adicional account que indica sobre qué buzón actuar: esa es la única diferencia estructural con el conector de un solo buzón.
"Check my work inbox for anything from the lender, and draft the reply from my personal account."Por qué existe esto
El conector de Gmail integrado autoriza un solo buzón. Si utiliza cuentas separadas —trabajo, personal, un alias de empresa—, tiene que estar cambiando constantemente. Este servidor almacena las credenciales de tantas cuentas de Gmail como autorice y enruta cada llamada a la que usted indique.
Related MCP server: multiGmailMCP
Requisitos
Node.js 20 o una versión más reciente
Un proyecto de Google Cloud con la API de Gmail habilitada y un cliente OAuth de tipo Aplicación de escritorio
1. Obtenga un cliente OAuth de Google
Abra la Google Cloud Console y seleccione o cree un proyecto.
APIs y servicios → Biblioteca → habilite la API de Gmail.
APIs y servicios → Pantalla de consentimiento de OAuth → configúrela. Mientras la aplicación esté en modo de pruebas, añada todas las direcciones de Gmail que planee conectar en Usuarios de prueba.
APIs y servicios → Credenciales → Crear credenciales → ID de cliente de OAuth → tipo de aplicación Aplicación de escritorio. Descargue el archivo JSON.
Los clientes de aplicación de escritorio permiten redirecciones de bucle local en cualquier puerto, que es lo que usa el flujo add-account.
2. Instale y compile
git clone <this repo>
cd Gmail-MCP
npm install
npm run build3. Apunte el servidor a su cliente OAuth
Elija una opción:
# Option A — save the downloaded JSON where the server looks by default
mkdir -p ~/.gmail-mcp && cp ~/Downloads/client_secret_*.json ~/.gmail-mcp/credentials.json
# Option B — point at it explicitly
export GMAIL_MCP_CREDENTIALS=/path/to/client_secret.json
# Option C — pass the values directly
export GMAIL_MCP_CLIENT_ID=...apps.googleusercontent.com
export GMAIL_MCP_CLIENT_SECRET=...4. Autorice cada buzón
Ejecute una vez por cuenta de Gmail:
node dist/index.js add-account --alias work
node dist/index.js add-account --alias personal
node dist/index.js list-accountsCada ejecución imprime una URL de consentimiento de Google, espera en un puerto de bucle local la redirección y guarda el token de actualización resultante. En una máquina sin interfaz gráfica, añada --manual y pegue la URL de redirección.
Las cuentas añadidas mientras el servidor está en ejecución se detetan automáticamente: no es necesario reiniciar.
5. Conéctelo a Claude
Claude Code
claude mcp add gmail-multi -- node /absolute/path/to/Gmail-MCP/dist/index.jsClaude Desktop — añada la configuración a claude_desktop_config.json:
{
"mcpServers": {
"gmail-multi": {
"command": "node",
"args": ["/absolute/path/to/Gmail-MCP/dist/index.js"],
"env": {
"GMAIL_MCP_CREDENTIALS": "/absolute/path/to/client_secret.json"
}
}
}
}Selección de una cuenta
Todas las herramientas excepto list_accounts aceptan account. Se busca la coincidencia, en este orden:
la dirección de correo completa —
mikael@example.comel alias definido al ejecutar
add-account—workla parte local anterior a
@—mikaelcualquier prefijo inequívoco
account es opcional cuando solo hay un buzón configurado o cuando GMAIL_MCP_DEFAULT_ACCOUNT está definida. De lo contrarío, es obligatorio y el error enumera lo disponible.
Los ID son específicos de cada buzón. El ID de un mensaje, hilo, borrador o etiqueta de una cuenta no significa nada en otra. Un error de «no encontrado» suele significar que se ha pasado una account equivocada.
Herramientas
35 herramientas: las del conector más dos para varias cuentas.
Área | Herramientas |
Cuentas |
|
Hilos |
|
Mensajes |
|
Envío |
|
Borradores |
|
Etiquetas |
|
Los nombres de las herramientas coinciden deliberadamente con los del conector de Gmail, de modo que las indicaciones y los hábitos se conservan. Los clientes MCP organizan las herramientas en espacios de nombres por servidor, por lo que ambos pueden estar habilitados a la vez sin colisiones.
Diferencias respecto al conector integrado
Todo lo siguiente es adicional: nada de lo que hace el conector se comporta de forma diferente aquí.
accounten todas las herramientas, además delist_accountsyget_profile.response_format(markdown|json) en cada herramienta.markdownes el valor por defecto y se mantiene compacto; la carga útil estructurada completa se devuelve comostructuredContenten ambos casos.delete_draftyget_message_attachment, que el conector menciona pero no expone.replyaceptaquoteOriginal(por defectofalse) para añadir el original como un bloque citado.forwardaceptaincludeAttachments(por defectotrue); establézcalo enfalsepara omitir archivos grandes.get_message_attachmentaceptasavePathpara escribir un archivo en disco en lugar de incrustar base64.Las respuestas están limitadas a 25 000 caracteres; primero se reducen las listas paginadas y se indica exactamente qué se ha omitido y cómo obtener el resto.
Comportamientos que conviene conocer
search_threadsdevuelve una vista previa de los mensajes más antiguos de cada hilo (~5), al igual que el conector. Llame aget_threadantes de responder nada sobre el correo reciente o no leído.Los borradores se excluyen de
search_threadsa menos que la consulta mencione borradores. Uselist_drafts.Las etiquetas se identifican por ID, no por el nombre para mostrar. Llame primero a
list_labels.DRAFTySENTson de solo lectura; añadirTRASH/SPAMse canaliza a las herramientasapply_sensitive_*para que las acciones destructivas siempre se nombren explícitamente.update_draftfusina campos, pero los adjuntos se reemplazan, no se fusionan — la respuesta informa de cuántos se han descartado.replyestableceIn-Reply-ToyReferencespara que los clientes gestionen el hilo correctamente, y nunca dirige la respuesta al propio buzón autorizado.
Seguridad
Los tokens de actualización residen en
~/.gmail-mcp/accounts.json, escritos atómicamente con permisos0600dentro de un directorio con permisos0700. Cualquiera con acceso de lectura a ese archivo tiene acceso completo a los buzones.El flujo de OAuth valida el parámetro
statey escucha solo en127.0.0.1.remove-accountelimina el token local. Para revocar el acceso por completo, elimine también la aplicación en myaccount.google.com/permissions.Los alcances otorgados permiten leer, enviar y eliminar correo.
send_message,replyyforwardentregan el correo de inmediato; las descripciones de las herramientas indican al modelo que prefieracreate_draftcuando el usuario no haya pedido claramente que el correo salga.
Desarrollo
npm run build # compile TypeScript to dist/
npm test # build, then unit tests + stdio smoke test
npm run test:unit # MIME, reply addressing, parsing, truncation — no network
npm run test:smoke # boots the server, checks all 35 tools register
npm run inspect # open the MCP Inspector against the serversrc/
index.ts CLI entry point and server bootstrap
constants.ts scopes, limits, paths
types.ts normalized message/thread/draft shapes
auth/ token store, OAuth flow, account registry
schemas/common.ts shared Zod fields (account, formats, pagination, colors)
services/ Gmail parsing, MIME building, formatting, errors
tools/ tool registration by domainSolución de problemas
Síntoma | Solución |
"Aún no hay cuentas de Gmail autorizadas" | Ejecute |
"Google no devolvió un token de actualización" | Revogue la aplicación en myaccount.google.com/permissions y vuelva a ejecutar |
"La cuenta 'x' es ambigua" | Use la dirección de correo completa |
403 en todas las llamadas | La API de Gmail no está habilitada en el proyecto de Google Cloud, o la dirección no figura en la lista de usuarios de prueba |
Errores de «no encontrado» con ID válidos | El ID pertenece a otro buzón: compruebe |
Licencia
MIT
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
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Give AI agents secure access to your email via private aliases with dedicated mailbox storage.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables AI assistants to manage multiple Gmail accounts simultaneously with built-in OAuth authentication, supporting email reading, sending, drafts, labels, and account management.60482MIT
- FlicenseAqualityBmaintenanceConnects AI assistants to multiple Gmail accounts simultaneously, enabling search, read, draft, send, and reply operations with per-account permission controls.54
- AlicenseNot gradedqualityCmaintenanceEnables searching and summarizing emails across multiple Gmail accounts simultaneously through Claude.1MIT
- AlicenseBqualityCmaintenanceEnables multi-account Gmail and Google Calendar access through MCP, allowing operations across multiple Google accounts with a single tool call.11MIT
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/Seventhdd/Gmail-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server