¿ChatGPT puede publicar con Shager? Sí: conéctalo iniciando sesión o usa uno de otros tres caminos
Los conectores MCP de ChatGPT inician sesión con OAuth, y Shager lo admite: agrega Shager en modo desarrollador, inicia sesión y aprueba. Además, Codex, la API y un script.

Sí. Los conectores MCP personalizados de ChatGPT se autentican con OAuth, y el servidor MCP de Shager admite inicio de sesión con OAuth. Agrega https://app.shager.ai/api/mcp como conector en modo desarrollador, inicia sesión en Shager y aprueba, sin clave que copiar. También puedes poner a trabajar los modelos de OpenAI con Shager a través de Codex, a través de la API de OpenAI, o usando ChatGPT para escribir y un script corto para el envío.
Este artículo muestra cómo agregar el conector y trae código que funciona para cada uno de los otros caminos.
¿Cómo agregar Shager como conector de ChatGPT?
La guía de OpenAI sobre autenticación para apps en ChatGPT describe el modelo compatible: los servidores que necesitan autenticación implementan un flujo OAuth 2.1 que sigue la especificación de autorización de MCP, con preferencia por los Client ID Metadata Documents y con soporte también para el registro dinámico de clientes. Los servidores también pueden funcionar sin autenticación. La misma guía dice que ChatGPT no puede presentar claves de API personalizadas.
El servidor de Shager en https://app.shager.ai/api/mcp sigue esa especificación, con Client ID Metadata Documents y también con registro dinámico de clientes. Para conectarlo:
- En ChatGPT, abre Settings, luego Apps & Connectors, activa Developer mode y haz clic en Create.
- Ponle el nombre
Shager, ingresahttps://app.shager.ai/api/mcpy elige OAuth. - Haz clic en Connect. Se abre Shager: inicia sesión, elige la organización y aprueba.
El modo desarrollador está disponible en los planes de pago de ChatGPT. La conexión puede leer y crear borradores. Programar y publicar es una casilla aparte en la pantalla de aprobación, desactivada a menos que la marques, y puedes desconectarla en cualquier momento desde https://app.shager.ai/dashboard/agents.
¿Por qué no poner delante de una clave de API un proxy sin autenticación?
Hay quien lo sugiere, y es una mala idea, sobre todo ahora que no lo necesitas. Un proxy que acepta solicitudes sin autenticar e inyecta tu clave de Shager convierte el acceso de publicación de tu agencia en un endpoint público. Cualquiera que encuentre la URL puede crear borradores en los espacios de trabajo de tus clientes y, con una clave publish, programarlos. No lo hagas.

Camino 1: Codex, el agente de programación de OpenAI
Si lo que buscas es "un modelo de OpenAI operando Shager", Codex ya lo hace de forma limpia. Admite tokens bearer desde una variable de entorno para servidores MCP con HTTP streamable, así que la configuración son unas pocas líneas en ~/.codex/config.toml:
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
La documentación de MCP de OpenAI señala que la app de escritorio de ChatGPT, Codex CLI y la extensión para IDE comparten este archivo de configuración. La guía completa, con una lista de herramientas permitidas, está en cómo conectar Shager a Codex.
Camino 2: la Responses API de OpenAI con una herramienta MCP remota
Si estás construyendo tu propio agente sobre la API de OpenAI, la Responses API puede llamar por sí misma a servidores MCP remotos. La guía de conectores y MCP documenta una herramienta mcp con server_url, un campo authorization para el token de acceso, allowed_tools y require_approval. La documentación aclara además que la API no guarda el valor de authorization, así que tienes que enviarlo en cada solicitud.
import os
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model=os.environ["OPENAI_MODEL"],
input=(
"In the Shager workspace 'Cedar Clinics', list the channels, then create a "
"DRAFT post to all active channels announcing Saturday walk-in hours. "
"Use a different caption per channel that names the clinic's town. "
"cta_url https://cedarclinics.example/walk-in, campaign 'walk-in-sat'. "
"Do not pass schedule_at."
),
tools=[{
"type": "mcp",
"server_label": "shager",
"server_url": "https://app.shager.ai/api/mcp",
"authorization": os.environ["SHAGER_API_KEY"],
"allowed_tools": [
"whoami", "list_workspaces", "list_channels",
"list_groups", "create_post", "get_post",
],
"require_approval": {
"never": {"tool_names": ["whoami", "list_workspaces", "list_channels", "list_groups", "get_post"]}
},
}],
)
print(response.output_text)
Tres observaciones de haber usado este tipo de configuración.
Primero, prueba la autenticación con whoami antes que nada. La documentación de OpenAI presenta authorization como un campo para un token de acceso OAuth; la clave de Shager es un token bearer, así que la primera llamada te dice enseguida si el encabezado llega como Shager lo espera. Si en la salida de la herramienta recibes un 401, pasa al camino 3.
Segundo, create_post queda fuera de la lista never a propósito, así que la API devuelve una solicitud de aprobación antes de ejecutarla. Tu código revisa los argumentos y contesta con una respuesta de aprobación. Es un punto de control barato, humano o basado en reglas, antes de que se escriba un borrador.
Tercero, no le des publish a esta clave. Así, incluso una llamada aprobada solo puede crear borradores.
Camino 3: ChatGPT escribe, tu script envía
Es el patrón más común entre las agencias que viven dentro de ChatGPT. El modelo hace lo que hace bien, que es escribir cuarenta variaciones de un texto. Un script de veinte líneas se encarga del envío a través de la API REST de Shager en https://app.shager.ai/api/v1, que el documento OpenAPI describe por completo.
Pídele a ChatGPT una salida estructurada que puedas pegar en un archivo:
For each account below, write a caption for our Saturday walk-in hours post.
Vary the opening line and mention the town. Keep facts identical.
Return only JSON: [{"channel_id": "...", "caption": "..."}]
Accounts: <paste the id and name list from list_channels>
Después envíalo como borrador:
import json, os, requests
API = "https://app.shager.ai/api/v1"
H = {"Authorization": f"Bearer {os.environ['SHAGER_API_KEY']}"}
WS = os.environ["SHAGER_WORKSPACE_ID"]
captions = json.load(open("captions.json"))
r = requests.post(f"{API}/workspaces/{WS}/posts", headers=H, json={
"caption": captions[0]["caption"],
"channel_ids": [c["channel_id"] for c in captions],
"per_channel": captions,
"cta_url": "https://cedarclinics.example/walk-in",
"campaign": "walk-in-sat",
"first_comment": "Hours and directions: https://cedarclinics.example/walk-in",
}, timeout=60)
body = r.json()
if not r.ok:
raise SystemExit(f"{body['error']['code']}: {body['error']['message']}")
print("draft", body["data"]["id"], body["data"]["status"])
El array per_channel acepta objetos con channel_id y caption (más first_comment y format opcionales), así que el JSON de ChatGPT entra directo. El cta_url recibe un enlace corto y unos UTM distintos para cada cuenta, con utm_content indicando la cuenta, que es lo que después permite atribuir los resultados.

¿Qué camino le sirve a cada equipo?
| Situación | Camino |
|---|---|
| Quieres hoy mismo un agente con herramientas en una terminal o un IDE | Codex con bearer_token_env_var |
| Estás construyendo tu propio producto o agente con modelos de OpenAI | Responses API con la herramienta mcp, o REST directo |
| Tu equipo escribe en ChatGPT y no lo va a dejar | ChatGPT para los textos, un script para el envío |
| Quieres Shager dentro de la propia app de ChatGPT | Un conector personalizado en modo desarrollador, con inicio de sesión OAuth |
¿Qué te da iniciar sesión?
Agregas https://app.shager.ai/api/mcp como servidor MCP personalizado en ChatGPT e inicias sesión con tu cuenta de Shager, como describe la guía de OpenAI para conectarse desde ChatGPT en el caso de servidores con autenticación. Cada persona se conecta con su propia cuenta en lugar de compartir una clave. El registro de auditoría funciona igual, y también las herramientas, que corresponden una a una con las operaciones REST.
Preguntas frecuentes
¿Hay alguna forma de usar una clave de API en los ajustes de conectores de ChatGPT?
No, según la guía de autenticación de OpenAI para apps en ChatGPT, que enumera los modos OAuth y sin autenticación y dice que ChatGPT no puede presentar claves de API personalizadas. No la necesitas: elige OAuth e inicia sesión. Cualquier atajo que exponga tu clave detrás de un endpoint abierto es un problema de seguridad, no una solución.
¿Shager funciona en ChatGPT para móvil?
Depende de dónde permita ChatGPT servidores MCP personalizados, algo que decide OpenAI y que ha cambiado durante el despliegue. Revisa la documentación vigente de OpenAI en lugar de fiarte de cómo funcionaba antes.
¿Necesito un plan de pago de Shager para probar alguno de estos caminos?
No. El acceso por API y MCP está incluido en todos los planes, y durante el período de lanzamiento Shager es gratis, sin tarjeta; antes de empezar a cobrar te vamos a avisar con anticipación. En la página de precios están los límites de cuentas de cada plan.
Siguiente paso
Si vas por el camino del código, la forma más rápida de orientarte es la guía rápida de la API REST, que va de una clave recién creada a un borrador multicuenta con seguimiento en seis llamadas.


