For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale
Theme
Vue d’ensemble Documentation utilisateur de ChatGPT et Codex Cas d’usage

Erreurs de soumission des plugins

Identifiez et corrigez les erreurs de validation des plugins soumis à l’annuaire public

Les plugins soumis à l’annuaire public doivent respecter des exigences plus strictes que ceux installés dans un espace de travail. Pour figurer dans l’annuaire, un plugin doit réussir les contrôles communs à tous les paquets ainsi que les contrôles supplémentaires portant sur les champs de la fiche, les éléments fournis pour l’examen du plugin, les outils MCP, les skills, les ressources et les images. Cette référence couvre également les contrôles communs, notamment ceux des références aux serveurs MCP, dont les erreurs peuvent apparaître en dehors du portail de soumission.

Utilisez le code d’erreur renvoyé lors de la soumission pour retrouver l’exigence correspondante. Les erreurs bloquent la soumission. Les avertissements ne la bloquent pas, mais examinez-les avant de poursuivre.

Lorsqu’une valeur doit être non vide, elle doit contenir au moins un caractère autre qu’un caractère d’espacement. Le texte accepté exclut les caractères de contrôle, les séparateurs de ligne ou de paragraphe Unicode et les caractères de mise en forme invisibles non pris en charge. Les URL HTTPS doivent inclure un hôte et ne doivent contenir ni identifiants de connexion intégrés ni caractères non pris en charge.

Soumission finale à l’annuaire

Un paquet peut réussir la validation lors de l’importation, puis échouer lors de la soumission finale à l’annuaire. À cette étape, le portail applique des limites plus strictes aux champs de la fiche et vérifie la configuration MCP, les analyses des skills, les cas de test et les attestations de conformité aux politiques applicables.

Champ Règle de soumission finale
Nom du paquet Obligatoire. 64 caractères maximum. Commencez par une lettre ou un chiffre ASCII et utilisez uniquement des lettres et des chiffres ASCII, _ et -.
Version Obligatoire. Utilisez un numéro de version sémantique de 64 caractères maximum.
Nom affiché Obligatoire. Une seule ligne de 30 caractères maximum.
Description courte Obligatoire. Une seule ligne de 30 caractères maximum.
Description longue Obligatoire. 4 000 caractères maximum. Les sauts de ligne sont autorisés.
Nom du développeur Obligatoire. Une seule ligne de 80 caractères maximum.
Catégorie Obligatoire. Choisissez une catégorie prise en charge dans la section Erreurs de fiche et d’interface.
Fonctionnalités 20 maximum. Chaque fonctionnalité doit être décrite sur une seule ligne non vide de 120 caractères maximum.
Prompts de démarrage 3 maximum. Chaque prompt doit être non vide, rester unique après normalisation Unicode et normalisation des espaces, tenir sur une seule ligne de 128 caractères maximum et ne contenir aucune @mention de serveur MCP.
URL Obligatoires pour les soumissions de serveurs MCP distants, facultatives pour les imports ZIP de plugins contenant uniquement des skills. Les URL du site web, de l’assistance, de la politique de confidentialité et des conditions d’utilisation doivent utiliser HTTPS et compter au maximum 1 024 caractères chacune.
Couleurs de marque Facultatives. Utilisez des couleurs hexadécimales à six chiffres. La couleur claire doit présenter un rapport de contraste d’au moins 2:1 avec le blanc, et la couleur sombre un rapport d’au moins 2:1 avec #212121.

Pour toute soumission de plugin, les exigences suivantes s’appliquent également :

  • Chaque skill inclus dans le paquet doit réussir les contrôles de sûreté et de sécurité. Les analyses peuvent prendre jusqu’à 2 heures.
  • L’identité du développeur ou de l’entreprise doit être vérifiée et toutes les attestations de conformité requises doivent être fournies.

Pour la soumission finale d’un plugin MCP distant, fournissez également les éléments suivants :

  • Des URL conformes aux règles ci-dessus pour le site web, l’assistance, la politique de confidentialité et les conditions d’utilisation.
  • Un lien vers une vidéo de démonstration présentant les principaux cas d’utilisation et outils sur les plateformes prises en charge.
  • Exactement cinq cas de test positifs, trois cas de test négatifs et des notes de version.
  • Une URL HTTPS pour le serveur MCP de production, une vérification de domaine réussie et une analyse des outils à jour et réussie.
  • Des valeurs explicites pour readOnlyHint, openWorldHint et destructiveHint sur chaque outil MCP, avec une justification pour chaque valeur.
  • Si le serveur utilise OAuth, des identifiants de démonstration utilisables par les personnes chargées de l’examen.

Erreurs de métadonnées lors de la soumission finale

Dans ces noms d’erreur, subtitle correspond à la description courte et description à la description longue.

Nom Exigence
submission_display_name_required Le nom affiché est obligatoire et doit tenir sur une seule ligne non vide.
submission_display_name_too_long Le nom affiché ne doit pas dépasser 30 caractères.
submission_display_name_character_unsupported Le nom affiché doit contenir uniquement des caractères pris en charge et tenir sur une seule ligne.
submission_subtitle_required La description courte est obligatoire et doit tenir sur une seule ligne non vide.
submission_subtitle_too_long La description courte ne doit pas dépasser 30 caractères.
submission_subtitle_character_unsupported La description courte doit contenir uniquement des caractères pris en charge et tenir sur une seule ligne.
submission_description_required La description longue est obligatoire et ne doit pas être vide. Les sauts de ligne sont autorisés.
submission_description_too_long La description longue ne doit pas dépasser 4 000 caractères.
submission_description_character_unsupported La description longue doit contenir uniquement des caractères pris en charge. Les sauts de ligne sont autorisés.
submission_developer_name_required Le nom du développeur est obligatoire et doit tenir sur une seule ligne non vide.
submission_developer_name_too_long Le nom du développeur ne doit pas dépasser 80 caractères.
submission_developer_name_character_unsupported Le nom du développeur doit contenir uniquement des caractères pris en charge et tenir sur une seule ligne.
plugin_capability_invalid La description de chaque fonctionnalité doit être non vide, contenir uniquement des caractères pris en charge et tenir sur une seule ligne de 120 caractères maximum.
plugin_default_prompt_mention Les prompts de démarrage ne doivent contenir aucune mention de serveur MCP sous la forme @mentions.
plugin_default_prompt_duplicate Les prompts de démarrage doivent rester distincts après normalisation Unicode et normalisation des espaces.

Erreurs liées à MCP et à l’examen du plugin

Ces erreurs concernent les soumissions de serveurs MCP distants.

Nom Exigence
annotations_required Chaque outil MCP doit définir readOnlyHint, openWorldHint et destructiveHint de manière à refléter fidèlement son comportement.
justification_required Pour chaque annotation de chaque outil MCP, justifiez la valeur choisie en précisant si l’outil fonctionne en lecture seule, interagit avec le monde extérieur ou effectue des opérations destructrices, selon l’annotation concernée.
scan_required Les outils MCP doivent avoir fait l’objet d’une analyse réussie et à jour sur le serveur MCP de production.
domain_verification_required Hébergez le jeton de vérification à l’identique à l’URL générée /.well-known/openai-apps-challenge, sur l’hôte MCP ou sur un hôte parent autorisé. La vérification lancée avec Vérifier le domaine doit réussir.
frame_domain_explanation_required Pour chaque domaine externe utilisé dans un cadre et signalé par l’analyse des outils MCP, expliquez pourquoi l’interface en a besoin et quel contenu il fournit.

Erreurs d’archive

Erreurs et avertissements lors de l’importation d’un ZIP

L’option Skills uniquement du portail accepte les paquets ZIP de skills et les plugins MCP locaux approuvés. Ces derniers peuvent être dépourvus de skills. Les erreurs bloquent l’importation. En cas d’avertissement, vous devez confirmer l’importation.

Nom Exigence
plugin_name_mismatch Lors d’une mise à jour, le nom du paquet doit correspondre au nom du plugin existant.
plugin_version_unchanged Pour une nouvelle version, modifiez la valeur du champ version du manifeste. Si vous réutilisez la version publiée, une confirmation est nécessaire.
mcp_configuration_excluded La configuration MCP est exclue, sauf si votre organisation est autorisée à soumettre des plugins MCP locaux. Pour un plugin MCP local, demandez à votre interlocuteur chez OpenAI de confirmer que l’organisation qui soumet le plugin figure sur la liste des organisations autorisées. Pour soumettre des serveurs MCP distants, utilisez Avec MCP.
app_configuration_excluded Les archives ZIP importées ne doivent inclure ni apps ni .app.json. Pour soumettre des serveurs MCP distants, utilisez Avec MCP. Pour les serveurs MCP locaux, suivez les instructions de soumission des plugins réservés à l’application de bureau.
claude_format_normalized Le portail convertit .claude-plugin/plugin.json en .codex-plugin/plugin.json, complète les valeurs d’interface manquantes avec les valeurs par défaut et ajoute les champs de texte normalisés.
manifest_normalized Le portail enregistre le manifeste normalisé dans .codex-plugin/plugin.json. Vous devez confirmer les modifications apportées aux champs.
developer_name_defaulted Le portail renseigne automatiquement le nom du développeur sur la fiche à partir de l’identité vérifiée que vous avez sélectionnée, quel que soit le nom indiqué dans le ZIP.

Erreurs liées à la structure et aux limites du ZIP

Nom Exigence
archive_empty L’archive ne doit pas être vide.
archive_too_large La taille du ZIP compressé ne doit pas dépasser 100 Mo.
archive_format_not_zip L’archive doit être un fichier ZIP valide et intact.
archive_member_path_empty Le chemin d’une entrée de l’archive ne doit pas être vide.
archive_member_path_has_outer_whitespace Le chemin d’une entrée ne doit ni commencer ni se terminer par un caractère d’espacement.
archive_member_path_has_backslash Dans les chemins des entrées, utilisez / comme séparateur. Les barres obliques inverses sont interdites.
archive_member_path_absolute Le chemin d’une entrée doit être relatif à la racine de l’archive.
archive_member_path_has_empty_segment Le chemin d’une entrée ne doit contenir aucun segment vide.
archive_member_path_has_parent_segment Le chemin d’une entrée ne doit contenir aucun segment ...
archive_member_path_too_deep Le chemin d’une entrée ne doit pas dépasser 20 segments, nom de fichier compris.
archive_member_path_too_long Le chemin d’une entrée doit respecter la longueur maximale prise en charge.
archive_member_path_normalization_collision Les chemins des entrées doivent rester distincts après normalisation de la casse et normalisation Unicode.
archive_member_type_unsupported Les entrées de l’archive doivent être des fichiers ordinaires ou des répertoires.
archive_member_too_large Une entrée de l’archive ne doit pas dépasser 100 Mio.
archive_member_path_duplicate Chaque entrée de l’archive doit avoir un chemin unique.
archive_member_path_type_conflict Un chemin de fichier ne peut pas également servir de chemin de répertoire ni contenir une autre entrée de l’archive.
archive_too_many_entries L’archive ne doit pas contenir plus de 5 000 entrées.
archive_uncompressed_too_large La taille de l’archive décompressée ne doit pas dépasser 512 Mio.
archive_member_unreadable Chaque entrée de l’archive doit être lisible, ne pas être chiffrée et utiliser une méthode de compression prise en charge.

Erreurs liées à la racine du plugin

Nom Exigence
plugin_root_missing Le chemin sélectionné doit exister et correspondre à un répertoire contenant un plugin.
archive_plugin_files_missing Le ZIP doit contenir un manifeste de plugin pris en charge et au moins un skill valide (ou un serveur MCP local approuvé).
plugin_root_ambiguous Le ZIP doit contenir exactement une racine de plugin, soit à la racine de l’archive, soit dans un unique répertoire de premier niveau.
plugin_root_has_siblings Si le plugin se trouve dans un répertoire de premier niveau, le ZIP ne doit contenir aucun fichier au même niveau que ce répertoire.

Erreurs du manifeste du plugin

Nom Exigence
plugin_manifest_missing À sa racine ou dans son unique répertoire de premier niveau, le ZIP doit contenir l’un des manifestes suivants : un fichier plugin.json à la racine du plugin conforme à un schéma Agent Plugins pris en charge, .codex-plugin/plugin.json, .agent-plugin/plugin.json ou .claude-plugin/plugin.json.
plugin_manifest_not_file Le manifeste du plugin doit être un fichier JSON ordinaire.
plugin_manifest_unreadable Le manifeste du plugin doit être un fichier texte lisible encodé en UTF-8.
plugin_manifest_json_malformed Le manifeste du plugin doit contenir du JSON valide. En cas d’erreur de syntaxe, le diagnostic indique le numéro de ligne.
plugin_manifest_root_not_object La racine du manifeste du plugin doit être un objet JSON.
codex_manifest_parent_not_directory .codex-plugin doit être un répertoire.
codex_manifest_path_not_file .codex-plugin/plugin.json doit être un fichier JSON ordinaire.
plugin_id_wrong_type Si vous renseignez id, sa valeur doit être une chaîne de caractères.
plugin_id_empty Si vous renseignez id, sa valeur ne doit pas être vide.
plugin_name_missing Le champ name est obligatoire.
plugin_name_wrong_type name doit être une chaîne de caractères.
plugin_name_empty name ne doit pas être vide.
plugin_name_too_long name ne doit pas dépasser 64 caractères.
plugin_name_format name doit commencer par une lettre ou un chiffre ASCII et ne peut contenir que des lettres et des chiffres ASCII, _ ou -.
plugin_version_missing Le champ version est obligatoire.
plugin_version_wrong_type version doit être une chaîne de caractères.
plugin_version_empty version doit être une chaîne non vide contenant un numéro de version sémantique, par exemple 1.0.0.
plugin_version_not_semver version doit respecter le format de version sémantique, par exemple 1.0.0.
plugin_version_too_long version ne doit pas dépasser 64 caractères.
plugin_description_missing Le champ description est obligatoire.
plugin_description_wrong_type description doit être une chaîne de caractères.
plugin_description_empty description ne doit pas être vide.
plugin_description_too_long description ne doit pas dépasser 1 024 caractères.
plugin_description_character_unsupported description doit contenir uniquement des caractères pris en charge. Les sauts de ligne sont autorisés.
plugin_developer_missing Le champ author.name est obligatoire. Le champ interface.developerName est également obligatoire et fait l’objet d’un diagnostic distinct.
plugin_author_wrong_type author doit être un objet.
plugin_author_name_wrong_type author.name doit être une chaîne de caractères.
plugin_author_name_empty author.name ne doit pas être vide.
plugin_author_name_too_long author.name ne doit pas dépasser 120 caractères.
plugin_author_name_character_unsupported author.name doit contenir uniquement des caractères pris en charge.
plugin_author_email_wrong_type Si vous renseignez author.email, sa valeur doit être une chaîne de caractères.
plugin_author_email_empty Si vous renseignez author.email, sa valeur ne doit pas être vide.
plugin_author_email_too_long author.email ne doit pas dépasser 320 caractères.
plugin_author_email_character_unsupported author.email doit contenir uniquement des caractères pris en charge.
plugin_author_url_wrong_type Si vous renseignez author.url, sa valeur doit être une chaîne de caractères.
plugin_author_url_empty Si vous renseignez author.url, sa valeur ne doit pas être vide.
plugin_author_url_not_https author.url doit être une URL HTTPS.
plugin_author_url_has_credentials author.url ne doit contenir aucun identifiant de connexion.
plugin_author_url_too_long author.url ne doit pas dépasser 2 048 caractères.
plugin_author_url_character_unsupported author.url doit contenir uniquement des caractères pris en charge.

Erreurs de fiche et d’interface

L’objet interface du manifeste du plugin définit la fiche publique présentée aux utilisateurs. Il se trouve dans .codex-plugin/plugin.json et utilise notamment les champs displayName et shortDescription :

{
  "interface": {
    "displayName": "Example Plugin",
    "shortDescription": "Summarize documents",
    "longDescription": "Summarize and organize documents.",
    "developerName": "Example",
    "category": "Productivity",
    "capabilities": ["Summarize documents"]
  }
}

Les quatre URL de la fiche (site web, politique de confidentialité, conditions d’utilisation et assistance) sont facultatives pour les imports ZIP de plugins contenant uniquement des skills. Elles sont obligatoires pour les soumissions de serveurs MCP distants. Chaque URL est limitée à 2 048 caractères lors de la validation du paquet et à 1 024 caractères lors de la soumission finale à l’annuaire.

Nom Exigence
plugin_interface_wrong_type Le champ interface du manifeste du plugin doit être un objet JSON.
plugin_display_name_wrong_type interface.displayName doit être une chaîne de caractères.
plugin_display_name_empty interface.displayName est obligatoire et ne doit pas être vide.
plugin_display_name_too_long interface.displayName ne doit pas dépasser 80 caractères pour la validation du paquet et 30 pour la soumission finale à l’annuaire.
plugin_display_name_character_unsupported interface.displayName doit contenir uniquement des caractères pris en charge.
plugin_short_description_missing interface.shortDescription est obligatoire et doit tenir sur une seule ligne, avec un maximum de 240 caractères pour la validation du paquet et de 30 pour la soumission finale à l’annuaire.
plugin_short_description_wrong_type interface.shortDescription doit être une chaîne de caractères.
plugin_short_description_empty interface.shortDescription ne doit pas être vide.
plugin_short_description_too_long interface.shortDescription ne doit pas dépasser 240 caractères pour la validation du paquet et 30 pour la soumission finale à l’annuaire.
plugin_short_description_character_unsupported interface.shortDescription doit contenir uniquement des caractères pris en charge.
plugin_long_description_wrong_type interface.longDescription doit être une chaîne de caractères.
plugin_long_description_empty interface.longDescription est obligatoire et ne doit pas être vide.
plugin_long_description_too_long interface.longDescription ne doit pas dépasser 4 000 caractères.
plugin_long_description_character_unsupported interface.longDescription doit contenir uniquement des caractères pris en charge. Les sauts de ligne sont autorisés.
plugin_developer_name_wrong_type interface.developerName doit être une chaîne de caractères.
plugin_developer_name_empty interface.developerName est obligatoire et ne doit pas être vide.
plugin_developer_name_too_long interface.developerName ne doit pas dépasser 120 caractères pour la validation du paquet et 80 pour la soumission finale à l’annuaire.
plugin_developer_name_character_unsupported interface.developerName doit contenir uniquement des caractères pris en charge.
plugin_category_wrong_type interface.category doit être une chaîne de caractères.
plugin_category_empty Si vous renseignez interface.category, sa valeur ne doit pas être vide. Omettez ce champ pour utiliser Other.
plugin_category_unknown interface.category doit prendre l’une des valeurs suivantes : Productivity, Creativity, Developer Tools, Business & Operations, Data & Analytics, Communication, Education & Research, Security, Finance, Healthcare, Travel, Entertainment ou Other.
plugin_category_character_unsupported interface.category doit contenir uniquement des caractères pris en charge.
plugin_capabilities_wrong_type interface.capabilities doit être une liste de chaînes de caractères.
plugin_capabilities_too_many interface.capabilities ne doit pas contenir plus de 20 entrées.
plugin_capability_wrong_type Chaque entrée de interface.capabilities doit être une chaîne de caractères.
plugin_capability_empty Aucune entrée fournie dans interface.capabilities ne doit être vide.
plugin_capability_too_long Chaque entrée de interface.capabilities est limitée à 120 caractères.
plugin_capability_character_unsupported Chaque entrée de interface.capabilities doit contenir uniquement des caractères pris en charge.
plugin_website_url_wrong_type Si vous renseignez interface.websiteURL, sa valeur doit être une chaîne de caractères.
plugin_website_url_empty Si vous renseignez interface.websiteURL, sa valeur ne doit pas être vide.
plugin_website_url_format interface.websiteURL doit être une URL HTTPS.
plugin_website_url_too_long interface.websiteURL doit respecter les limites de longueur des URL de la fiche.
plugin_privacy_policy_url_wrong_type Si vous renseignez interface.privacyPolicyURL, sa valeur doit être une chaîne de caractères.
plugin_privacy_policy_url_empty Si vous renseignez interface.privacyPolicyURL, sa valeur ne doit pas être vide.
plugin_privacy_policy_url_format interface.privacyPolicyURL doit être une URL HTTPS.
plugin_privacy_policy_url_too_long interface.privacyPolicyURL doit respecter les limites de longueur des URL de la fiche.
plugin_terms_of_service_url_wrong_type Si vous renseignez interface.termsOfServiceURL, sa valeur doit être une chaîne de caractères.
plugin_terms_of_service_url_empty Si vous renseignez interface.termsOfServiceURL, sa valeur ne doit pas être vide.
plugin_terms_of_service_url_format interface.termsOfServiceURL doit être une URL HTTPS.
plugin_terms_of_service_url_too_long interface.termsOfServiceURL doit respecter les limites de longueur des URL de la fiche.
plugin_support_url_wrong_type Si vous renseignez interface.supportURL, sa valeur doit être une chaîne de caractères.
plugin_support_url_empty Si vous renseignez interface.supportURL, sa valeur ne doit pas être vide.
plugin_support_url_format interface.supportURL doit être une URL HTTPS.
plugin_support_url_too_long interface.supportURL doit respecter les limites de longueur des URL de la fiche.
plugin_homepage_wrong_type Si vous renseignez homepage, sa valeur doit être une chaîne de caractères.
plugin_homepage_empty Si vous renseignez homepage, sa valeur ne doit pas être vide.
plugin_homepage_format homepage doit être une URL HTTPS.
plugin_homepage_too_long homepage ne doit pas dépasser 2 048 caractères.
plugin_brand_color_wrong_type Si vous renseignez interface.brandColor, sa valeur doit être une chaîne de caractères.
plugin_brand_color_empty Si vous renseignez interface.brandColor, sa valeur ne doit pas être vide.
plugin_brand_color_format interface.brandColor doit être une couleur hexadécimale à six chiffres, par exemple #1ABCFE.
plugin_brand_color_dark_wrong_type Si vous renseignez interface.brandColorDark, sa valeur doit être une chaîne de caractères.
plugin_brand_color_dark_empty Si vous renseignez interface.brandColorDark, sa valeur ne doit pas être vide.
plugin_brand_color_dark_format interface.brandColorDark doit être une couleur hexadécimale à six chiffres, par exemple #1ABCFE.
plugin_brand_color_contrast interface.brandColor doit présenter un rapport de contraste d’au moins 2:1 avec le blanc.
plugin_brand_color_dark_contrast interface.brandColorDark doit présenter un rapport de contraste d’au moins 2:1 avec #212121.
plugin_default_prompt_wrong_type interface.defaultPrompt doit être une chaîne de caractères ou une liste de chaînes de caractères.
plugin_default_prompt_too_many interface.defaultPrompt ne doit pas contenir plus de trois prompts.
plugin_default_prompt_entry_wrong_type Chaque entrée de interface.defaultPrompt doit être une chaîne de caractères.
plugin_default_prompt_empty Aucune entrée fournie dans interface.defaultPrompt ne doit être vide.
plugin_default_prompt_too_long Chaque entrée de interface.defaultPrompt est limitée à 512 caractères pour la validation du paquet et à 128 pour la soumission finale à l’annuaire.
plugin_default_prompt_character_unsupported Chaque entrée de interface.defaultPrompt doit contenir uniquement des caractères pris en charge et tenir sur une seule ligne.

Erreurs liées au contenu du plugin

Nom Exigence
plugin_skills_path_wrong_type skills doit être une chaîne de caractères indiquant le chemin du répertoire skills/ situé à la racine.
plugin_skills_path_empty Si vous renseignez skills, sa valeur doit être un chemin non vide vers le répertoire skills/ situé à la racine.
plugin_skills_path_unsupported skills doit pointer vers le répertoire skills/ situé à la racine.
plugin_skills_directory_missing Si vous déclarez le répertoire skills/ à la racine, il doit exister.
plugin_skills_path_not_directory Si vous déclarez skills/ à la racine, ce chemin doit correspondre à un répertoire.
plugin_apps_path_wrong_type apps doit être une chaîne de caractères indiquant le chemin du fichier .app.json situé à la racine.
plugin_apps_path_empty Si vous renseignez apps, sa valeur doit être un chemin non vide vers le fichier .app.json situé à la racine.
plugin_apps_path_unsupported apps doit pointer vers le fichier .app.json situé à la racine.
plugin_apps_file_missing Si vous déclarez le fichier .app.json à la racine, il doit exister.
plugin_apps_path_not_file Si vous déclarez .app.json à la racine, il doit s’agir d’un fichier ordinaire.
plugin_mcp_path_wrong_type mcpServers doit être une chaîne de caractères indiquant le chemin du fichier .mcp.json situé à la racine.
plugin_mcp_path_empty mcpServers doit être un chemin non vide. Donnez-lui la valeur ./.mcp.json ou supprimez le champ.
plugin_mcp_path_unsupported mcpServers doit pointer vers le fichier .mcp.json situé à la racine.
plugin_mcp_file_missing mcpServers déclare le fichier .mcp.json à la racine, mais ce fichier n’existe pas.
plugin_mcp_path_not_file À la racine, .mcp.json doit être un fichier ordinaire.
plugin_runtime_surface_missing Un ZIP soumis à l’annuaire public doit contenir au moins un skill valide (ou un serveur MCP local approuvé). Les paquets locaux ou destinés à un espace de travail peuvent également référencer un serveur MCP éligible.

Erreurs du manifeste MCP

Ces erreurs concernent le fichier de compatibilité .mcp.json. Lors de l’importation d’un paquet portable, le système génère ce fichier et .codex-plugin/plugin.json à partir des fichiers plugin.json et mcp.json situés à la racine. Les erreurs de chemin des composants décrites ci-dessus peuvent également concerner ces fichiers générés. Corrigez la configuration source du paquet portable. Ne renommez pas mcp.json en .mcp.json simplement parce qu’un diagnostic de compatibilité mentionne ce dernier nom.

Nom Exigence
mcp_manifest_unreadable .mcp.json doit être un fichier texte lisible encodé en UTF-8.
mcp_manifest_json_malformed .mcp.json doit contenir du JSON valide. En cas d’erreur de syntaxe, le diagnostic indique le numéro de ligne.
mcp_manifest_wrong_type La racine de .mcp.json doit être un objet JSON.
mcp_servers_missing .mcp.json doit contenir le champ mcpServers à la racine.
mcp_servers_wrong_type mcpServers doit être un objet.
mcp_server_name_empty Le nom de chaque serveur MCP doit contenir au moins un caractère autre qu’un caractère d’espacement.
mcp_server_wrong_type Chaque valeur mcpServers.<server-name> doit être un objet contenant la déclaration du serveur correspondant.

Erreurs liées aux skills

Nom Exigence
skill_manifest_missing Le skill doit contenir un fichier SKILL.md.
skill_bundle_too_large La taille de chaque paquet de skill compressé doit respecter la limite indiquée en Mio dans le message d’erreur.
skill_directory_hidden Le nom d’un répertoire de skill ne doit pas commencer par ..
skill_manifest_nested Chaque répertoire de skill doit se trouver directement sous skills/.
skill_manifest_not_regular_file SKILL.md doit être un fichier ordinaire.
skill_manifest_unreadable SKILL.md doit être lisible.
skill_manifest_invalid_utf8 SKILL.md doit contenir du texte UTF-8 valide.
skill_frontmatter_missing SKILL.md doit commencer par un en-tête YAML délimité par deux lignes ---.
skill_frontmatter_unclosed L’en-tête YAML de SKILL.md doit se terminer par ---.
skill_frontmatter_yaml_malformed L’en-tête de SKILL.md doit contenir du YAML valide.
skill_frontmatter_wrong_type L’en-tête de SKILL.md doit contenir une table de correspondance YAML.
skill_name_missing Le champ name est obligatoire et ne doit pas être vide.
skill_name_wrong_type name doit être une chaîne de caractères.
skill_name_empty name ne doit pas être vide.
skill_name_character_unsupported Dans l’en-tête du skill, name doit contenir uniquement des caractères pris en charge.
skill_description_missing Le champ description est obligatoire et ne doit pas être vide.
skill_description_wrong_type description doit être une chaîne de caractères.
skill_description_empty description ne doit pas être vide.
skill_description_too_long description ne doit pas dépasser 1 024 caractères.
skill_description_character_unsupported Dans l’en-tête du skill, description doit contenir uniquement des caractères pris en charge.
skill_body_empty Les instructions du skill ne doivent pas être vides.
skill_identity_too_long Le nom formé en combinant ceux du plugin et du skill (plugin-name:skill-name) ne doit pas dépasser 64 caractères.
skill_identity_duplicate La valeur de name doit être unique pour chaque skill du plugin.

Erreurs liées aux métadonnées d’agent d’un skill

Un skill inclus dans le paquet peut définir sa propre interface dans skills/<skill>/agents/openai.yaml. Cette configuration détermine la présentation du skill aux utilisateurs et est distincte de l’objet interface du manifeste du plugin. Les noms des champs d’interface du skill suivent la convention snake_case :

interface:
  display_name: "Summarize documents"
  short_description: "Summarize a document"
  icon_small: "./assets/icon.png"
  default_prompt: "Summarize the selected document."
Nom Exigence
skill_agent_not_regular_file agents/openai.yaml doit être un fichier ordinaire.
skill_agent_unreadable agents/openai.yaml doit être lisible.
skill_agent_invalid_utf8 agents/openai.yaml doit contenir du texte UTF-8 valide.
skill_agent_yaml_malformed agents/openai.yaml doit contenir du YAML valide.
skill_agent_top_level_wrong_type La racine de agents/openai.yaml doit être une table de correspondance YAML.
skill_agent_interface_missing Le champ interface est obligatoire dans agents/openai.yaml si le paquet inclut ce fichier.
skill_agent_interface_wrong_type Le champ interface de agents/openai.yaml doit être une table de correspondance YAML.
skill_agent_display_name_missing Le champ interface.display_name est obligatoire et ne doit pas être vide.
skill_agent_display_name_wrong_type interface.display_name doit être une chaîne de caractères.
skill_agent_display_name_empty interface.display_name ne doit pas être vide.
skill_agent_short_description_missing Le champ interface.short_description est obligatoire et ne doit pas être vide.
skill_agent_short_description_wrong_type interface.short_description doit être une chaîne de caractères.
skill_agent_short_description_empty interface.short_description ne doit pas être vide.
skill_agent_icon_small_wrong_type Si vous renseignez interface.icon_small, sa valeur doit être un chemin de fichier relatif non vide.
skill_agent_icon_small_empty Si vous renseignez interface.icon_small, sa valeur doit être un chemin de fichier relatif non vide, par exemple assets/icon.png.
skill_agent_icon_large_wrong_type Si vous renseignez interface.icon_large, sa valeur doit être un chemin de fichier relatif non vide.
skill_agent_icon_large_empty Si vous renseignez interface.icon_large, sa valeur doit être un chemin de fichier relatif non vide, par exemple assets/icon.png.
skill_agent_brand_color_wrong_type Si vous renseignez interface.brand_color, sa valeur doit être une chaîne de caractères.
skill_agent_brand_color_empty Si vous renseignez interface.brand_color, sa valeur doit être non vide et représenter une couleur hexadécimale à six chiffres, par exemple #1ABCFE.
skill_agent_brand_color_format interface.brand_color doit être une couleur hexadécimale à six chiffres, par exemple #1ABCFE.
skill_agent_default_prompt_wrong_type Si vous renseignez interface.default_prompt, sa valeur doit être une chaîne de caractères.
skill_agent_default_prompt_empty Si vous renseignez interface.default_prompt, sa valeur ne doit pas être vide.
skill_agent_policy_wrong_type Si vous renseignez policy, sa valeur doit être une table de correspondance YAML.
skill_agent_allow_implicit_invocation_wrong_type policy ne peut contenir que products et allow_implicit_invocation. products doit contenir CHAT, CODEX ou les deux, et allow_implicit_invocation doit valoir true ou false.
skill_agent_dependencies_wrong_type dependencies doit être une table de correspondance YAML. Seule la clé tools est prise en charge.
skill_agent_dependency_unsupported Seul dependencies.tools est pris en charge dans agents/openai.yaml.

Erreurs liées aux chemins des ressources

Nom Exigence
declared_asset_path_wrong_type Le champ de ressource indiqué doit contenir une chaîne de caractères représentant un chemin de fichier.
declared_asset_path_empty Le champ de ressource indiqué ne doit pas être vide.
declared_asset_path_has_outer_whitespace La valeur du champ de ressource indiqué ne doit ni commencer ni se terminer par un caractère d’espacement.
declared_asset_path_has_control_character Le champ de ressource indiqué ne doit contenir aucun caractère compris entre U+0000 et U+001F, ni le caractère U+007F.
branding_asset_path_missing_root_prefix La valeur du champ de ressource indiqué doit commencer par ./.
declared_asset_path_unsafe Le champ de ressource indiqué doit contenir un chemin relatif interne au plugin, sans chemin absolu, préfixe de lecteur ni segment .. permettant de remonter d’un répertoire.
declared_asset_path_outside_package Le champ de ressource indiqué doit référencer un fichier situé dans le plugin.
declared_asset_file_missing Le champ de ressource indiqué référence un fichier qui n’existe pas.
declared_asset_not_regular_file Le champ de ressource indiqué doit référencer un fichier ordinaire. Les répertoires et les fichiers spéciaux ne sont pas acceptés.

Erreurs liées aux images

Les images de marque utilisées dans l’annuaire doivent être dans un format pris en charge et respecter les limites de taille et de dimensions ci-dessous. Ces règles s’appliquent aux ressources de marque incluses dans le paquet.

Nom Exigence
plugin_logo_path_missing Le champ interface.logo est obligatoire et doit référencer une image carrée.
plugin_composer_icon_path_missing Le champ interface.composerIcon est obligatoire et doit référencer une image carrée.
image_file_unreadable Le fichier image doit être lisible.
image_file_too_large La taille de l’image ne doit pas dépasser 5 Mio.
image_file_format_unsupported Le nom du fichier image doit se terminer par .png, .jpg, .jpeg, .webp ou .svg.
raster_image_decode_failed L’image matricielle doit être un fichier PNG, JPEG ou WebP pouvant être décodé en toute sécurité.
raster_image_extension_content_mismatch L’extension du fichier image doit correspondre au format d’image détecté.
raster_image_not_square L’image doit être carrée.
raster_image_dimensions_too_small L’image doit mesurer au moins 48 × 48 pixels.
raster_image_dimensions_too_large Les dimensions de l’image ne doivent pas dépasser 4 096 × 4 096 pixels.
svg_xml_malformed Le fichier SVG doit contenir du XML valide encodé en UTF-8.
svg_root_element_invalid L’élément racine du fichier SVG doit être <svg>.
svg_dimensions_missing Le fichier SVG doit définir un attribut viewBox avec des valeurs numériques, ou des attributs width et height numériques.
svg_dimensions_not_numeric Les dimensions du SVG doivent être numériques et exprimées sans unité ni pourcentage.
svg_dimensions_not_positive La largeur et la hauteur du SVG doivent être des nombres finis strictement positifs.
svg_dimensions_not_square La largeur et la hauteur du SVG doivent être égales.
svg_dimensions_too_small Le SVG doit mesurer au moins 48 × 48 pixels.

Erreurs de référence aux serveurs MCP

Les contrôles communs aux paquets valident .app.json lorsqu’un plugin référence des serveurs MCP enregistrés. Le portail de soumission ne publie pas les références à des intégrations existantes. Un import via Skills uniquement supprime .app.json. Utilisez Avec MCP pour soumettre directement le serveur MCP.

Dans les paquets locaux ou destinés à un espace de travail, l’objet apps situé à la racine associe chaque alias de serveur MCP à l’entrée d’un serveur enregistré. Ces noms de configuration et ces codes d’erreur conservent la graphie app.

Nom Exigence
app_manifest_unreadable .app.json doit être un fichier texte lisible encodé en UTF-8.
app_manifest_json_malformed .app.json contient une erreur de syntaxe JSON à proximité de la ligne indiquée.
app_manifest_wrong_type La racine de .app.json doit être un objet JSON.
app_entries_missing Le champ apps est obligatoire.
app_entries_wrong_type apps doit être un objet.
app_entry_wrong_type Chaque entrée de serveur doit être un objet.
app_id_missing Chaque entrée de serveur doit contenir un champ id.
app_id_wrong_type Dans chaque entrée de serveur, id doit être une chaîne de caractères.
app_id_format Dans chaque entrée de serveur, id doit commencer par asdk_app_, connector_ ou templated_apps_. Le préfixe doit être suivi d’une lettre ou d’un chiffre. Les caractères suivants ne peuvent être que des lettres, des chiffres, _ ou -.
app_entry_optional_wrong_type Dans chaque entrée de serveur, si vous renseignez optional, sa valeur doit être true ou false.
app_entry_required_wrong_type Dans chaque entrée de serveur, si vous renseignez required, sa valeur doit être true ou false.
app_not_eligible Un paquet local ou destiné à un espace de travail doit référencer un serveur MCP éligible et disponible. Pour une soumission à l’annuaire, utilisez Avec MCP et soumettez directement le serveur MCP.

Avertissements liés au paquet

Ces avertissements signalent les éléments du paquet que le processus de validation ignore ou normalise. Ils ne bloquent pas la soumission. Examinez-les pour vérifier que le plugin soumis contient les fichiers et les paramètres attendus.

Nom Exigence
duplicate_app_reference Chaque identifiant de serveur doit apparaître une seule fois dans .app.json. Les références en double sont traitées comme un seul serveur.
undeclared_app_manifest_ignored Le fichier .app.json situé à la racine est importé uniquement si le champ apps du manifeste du plugin a pour valeur ./.app.json.
undeclared_mcp_manifest_ignored Le fichier .mcp.json situé à la racine est importé uniquement si le champ mcpServers du manifeste du plugin a pour valeur ./.mcp.json.
skill_file_ignored Les fichiers placés directement sous skills/ ne sont pas importés en tant que skills. Chaque skill doit se trouver dans un répertoire contenant SKILL.md.
skill_symlink_ignored Les liens symboliques placés directement sous skills/ ne sont pas importés en tant que skills. Chaque skill doit se trouver dans un répertoire réel contenant SKILL.md.
skill_frontmatter_adjusted Lors de l’importation, les champs name et description du skill sont normalisés : les caractères d’espacement en début et en fin de valeur sont supprimés et les suites de caractères d’espacement à l’intérieur sont ramenées à un seul espace.
skill_metadata_ignored Configurez l’interface du skill dans la table de correspondance interface de agents/openai.yaml. Le champ metadata de SKILL.md ne configure pas l’interface.

Étapes suivantes

Après avoir corrigé toutes les erreurs de validation, revenez à la page Soumettre des plugins pour terminer la soumission.