公開ディレクトリに申請するプラグインには、ワークスペースにインストールするプラグインよりも厳しい基準が適用されます。ディレクトリへの申請では、共通のパッケージチェックに加え、掲載情報のフィールド、レビュー資料、MCP ツール、スキル、アセット、画像の追加チェックに合格する必要があります。このリファレンスでは、MCP サーバーの参照など、申請ポータル以外でも発生する共通のパッケージチェックについても説明します。
申請時に返されるエラーコードを使って、該当する要件を確認してください。エラーがあると申請できません。警告があっても申請できますが、続行する前に内容を確認してください。
空でないことが求められる値には、空白文字以外の文字が必要です。使用できるテキストには、制御文字、Unicode の行区切り文字や段落区切り文字、未対応の不可視書式文字は含まれません。HTTPS URL にはホストが必要で、認証情報や未対応の文字を含めることはできません。
ディレクトリへの最終申請
アップロード時の検証に合格したパッケージでも、ディレクトリへの最終申請に失敗することがあります。最終申請では、掲載情報により厳しい制限が適用され、MCP の構成、スキルのスキャン、テストケース、ポリシーに関する確認・同意がチェックされます。
| フィールド | 最終申請のルール |
|---|---|
| パッケージ名 | 必須です。64 文字以内で指定してください。先頭は ASCII の英字または数字とし、使用できる文字は ASCII の英字、数字、_、- のみです。 |
| バージョン | 必須です。64 文字以内のセマンティックバージョンを使用してください。 |
| 表示名 | 必須です。1 行、30 文字以内で指定してください。 |
| 短い説明 | 必須です。1 行、30 文字以内で指定してください。 |
| 詳細説明 | 必須です。4,000 文字以内で指定してください。改行は使用できます。 |
| 開発者名 | 必須です。1 行、80 文字以内で指定してください。 |
| カテゴリ | 必須です。掲載情報とインターフェースのエラーセクションに記載されている対応カテゴリから選択してください。 |
| できること | 最大 20 項目です。各項目は空にせず、1 行、120 文字以内で指定してください。 |
| 開始用プロンプト | 最大 3 件です。各プロンプトは空にせず、Unicode と空白文字の正規化後も重複しない内容を、1 行、128 文字以内で指定してください。MCP サーバーの @mention を含めることはできません。 |
| URL | リモート MCP の申請では必須です。スキルのみのプラグインを ZIP でアップロードする場合は任意です。ウェブサイト、サポート、プライバシーポリシー、利用規約の URL は HTTPS を使用し、1,024 文字以内で指定してください。 |
| ブランドカラー | 任意です。6 桁の 16 進数カラーコードで指定してください。ライト用の色は白に対して、ダーク用の色は #212121 に対して、それぞれ 2:1 以上のコントラスト比が必要です。 |
すべてのプラグイン申請には、次の要件も適用されます。
- 同梱するすべてのスキルが安全性とセキュリティのスキャンに合格すること(スキャンには最大 2 時間かかる場合があります)
- 開発者または事業者の本人確認が済んでいることと、ポリシーに関する必要な確認・同意をすべて完了していること
リモート MCP プラグインの最終申請には、次の要件も適用されます。
- 上記のルールを満たすウェブサイト、サポート、プライバシーポリシー、利用規約の URL
- 対応プラットフォームでの主なユースケースとツールを紹介するデモ録画の URL
- 正常系テストケースをちょうど 5 件、異常系テストケースをちょうど 3 件、およびリリースノート
- 本番環境の HTTPS MCP サーバー URL、ドメイン検証チャレンジの完了、および成功した最新のツールスキャン
- すべての MCP ツールで明示した
readOnlyHint、openWorldHint、destructiveHintの値と、 各値の設定根拠 - サーバーが OAuth を使用する場合、レビュー担当者がすぐに使えるデモ用の認証情報
- スクリーンショットを提供できるのは、MCP サーバーがカスタム UI を提供する場合のみです。追加する場合は、開始用プロンプトごとに PNG または JPEG 画像を 1 枚ずつ用意してください。各スクリーンショットの幅は正確に 706 ピクセル、高さは 400~860 ピクセルである必要があります。
最終申請のメタデータエラー
これらのエラー名では、subtitle は短い説明を、
description は詳細説明を意味します。
| 名前 | 要件 |
|---|---|
submission_display_name_required | 表示名は必須です。空にせず、1 行で指定してください。 |
submission_display_name_too_long | 表示名は 30 文字以内で指定してください。 |
submission_display_name_character_unsupported | 表示名には対応している文字を使用し、1 行に収めてください。 |
submission_subtitle_required | 短い説明は必須です。空にせず、1 行で指定してください。 |
submission_subtitle_too_long | 短い説明は 30 文字以内で指定してください。 |
submission_subtitle_character_unsupported | 短い説明には対応している文字を使用し、1 行に収めてください。 |
submission_description_required | 詳細説明は必須です。空にしないでください。改行は使用できます。 |
submission_description_too_long | 詳細説明は 4,000 文字以内で指定してください。 |
submission_description_character_unsupported | 詳細説明には対応している文字を使用してください。改行は使用できます。 |
submission_developer_name_required | 開発者名は必須です。空にせず、1 行で指定してください。 |
submission_developer_name_too_long | 開発者名は 80 文字以内で指定してください。 |
submission_developer_name_character_unsupported | 開発者名には対応している文字を使用し、1 行に収めてください。 |
plugin_capability_invalid | 「できること」の各項目は空にせず、対応している文字を使用し、1 行、120 文字以内で指定してください。 |
plugin_default_prompt_mention | 開始用プロンプトに MCP サーバーの @mentions を含めることはできません。 |
plugin_default_prompt_duplicate | 開始用プロンプトは、Unicode と空白文字の正規化後も重複しない内容にしてください。 |
MCP とレビューのエラー
これらのエラーはリモート MCP の申請に適用されます。
| 名前 | 要件 |
|---|---|
annotations_required | すべての MCP ツールで、readOnlyHint、openWorldHint、destructiveHint を正確に設定する必要があります。 |
justification_required | すべての MCP ツールのアノテーションに、読み取り専用、オープンワールド、破壊的な動作に関する設定の根拠を含める必要があります。 |
scan_required | MCP ツールには、本番環境の MCP サーバーに対するスキャンが成功した、現時点で有効な結果が必要です。 |
domain_verification_required | MCP ホストまたは許可された親ホスト上の、生成された /.well-known/openai-apps-challenge URL で、検証トークンを一切変更せずに公開し、 ドメインを確認 の検証に合格する必要があります。 |
frame_domain_explanation_required | MCP ツールのスキャンで報告されたすべての外部フレームドメインについて、UI で必要となる理由と、提供されるコンテンツを説明する必要があります。 |
screenshots_not_allowed | スクリーンショットは、現時点で有効な MCP ツールのスキャンで UI 出力テンプレートが報告されている場合にのみ使用できます。 |
アーカイブのエラー
ZIP アップロードのエラーと警告
ポータルの スキルのみ では、スキルの ZIP パッケージをアップロードできます。 エラーがあるとアップロードできません。警告がある場合は確認が必要です。
| 名前 | 要件 |
|---|---|
plugin_name_mismatch | 更新時のパッケージ名は、既存のプラグイン名と一致する必要があります。 |
plugin_version_unchanged | 新しいリリースでは、マニフェストの version に異なる値を使用する必要があります。公開済みのバージョンを再利用する場合は確認が必要です。 |
mcp_configuration_excluded | スキルのみのアップロードでは、mcpServers、mcp.json、.mcp.json は除外されます。リモート MCP サーバーは MCP ありから申請してください。 |
app_configuration_excluded | スキルのみの ZIP アップロードに、apps や .app.json を含めることはできません。MCP サーバーを含むプラグインでは、 MCP ありを使用する必要があります。 |
screenshot_configuration_excluded | スキルのみの ZIP アップロードに、interface.screenshots を含めることはできません。スクリーンショットを使用するには、 MCP あり とカスタム UI が必要です。 |
claude_format_normalized | .claude-plugin/plugin.json は .codex-plugin/plugin.json に変換され、未設定のインターフェース項目のデフォルト値と、正規化されたテキストフィールドがポータルによって追加されます。 |
manifest_normalized | ポータルは、正規化したマニフェストを .codex-plugin/plugin.json として保存します。変更されたフィールドについては確認が必要です。 |
developer_name_defaulted | author.name と interface.developerName は一致する必要があります。一致しない場合は、確認後、選択された確認済みの本人情報が両方に使用されます。 |
ZIP の構造と制限に関するエラー
| 名前 | 要件 |
|---|---|
archive_empty | アーカイブは空にできません。 |
archive_too_large | 圧縮された ZIP は 100 MB 以下である必要があります。 |
archive_format_not_zip | アーカイブは、破損していない有効な ZIP ファイルである必要があります。 |
archive_member_path_empty | アーカイブ内のエントリのパスは空にできません。 |
archive_member_path_has_outer_whitespace | アーカイブ内のエントリのパスは、空白文字で始めたり終えたりすることはできません。 |
archive_member_path_has_backslash | アーカイブ内のエントリのパスには、バックスラッシュではなく / を使用する必要があります。 |
archive_member_path_absolute | アーカイブ内のエントリのパスは、アーカイブのルートからの相対パスである必要があります。 |
archive_member_path_has_empty_segment | アーカイブ内のエントリのパスに、空のセグメントを含めることはできません。 |
archive_member_path_has_parent_segment | アーカイブ内のエントリのパスに、.. セグメントを含めることはできません。 |
archive_member_path_too_deep | アーカイブ内のエントリのパスは、ファイル名を含めて 20 セグメント以内である必要があります。 |
archive_member_path_too_long | アーカイブ内のエントリのパスは、サポートされているパス長の上限以内である必要があります。 |
archive_member_path_normalization_collision | アーカイブ内のエントリのパスは、大文字と小文字の表記、および Unicode を正規化した後も重複してはいけません。 |
archive_member_type_unsupported | アーカイブ内のエントリは、通常のファイルまたはディレクトリである必要があります。 |
archive_member_too_large | アーカイブ内の各エントリは 100 MiB を超えてはいけません。 |
archive_member_path_duplicate | アーカイブ内のエントリのパスは重複してはいけません。 |
archive_member_path_type_conflict | ファイルのパスをディレクトリとしても使用したり、その配下に別のアーカイブエントリを配置したりすることはできません。 |
archive_too_many_entries | アーカイブ内のエントリ数は 5,000 を超えてはいけません。 |
archive_uncompressed_too_large | 展開後のアーカイブは 512 MiB を超えてはいけません。 |
archive_member_unreadable | アーカイブ内のすべてのエントリは、読み取り可能で、暗号化されておらず、サポートされている圧縮方式を使用している必要があります。 |
プラグインルートのエラー
| 名前 | 要件 |
|---|---|
plugin_root_missing | 選択したパスは実在し、プラグインを含むディレクトリである必要があります。 |
archive_plugin_files_missing | スキルのみの ZIP には、サポートされているプラグインマニフェストと、少なくとも 1 つの有効なスキルを含める必要があります。 |
plugin_root_ambiguous | ZIP には、アーカイブのルート、または最上位ディレクトリのいずれかに、プラグインルートをちょうど 1 つ含める必要があります。 |
plugin_root_has_siblings | 最上位にプラグインディレクトリがある ZIP には、そのディレクトリと同じ階層にファイルを含めることはできません。 |
プラグインマニフェストのエラー
| 名前 | 要件 |
|---|---|
plugin_manifest_missing | ZIP のルート、または唯一の最上位ディレクトリには、サポートされている Agent Plugins スキーマに準拠したルートの plugin.json、.codex-plugin/plugin.json、.agent-plugin/plugin.json、.claude-plugin/plugin.json のいずれかを含める必要があります。 |
plugin_manifest_not_file | プラグインマニフェストは、通常の JSON ファイルである必要があります。 |
plugin_manifest_unreadable | プラグインマニフェストは、読み取り可能な UTF-8 テキストである必要があります。 |
plugin_manifest_json_malformed | プラグインマニフェストには、有効な JSON を含める必要があります。構文エラーは行番号とともに報告されます。 |
plugin_manifest_root_not_object | プラグインマニフェストの最上位には、JSON オブジェクトを含める必要があります。 |
codex_manifest_parent_not_directory | .codex-plugin はディレクトリである必要があります。 |
codex_manifest_path_not_file | .codex-plugin/plugin.json は通常の JSON ファイルである必要があります。 |
plugin_id_wrong_type | id を指定する場合は、文字列である必要があります。 |
plugin_id_empty | id を指定する場合は、空にできません。 |
plugin_name_missing | name は必須です。 |
plugin_name_wrong_type | name は文字列である必要があります。 |
plugin_name_empty | name は空にできません。 |
plugin_name_too_long | name は 64 文字以内にする必要があります。 |
plugin_name_format | name は ASCII の英字または数字で始め、ASCII の英字、数字、_、- のみを使用する必要があります。 |
plugin_version_missing | version は必須です。 |
plugin_version_wrong_type | version は文字列である必要があります。 |
plugin_version_empty | version は、1.0.0 のようなセマンティックバージョニング形式の空でない文字列である必要があります。 |
plugin_version_not_semver | version は、1.0.0 のようなセマンティックバージョニング形式にする必要があります。 |
plugin_version_too_long | version は 64 文字以内にする必要があります。 |
plugin_description_missing | description は必須です。 |
plugin_description_wrong_type | description は文字列である必要があります。 |
plugin_description_empty | description は空にできません。 |
plugin_description_too_long | description は 1,024 文字以内にする必要があります。 |
plugin_description_character_unsupported | description にはサポートされているテキストを使用する必要があります。改行は使用できます。 |
plugin_developer_missing | author.name は必須です。interface.developerName も必須で、エラーは別途報告されます。 |
plugin_author_wrong_type | author はオブジェクトである必要があります。 |
plugin_author_name_wrong_type | author.name は文字列である必要があります。 |
plugin_author_name_empty | author.name は空にできません。 |
plugin_author_name_too_long | author.name は 120 文字以内にする必要があります。 |
plugin_author_name_character_unsupported | author.name にはサポートされているテキストを使用する必要があります。 |
plugin_author_email_wrong_type | author.email を指定する場合は、文字列である必要があります。 |
plugin_author_email_empty | author.email を指定する場合は、空にできません。 |
plugin_author_email_too_long | author.email は 320 文字以内にする必要があります。 |
plugin_author_email_character_unsupported | author.email にはサポートされているテキストを使用する必要があります。 |
plugin_author_url_wrong_type | author.url を指定する場合は、文字列である必要があります。 |
plugin_author_url_empty | author.url を指定する場合は、空にできません。 |
plugin_author_url_not_https | author.url は HTTPS URL である必要があります。 |
plugin_author_url_has_credentials | author.url に認証情報を含めることはできません。 |
plugin_author_url_too_long | author.url は 2,048 文字以内にする必要があります。 |
plugin_author_url_character_unsupported | author.url にはサポートされているテキストを使用する必要があります。 |
掲載情報とインターフェースのエラー
プラグインマニフェストの interface オブジェクトは、ユーザーに表示される公開の掲載情報を定義します。
このオブジェクトは .codex-plugin/plugin.json 内にあり、
displayName や shortDescription などのフィールドを使用します。
{
"interface": {
"displayName": "Example Plugin",
"shortDescription": "Summarize documents",
"longDescription": "Summarize and organize documents.",
"developerName": "Example",
"category": "Productivity",
"capabilities": ["Summarize documents"]
}
}
掲載情報の 4 つの URL(ウェブサイト、プライバシーポリシー、利用規約、サポート)は、スキルのみのプラグインを ZIP でアップロードする場合は省略できます。リモート MCP を申請する場合は必須です。文字数の上限は、パッケージの検証時は 2,048 文字、ディレクトリへの最終申請時は 1,024 文字です。
| 名前 | 要件 |
|---|---|
plugin_interface_wrong_type | プラグインマニフェストの interface フィールドは JSON オブジェクトである必要があります。 |
plugin_display_name_wrong_type | interface.displayName は文字列である必要があります。 |
plugin_display_name_empty | interface.displayName は必須で、空にできません。 |
plugin_display_name_too_long | interface.displayName は、パッケージの検証時は 80 文字以内、ディレクトリへの最終申請時は 30 文字以内にする必要があります。 |
plugin_display_name_character_unsupported | interface.displayName にはサポートされているテキストを使用する必要があります。 |
plugin_short_description_missing | interface.shortDescription は必須で、1 行に収める必要があります。パッケージの検証時は 240 文字以内、ディレクトリへの最終申請時は 30 文字以内にする必要があります。 |
plugin_short_description_wrong_type | interface.shortDescription は文字列である必要があります。 |
plugin_short_description_empty | interface.shortDescription は空にできません。 |
plugin_short_description_too_long | interface.shortDescription は、パッケージの検証時は 240 文字以内、ディレクトリへの最終申請時は 30 文字以内にする必要があります。 |
plugin_short_description_character_unsupported | interface.shortDescription にはサポートされているテキストを使用する必要があります。 |
plugin_long_description_wrong_type | interface.longDescription は文字列である必要があります。 |
plugin_long_description_empty | interface.longDescription は必須で、空にできません。 |
plugin_long_description_too_long | interface.longDescription は 4,000 文字以内にする必要があります。 |
plugin_long_description_character_unsupported | interface.longDescription にはサポートされているテキストを使用する必要があります。改行は使用できます。 |
plugin_developer_name_wrong_type | interface.developerName は文字列である必要があります。 |
plugin_developer_name_empty | interface.developerName は必須で、空にできません。 |
plugin_developer_name_too_long | interface.developerName は、パッケージの検証時は 120 文字以内、ディレクトリへの最終申請時は 80 文字以内にする必要があります。 |
plugin_developer_name_character_unsupported | interface.developerName にはサポートされているテキストを使用する必要があります。 |
plugin_category_wrong_type | interface.category は文字列である必要があります。 |
plugin_category_empty | interface.category を指定する場合は、空にできません。Other を使用する場合は省略してください。 |
plugin_category_unknown | interface.category は、Productivity、Creativity、Developer Tools、Business & Operations、Data & Analytics、Communication、Education & Research、Security、Finance、Healthcare、Travel、Entertainment、Other のいずれかである必要があります。 |
plugin_category_character_unsupported | interface.category にはサポートされているテキストを使用する必要があります。 |
plugin_capabilities_wrong_type | interface.capabilities は文字列のリストである必要があります。 |
plugin_capabilities_too_many | interface.capabilities の要素数は 20 以下にする必要があります。 |
plugin_capability_wrong_type | interface.capabilities の各要素は文字列である必要があります。 |
plugin_capability_empty | interface.capabilities の各要素を指定する場合は、空にできません。 |
plugin_capability_too_long | interface.capabilities の各要素は 120 文字以内にする必要があります。 |
plugin_capability_character_unsupported | interface.capabilities の各要素にはサポートされているテキストを使用する必要があります。 |
plugin_website_url_wrong_type | interface.websiteURL を指定する場合は、文字列である必要があります。 |
plugin_website_url_empty | interface.websiteURL を指定する場合は、空にできません。 |
plugin_website_url_format | interface.websiteURL は HTTPS URL である必要があります。 |
plugin_website_url_too_long | interface.websiteURL は、掲載情報の URL の長さ制限を満たす必要があります。 |
plugin_privacy_policy_url_wrong_type | interface.privacyPolicyURL を指定する場合は、文字列にする必要があります。 |
plugin_privacy_policy_url_empty | interface.privacyPolicyURL を指定する場合は、空にできません。 |
plugin_privacy_policy_url_format | interface.privacyPolicyURL は HTTPS URL にする必要があります。 |
plugin_privacy_policy_url_too_long | interface.privacyPolicyURL は、掲載情報の URL の長さ制限を満たす必要があります。 |
plugin_terms_of_service_url_wrong_type | interface.termsOfServiceURL を指定する場合は、文字列にする必要があります。 |
plugin_terms_of_service_url_empty | interface.termsOfServiceURL を指定する場合は、空にできません。 |
plugin_terms_of_service_url_format | interface.termsOfServiceURL は HTTPS URL にする必要があります。 |
plugin_terms_of_service_url_too_long | interface.termsOfServiceURL は、掲載情報の URL の長さ制限を満たす必要があります。 |
plugin_support_url_wrong_type | interface.supportURL を指定する場合は、文字列にする必要があります。 |
plugin_support_url_empty | interface.supportURL を指定する場合は、空にできません。 |
plugin_support_url_format | interface.supportURL は HTTPS URL にする必要があります。 |
plugin_support_url_too_long | interface.supportURL は、掲載情報の URL の長さ制限を満たす必要があります。 |
plugin_homepage_wrong_type | homepage を指定する場合は、文字列にする必要があります。 |
plugin_homepage_empty | homepage を指定する場合は、空にできません。 |
plugin_homepage_format | homepage は HTTPS URL にする必要があります。 |
plugin_homepage_too_long | homepage は 2,048 文字以内にする必要があります。 |
plugin_brand_color_wrong_type | interface.brandColor を指定する場合は、文字列にする必要があります。 |
plugin_brand_color_empty | interface.brandColor を指定する場合は、空にできません。 |
plugin_brand_color_format | interface.brandColor は、#1ABCFE のような 6 桁の 16 進数カラーコードにする必要があります。 |
plugin_brand_color_dark_wrong_type | interface.brandColorDark を指定する場合は、文字列にする必要があります。 |
plugin_brand_color_dark_empty | interface.brandColorDark を指定する場合は、空にできません。 |
plugin_brand_color_dark_format | interface.brandColorDark は、#1ABCFE のような 6 桁の 16 進数カラーコードにする必要があります。 |
plugin_brand_color_contrast | interface.brandColor は、白に対して 2:1 以上のコントラスト比が必要です。 |
plugin_brand_color_dark_contrast | interface.brandColorDark は、#212121 に対して 2:1 以上のコントラスト比が必要です。 |
plugin_default_prompt_wrong_type | interface.defaultPrompt は文字列または文字列のリストにする必要があります。 |
plugin_default_prompt_too_many | interface.defaultPrompt に含めるプロンプトは、最大 3 件にする必要があります。 |
plugin_default_prompt_entry_wrong_type | interface.defaultPrompt の各項目は文字列にする必要があります。 |
plugin_default_prompt_empty | interface.defaultPrompt の各項目を指定する場合は、空にできません。 |
plugin_default_prompt_too_long | interface.defaultPrompt の各項目は、パッケージ検証では 512 文字以内、ディレクトリへの最終申請では 128 文字以内にする必要があります。 |
plugin_default_prompt_character_unsupported | interface.defaultPrompt の各項目は、サポートされているテキストを使用し、1 行に収める必要があります。 |
プラグインのコンテンツエラー
| 名前 | 要件 |
|---|---|
plugin_skills_path_wrong_type | skills は、ルート直下の skills/ ディレクトリへのパスを表す文字列にする必要があります。 |
plugin_skills_path_empty | skills を指定する場合は、ルート直下の skills/ ディレクトリへの空でないパスにする必要があります。 |
plugin_skills_path_unsupported | skills の解決先は、ルート直下の skills/ ディレクトリである必要があります。 |
plugin_skills_directory_missing | 宣言されたルート直下の skills/ ディレクトリが存在する必要があります。 |
plugin_skills_path_not_directory | ルート直下の skills/ を宣言する場合は、ディレクトリである必要があります。 |
plugin_apps_path_wrong_type | apps は、ルート直下の .app.json へのパスを表す文字列にする必要があります。 |
plugin_apps_path_empty | apps を指定する場合は、ルート直下の .app.json への空でないパスにする必要があります。 |
plugin_apps_path_unsupported | apps の解決先は、ルート直下の .app.json である必要があります。 |
plugin_apps_file_missing | 宣言されたルート直下の .app.json ファイルが存在する必要があります。 |
plugin_apps_path_not_file | ルート直下の .app.json を宣言する場合は、通常のファイルである必要があります。 |
plugin_mcp_path_wrong_type | mcpServers は、ルート直下の .mcp.json へのパスを表す文字列にする必要があります。 |
plugin_mcp_path_empty | mcpServers は空でないパスにする必要があります。./.mcp.json に設定するか、フィールドを削除してください。 |
plugin_mcp_path_unsupported | mcpServers の解決先は、ルート直下の .mcp.json である必要があります。 |
plugin_mcp_file_missing | mcpServers でルート直下の .mcp.json が宣言されていますが、そのファイルが存在しません。 |
plugin_mcp_path_not_file | ルート直下の .mcp.json は通常のファイルである必要があります。 |
plugin_runtime_surface_missing | スキルのみの ZIP には、有効なスキルを少なくとも 1 つ含める必要があります。ローカルおよびワークスペースのパッケージでは、適格な MCP サーバーを参照することもできます。 |
MCP マニフェストのエラー
これらのエラーは、互換性用の .mcp.json ファイルに適用されます。
ポータブルパッケージでは、取り込み時にこのファイルと .codex-plugin/plugin.json が、
ルート直下の plugin.json と mcp.json から生成されます。上記のコンポーネントパスのエラーも、
これらの生成ファイルを指す場合があります。生成元のポータブル構成を修正してください。
互換性診断にファイル名が表示されたという理由だけで、mcp.json を .mcp.json に変更しないでください。
| 名前 | 要件 |
|---|---|
mcp_manifest_unreadable | .mcp.json は読み取り可能な UTF-8 テキストである必要があります。 |
mcp_manifest_json_malformed | .mcp.json には有効な JSON を含める必要があります。構文が不正な場合は、行番号とともに報告されます。 |
mcp_manifest_wrong_type | .mcp.json のトップレベルには JSON オブジェクトを含める必要があります。 |
mcp_servers_missing | .mcp.json のトップレベルには mcpServers フィールドを含める必要があります。 |
mcp_servers_wrong_type | mcpServers はオブジェクトにする必要があります。 |
mcp_server_name_empty | すべての MCP サーバー名には、空白以外の文字を少なくとも 1 文字含める必要があります。 |
mcp_server_wrong_type | mcpServers.<server-name> の各値は、そのサーバーの宣言を含むオブジェクトにする必要があります。 |
スキルのエラー
| 名前 | 要件 |
|---|---|
skill_manifest_missing | スキルには SKILL.md ファイルが必要です。 |
skill_bundle_too_large | 各圧縮済みスキルバンドルのサイズは、エラーに示された MiB 単位の上限以内である必要があります。 |
skill_directory_hidden | スキルのディレクトリ名を . で始めることはできません。 |
skill_manifest_nested | 各スキルのディレクトリは skills/ の直下に配置する必要があります。 |
skill_manifest_not_regular_file | SKILL.md は通常のファイルである必要があります。 |
skill_manifest_unreadable | SKILL.md は読み取り可能である必要があります。 |
skill_manifest_invalid_utf8 | SKILL.md の内容は有効な UTF-8 である必要があります。 |
skill_frontmatter_missing | SKILL.md の先頭には、--- の行で囲まれた YAML フロントマターが必要です。 |
skill_frontmatter_unclosed | SKILL.md の YAML フロントマターは --- で終わる必要があります。 |
skill_frontmatter_yaml_malformed | SKILL.md のフロントマターには、有効な YAML が必要です。 |
skill_frontmatter_wrong_type | SKILL.md のフロントマターには、YAML マッピングが必要です。 |
skill_name_missing | name は必須で、空にすることはできません。 |
skill_name_wrong_type | name は文字列である必要があります。 |
skill_name_empty | name を空にすることはできません。 |
skill_name_character_unsupported | スキルのフロントマターの name には、サポートされているテキストを使用する必要があります。 |
skill_description_missing | description は必須で、空にすることはできません。 |
skill_description_wrong_type | description は文字列である必要があります。 |
skill_description_empty | description を空にすることはできません。 |
skill_description_too_long | description は 1,024 文字以下である必要があります。 |
skill_description_character_unsupported | スキルのフロントマターの description には、サポートされているテキストを使用する必要があります。 |
skill_body_empty | スキルの指示を空にすることはできません。 |
skill_identity_too_long | プラグイン名とスキル名を結合した名前(plugin-name:skill-name)は、64 文字以下である必要があります。 |
skill_identity_duplicate | 各スキルの name は、プラグイン内で一意である必要があります。 |
スキルのエージェントメタデータのエラー
同梱されたスキルは、skills/<skill>/agents/openai.yaml に独自の interface を定義できます。
これはユーザーに対するスキルの表示を制御するもので、
プラグインマニフェストの interface とは別のものです。
スキルのインターフェースのフィールドには snake_case を使用します。
interface:
display_name: "Summarize documents"
short_description: "Summarize a document"
icon_small: "./assets/icon.png"
default_prompt: "Summarize the selected document."
| 名前 | 要件 |
|---|---|
skill_agent_not_regular_file | agents/openai.yaml は通常のファイルである必要があります。 |
skill_agent_unreadable | agents/openai.yaml は読み取り可能である必要があります。 |
skill_agent_invalid_utf8 | agents/openai.yaml の内容は有効な UTF-8 である必要があります。 |
skill_agent_yaml_malformed | agents/openai.yaml には、有効な YAML が必要です。 |
skill_agent_top_level_wrong_type | agents/openai.yaml の最上位には、YAML マッピングが必要です。 |
skill_agent_interface_missing | agents/openai.yaml ファイルを含める場合、そのファイル内に interface が必要です。 |
skill_agent_interface_wrong_type | agents/openai.yaml 内の interface は YAML マッピングである必要があります。 |
skill_agent_display_name_missing | interface.display_name は必須で、空にすることはできません。 |
skill_agent_display_name_wrong_type | interface.display_name は文字列である必要があります。 |
skill_agent_display_name_empty | interface.display_name を空にすることはできません。 |
skill_agent_short_description_missing | interface.short_description は必須で、空にすることはできません。 |
skill_agent_short_description_wrong_type | interface.short_description は文字列である必要があります。 |
skill_agent_short_description_empty | interface.short_description を空にすることはできません。 |
skill_agent_icon_small_wrong_type | interface.icon_small を指定する場合は、空ではない相対ファイルパスである必要があります。 |
skill_agent_icon_small_empty | interface.icon_small を指定する場合は、assets/icon.png のような空ではない相対ファイルパスである必要があります。 |
skill_agent_icon_large_wrong_type | interface.icon_large を指定する場合は、空ではない相対ファイルパスである必要があります。 |
skill_agent_icon_large_empty | interface.icon_large を指定する場合は、assets/icon.png のような空ではない相対ファイルパスである必要があります。 |
skill_agent_brand_color_wrong_type | interface.brand_color を指定する場合は、文字列である必要があります。 |
skill_agent_brand_color_empty | interface.brand_color を指定する場合は、空にせず、#1ABCFE のような 6 桁の 16 進数カラーコードを使用する必要があります。 |
skill_agent_brand_color_format | interface.brand_color は、#1ABCFE のような 6 桁の 16 進数カラーコードである必要があります。 |
skill_agent_default_prompt_wrong_type | interface.default_prompt を指定する場合は、文字列である必要があります。 |
skill_agent_default_prompt_empty | interface.default_prompt を指定する場合は、空にすることはできません。 |
skill_agent_policy_wrong_type | policy を指定する場合は、YAML マッピングである必要があります。 |
skill_agent_allow_implicit_invocation_wrong_type | policy に含めることができるのは、products と allow_implicit_invocation のみです。products には CHAT、CODEX、またはその両方を含める必要があり、allow_implicit_invocation は true または false である必要があります。 |
skill_agent_dependencies_wrong_type | dependencies は YAML マッピングである必要があります。サポートされているのは tools のみです。 |
skill_agent_dependency_unsupported | agents/openai.yaml でサポートされているのは dependencies.tools のみです。 |
アセットパスのエラー
| 名前 | 要件 |
|---|---|
declared_asset_path_wrong_type | 指摘されたアセットフィールドは、ファイルパスを表す文字列である必要があります。 |
declared_asset_path_empty | 指摘されたアセットフィールドを空にすることはできません。 |
declared_asset_path_has_outer_whitespace | 指摘されたアセットフィールドの先頭または末尾に空白文字を含めることはできません。 |
declared_asset_path_has_control_character | 指摘されたアセットフィールドに、U+0000–U+001F または U+007F の文字を含めることはできません。 |
branding_asset_path_missing_root_prefix | 指摘されたアセットフィールドは ./ で始まる必要があります。 |
declared_asset_path_unsafe | 指摘されたアセットフィールドは、プラグイン内の相対パスである必要があります。絶対パス、ドライブプレフィックス、または上位ディレクトリへ移動する .. セグメントを含めることはできません。 |
declared_asset_path_outside_package | 指摘されたアセットフィールドは、プラグイン内のファイルを参照する必要があります。 |
declared_asset_file_missing | 指摘されたアセットフィールドが、存在しないファイルを参照しています。 |
declared_asset_not_regular_file | 指定されたアセットフィールドは、ディレクトリや特殊ファイルではなく、通常のファイルを参照する必要があります。 |
画像のエラー
ディレクトリ掲載用のブランド画像には、サポートされているファイル形式を使用し、以下のファイルサイズと画像寸法の制限を満たす必要があります。これらのルールは、パッケージに含まれるブランドアセットに適用されます。スタータープロンプトのスクリーンショットには、前述のポータル固有の制限が適用されます。
| 名前 | 要件 |
|---|---|
plugin_logo_path_missing | interface.logo は必須で、正方形の画像を参照する必要があります。 |
plugin_composer_icon_path_missing | interface.composerIcon は必須で、正方形の画像を参照する必要があります。 |
image_file_unreadable | 画像ファイルは読み取り可能である必要があります。 |
image_file_too_large | 画像のファイルサイズは 5 MiB 以下にする必要があります。 |
image_file_format_unsupported | 画像のファイル名は .png、.jpg、.jpeg、.webp、または .svg で終わる必要があります。 |
raster_image_decode_failed | ラスター画像は、安全にデコードできる PNG、JPEG、または WebP ファイルである必要があります。 |
raster_image_extension_content_mismatch | 画像ファイルの拡張子は、検出された画像形式と一致する必要があります。 |
raster_image_not_square | 画像は正方形である必要があります。 |
raster_image_dimensions_too_small | 画像の寸法は 48×48 ピクセル以上にする必要があります。 |
raster_image_dimensions_too_large | 画像の寸法は 4,096×4,096 ピクセル以下にする必要があります。 |
svg_xml_malformed | SVG には、有効な UTF-8 の XML を含める必要があります。 |
svg_root_element_invalid | SVG のルート要素は <svg> である必要があります。 |
svg_dimensions_missing | SVG には、数値の viewBox、または数値の width と height を定義する必要があります。 |
svg_dimensions_not_numeric | SVG の寸法は数値で指定し、単位やパーセント表記を含めないでください。 |
svg_dimensions_not_positive | SVG の幅と高さは、正の有限数である必要があります。 |
svg_dimensions_not_square | SVG の寸法は、正方形になるように指定する必要があります。 |
svg_dimensions_too_small | SVG の寸法は 48×48 ピクセル以上にする必要があります。 |
MCP サーバー参照のエラー
プラグインが登録済みの MCP サーバーを参照する場合、
共通のパッケージチェックで .app.json が検証されます。送信ポータルでは、
既存の連携への参照は公開されません。 スキルのみ でアップロードすると、.app.json は削除されます。
MCP あり を使用して、MCP サーバーを直接送信してください。
ローカルまたはワークスペースのパッケージでは、トップレベルの apps オブジェクトが、
各 MCP サーバーのエイリアスを登録済みのサーバーエントリに対応付けます。これらの設定名とエラーコードでは、
app という表記がそのまま使われます。
| 名前 | 要件 |
|---|---|
app_manifest_unreadable | .app.json は読み取り可能な UTF-8 テキストである必要があります。 |
app_manifest_json_malformed | .app.json の報告された行付近に、不正な形式の JSON があります。 |
app_manifest_wrong_type | .app.json には、トップレベルに JSON オブジェクトを含める必要があります。 |
app_entries_missing | apps は必須です。 |
app_entries_wrong_type | apps はオブジェクトである必要があります。 |
app_entry_wrong_type | 各サーバーエントリはオブジェクトである必要があります。 |
app_id_missing | 各サーバーエントリの id は必須です。 |
app_id_wrong_type | 各サーバーエントリの id は文字列である必要があります。 |
app_id_format | 各サーバーエントリの id は asdk_app_、connector_、または templated_apps_ で始まり、その直後に英字または数字が続く必要があります。それ以降に使用できるのは、英字、数字、_、または - のみです。 |
app_entry_optional_wrong_type | 各サーバーエントリの optional を指定する場合、値は true または false である必要があります。 |
app_entry_required_wrong_type | 各サーバーエントリの required を指定する場合、値は true または false である必要があります。 |
app_not_eligible | ローカルまたはワークスペースのパッケージは、要件を満たす利用可能な MCP サーバーを参照する必要があります。ディレクトリへの送信では、 MCP あり を使用して MCP サーバーを直接送信する必要があります。 |
パッケージの警告
これらの警告は、検証時に無視または正規化されるパッケージ内のコンテンツを示します。警告があっても送信は可能です。警告を確認し、送信するプラグインに意図したファイルと設定が含まれていることを確かめてください。
| 名前 | 要件 |
|---|---|
duplicate_app_reference | .app.json 内の各サーバー ID への参照は 1 回だけにする必要があります。重複する参照は、1 つのサーバーとして扱われます。 |
undeclared_app_manifest_ignored | ルートの .app.json がインポートされるのは、プラグインマニフェストの apps フィールドが ./.app.json に設定されている場合のみです。 |
undeclared_mcp_manifest_ignored | ルートの .mcp.json がインポートされるのは、プラグインマニフェストの mcpServers フィールドが ./.mcp.json に設定されている場合のみです。 |
skill_file_ignored | skills/ 直下のファイルはスキルとしてインポートされません。各スキルは、SKILL.md を含むディレクトリに配置する必要があります。 |
skill_symlink_ignored | skills/ 直下のシンボリックリンクはスキルとしてインポートされません。各スキルは、SKILL.md を含む実体のあるディレクトリである必要があります。 |
skill_frontmatter_adjusted | スキルの name と description は、インポート時に前後の空白が除去され、内部の連続する空白が 1 つにまとめられて正規化されます。 |
skill_metadata_ignored | スキルのインターフェース設定には、agents/openai.yaml 内の interface マッピングを使用する必要があります。SKILL.md 内の metadata ではインターフェースを設定できません。 |
次のステップ
すべての検証エラーを解消したら、 プラグインの送信に戻り、送信を完了してください。