ChatGPT peut-il publier via Shager ? Oui : connectez-vous depuis ChatGPT, ou choisissez l'une des trois autres solutions

Les connecteurs MCP de ChatGPT passent par OAuth, et Shager le prend en charge : ajoutez Shager en mode développeur, connectez-vous et validez. Plus Codex, l'API et un script.

Oui. Les connecteurs MCP personnalisés de ChatGPT s'authentifient via OAuth, et le serveur MCP de Shager prend en charge la connexion OAuth. Ajoutez https://app.shager.ai/api/mcp comme connecteur en mode développeur, connectez-vous à Shager et validez, sans clé à copier. Vous pouvez aussi faire travailler les modèles d'OpenAI sur Shager via Codex, via l'API OpenAI, ou en utilisant ChatGPT pour la rédaction et un petit script pour l'envoi.

Cet article montre comment ajouter le connecteur et donne du code fonctionnel pour chacune des autres solutions.

Comment ajouter Shager comme connecteur ChatGPT ?

Le guide d'OpenAI sur l'authentification des applications dans ChatGPT décrit le modèle pris en charge : les serveurs qui exigent une authentification mettent en œuvre un flux OAuth 2.1 conforme à la spécification d'autorisation MCP, avec une préférence pour les Client ID Metadata Documents et une prise en charge de l'enregistrement dynamique des clients. Les serveurs peuvent aussi fonctionner sans authentification. Le même guide précise que ChatGPT ne sait pas présenter de clé API personnalisée.

Le serveur de Shager, à l'adresse https://app.shager.ai/api/mcp, suit cette spécification, avec les Client ID Metadata Documents comme avec l'enregistrement dynamique des clients. Pour le connecter :

  1. Dans ChatGPT, ouvrez Settings, puis Apps & Connectors, activez Developer mode et cliquez sur Create.
  2. Nommez-le Shager, saisissez https://app.shager.ai/api/mcp et choisissez OAuth.
  3. Cliquez sur Connect. Shager s'ouvre : connectez-vous, choisissez l'organisation et validez.

Le mode développeur est disponible sur les formules payantes de ChatGPT. La connexion peut lire et créer des brouillons. Programmer et publier est une case à part sur l'écran de validation, décochée tant que vous ne la cochez pas, et vous pouvez déconnecter l'accès à tout moment depuis https://app.shager.ai/dashboard/agents.

Pourquoi ne pas placer un proxy sans authentification devant une clé API ?

On nous le suggère, et c'est une mauvaise idée, d'autant plus que vous n'en avez plus besoin. Un proxy qui accepte des requêtes non authentifiées et y injecte votre clé Shager transforme les droits de publication de votre agence en point d'accès public. N'importe qui tombant sur l'URL peut créer des brouillons dans les espaces de vos clients et, avec une clé publish, les programmer. Ne le faites pas.

Schéma : un agent IA (Claude, Codex ou Cursor) se connecte à Shager via le serveur MCP ou l'API REST, et Shager diffuse sur Facebook, Instagram, YouTube, X, LinkedIn et TikTok.
Shager gère les connexions, les vérifications, l'étalement des envois et la mesure des clics. Facebook et Instagram attendent la validation de Meta ; d'ici là, seuls des comptes de test peuvent se connecter. Sur TikTok, les publications sont publiées en privé (« moi uniquement ») jusqu'à ce que TikTok valide l'application.

Solution 1 : Codex, l'agent de code d'OpenAI

Si ce que vous voulez, c'est « un modèle OpenAI qui pilote Shager », Codex le fait déjà proprement. Il accepte des jetons bearer issus d'une variable d'environnement pour les serveurs MCP en HTTP streamable : la configuration tient en quelques lignes dans ~/.codex/config.toml.

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

La documentation MCP d'OpenAI indique que l'application de bureau ChatGPT, Codex CLI et l'extension IDE partagent ce fichier de configuration. Le pas-à-pas complet, avec une liste d'outils autorisés, se trouve dans connecter Shager à Codex.

Solution 2 : l'API Responses d'OpenAI avec un outil MCP distant

Si vous construisez votre propre agent sur l'API d'OpenAI, l'API Responses peut appeler elle-même des serveurs MCP distants. Le guide sur les connecteurs et MCP documente un outil mcp avec server_url, un champ authorization pour le jeton d'accès, allowed_tools et require_approval. La documentation précise aussi que l'API ne conserve pas la valeur authorization : il faut donc l'envoyer à chaque requête.

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)

Trois remarques tirées de ce type de configuration.

D'abord, testez l'authentification avec whoami avant toute autre chose. La documentation d'OpenAI présente authorization comme un champ de jeton d'accès OAuth ; la clé Shager est un jeton bearer, et ce premier appel vous dit tout de suite si l'en-tête arrive comme Shager l'attend. Si la sortie de l'outil renvoie une erreur 401, passez à la solution 3.

Ensuite, create_post est volontairement absent de la liste never : l'API renvoie donc une demande d'approbation avant de l'exécuter. Votre code examine les arguments et répond par une réponse d'approbation. C'est un point de contrôle peu coûteux, humain ou fondé sur des règles, avant l'écriture d'un brouillon.

Enfin, ne donnez pas la portée publish à cette clé. Même un appel approuvé ne pourra alors créer que des brouillons.

Solution 3 : ChatGPT rédige, votre script envoie

C'est le schéma le plus courant dans les agences qui vivent dans ChatGPT. Le modèle fait ce qu'il fait le mieux : écrire quarante variantes d'une légende. Un script d'une vingtaine de lignes se charge de l'envoi via l'API REST de Shager, à l'adresse https://app.shager.ai/api/v1, entièrement décrite dans le document OpenAPI.

Demandez à ChatGPT une sortie structurée que vous pouvez coller dans un fichier :

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>

Puis envoyez-la en brouillon :

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"])

Le tableau per_channel accepte des objets avec channel_id et caption (plus first_comment et format, facultatifs) : le JSON de ChatGPT s'y insère donc tel quel. Le cta_url reçoit un lien court et des UTM distincts pour chaque compte, avec un utm_content qui nomme le compte, et c'est ce qui permet ensuite d'attribuer les résultats.

Une requête curl qui crée une publication avec l'API REST de Shager : légende, groupe de comptes, lien suivi et heure de publication.
Les mêmes opérations que le serveur MCP, documentées en OpenAPI.

Quelle solution pour quelle équipe ?

Situation Solution
Vous voulez dès aujourd'hui un agent avec des outils dans un terminal ou un IDE Codex avec bearer_token_env_var
Vous construisez votre propre produit ou agent sur les modèles d'OpenAI API Responses avec l'outil mcp, ou REST pur
Votre équipe rédige dans ChatGPT et n'en sortira pas ChatGPT pour les légendes, un script pour l'envoi
Vous voulez Shager dans l'application ChatGPT elle-même Un connecteur personnalisé en mode développeur, avec connexion OAuth

Qu'apporte la connexion à votre compte ?

Vous ajoutez https://app.shager.ai/api/mcp comme serveur MCP personnalisé dans ChatGPT et vous connecter avec votre compte Shager, comme le décrit le guide d'OpenAI sur la connexion depuis ChatGPT pour les serveurs authentifiés. Chacun se connecte avec son propre compte au lieu de partager une clé. Le journal d'audit fonctionne de la même façon, tout comme les outils, qui correspondent un à un aux opérations REST.

FAQ

Existe-t-il un moyen d'utiliser une clé API dans les réglages des connecteurs de ChatGPT ?

Pas d'après le guide d'authentification d'OpenAI pour les applications dans ChatGPT, qui liste les modes OAuth et sans authentification, et indique que ChatGPT ne sait pas présenter de clé API personnalisée. Vous n'en avez pas besoin : choisissez OAuth et connectez-vous. Tout contournement qui expose votre clé derrière un point d'accès ouvert est un problème de sécurité, pas une solution.

Shager fonctionne-t-il dans ChatGPT sur mobile ?

Cela dépend des endroits où ChatGPT autorise les serveurs MCP personnalisés, une décision qui revient à OpenAI et qui a évolué au fil du déploiement. Consultez la documentation à jour d'OpenAI plutôt que de vous fier à ce qui se faisait avant.

Faut-il une formule Shager payante pour essayer ces solutions ?

Non. L'accès à l'API et à MCP est inclus dans toutes les formules et, pendant la période de lancement, Shager est gratuit, sans carte bancaire ; nous vous préviendrons à l'avance avant de commencer à facturer. La page des tarifs indique le nombre de comptes par formule.

Prochaine étape

Si vous optez pour le code, le plus rapide pour vous repérer est le guide de démarrage de l'API REST, qui mène d'une clé toute neuve à un brouillon multicomptes avec suivi en six appels.

Essayez sur vos propres comptes.

Gratuit pendant le lancement, sans carte. Connectez, écrivez une fois, et Shager publie et mesure.