O ChatGPT consegue publicar pelo Shager? Sim: conecte com login ou use um de outros três caminhos
Os conectores MCP do ChatGPT entram com OAuth, e o Shager aceita: adicione o Shager no modo desenvolvedor, entre e aprove. E ainda Codex, a API e um script.

Consegue. Os conectores MCP personalizados do ChatGPT se autenticam com OAuth, e o servidor MCP do Shager aceita login via OAuth. Adicione https://app.shager.ai/api/mcp como conector no modo desenvolvedor, entre no Shager e aprove, sem chave para copiar. Você também pode colocar os modelos da OpenAI para trabalhar no Shager pelo Codex, pela API da OpenAI ou usando o ChatGPT para escrever e um script curto para fazer a entrega.
Este artigo mostra como adicionar o conector e traz código funcionando para cada um dos outros caminhos.
Como adicionar o Shager como conector do ChatGPT?
O guia da OpenAI sobre autenticação para apps no ChatGPT descreve o modelo suportado: servidores que precisam de autenticação implementam um fluxo OAuth 2.1 de acordo com a especificação de autorização do MCP, com preferência por Client ID Metadata Documents e com suporte também a registro dinâmico de clientes. Os servidores também podem funcionar sem autenticação. O mesmo guia afirma que o ChatGPT não consegue enviar chaves de API personalizadas.
O servidor do Shager em https://app.shager.ai/api/mcp segue essa especificação, com Client ID Metadata Documents e também registro dinâmico de clientes. Para conectar:
- No ChatGPT, abra Settings, depois Apps & Connectors, ative o Developer mode e clique em Create.
- Dê o nome
Shager, informehttps://app.shager.ai/api/mcpe escolha OAuth. - Clique em Connect. O Shager abre: entre, escolha a organização e aprove.
O modo desenvolvedor está disponível nos planos pagos do ChatGPT. A conexão pode ler e criar rascunhos. Agendar e publicar é uma caixa de seleção separada na tela de aprovação, desmarcada a menos que você a marque, e você pode desconectar a qualquer momento em https://app.shager.ai/dashboard/agents.
Por que não colocar um proxy sem autenticação na frente de uma chave de API?
Tem gente que sugere isso, e é uma péssima ideia, ainda mais agora que você não precisa disso. Um proxy que aceita requisições sem autenticação e injeta a sua chave do Shager transforma o acesso de publicação da sua agência num endpoint público. Qualquer pessoa que encontrar a URL pode criar rascunhos nos workspaces dos clientes e, com uma chave publish, agendá-los. Não faça isso.

Caminho 1: Codex, o agente de programação da OpenAI
Se o que você quer é "um modelo da OpenAI operando o Shager", o Codex já faz isso de forma limpa. Ele aceita bearer tokens vindos de uma variável de ambiente para servidores MCP com HTTP streamable, então a configuração são poucas linhas em ~/.codex/config.toml:
[mcp_servers.shager]
url = "https://app.shager.ai/api/mcp"
bearer_token_env_var = "SHAGER_API_KEY"
A documentação de MCP da OpenAI observa que o app desktop do ChatGPT, o Codex CLI e a extensão para IDE compartilham esse arquivo de configuração. O passo a passo completo, incluindo uma lista de ferramentas permitidas, está em como conectar o Shager ao Codex.
Caminho 2: a Responses API da OpenAI com uma ferramenta MCP remota
Se você está construindo seu próprio agente sobre a API da OpenAI, a Responses API consegue chamar servidores MCP remotos por conta própria. O guia de conectores e MCP documenta uma ferramenta mcp com server_url, um campo authorization para o token de acesso, allowed_tools e require_approval. A documentação também observa que a API não guarda o valor de authorization, então você o envia em toda requisição.
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)
Três observações de quem já rodou esse tipo de configuração.
Primeiro, teste a autenticação com whoami antes de qualquer outra coisa. A documentação da OpenAI apresenta authorization como um campo de token de acesso OAuth; a chave do Shager é um bearer token, então a primeira chamada já mostra se o cabeçalho chega do jeito que o Shager espera. Se vier um 401 na saída da ferramenta, use o Caminho 3.
Segundo, create_post ficou de fora da lista never de propósito, então a API devolve um pedido de aprovação antes de executá-lo. Seu código inspeciona os argumentos e responde com uma resposta de aprovação. É um ponto de controle barato, humano ou por regra, antes de o rascunho ser escrito.
Terceiro, não dê publish a essa chave. Assim, mesmo uma chamada aprovada só consegue criar rascunhos.
Caminho 3: o ChatGPT escreve, seu script entrega
Este é o padrão mais comum entre agências que vivem no ChatGPT. O modelo faz aquilo em que é bom, que é escrever quarenta variações de uma legenda. Um script de vinte linhas faz a entrega pela API REST do Shager em https://app.shager.ai/api/v1, descrita por completo no documento OpenAPI.
Peça ao ChatGPT uma saída estruturada que você possa colar num arquivo:
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>
Depois, envie como rascunho:
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"])
O array per_channel aceita objetos com channel_id e caption (além de first_comment e format, opcionais), então o JSON do ChatGPT entra direto. O cta_url ganha um link curto e uma UTM separados para cada conta, com utm_content indicando a conta, e é isso que permite atribuir os resultados depois.

Qual caminho combina com qual equipe?
| Situação | Caminho |
|---|---|
| Você quer hoje um agente com ferramentas num terminal ou numa IDE | Codex com bearer_token_env_var |
| Você está construindo seu próprio produto ou agente sobre modelos da OpenAI | Responses API com a ferramenta mcp, ou REST simples |
| Sua equipe escreve no ChatGPT e não vai sair de lá | ChatGPT para as legendas, script para a entrega |
| Você quer o Shager dentro do próprio app do ChatGPT | Um conector personalizado no modo desenvolvedor, com login via OAuth |
O que o login oferece?
Você adiciona https://app.shager.ai/api/mcp como servidor MCP personalizado no ChatGPT e entra com a sua conta do Shager, do jeito que o guia da OpenAI para conectar a partir do ChatGPT descreve para servidores com autenticação. Cada pessoa se conecta com a própria conta, em vez de compartilhar uma chave. O registro de auditoria funciona do mesmo jeito, e as ferramentas também, que correspondem uma a uma às operações REST.
Perguntas frequentes
Existe algum jeito de usar uma chave de API nas configurações de conector do ChatGPT?
Não, segundo o guia de autenticação da OpenAI para apps no ChatGPT, que lista os modos com OAuth e sem autenticação e diz que o ChatGPT não consegue enviar chaves de API personalizadas. Você não precisa de uma: escolha OAuth e entre com a sua conta. Trate qualquer gambiarra que exponha sua chave atrás de um endpoint aberto como um problema de segurança, e não como solução.
O Shager funciona no ChatGPT no celular?
Depende de onde o ChatGPT permite servidores MCP personalizados, o que é uma decisão da OpenAI e já mudou durante a implantação. Consulte a documentação atual da OpenAI em vez de confiar no que ela fazia antes.
Preciso de um plano pago do Shager para testar algum desses caminhos?
Não. O acesso por API e MCP está incluído em todos os planos e, durante o período de lançamento, o Shager é gratuito, sem cartão; antes de começarmos a cobrar, vamos avisar com antecedência. A página de preços mostra os limites de contas de cada plano.
Próximo passo
Se você vai pelo caminho do código, o jeito mais rápido de se situar é o guia rápido da API REST, que vai de uma chave nova a um rascunho rastreável para várias contas em seis chamadas.


