MCP

Référence des outils

Chaque outil exposé par le serveur MCP de PostNext, avec ses entrées, la structure de retour et un exemple prêt à copier-coller.

Authentification

Chaque requête vers https://mcp.postnext.io/api nécessite un en-tête Authorization avec un jeton Bearer. Vous avez deux façons d'en obtenir un.

OAuth (recommandé pour les clients IA)

Les clients IA exécutent Dynamic Client Registration à la première connexion, puis guident l'utilisateur via un écran de consentement OAuth. La page /mcp/connect le fait automatiquement. Votre client reçoit un jeton d'accès de 30 jours.

Clé API

Pour les scripts et la CI, générez une clé API personnelle dans l'app PostNext via Compte → Clés API. La clé commence par apikey_ et est présentée comme un jeton Bearer ordinaire.

Endpoint

Tous les appels de tools vont vers un unique endpoint JSON-RPC 2.0 en HTTPS POST.

POST https://mcp.postnext.io/api

Outils

list_scheduled_posts

Listez vos publications programmées (en file d'attente pour publication mais pas encore envoyées).

Arguments

limitnumber ·optionnel · default 20
Nombre maximal de résultats à retourner (1-100, défaut 20).
fromstring (ISO 8601) ·optionnel
Horodatage ISO ; retourne uniquement les publications programmées à partir de cette date.

Retourne

Un objet avec posts: [{id, platform, content, scheduledAt, status}]. Jusqu'à limit résultats.

Exemple

curl -X POST https://mcp.postnext.io/api \
  -H "Authorization: Bearer apikey_xxx" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/call","id":1,
       "params":{"name":"list_scheduled_posts",
                 "arguments":{"limit":5}}}'

list_drafts

Listez vos brouillons (pas encore programmés).

Arguments

limitnumber ·optionnel · default 20
Nombre maximal de résultats à retourner (1-100, défaut 20).

Retourne

Un objet avec drafts: [{id, platform, content, updatedAt}]. Jusqu'à limit résultats.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":2,
 "params":{"name":"list_drafts","arguments":{"limit":10}}}

list_connected_accounts

Listez les comptes sociaux connectés à votre équipe.

Arguments

Aucun argument.

Retourne

Un objet avec accounts: [{platform, handle, connected, lastSyncAt}].

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":3,
 "params":{"name":"list_connected_accounts","arguments":{}}}

get_account_healthPlan payant

Obtenez un résumé de santé sur toutes les plateformes connectées.

Arguments

platformenum ·optionnel
Plateforme sociale : twitter, instagram, linkedin, threads, ou tiktok.
windowDays7 | 30 | 90 ·optionnel · default 30
Fenêtre de consultation en jours : 7, 30 ou 90 (défaut 30).

Retourne

Un objet avec windowDays, postsScheduled, postsPublished, postsFailed, une ventilation byPlatform et topErrors[].

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":4,
 "params":{"name":"get_account_health",
           "arguments":{"windowDays":30}}}

create_post_draft

Créez un nouveau brouillon. Les brouillons ne sont pas auto-publiés.

Arguments

platformenum ·requis
Plateforme sociale : twitter, instagram, linkedin, threads, ou tiktok.
contentstring ·requis
Corps de la publication (1-2200 caractères).
mediaUrlsarray<string> ·optionnel
Jusqu'à 10 URL d'images ou de vidéos.
clientRequestIdstring ·optionnel
Clé d'idempotence optionnelle. La même clé dans les 5 minutes renvoie le résultat mis en cache.

Retourne

Un objet avec le nouveau brouillon : {id, platform, content, status: "DRAFT", createdAt}.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":5,
 "params":{"name":"create_post_draft",
           "arguments":{"platform":"twitter",
                        "content":"Hello from MCP"}}}

update_post_draft

Mettez à jour un brouillon existant. Au moins l'un des champs content ou mediaUrls doit être fourni.

Arguments

postIdstring ·requis
Identifiant de publication PostNext issu d'un appel de liste.
contentstring ·optionnel
Corps de la publication (1-2200 caractères).
mediaUrlsarray<string> ·optionnel
Jusqu'à 10 URL d'images ou de vidéos.
clientRequestIdstring ·optionnel
Clé d'idempotence optionnelle. La même clé dans les 5 minutes renvoie le résultat mis en cache.

Retourne

Un objet avec le brouillon mis à jour : {id, platform, content, mediaUrls, status, updatedAt}.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":6,
 "params":{"name":"update_post_draft",
           "arguments":{"postId":"",
                        "content":"Updated copy"}}}

connect_channel

Générez une URL à usage unique que l'utilisateur peut ouvrir pour autoriser une nouvelle connexion de plateforme.

Arguments

platformenum ·requis
Plateforme sociale : twitter, instagram, linkedin, threads, ou tiktok.

Retourne

Un objet avec authUrl (lien à usage unique que l'utilisateur ouvre pour autoriser), expiresAt et platform.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":7,
 "params":{"name":"connect_channel",
           "arguments":{"platform":"linkedin"}}}

schedule_post

Place un brouillon (statut DRAFT) dans la file de publication BullMQ à un timestamp futur. Idempotent dans une dérive de ±60s; rejette les tentatives de re-planification à une autre heure sans annulation explicite.

Arguments

postIdstring ·requis
Identifiant de publication PostNext issu d'un appel de liste.
scheduledAtstring (ISO 8601) ·requis
Timestamp ISO 8601; ne peut pas être à plus de 5 minutes dans le passé.

Retourne

Un objet avec postId, scheduledAt (ISO), status: SCHEDULED.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":8,
 "params":{"name":"schedule_post",
           "arguments":{"postId":"",
                        "scheduledAt":"2026-05-10T09:00:00Z"}}}

cancel_scheduled_post

Annule une publication planifiée et la retire de la file. Le brouillon sous-jacent est conservé.

Arguments

postIdstring ·requis
Identifiant de publication PostNext issu d'un appel de liste.

Retourne

Un objet avec postId et status: CANCELLED.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":9,
 "params":{"name":"cancel_scheduled_post",
           "arguments":{"postId":""}}}

delete_draft

Supprime définitivement un brouillon. Refuse les publications non DRAFT (utilisez cancel_scheduled_post pour SCHEDULED).

Arguments

postIdstring ·requis
Identifiant de publication PostNext issu d'un appel de liste.

Retourne

Un objet avec postId et deleted: true.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":10,
 "params":{"name":"delete_draft",
           "arguments":{"postId":""}}}

get_post

Renvoie le PostGroup complet pour un postId avec le contenu par plateforme + statut + timestamps.

Arguments

postIdstring ·requis
Identifiant de publication PostNext issu d'un appel de liste.

Retourne

Un objet avec postId, status, scheduledAt, createdAt, updatedAt et providers (carte plateforme → contenu).

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":11,
 "params":{"name":"get_post",
           "arguments":{"postId":""}}}

search_posts

Recherche de sous-chaîne (insensible à la casse) dans le contenu des publications de l'équipe active. Filtres: status, platform, limit (1-100, défaut 20).

Arguments

querystring ·requis
Sous-chaîne à rechercher (3-200 caractères; les métacaractères regex sont échappés).
statusenum ·optionnel
Optionnel: DRAFT | SCHEDULED | PUBLISHED | FAILED | CANCELLED.
platformenum ·optionnel
Plateforme sociale : twitter, instagram, linkedin, threads, ou tiktok.
limitnumber ·optionnel · default 20
Nombre maximal de résultats à retourner (1-100, défaut 20).

Retourne

Un objet avec posts: [{postId, status, platforms, snippet, scheduledAt, updatedAt}]. Le snippet contient le contexte correspondant avec des points de suspension de chaque côté.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":12,
 "params":{"name":"search_posts",
           "arguments":{"query":"launch","limit":10}}}

list_teams

Renvoie les équipes dont l'utilisateur authentifié est propriétaire ou admin, l'équipe active étant marquée.

Arguments

Aucun argument.

Retourne

Un objet avec currentTeamId et teams: [{teamId, teamName, isCurrent}].

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":13,
 "params":{"name":"list_teams","arguments":{}}}

set_current_team

Change l'équipe active pour ce jeton Bearer. L'utilisateur doit en être membre. Persisté sur le document du jeton OAuth; la mutation in-session le rend immédiatement effectif pour les outils suivants dans la même conversation.

Arguments

teamIdstring ·requis
teamId cible depuis list_teams. L'appartenance est revalidée côté serveur.

Retourne

Un objet avec teamId, teamName, persisted (true si OAuth, false si clé API) et un note optionnel.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":14,
 "params":{"name":"set_current_team",
           "arguments":{"teamId":"team_xxxxx"}}}

get_plan_limits

Lit le niveau d'abonnement actuel de l'utilisateur et les quotas par palier (canaux, stockage, crédits IA, publication). Disponible sur tous les plans. Utile avant des outils mutateurs pour prédire si l'appel sera bloqué.

Arguments

Aucun argument.

Retourne

Un objet avec tier, tierDisplayName, isPaid, isTrial, upgradeUrl, limits (channels/storage/aiCalls/posts chacun sous la forme {limit, current, exceeded} ou {limit, allowed}) et creditsAvailable ({total, subscriptionRemaining, purchasedBalance} ou null).

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":15,
 "params":{"name":"get_plan_limits","arguments":{}}}

get_post_metrics

Récupère les métriques d'engagement d'une publication publiée sur chaque plateforme où elle a été envoyée. Twitter et Instagram renvoient des métriques peuplées (likes, retweets/partages, commentaires/réponses, impressions); LinkedIn, Threads et TikTok renvoient seulement le statut de publication et l'URL (la collecte d'engagement est reportée à une version ultérieure). Un récapitulatif normalisé totals additionne likes/commentaires/partages/impressions des plateformes ayant fourni des données.

Arguments

postId Identifiant de publication PostNext issu d'un appel de liste.

Retourne

Un objet avec postId, status, providers: [{platform, publishedPostId, publishedUrl, publishedAt, status, metrics}] et totals: {likes, comments, shares, impressions}. metrics est un objet de compteurs numériques par plateforme, ou null lorsque la plateforme ne collecte pas encore l'engagement.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":16,
 "params":{"name":"get_post_metrics",
           "arguments":{"postId":""}}}

get_publish_status

Diagnostique une publication planifiée : état de la file, succès/erreur par plateforme, temps de traitement et jobId du worker. Renvoie isScheduled=false pour les publications qui existent en brouillon mais n'ont pas été placées dans la file, avec un hint pointant vers schedule_post.

Arguments

postId Identifiant de publication PostNext issu d'un appel de liste.

Retourne

Un objet avec postId, isScheduled, status, scheduledAt, publishedAt, platforms, processingTimeMs, jobId, topLevelError et results: [{platform, success, publishedPostId, publishedAt, error}]. Inclut hint quand isScheduled est false.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":17,
 "params":{"name":"get_publish_status",
           "arguments":{"postId":""}}}

update_brand_profile

Met à jour le profil de marque actif de l'utilisateur. Champs autorisés : bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize. Tout autre champ est abandonné silencieusement. Résout "actif" comme défaut d'équipe d'abord, puis le premier profil actif de l'utilisateur.

Arguments

brandVoice Tableau de descripteurs de ton de marque (p. ex. ["professionnel", "concis"]).

Other patchable fields: bio, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize.

Retourne

Un objet avec profileId, name, updated: [noms de champs patchés] et les valeurs actuelles de bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize après le patch.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":18,
 "params":{"name":"update_brand_profile",
           "arguments":{"brandVoice":["professional","concise"]}}}

get_best_time_to_post Paid plan

Recommande les meilleurs N créneaux (jourDeSemaine, heure) pour la prochaine publication sur une plateforme, classés par engagement par publication des 90 derniers jours. Twitter et Instagram renvoient des scores pondérés par engagement ; LinkedIn, Threads, TikTok classent uniquement par fréquence. Heures dans le fuseau IANA fourni (UTC par défaut). Plan payant requis.

Arguments

platform Plateforme sociale : twitter, instagram, linkedin, threads, ou tiktok.

timezone Nom de fuseau horaire IANA (p. ex. Europe/Paris, America/New_York). UTC par défaut.

topN Nombre de recommandations de créneaux à renvoyer (1-24, 5 par défaut).

Retourne

Un objet avec platform, timezone, sampleWindowDays, sampleSize, metricsAvailable et recommendations: [{dayOfWeek (1-7, Lun=1), dayLabel, hour (0-23), score, basedOn: {posts, avgEngagement}}]. Inclut hint pour les cas cold-start ou métriques indisponibles.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":19,
 "params":{"name":"get_best_time_to_post",
           "arguments":{"platform":"twitter","timezone":"Europe/Berlin","topN":5}}}

search_tools

Recherche le catalogue d'outils MCP par texte libre, catégorie ou intention. Renvoie catégories, requiresScope, descriptions d'une ligne et les tags de cas d'usage qui correspondent. Disponible sur tous les plans (surface de découverte).

Arguments

All optional. Call with no arguments to list every available tool.

query Recherche libre dans les noms, descriptions et tags d'usage des outils.

category Filtre sur une catégorie : posts, accounts, analytics, brand, teams, discovery, other.

Retourne

Un objet avec totalTools, matchCount, categories: [string[]] et tools: [{name, category, requiresScope, description, useCases, matchedOn: [name|category|description|use_case]}]. Inclut hint quand pas de correspondance ou pas de filtre.

Exemple

{"jsonrpc":"2.0","method":"tools/call","id":20,
 "params":{"name":"search_tools",
           "arguments":{"query":"why did my post fail"}}}

Ressources MCP

Les ressources sont du contexte en lecture seule que le client peut récupérer via la méthode MCP resources/read. Claude les charge au début de chaque conversation pour avoir le contexte compte/équipe/marque sans qu'il faille le réexpliquer à chaque fois.

postnext://account/summary

E-mail et identifiant du compte (pour que Claude confirme avec quel compte il opère), forfait, crédits IA utilisés / limite, nombre de brouillons, nombre de planifiés, canaux connectés. Comptages plafonnés à 100 chacun pour un chargement rapide.

postnext://channels/connected

Même forme que le résultat de list_connected_accounts; exposé en tant que ressource pour que Claude le charge une fois au début de la conversation (pas d'aller-retour d'appel d'outil).

postnext://brand-profiles/active

Le profil de marque actif de l'utilisateur (par défaut de l'équipe, avec repli sur le premier profil propre). Renvoie uniquement les champs pertinents pour le LLM : bio, expertiseAreas, personalityTraits, brandVoice, mainThemes, audienceSize, preferredHashtags.

postnext://teams/current

Métadonnées de l'équipe actuelle (teamId, teamName) plus totalTeamsAvailable. À combiner avec list_teams + set_current_team pour changer.

Workflows nommés

Raccourcis slash qui orchestrent plusieurs outils. Choisissez-en un et laissez votre assistant IA dérouler une tâche en plusieurs étapes, avec confirmation avant toute modification.

/weekly-plan

Lit le profil de marque, les canaux connectés et la file, puis propose 5-10 brouillons répartis du lundi au vendredi.

/draft-thread

Rédige un fil de 5-10 publications pour Twitter ou Threads à partir d'un sujet ou d'une URL que vous fournissez, dans le ton de votre marque.

/audit-queue

Parcourt les 7 prochains jours de publications planifiées et signale doublons, surcharge de plateforme et créneaux vides.

/channel-sweep

Compare les canaux connectés à la liste des plateformes prises en charge et suggère lesquels connecter ou rafraîchir.

Endpoints de découverte et OAuth

Métadonnées conformes aux standards pour qu'un client MCP puisse s'auto-configurer.

  • GET /.well-known/oauth-protected-resource/api — RFC 9728
  • GET /.well-known/oauth-authorization-server — RFC 8414
  • GET /oauth/.well-known/openid-configuration — OIDC
  • POST /oauth/reg — Dynamic Client Registration (RFC 7591)
  • GET /oauth/auth — Authorize (PKCE-S256 required)
  • POST /oauth/token — Token exchange

Open source

Des recettes prêtes à copier et une référence orientée développeurs vivent dans notre dépôt de docs public. Sous licence MIT ; pull requests bienvenues. github.com/postnextio/postnext-mcp

Pilote tes canaux sociaux depuis n'importe quel assistant IA

Planifie, rédige, programme et audite des publications sur 6 plateformes en discutant avec Claude, ChatGPT ou Cursor. Une connexion sécurisée, toutes les fonctionnalités PostNext.

×