Shager en OpenAI Codex: config.toml, bearer_token_env_var y una lista de herramientas que deja los borradores como borradores

Configura el servidor MCP de Shager en Codex CLI con config.toml o codex mcp add, lee la clave de una variable, limita las herramientas y crea un borrador.

Para conectar Shager a Codex CLI de OpenAI, agrega una tabla [mcp_servers.shager] en ~/.codex/config.toml con url = "https://app.shager.ai/api/mcp" y bearer_token_env_var = "SHAGER_API_KEY", y luego exporta tu clave shgr_live_ en esa variable. Codex habla HTTP con streaming de forma nativa y envía la clave como token bearer, así que no hace falta ningún puente ni proceso local. También puedes hacerlo en una sola línea con codex mcp add shager --url ... --bearer-token-env-var SHAGER_API_KEY.

El resto de esta guía trata de hacerlo de una forma de la que no te vas a arrepentir: mantener la clave fuera del archivo, limitar qué herramientas de Shager puede llamar Codex y elegir una primera tarea que demuestre que todo está bien conectado.

¿Qué admite Codex para servidores MCP remotos?

La documentación de MCP de Codex de OpenAI describe servidores HTTP con streaming configurados con una url, más tres formas de autenticarse con encabezados. La referencia de configuración las define así:

Clave Qué hace
bearer_token_env_var Nombre de una variable de entorno cuyo valor se envía como token bearer
http_headers Encabezados fijos que se incluyen en cada solicitud
env_http_headers Encabezados cuyos valores se leen de variables de entorno

Shager espera Authorization: Bearer shgr_live_..., que es exactamente lo que produce bearer_token_env_var. Esa es la opción que hay que usar.

config.toml de Codex: un servidor MCP llamado shager con su URL y una variable de entorno que guarda la clave.
La clave queda en una variable de entorno, nunca en el archivo.

Opción A: editar config.toml

Abre ~/.codex/config.toml y agrega:

[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"

Después pon la clave en el perfil de tu shell, no en el TOML:

export SHAGER_API_KEY="shgr_live_your_key_here"

Fíjate en que la configuración guarda el nombre de la variable, no la clave. Eso significa que puedes subir o compartir el fragmento sin problema, y cada compañero aporta su propia clave. Tener una clave por persona rinde frutos más adelante, porque el registro de auditoría de Shager en https://app.shager.ai/dashboard/agents asocia cada llamada a la clave que la hizo.

Opción B: codex mcp add

La CLI escribe la misma tabla por ti. El código fuente de Codex para codex mcp add define --url para servidores HTTP con streaming y un parámetro --bearer-token-env-var que lo requiere (mcp_cmd.rs en GitHub):

codex mcp add shager \
  --url https://app.shager.ai/api/mcp \
  --bearer-token-env-var SHAGER_API_KEY

Si tu versión instalada es distinta, codex mcp add --help es la referencia definitiva.

Revisa el resultado:

codex mcp list

Dentro de la interfaz de terminal de Codex, /mcp muestra los servidores activos y sus herramientas.

¿Conviene usar http_headers en su lugar?

Se puede, pero no conviene. http_headers = { "Authorization" = "Bearer shgr_live_..." } funciona, pero deja una credencial activa en un archivo de texto plano que suele terminar copiado en repositorios de dotfiles. Si necesitas un encabezado distinto del token bearer, env_http_headers asocia el nombre de un encabezado con el nombre de una variable de entorno:

[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
env_http_headers = { "Authorization" = "SHAGER_AUTH_HEADER" }

Con esa forma, la variable debe contener el valor completo, incluido el esquema: export SHAGER_AUTH_HEADER="Bearer shgr_live_...". Para Shager, bearer_token_env_var es más simple y hace lo mismo.

Diagrama: un agente de IA (Claude, Codex o Cursor) se conecta a Shager a través del servidor MCP o la API REST, y Shager distribuye a Facebook, Instagram, YouTube, X, LinkedIn y TikTok.
Shager se encarga de las conexiones, las verificaciones, el escalonamiento y la medición de clics. Facebook e Instagram están a la espera de la aprobación de Meta; hasta entonces solo pueden conectarse cuentas de prueba. En TikTok, las publicaciones salen como privadas ("solo yo") hasta que TikTok apruebe la app.

¿Cómo limitas lo que Codex puede hacer en Shager?

Esta es la parte que la mayoría de las guías de configuración se saltan. Codex te permite filtrar las herramientas de un servidor con enabled_tools (una lista de permitidos) y disabled_tools (una lista de bloqueados que se aplica después), ambas documentadas en la referencia de configuración. Si lo combinas con los permisos de la clave de Shager, obtienes dos capas que, ante la duda, bloquean.

Un perfil de redacción que puede leer todo y crear borradores, pero no puede programar, cancelar ni crear enlaces de conexión:

[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
enabled_tools = [
  "whoami",
  "list_workspaces",
  "list_channels",
  "list_groups",
  "upload_media_from_url",
  "create_post",
  "get_post",
  "list_posts",
  "get_analytics",
]
tool_timeout_sec = 120

create_post sigue en la lista porque, sin schedule_at, solo guarda un borrador. Si además la clave no tiene el permiso publish, Shager rechaza con un 403 cualquier create_post que incluya schedule_at, así que ni el modelo más creativo puede colar una publicación programada.

El aumento de tool_timeout_sec está ahí porque upload_media_from_url descarga el archivo en el servidor, y un video vertical pesado puede tardar más que los 60 segundos predeterminados que indica la referencia.

Una primera tarea que vale la pena ejecutar

Empieza con un prompt que toque varias herramientas y deje solo un borrador:

Use the shager MCP server.
1. whoami, then list_workspaces.
2. In workspace "Lakeside Realty", list_channels and list_groups.
3. upload_media_from_url https://example.com/media/open-house.jpg
4. create_post as a draft to group "All agents" with a different caption per
   channel (per_channel), mentioning each agent's neighborhood from the channel
   name. cta_url https://lakesiderealty.example/open-house, campaign
   "open-house-oct", first_comment "Details and RSVP: " followed by the link.
5. get_post and print a table of channel, network, format and state.

Lo que deberías ver: una publicación en estado DRAFT con un destino por cuenta, cada uno con su formato resuelto para esa red. En Shager, cada cuenta recibe su propio enlace corto y sus etiquetas UTM para el cta_url, con utm_content indicando la cuenta, que es lo que después permite atribuir resultados por cuenta. Los detalles están en atribución de leads por cuenta.

¿Codex puede ejecutar esto sin una persona frente al teclado?

Codex tiene un modo no interactivo, codex exec, para scripts y CI. La forma en que se comportan las aprobaciones de herramientas MCP en una ejecución sin interfaz ha cambiado entre versiones, así que haz una prueba en seco con tu versión instalada antes de ponerlo a correr con un temporizador. Para una tarea que tiene que ejecutarse sola cada semana, muchos equipos se saltan la capa de chat y llaman a la API REST de Shager desde un script corto, que no tiene confirmaciones en las que quedarse trabado. Elijas lo que elijas, dale a la tarea su propia clave, mantén ajustada la lista de herramientas permitidas y decide a conciencia si esa clave lleva publish. En la rutina semanal de distribución se describe una rutina construida en torno a esas decisiones.

Resolución de problemas

Lo que ves Causa Solución
401 unauthorized La variable no está exportada en la shell desde la que abriste Codex echo $SHAGER_API_KEY en esa misma terminal y luego reinicia Codex
Faltan herramientas en /mcp El nombre no está en enabled_tools, o está en disabled_tools Compara cómo está escrito con la lista de herramientas de /en/agents
403 sandbox_unclaimed La clave salió del registro autónomo de un agente y ninguna persona la reclamó Envíale el claim_url a una persona
403 forbidden al programar La clave no tiene publish Es lo esperado en una clave de redacción
429 rate_limited Más de 120 solicitudes por minuto por clave Usa grupos y un solo create_post en lugar de una llamada por cuenta

Preguntas frecuentes

¿Codex necesita OAuth para comunicarse con Shager?

No. Codex admite tokens bearer tomados de una variable de entorno, y Shager acepta una clave de API de esa forma. El servidor MCP de Shager también admite inicio de sesión con OAuth, y Codex admite servidores con OAuth, así que puedes iniciar sesión si prefieres no gestionar una clave.

¿La configuración de Shager cambia en la extensión de Codex para el IDE?

La documentación de MCP de OpenAI dice que la app de escritorio de ChatGPT, Codex CLI y la extensión para el IDE comparten esta configuración, así que la misma tabla en ~/.codex/config.toml sirve para todos. Asegúrate de que el proceso del editor vea la variable de entorno; en macOS, eso puede implicar abrir el editor desde una terminal.

¿Puedo apuntar Codex a la API REST en lugar de a MCP?

Sí, si estás escribiendo código y no chateando. El documento OpenAPI describe las mismas operaciones que las herramientas MCP, con los mismos permisos y límites.

Siguiente paso

Con Codex conectado, familiarízate con las operaciones antes de automatizar nada. La guía rápida de la API REST recorre la secuencia completa, desde el espacio de trabajo hasta la publicación con seguimiento, con curl y Python, y eso también te ayuda a entender lo que hace Codex cuando llama a las herramientas MCP.

Pruébalo en tus propias cuentas.

Gratis durante el lanzamiento, sin tarjeta. Conecta, escribe una vez y Shager publica y mide.