tutamcp
Servidor MCP que otorga a Claude acceso a Tuta mail, calendario, contactos y drive. Soporta modos de correo (dedicado/compartido/carpeta), filtrado de remitentes de confianza con verificación E2E y configuración basada en Docker.
Documentación
tutamcp
Servidor MCP que le da a Claude acceso a una cuenta de Tuta: correo, calendario, contactos y drive. Cada módulo se habilita de forma independiente. Construido sobre el TutaClient de tutaproxy — sin llamadas directas a la API de Tuta.
30 herramientas MCP en 4 módulos. Requiere tutaproxy-public ≥ v1.3.10.
Inicio rápido — Docker
La configuración más sencilla: sin dependencias locales más allá de Docker. La imagen incluye tutaproxy en el momento de la compilación.
git clone https://github.com/peix2/tutamcp-public.git
cd tutamcp-public
docker build -t tutamcp .
Fija una versión específica de tutaproxy (por defecto: v1.3.15):
docker build --build-arg TUTAPROXY_REF=v1.3.15 -t tutamcp .
Nota sobre 2FA: iniciar sesión en una cuenta con autenticación de dos factores requiere tutaproxy ≥ v1.3.15. Las referencias más antiguas fallarán en el desafío del segundo factor.
Crea un archivo de credenciales (chmod 600):
TUTA_EMAIL=your@tuta.com
TUTA_PASSWORD=yourpassword
# only for accounts with 2FA enabled — base32 secret from the Tuta app (spaces ignored):
#TUTA_TOTP_SECRET=jbsw y3dp ehpk 3pxp
Regístrate en Claude Code (.mcp.json o ~/.claude.json):
{
"mcpServers": {
"tutamcp": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/credentials.env:/creds.env:ro",
"-e", "TUTAMCP_CREDENTIALS_FILE=/creds.env",
"-e", "TUTAMCP_ENABLE_MAIL=1",
"-e", "TUTAMCP_MAIL_MODE=dedicated",
"-e", "TUTAMCP_OWNER_EMAIL=you@tuta.com",
"tutamcp"
]
}
}
}
Sin Docker
Requiere Python 3.11 y un clon local de tutaproxy-public.
git clone https://github.com/peix2/tutamcp-public.git
cd tutamcp-public
pip install --target=.venv/lib/python3.11/site-packages -r requirements.txt
Regístrate en Claude Code:
{
"mcpServers": {
"tutamcp": {
"command": "python3.11",
"args": ["/path/to/tutamcp-public/run.py", "/path/to/tutamcp-public/server.py"],
"env": {
"TUTAPROXY_PATH": "/path/to/tutaproxy-public",
"TUTAMCP_CREDENTIALS_FILE": "/path/to/credentials.env",
"TUTAMCP_ENABLE_MAIL": "1",
"TUTAMCP_MAIL_MODE": "dedicated",
"TUTAMCP_OWNER_EMAIL": "you@tuta.com",
"TUTAMCP_DOWNLOAD_DIR": "/tmp/tutamcp"
}
}
}
}
Para Claude Desktop, usa el mismo bloque en ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows).
Configuración
Consulta config.example.env para todas las variables. Opciones clave:
Modos de correo
| Modo | Descripción |
|---|---|
dedicated | La cuenta pertenece solo a Claude. Acceso completo, envío habilitado por defecto. |
shared | Cuenta compartida con el usuario. Acceso completo de lectura/escritura; la política de envío está controlada por TUTAMCP_MAIL_SEND. |
folder | Cuenta compartida; Claude solo ve la carpeta configurada en TUTAMCP_MAIL_FOLDER. El envío es siempre solo de respuesta. |
Política de envío
TUTAMCP_MAIL_SEND=reply_only — solo se registra tuta_mail_reply; los destinatarios se derivan únicamente del correo original, no se aceptan direcciones arbitrarias.
TUTAMCP_MAIL_SEND=full — también registra tuta_mail_send para iniciar nuevos hilos.
Por defecto: dedicated → full, shared → reply_only, folder → siempre reply_only.
Remitentes de confianza
Se usan para el manejo autónomo del correo (por ejemplo, un sondeo en segundo plano que despierta a Claude para procesar comandos entrantes).
| Variable | Descripción |
|---|---|
TUTAMCP_OWNER_EMAIL | Siempre de confianza. |
TUTAMCP_COMMAND_WHITELIST | Lista separada por comas de direcciones de confianza adicionales. |
TUTAMCP_TRUST_REQUIRE_E2E | 1 (por defecto) — la confianza requiere cifrado de extremo a extremo (Tuta→Tuta, TutaCrypt). Protege contra cabeceras From falsificadas en correos externos; el propietario y la lista blanca deben usar cuentas de Tuta. Configúralo en 0 para confiar solo por dirección. |
TUTAMCP_MAIL_CC_OWNER | 1 — envía automáticamente una copia al propietario en cada correo saliente. |
tuta_mail_list y tuta_mail_read devuelven trusted_sender: bool y e2e: bool en cada mensaje. Pasa only_trusted=True a tuta_mail_list para filtrar solo a remitentes de confianza.
Autenticación de dos factores (2FA / TOTP)
Si la cuenta de Tuta tiene un segundo factor habilitado, añade su secreto TOTP a tus credenciales para que tutamcp pueda completar el desafío de inicio de sesión:
TUTA_EMAIL=your@tuta.com
TUTA_PASSWORD=yourpassword
TUTA_TOTP_SECRET=jbsw y3dp ehpk 3pxp
TUTA_TOTP_SECRETes el secreto base32 que muestra la aplicación de Tuta cuando configuras un autenticador (la misma cadena detrás del código QR). Los espacios y las mayúsculas/minúsculas se ignoran, así que puedes pegarlo tal como se muestra.- También se puede pasar como una variable de entorno simple en lugar de mediante el archivo de credenciales. El valor se integra en el inicio de sesión y nunca se registra.
- tutamcp calcula el código RFC 6238 de 6 dígitos en el momento del inicio de sesión — no necesitas registrar una aplicación de autenticador separada para ello.
| Requisito | Detalle |
|---|---|
| Versión de tutaproxy | ≥ v1.3.15 (configura TUTAPROXY_REF en consecuencia para Docker) |
| Factor compatible | Solo TOTP. Las claves de hardware U2F/WebAuthn no son compatibles con el inicio de sesión programático. |
| Habilitar/deshabilitar 2FA | Se hace en la aplicación oficial de Tuta — Configuración → Inicio de sesión → Segundo factor. tutamcp solo consume el secreto; no puede añadir ni eliminar factores. |
| Secreto faltante | Si la cuenta requiere 2FA pero TUTA_TOTP_SECRET no está configurado, el inicio de sesión falla con un error claro de set TUTA_TOTP_SECRET en lugar de quedarse colgado. |
Trata el secreto como una contraseña: mantenlo en el archivo de credenciales chmod 600, fuera del control de versiones.
Herramientas
Estado
| Herramienta | Descripción |
|---|---|
tuta_status | Información del servidor: versión, módulos habilitados, modo de correo/política de envío, estado de la sesión |
Correo
| Herramienta | Descripción |
|---|---|
tuta_mail_list_folders | Lista todas las carpetas |
tuta_mail_list | Lista correos sin cuerpo. Compatible con only_trusted, unread, paginación |
tuta_mail_read | Lee el correo completo con el cuerpo descifrado y los metadatos de los adjuntos |
tuta_mail_get_attachment | Descarga el adjunto a TUTAMCP_DOWNLOAD_DIR |
tuta_mail_send | Envía un nuevo correo (requiere mail_send=full) |
tuta_mail_reply | Responde al correo; los destinatarios se derivan solo del original |
tuta_mail_move | Mueve a una carpeta |
tuta_mail_delete | Elimina permanentemente o mueve a la papelera |
tuta_mail_mark | Marca como leído/no leído |
tuta_mail_folder_create | Crea una carpeta personalizada |
tuta_mail_folder_rename | Renombra una carpeta personalizada |
tuta_mail_folder_delete | Elimina una carpeta personalizada |
tuta_mail_list_labels | Lista etiquetas |
tuta_mail_apply_labels | Añade/elimina etiquetas en un correo |
Calendario
| Herramienta | Descripción |
|---|---|
tuta_calendar_list_events | Lista eventos en un rango de fechas (los eventos recurrentes siempre se incluyen) |
tuta_calendar_create_event | Crea un evento con recurrencia RRULE opcional |
tuta_calendar_update_event | Actualiza un evento |
tuta_calendar_delete_event | Elimina un evento |
Nota: no se admite editar una única ocurrencia de una serie recurrente.
Contactos
| Herramienta | Descripción |
|---|---|
tuta_contacts_list | Lista/busca contactos por nombre, empresa o correo |
tuta_contacts_get | Obtiene los detalles completos del contacto |
tuta_contacts_create | Crea un contacto |
tuta_contacts_update | Actualiza los campos de un contacto |
tuta_contacts_delete | Elimina un contacto |
Drive
| Herramienta | Descripción |
|---|---|
tuta_drive_list | Lista el contenido de una carpeta por ruta |
tuta_drive_download | Descarga un archivo a TUTAMCP_DOWNLOAD_DIR |
tuta_drive_upload | Sube un archivo local |
tuta_drive_mkdir | Crea una carpeta |
tuta_drive_rename | Renombra un archivo o carpeta |
tuta_drive_move | Mueve un archivo o carpeta |
tuta_drive_delete | Elimina un archivo o carpeta |
Drive requiere una cuenta de Tuta de pago. Las cuentas gratuitas reciben un error informativo en lugar de un fallo.
Seguridad
- Las credenciales nunca se registran. El servidor advierte si los permisos del archivo de credenciales son más amplios que
600. - Todo el registro va a
stderro a un archivo de registro.stdoutestá reservado para el protocolo MCP. - El registro de herramientas es condicional: un módulo deshabilitado no registra herramientas — Claude no las ve en absoluto.
- En el modo
folder, todas las operaciones están limitadas a la carpeta configurada; los intentos de acceder fuera de ella se rechazan a nivel de herramienta. - La política de solo respuesta se aplica estructuralmente:
tuta_mail_sendsimplemente no está registrado, no se bloquea en tiempo de ejecución. - El recorrido de rutas en las descargas de adjuntos/drive está bloqueado (saneamiento del nombre base + regex).
Licencia
AGPL-3.0 — consulta LICENSE.