MCP Server en Azure App Service y mejoras en el pipeline editorial

MCP Server Post Agent en Azure App Service

Se despliega el servidor MCP Post Agent como servicio gestionado en Azure, reemplazando el entorno local con una infraestructura reproducible y automatizada. La primera iteración usó Azure Container Apps; tras detectar problemas de timeout HTTP (240 s) que truncaban las respuestas del agente, la infra migra a Azure App Service, donde el control sobre timeouts y la previsibilidad del entorno son significativamente mejores.

La infraestructura completa se describe en Bicep bajo bicep/: se reutiliza el ACR (mcrazurebrainsblogprod) y el workspace de Log Analytics existentes en lugar de crear recursos duplicados. El permiso AcrPull se gestiona desde el workflow de CI/CD de forma idempotente, eliminando el race condition que se producía cuando el Bicep intentaba asignarlo antes de que el Service Principal estuviese disponible. El openIdIssuer apunta al endpoint v2 de Azure AD (/v2.0) para garantizar la compatibilidad con OIDC.

El Dockerfile adopta una estrategia de capas separadas: una stage para dependencias y otra para el runtime, reduciendo el tiempo de build en re-deploys donde solo cambia el código. La imagen base se fija en la versión slim de Python 3.11 para minimizar la superficie de ataque.

El WORKFLOW_TIMEOUT del servidor se ajusta a 200 s para que las respuestas lleguen al cliente antes de que App Service cierre la conexión HTTP (umbral de 230 s en la capa de red).

Image Generator: permisos y versión de API

El workflow image-generator recibía un error 403 al intentar abrir o comentar en PRs porque el token de GitHub Actions no tenía el scope pull-requests: write ni contents: write declarados explícitamente. Se añaden ambos permisos en el bloque permissions del job, resolviendo los fallos silenciosos que impedían que la imagen de portada se adjuntase al PR automáticamente.

La versión de la API de Azure OpenAI se actualiza de 2024-02-01 a 2024-12-01-preview para acceder a los modelos dall-e-3 más recientes y mantener la compatibilidad con los endpoints actuales del recurso OpenAI desplegado en el proyecto de AI Foundry.

La imagen de portada del artículo sobre el squad de agentes autónomos al estilo Kit se genera y vincula correctamente una vez aplicadas ambas correcciones.

Publish Workflow: trigger explícito y git config

El workflow de publicación automática (publish-scheduled) no disparaba el deploy estático de Jekyll ni la generación de imagen de portada tras hacer el commit con el post publicado. Se añade un paso explícito que invoca ambos workflows downstream (deploy e image-generator) mediante workflow_dispatch al finalizar la publicación, eliminando la dependencia de que el evento push propagase los triggers de forma encadenada.

Se añade también la configuración de git config user.name y git config user.email antes de cualquier operación de commit en el workflow. Sin esta configuración, los runners de GitHub Actions de tipo ubuntu-latest rechazaban el commit con un error de identidad desconocida cuando el agente intentaba marcar un post como publicado.

Badge Visual para Noticias

Se añade una imagen de insignia específica para la sección de noticias del blog, alineando su identidad visual con los badges de categoría ya existentes para artículos. El badge se genera con IA y se integra en news-card.html como identificador visual inmediato del tipo de contenido, reforzando la distinción entre noticias cortas y artículos de fondo en los listados mixtos.

Correcciones de Pipeline

El pipeline CI bloquea ahora explícitamente los candidatos marcados como human_curated para que no avancen a través del flujo automatizado. Estos candidatos están destinados a revisión manual y el paso automático al agente Analyzer generaba borradores incompletos que contaminaban la carpeta _drafts/approved/.

Se corrige el deprecation warning de utcnow() en el comando cmd_reject del agente, sustituyendo la llamada directa por datetime.now(timezone.utc) compatible con Python 3.12.