Volver a la wiki

Decisión: Rotación de MCP_TOKENS (P1a) — Corrección de hallazgo falso + ejecución

Contexto

Auditoría s216 (workspace, 10-07-2026): revisión de agentes MCP, wiki, protocolo de sesión y tools. Hallazgo inicial reportado: “secretos versionados en .mcp.json (git)” — verificado con cadena && defectuosa.

Corrección honesta: re-verificación contra git log --all demostró que el archivo nunca entró al historial (.gitignore en efecto desde siempre, en ambos repos). La exposición real: token Bearer MCP idéntico y en claro en los .mcp.json locales de los 3 PCs (Edu, Dani, Txell) → atribución rota (todo el equipo actuaba como “edu” en los activity logs).

Decisión

Ejecutada la misma noche por orden de Edu (no fue una recomendación abierta; Edu autorizó ejecución inmediata):

  1. Rotar MCP_TOKENS (CF Pages env var):

    • 3 tokens personales nuevos: Edu:..., Dani:..., Txell:...
    • 1 token CI nuevo para GH Actions + crons OPS (atribución propia en activity_log)
    • Generador: CSPRNG (no Get-Random), 40 chars
  2. Distribuir a consumidores:

    • GH secrets MCP_TOKEN en workspace + CreaRack-Pro (ambos reciben token CI)
    • OPS /opt/bib-reindex/.token → token CI
    • Env User BIB_MCP_TOKEN en los 3 PCs Windows (cada uno su propio token, vía Gestor/Edu en persona)
  3. Migrar .mcp.json local:

    • Ya no contiene tokens hardcodeados
    • Usa expansión de variables: ${BIB_MCP_TOKEN} (user env) + ${CF_ACCESS_CLIENT_ID} / ${CF_ACCESS_CLIENT_SECRET} (idem)
    • Gitignored; nunca volverá a tener secretos en claro
  4. Workflow permanente:

    • Nueva acción: .github/workflows/rotate-mcp-tokens.yml
    • Dispatch manual: composición de “Nombre:token,…” → gh secret set MCP_TOKENS_NEW → workflow PATCH en CF Pages env
    • Razón del workflow (no edición directa): CF_CLAUDE_TOKEN del perfil no tiene scope Pages; usamos CLOUDFLARE_API_TOKEN del repo
  5. Playbook §6 reescrito:

    • Era de la era STAGE/DR pre-s185; completamente desactualizado
    • Nuevo flujo: 6 pasos desde generar tokens hasta verificar (tokens viejos = 401, nuevos = 200)

Justificación

P1b (CF Access service token) queda para ventana separada con Edu (toca Dokploy PROD/STAGE + redeploy; urgencia rebajada ahora que no hay exposición en git).

Validación post-merge

  1. ✅ tools/list con token nuevo = 200
  2. ✅ tools/list con token viejo = 401
  3. ✅ Job wiki-validate (CI) en verde
  4. ✅ Workflow de Bibliotecario-Lint ejecuta sin errores
  5. ✅ Cron de OPS/bib-reindex a mano = success

Véase también

Subir