Passer au contenu principal
Vous découvrez MCP ? Suivez le guide de connexion des clients, étape par étape. Le MCP personnel permet à un assistant de consulter et gérer votre propre compte : modèles, tâches, utilisation, clés API, facturation, profil et fichiers. Il ne donne aucun droit d’administration de la plateforme. Même un administrateur ne peut accéder qu’à ses propres données avec ce jeton.

Choisir les bons identifiants

Les outils existants restent list_models, get_balance, chat_completion, generate_image, generate_video, get_task. Un même nom peut avoir un schéma différent avec un jeton personnel : lire tools/list après connexion.

Créer un jeton et se connecter

  1. Dans Tableau de bord → Agent, ouvrir Personal MCP.
  2. Donner un nom, sélectionner les permissions nécessaires et une durée de 1 à 365 jours, 30 jours par défaut.
  3. Pour models:invoke ou utilities:invoke, lier une clé API active vous appartenant. Ses limites de modèles, de budget et de RPM restent applicables. La lecture du compte ne nécessite pas de solde positif.
  4. À la création, copier le jeton mcp_user_ dans les paramètres secrets du client. Ne pas l’insérer dans le code, les conversations ou les journaux. Le révoquer dans ce même tableau de bord lorsqu’il n’est plus nécessaire.
Configurer une connexion MCP distante Streamable HTTP avec les valeurs suivantes. Le client doit accepter un jeton Bearer dans l’en-tête Authorization. Il négocie la version du protocole. OAuth n’est pas implémenté ; les clients exclusivement OAuth ne sont pas compatibles. Ce tableau décrit la connexion, pas un fichier propre à un client.

Découvrir les outils avant de les appeler

Après initialisation, appeler get_capabilities avec {} puis lire tools/list. La réponse contient audience: user, ownership: self, les scopes, les outils autorisés et oauth: false. Tous les autres outils personnels utilisent un objet input, même sans paramètres métier.

Permissions

Les droits se choisissent sur le site. MCP ne peut ni créer des autorisations, ni étendre ses permissions, ni transformer une clé en identifiant administrateur. Chaque appel vérifie les droits et la propriété, même pour un outil masqué. usage:content exige aussi une demande explicite et l’enregistrement du contenu activé sur la clé.

Écritures, résultats et nouvelles tentatives

Chaque écriture exige un idempotencyKey unique pour cette intention : 1 à 191 caractères ASCII imprimables sans espaces. Le conserver avant l’appel. Si la réponse est perdue, répéter le même outil, la même entrée et la même clé. Une entrée différente donne idempotency_conflict. Chaque étape d’envoi utilise sa propre clé.
Le résultat figure dans structuredContent et en texte JSON dans content. La première exécution renvoie l’enveloppe ci-dessous. Une répétition renvoie replayed: true et un petit receipt avec les identifiants disponibles, sans résultat complet ni secret de clé.
execution_pending (409) indique un premier appel non résolu. execution_unknown (409) ou status: unknown signifie que l’action a peut-être déjà eu lieu. Consulter get_execution, puis la tâche, commande ou action concernée. Ne pas contourner cet état avec une nouvelle clé. Une exécution MCP terminée peut encore contenir une tâche de modèle ou une confirmation en attente.

Modèles et utilitaires

Choisir un ID public via list_models → get_model_schema. body accepte la requête HTTP JSON complète prise en charge par le modèle. L’ID va dans body.model ; generate_content exige à la place le model extérieur. Les fichiers ne sont acceptés que par edit_image (image, image[], mask). Les autres médias utilisent des URL publiées.
Pour les images/vidéos asynchrones, conserver task_id et suivre avec get_task. Avec stream: true, les événements sont collectés dans le résultat MCP final ; utiliser l’API HTTP pour le streaming SDK en direct. client_request_id, UUID v4 facultatif, sert au suivi des requêtes vidéo et reste distinct de idempotencyKey. Les modèles peuvent consommer des crédits. La collecte des résultats de modèle est limitée à 8 Mio et 300 secondes. En cas d’interruption ou de dépassement, le reçu d’exécution conserve tout request_id connu. Vérifier get_execution et la requête ou tâche existante avant d’agir ; ne pas créer une nouvelle requête payante ni une nouvelle clé d’idempotence pour remplacer un appel non résolu. Une déconnexion du client ne signifie pas qu’une tâche acceptée a été annulée. Suivre list_utilities → get_utility_schema → run_utility pour les 32 utilitaires. Les conditions et quotas restent applicables ; certains traitements par lot exigent un compte payant éligible. Mettre les valeurs dans parameters, les ID de fichiers personnels dans files. Les sorties binaires ou volumineuses deviennent des fichiers temporaires. Fichiers et sorties non JSON exigent aussi files:write.

Envoyer et récupérer des fichiers

  1. Appeler begin_upload avec nom, type MIME et taille exacte en octets, au maximum 250 Mio.
  2. Appeler upload_chunk avec index commençant à zéro et data Base64. Chaque bloc décodé fait au plus 1 Mio ; les index se suivent sans interruption depuis zéro.
  3. Appeler finish_upload avec file_id et éventuellement SHA-256 en minuscules. Attendre status: ready.
  4. Fournir l’ID à un outil compatible. get_artifact renvoie les métadonnées, ou les octets Base64 avec offset. Suivre next_offset jusqu’à null. Le lien exige une connexion au site comme propriétaire.
Les fichiers temporaires sont privés, chiffrés et expirent après 24 heures. Limite par compte : 1 Gio / 100 fichiers non expirés ; un utilitaire peut imposer moins. upload_image et upload_media publient séparément les fichiers : leurs URL sont partageables. Ne publier que les fichiers destinés à être accessibles par ces URL. Avant de lire le contenu, les opérations vérifient la propriété, l’état prêt, le nombre et la taille des fichiers. Chaque référence compte dans les limites, y compris les ID répétés.
  • upload_media : au plus 20 fichiers / 250 Mio au total.
  • upload_image : un fichier de 50 Mio maximum.
  • edit_image : au plus 20 fichiers tous champs confondus, dont un seul mask ; 50 Mio par fichier / 100 Mio au total. Les limites de tableau par champ du schéma restent applicables.
  • run_utility : les limites de nombre, de taille individuelle et totale de get_utility_schema s’appliquent, avec un plafond absolu de 250 Mio au total, même si le catalogue autorise davantage.

Confirmation sur le site et paiement

  • Secret d’une clé : start_reveal_key_action → validation de confirmation_url par l’utilisateur → reveal_api_key avec l’id de l’action comme action_id. L’autorisation concerne cette clé et ce jeton, expire 15 minutes après création de l’action et ne sert qu’une fois. create_api_key renvoie seulement des métadonnées.
  • Résiliation : cancel_subscription lance la confirmation. L’utilisateur l’exécute sur le site. Vérifier get_account_action et l’abonnement avant d’annoncer l’achèvement.
  • Mot de passe/suppression : start_account_action avec password_change ou delete_account. L’utilisateur saisit codes et mots de passe sur le site, jamais auprès de l’assistant. La suppression révoque l’accès et déconnecte ; ne plus interroger MCP ensuite.
  • Paiement : list_billing_products → create_checkout → paiement utilisateur → get_payment_status. Un lien ne prouve pas le paiement.
  • Messages réels : resend_invoice et test_credit_alert envoient un email ou webhook, uniquement sur demande explicite.

Gérer les erreurs sans doublons

Une erreur de connexion/authentification peut être HTTP. Un échec d’outil définit isError: true ; lire structuredContent.error.code, status, execution_id et receipt. Une répétition peut aussi renvoyer un status d’exécution non terminé.

Points de départ en lecture seule

  • Dépenses : get_balance → summarize_usage → détails avec list_usage.
  • Échec : diagnose_request avec task_id ; vérifier erreur réelle et remboursement avant un nouvel appel.
  • Intégration : list_models → get_model_schema → get_api_guide, sans exécuter de modèle.
  • Sécurité du compte : list_api_keys → get_api_key → list_login_records.
Les filtres utilisent des dates ISO 8601 avec fuseau : from inclus, to exclu. Fenêtre par défaut de 30 jours, maximum 366. Seuls les enregistrements conservés sont couverts ; un jour absent ne prouve pas une utilisation nulle. get_overview.timezoneOffset suit JavaScript getTimezoneOffset en minutes (UTC moins heure locale), défaut 0. Les listes et synthèses restent en UTC. Dans summarize_usage, creditsCharged et netCreditsCharged sont le débit net conservé. linkedRefundCredits couvre les remboursements connus liés aux tâches asynchrones seulement. knownGrossCredits les ajoute au net, sans représenter une dépense brute complète. totalTokens, averageLatencyMs, pending, processing concernent les requêtes conservées correspondantes. Consulter la référence complète, l’authentification et les erreurs HTTP API.