docs(adr-0012): documentar pivot de Fase 1 a Connectors nativos de claude.ai
Build and Push Docs Portal / Escaneo de Secretos (Gitleaks) (push) Successful in 36s
Build and Push Docs Portal / Construir y publicar Docs Portal (push) Successful in 9m20s

El MCP self-hosted (taylorwilsdon/google_workspace_mcp) quedo abandonado:
limite real en FastMCP's OAuthProxy, no error de configuracion -
redirect_uri se arma desde base_url (no desde GOOGLE_OAUTH_REDIRECT_URI),
y base_url tambien alimenta issuer_url, que mcp/server/auth/routes.py
exige HTTPS-o-localhost sin bypass. Documenta la causa raiz confirmada
leyendo el codigo fuente instalado, la decision del usuario de usar
Connectors nativos en su lugar, y la verificacion en vivo (3 calendarios
reales, razonamiento de fechas correcto).

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QMP7ULbxbsB5g1vELNAT3D
This commit is contained in:
devopsandClaude Sonnet 5 committed 2026-09-21 04:16:19 +00:00
1 parent b55766847f
commit 059597346d
1 file changed
+62 -18
@@ -1,9 +1,13 @@
# ADR 0012 — Práctica multi-cloud: GCP y Azure DevOps en paralelo al lab ZimaOS # ADR 0012 — Práctica multi-cloud: GCP y Azure DevOps en paralelo al lab ZimaOS
**Estado:** aceptada — Fase 1 (Google Workspace) en ejecución en esta **Estado:** aceptada — Fase 1 (Google Workspace) completa y verificada
misma sesión; Fases 2-4 quedan documentadas como roadmap, explícitamente en vivo, con un giro real: el MCP self-hosted planeado
no implementadas hasta que se pidan en una sesión futura. (`taylorwilsdon/google_workspace_mcp`) quedó abandonado por un límite
**Fecha:** 2026-09-20 real de esa librería (ver §Fase 1), reemplazado por los Connectors
nativos de claude.ai. Fases 2-4 quedan documentadas como roadmap,
explícitamente no implementadas hasta que se pidan en una sesión
futura.
**Fecha:** 2026-09-20 (Fase 1 cerrada 2026-09-21)
## Contexto ## Contexto
@@ -36,7 +40,7 @@ empujan a abrir una segunda línea de práctica en paralelo:
arquitectónica real, diagramas Mermaid, cifras verificadas en vivo o arquitectónica real, diagramas Mermaid, cifras verificadas en vivo o
contra fuente primaria (no contra un blog de terceros sin contra fuente primaria (no contra un blog de terceros sin
corroborar — ver el caso del supuesto MCP "oficial" de Google corroborar — ver el caso del supuesto MCP "oficial" de Google
Workspace en la [Fase 1](#fase-1-ejecutar-en-esta-sesion-google-workspace)). Workspace en la [Fase 1](#fase-1-ejecutada-google-workspace-con-un-giro-real-en-la-implementacion)).
## Diagrama del lab actual (ZimaOS) ## Diagrama del lab actual (ZimaOS)
@@ -194,20 +198,60 @@ Todas documentadas acá; **solo la Fase 1 se ejecuta en esta sesión.**
Las Fases 2-4 no se implementan sin pedido explícito en una sesión Las Fases 2-4 no se implementan sin pedido explícito en una sesión
futura — quedan como roadmap, no como trabajo en curso. futura — quedan como roadmap, no como trabajo en curso.
### Fase 1 (ejecutar en esta sesión) — Google Workspace ### Fase 1 (ejecutada) — Google Workspace, con un giro real en la implementación
MCP de Google Workspace vía cuenta personal, para las iniciativas ya **Objetivo cumplido — acceso real a Google Calendar desde Claude,
en curso. Detalle de la investigación previa a implementar (qué MCP verificado en vivo — pero por un camino distinto al planeado
usar, oficial vs comunitario) en la Parte 3 de esta conversación — originalmente.** Detalle de la investigación previa (qué MCP usar,
resumen: **no existe un MCP oficial de Google Workspace** publicado oficial vs comunitario) — resumen: **no existe un MCP oficial de
por Google (se verificó explícitamente buscando en los GitHub Google Workspace** publicado por Google (se verificó explícitamente
`google`/`googleworkspace` oficiales — no aparece ninguno; un solo buscando en los GitHub `google`/`googleworkspace` oficiales — no
blog de terceros afirma que "ya existe uno oficial" sin que ninguna aparece ninguno; un solo blog de terceros afirma que "ya existe uno
otra fuente lo corrobore, así que se descarta esa afirmación por no oficial" sin que ninguna otra fuente lo corrobore, así que se descarta
verificable). `taylorwilsdon/google_workspace_mcp` es la opción esa afirmación por no verificable). Se optó por
comunitaria más completa y activamente mantenida (120+ herramientas, `taylorwilsdon/google_workspace_mcp` (comunitario, el más completo y
OAuth 2.1, +2500 estrellas) — es la que se usa, etiquetada como activamente mantenido: 120+ herramientas, OAuth 2.1, +2500 estrellas)
comunitaria, no oficial. como primer intento, self-hosted dentro de `tmux-host`.
**Ese self-hosted quedó abandonado — límite real encontrado en la
librería, no un error de configuración.** El servidor usa FastMCP's
`GoogleProvider`/`OAuthProxy`, que construye el `redirect_uri`
enviado a Google directamente desde su propio `base_url` — **no**
desde la variable `GOOGLE_OAUTH_REDIRECT_URI` que el proyecto expone
(esa variable solo valida entradas, no arma la salida real; hallazgo
confirmado leyendo el código fuente instalado, no la documentación
pública). Y `base_url` es la misma variable de la que depende por
default `issuer_url`, que el SDK de MCP exige sea HTTPS salvo que sea
literalmente `localhost`/`127.0.0.1` (chequeo hardcodeado en
`mcp/server/auth/routes.py:validate_issuer_url`, sin variable de
entorno que lo salte). Resultado: **no hay combinación de variables
de entorno que satisfaga a la vez** "el navegador del usuario debe
poder llegar al callback" (necesita un dominio real, no `localhost`)
y "el issuer debe ser HTTPS o `localhost`" — `workspace-mcp` no
expone `issuer_url` por separado de `base_url` en su capa de
configuración (confirmado en `core/server.py`: solo pasa `base_url` a
`GoogleProvider(...)`).
**Decisión del usuario ante ese límite:** en vez de armar un proxy
HTTPS con certificado autofirmado (infraestructura extra, fricción de
certificado no confiable en cada uso) o parchear el paquete instalado
a mano (frágil, se pierde en cualquier reinstalación), se usaron los
**Connectors nativos de claude.ai** (Google Calendar, vía el
directorio de conectores de la cuenta, fuera de Claude Code por
completo) — mismo resultado práctico (Claude con acceso real al
calendario personal), infraestructura cero de nuestro lado, sin
tocar código de terceros. Contrapartida real: es una integración de
cuenta de claude.ai, no un MCP configurado dentro del proyecto
`platform-multicloud` — no aparece como herramienta en sesiones de
Claude Code (`lab`/`cloud-practice`), solo en el chat normal de
claude.ai.
**Verificado en vivo:** pregunta real en claude.ai normal ("¿qué
tengo en el calendario esta semana?") devolvió una respuesta correcta
revisando 3 calendarios reales de la cuenta (principal, Familia,
festivos de Colombia) vía la herramienta `Google Calendar: Lists
calendar events`, con razonamiento correcto sobre qué cuenta como
"esta semana" dado el día/hora real de la consulta.
### Fase 2 (documentar, no ejecutar) — Terraform aislado ### Fase 2 (documentar, no ejecutar) — Terraform aislado