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: gmail-mcp-server
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 deployed
Maintenance
Related MCP Connectors
Multiple Google accounts (Gmail, Calendar, Drive, Contacts, Tasks) in one Claude connector.
Multiple Google accounts (Gmail, Calendar, Drive, Contacts, Tasks) in one Claude connector.
Multiple Gmail accounts, editable Google Sheets & Docs for AI agents. Deny-by-default access rules.
Every email and calendar account you connect, for AI agents, with permissions and approvals.
Related MCP Servers
- AlicenseAqualityBmaintenanceConnects AI assistants to multiple Gmail accounts simultaneously, enabling search, read, draft, send, and reply operations with per-account permission controls.54ISC
- AlicenseAqualityDmaintenanceConnects multiple Gmail accounts to Claude Desktop via MCP, enabling email search, labeling, drafts, and confirmed sending through natural language.13170 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables Claude to access and manage multiple Google accounts at once across Gmail, Calendar, Drive, Contacts, and Tasks, with unified search and document text extraction.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to search and read emails from multiple Gmail accounts in one session, letting you switch between mailboxes via account labels. It is read-only and survives token expiry without restarting.79 npmMIT