Shager dans OpenAI Codex : config.toml, bearer_token_env_var et une liste d'outils qui garde les brouillons en brouillon

Configurez le serveur MCP de Shager dans Codex CLI via config.toml ou codex mcp add, lisez la clé dans une variable, limitez les outils, créez un brouillon.

Pour connecter Shager à Codex CLI d'OpenAI, ajoutez une table [mcp_servers.shager] dans ~/.codex/config.toml avec url = "https://app.shager.ai/api/mcp" et bearer_token_env_var = "SHAGER_API_KEY", puis exportez votre clé shgr_live_ dans cette variable. Codex parle nativement le HTTP streamable et envoie la clé comme jeton bearer : ni passerelle ni processus local ne sont nécessaires. Vous pouvez aussi tout faire en une ligne avec codex mcp add shager --url ... --bearer-token-env-var SHAGER_API_KEY.

La suite de ce guide explique comment le faire sans le regretter : garder la clé hors du fichier, limiter les outils Shager que Codex peut appeler, et choisir une première tâche qui valide le branchement.

Que prend en charge Codex pour les serveurs MCP distants ?

La documentation MCP de Codex d'OpenAI décrit les serveurs HTTP streamable configurés avec une url, ainsi que trois façons de s'authentifier par en-têtes. La référence de configuration les définit :

Clé Rôle
bearer_token_env_var Nom d'une variable d'environnement dont la valeur est envoyée comme jeton bearer
http_headers En-têtes fixes ajoutés à chaque requête
env_http_headers En-têtes dont les valeurs sont lues dans des variables d'environnement

Shager attend Authorization: Bearer shgr_live_..., ce que produit précisément bearer_token_env_var. C'est l'option à retenir.

Fichier config.toml de Codex : un serveur MCP nommé shager, avec son URL et une variable d'environnement qui contient la clé.
La clé reste dans une variable d'environnement, jamais dans le fichier.

Option A : modifier config.toml

Ouvrez ~/.codex/config.toml et ajoutez :

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

Placez ensuite la clé dans le profil de votre shell, pas dans le TOML :

export SHAGER_API_KEY="shgr_live_your_key_here"

La configuration contient le nom de la variable, pas la clé elle-même. Vous pouvez donc committer ou partager l'extrait sans crainte, et chaque collègue fournit sa propre clé. Une clé par personne s'avère payante par la suite, car le journal d'audit de Shager sur https://app.shager.ai/dashboard/agents enregistre chaque appel avec la clé qui l'a émis.

Option B : codex mcp add

La CLI écrit la même table à votre place. Le code source de codex mcp add définit --url pour les serveurs HTTP streamable et une option --bearer-token-env-var qui l'exige (mcp_cmd.rs sur GitHub) :

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

Si votre version installée diffère, c'est codex mcp add --help qui fait foi.

Vérifiez le résultat :

codex mcp list

Dans l'interface TUI de Codex, /mcp affiche les serveurs actifs et leurs outils.

Faut-il plutôt utiliser http_headers ?

C'est possible, mais déconseillé. http_headers = { "Authorization" = "Bearer shgr_live_..." } fonctionne, mais place un identifiant actif dans un fichier texte en clair, qui a tendance à finir copié dans des dépôts de dotfiles. Si vous avez besoin d'un autre en-tête que le jeton bearer, env_http_headers associe un nom d'en-tête à un nom de variable d'environnement :

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

Sous cette forme, la variable doit contenir la valeur complète, schéma compris : export SHAGER_AUTH_HEADER="Bearer shgr_live_...". Pour Shager, bearer_token_env_var est plus simple et fait la même chose.

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.

Comment limiter ce que Codex peut faire dans Shager ?

C'est l'étape que la plupart des guides d'installation passent sous silence. Codex permet de filtrer les outils d'un serveur avec enabled_tools (une liste d'autorisation) et disabled_tools (une liste d'exclusion appliquée ensuite), toutes deux documentées dans la référence de configuration. Combinez-les avec les scopes de clé de Shager et vous obtenez deux couches qui, en cas de doute, bloquent.

Un profil de rédaction qui peut tout lire et créer des brouillons, mais pas programmer, annuler ni créer de liens de connexion :

[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 reste dans la liste parce que, sans schedule_at, il ne fait qu'enregistrer un brouillon. Si la clé n'a pas non plus le scope publish, Shager rejette avec un 403 tout create_post qui contient schedule_at : même un modèle inventif ne peut pas glisser une publication programmée en douce.

La hausse de tool_timeout_sec s'explique par upload_media_from_url, qui télécharge le fichier côté serveur : une grosse vidéo verticale peut dépasser les 60 secondes par défaut indiquées dans la référence.

Une première tâche qui vaut le coup

Commencez par un prompt qui sollicite plusieurs outils et ne laisse qu'un brouillon derrière lui :

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.

Ce que vous devez obtenir : une publication au statut DRAFT avec une destination par compte, chacune avec son format résolu pour le réseau concerné. Dans Shager, chaque compte reçoit son propre lien court et ses tags UTM pour le cta_url, avec utm_content au nom du compte : c'est ce qui rend possible l'attribution par compte par la suite. Les détails sont dans l'attribution des prospects par compte.

Codex peut-il tourner sans personne au clavier ?

Codex propose un mode non interactif, codex exec, pour les scripts et la CI. Le comportement des validations d'outils MCP en exécution headless a changé d'une version à l'autre : testez donc à blanc sur votre version installée avant de programmer quoi que ce soit. Pour une tâche qui doit tourner sans surveillance chaque semaine, beaucoup d'équipes se passent de la couche chat et appellent l'API REST de Shager depuis un petit script, sans invite de validation susceptible de bloquer. Quel que soit votre choix, donnez à la tâche sa propre clé, gardez une liste d'outils serrée, et décidez en connaissance de cause si cette clé porte publish. Une routine construite sur ces choix est détaillée dans la routine de diffusion hebdomadaire.

Dépannage

Ce que vous voyez Cause Solution
401 unauthorized Variable non exportée dans le shell qui a lancé Codex echo $SHAGER_API_KEY dans le même terminal, puis redémarrez Codex
Outils absents de /mcp Nom absent de enabled_tools, ou présent dans disabled_tools Vérifiez l'orthographe avec la liste d'outils sur /fr/agents
403 sandbox_unclaimed Clé issue de l'auto-inscription d'un agent, pas encore revendiquée par un humain Envoyez le claim_url à une personne
403 forbidden à la programmation La clé n'a pas publish Normal pour une clé de rédaction
429 rate_limited Plus de 120 requêtes par minute et par clé Utilisez des groupes et un seul create_post au lieu d'un appel par compte

FAQ

Codex a-t-il besoin d'OAuth pour communiquer avec Shager ?

Non. Codex prend en charge les jetons bearer lus dans une variable d'environnement, et Shager accepte une clé API de cette façon. Le serveur MCP de Shager prend aussi en charge la connexion OAuth, et Codex gère les serveurs OAuth : vous pouvez donc vous connecter plutôt que de gérer une clé.

La configuration de Shager est-elle différente dans l'extension IDE de Codex ?

Selon la documentation MCP d'OpenAI, l'application de bureau ChatGPT, Codex CLI et l'extension IDE partagent cette configuration : la même table dans ~/.codex/config.toml sert pour les trois. Assurez-vous que la variable d'environnement est visible par le processus de l'éditeur, ce qui, sur macOS, peut impliquer de lancer l'éditeur depuis un terminal.

Puis-je brancher Codex sur l'API REST plutôt que sur MCP ?

Oui, si vous écrivez du code plutôt que de discuter. Le document OpenAPI décrit les mêmes opérations que les outils MCP, avec les mêmes scopes et les mêmes limites.

Et ensuite ?

Une fois Codex connecté, familiarisez-vous avec les opérations elles-mêmes avant d'automatiser quoi que ce soit. Le guide de démarrage de l'API REST parcourt toute la séquence, de l'espace de travail à la publication suivie, avec curl et Python, ce qui vous aide aussi à comprendre ce que fait Codex quand il appelle les outils MCP.

Essayez sur vos propres comptes.

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