Si creaste un complemento y quieres compartirlo con más personas, el directorio de complementos les permite encontrarlo y usarlo en ChatGPT y Codex. Tu complemento puede incluir conexiones MCP, habilidades o ambas cosas.
Sube el paquete que ya creaste como archivo ZIP, resuelve los problemas que detecten las comprobaciones automáticas y envíalo a revisión. Una vez que se apruebe, tú decides cuándo publicarlo.
Después de la primera publicación, los cambios en tu servidor MCP se detectan automáticamente. Las actualizaciones que cumplen los requisitos se publican en cuanto pasan las comprobaciones automáticas. No necesitas subir un nuevo ZIP del complemento ni publicar cada actualización. Si cambias los metadatos o las habilidades del complemento, sí necesitas subir un nuevo ZIP.
Antes de enviar tu complemento, sigue la guía para crear paquetes de complementos y lee las directrices para complementos. Si necesitas ayuda para preparar el envío, usa Plugin Creator, disponible en el directorio de complementos.

Vista general de los complementos. Desde la página Complementos, inicia un envío y consulta el estado de publicación, el avance de la revisión y la configuración de MCP.
Para enviar un servidor MCP remoto, selecciona Con MCP y usa un punto de acceso HTTPS público y estable. Si tu complemento ejecuta un servidor MCP local o requiere ejecutarse en la computadora del usuario, consulta Enviar complementos exclusivos para escritorio.
1. Sube el ZIP de tu complemento
Confirma el acceso y la identidad con la que publicarás
Selecciona la organización y el proyecto a los que pertenecerá el complemento. Los propietarios de la organización pueden enviar complementos. Los demás miembros necesitan el permiso Apps Management Write, que un propietario puede otorgar desde los roles de la organización.
Completa la verificación de tu identidad o la de tu empresa en la configuración de la organización para publicar con tu nombre o el de una empresa.
Crea el borrador
Si tu complemento usa un servidor MCP, inclúyelo en el ZIP inicial. Por ahora, no se puede agregar un servidor MCP a un complemento existente que solo incluya habilidades.
- Abre Complementos y selecciona Subir un complemento nuevo o existente.
- Elige tu Identidad de desarrollador verificada. El directorio muestra el nombre asociado a esa identidad.
- Selecciona Subir complemento y elige tu archivo ZIP.
- Una vez validado el paquete, se abre la página de detalles del complemento con tu nuevo borrador.
Si falla la validación, corrige los errores indicados en el paquete y vuelve a subirlo. No incluyas credenciales privadas ni secretos en el ZIP.
2. Revisa las comprobaciones y resuelve los problemas
Después de subir el ZIP, la página de detalles del complemento muestra el avance y los resultados de las comprobaciones automáticas para que puedas resolver los problemas antes de enviar el complemento a revisión. En Metadatos y habilidades aparece la versión del paquete que subiste. En Servidores MCP aparecen el servidor conectado y las herramientas analizadas. La información se muestra por separado porque los cambios en el paquete requieren un nuevo ZIP, mientras que los cambios en las herramientas alojadas se comprueban directamente en tu servidor.
Comprueba los metadatos
- Abre Metadatos y habilidades. Se muestra automáticamente la última versión que subiste.
- Espera a que terminen las comprobaciones de metadatos y consulta Problemas para ver si se detectó alguno.
- Selecciona Copiar problemas para incorporar los resultados a tu flujo de desarrollo.
- Corrige los campos afectados en tu paquete, selecciona Subir complemento para corregir problemas y sube el ZIP corregido. Revisa los nuevos resultados.
Consejo: pídele a Codex o a ChatGPT que examine tu paquete y los resultados que copiaste, te explique los problemas y sugiera correcciones en los metadatos o las habilidades.

Resultados de la comprobación de metadatos. Revisa los problemas detectados en la versión seleccionada del paquete y sube un ZIP corregido.
Aquí los detalles del paquete son de solo lectura. Edítalos en el paquete de origen con ayuda de la referencia de campos del paquete. Las URL públicas deben ser accesibles e identificar a la misma persona o empresa que figura como responsable de la publicación en el envío.
Comprueba las habilidades
Si tu paquete contiene habilidades, revisa los problemas detectados en Metadatos y habilidades. Abre un problema para ver a qué habilidad afecta y qué debes cambiar. Actualiza sus instrucciones o archivos de apoyo y sube un ZIP corregido. Revisa los nuevos resultados. Los análisis obligatorios de habilidades deben completarse correctamente antes de que puedas enviar el complemento.
Conecta y analiza tu servidor MCP
Tu paquete puede declarar varios servidores MCP, pero solo se puede conectar un servidor MCP por complemento. Sigue los pasos que se indican a continuación la primera vez que conectes ese servidor. Usa Volver a conectar si hay algún problema con la conexión. Si cambias las herramientas, sigue los pasos de Analiza los cambios más recientes.
- Abre Servidores MCP y selecciona el servidor que quieres conectar.
- Selecciona Conectar para abrir Conectar servidor MCP.
- Revisa la URL del servidor MCP, la Autenticación y los ajustes correspondientes.
- Completa el desafío de verificación del dominio que aparece en el portal. Luego conecta el servidor y completa la autenticación si es necesario.
- Espera a que termine el análisis automático de herramientas y revisa las herramientas detectadas. Abre Problemas para consultar los resultados.
- Corrige los problemas de conexión o los que se detectaron en el servidor. Luego selecciona Volver a conectar o Volver a analizar, según corresponda, y revisa los nuevos resultados.

Conexión MCP y verificación del dominio. Conecta el servidor y completa la verificación del dominio antes de revisar las herramientas detectadas.
Si tu complemento con un servidor MCP local ya está aprobado, elige Solo habilidades y sigue las instrucciones de envío para complementos exclusivos para escritorio.
El portal guarda tu envío como borrador mientras completas el formulario.
Si falla la conexión o el análisis, comprueba la disponibilidad del punto de acceso y la autenticación. Luego vuelve a conectar o analizar el servidor. Antes de enviar el complemento, resuelve los problemas que aparezcan en Completar la configuración de MCP y corrige los errores de conexión. Consulta los requisitos de URL del servidor MCP, autenticación, metadatos de las herramientas e interfaz de usuario en las directrices para complementos.
Configura la autenticación para el envío
El portal lee la configuración avanzada de autenticación del archivo mcp.json de tu paquete. Configura el método de autenticación, el registro del cliente OAuth, los puntos de acceso y los alcances con ayuda de la referencia de autenticación de MCP. El panel de conexión muestra esa configuración, pero no incluye un editor de ajustes avanzados de OAuth.
Para cambiar la configuración, actualiza mcp.json, selecciona Subir nueva versión y revisa los ajustes guardados en Servidores MCP antes de conectar el servidor. Si ya hay un cliente registrado, es posible que no puedas cambiar las credenciales. Revisa la conexión guardada antes de dar por hecho que subir el paquete reemplaza al cliente existente.
Para OAuth, elige un método de registro compatible con tu proveedor:
| Método de registro | Qué debes proporcionar |
|---|---|
Cliente registrado (provided) |
Declara el ID del cliente y el método de autenticación del punto de acceso de tokens en mcp.json. Ingresa el secreto del cliente en el portal cuando sea necesario. |
Registro dinámico de clientes (dcr) |
Proporciona un punto de acceso de registro mediante el mecanismo de descubrimiento o especifica uno en registrationUrl. No incluyas las credenciales del cliente en el paquete. |
Documento de metadatos del identificador de cliente (cimd) |
Configura la preferencia de CIMD. El entorno de ejecución puede recurrir a DCR según su política de registro. |
Si usas un cliente registrado:
- Registra con tu proveedor de OAuth la URL de devolución de llamada que usa el flujo de conexión.
- Abre Servidores MCP, selecciona tu servidor y luego Conectar.
- Ingresa el Secreto del cliente OAuth si tu cliente requiere uno. El campo aparece cuando proporcionas un cliente OAuth, a menos que
tokenEndpointAuthMethodtenga el valor"none". - Completa la verificación del dominio si es necesario, selecciona Conectar y autoriza la cuenta que se usará para conectar y analizar el servidor.
- Espera a que termine el análisis y resuelve los problemas de conexión o de las herramientas que se hayan detectado.
No incluyas el secreto del cliente en mcp.json. El archivo de manifiesto rechaza clientSecret. El secreto del cliente autentica tu aplicación OAuth. Es distinto de la contraseña de la cuenta, de un token de acceso y de las credenciales de inicio de sesión del equipo de revisión.
Si el mecanismo de descubrimiento de OAuth no proporciona los puntos de acceso necesarios, especifica authorizationUrl y tokenUrl en mcp.json. Comprueba que el ID del cliente, el método de autenticación del punto de acceso de tokens, los alcances y la URL de devolución de llamada coincidan con la configuración del proveedor.
Limitaciones de autenticación
El formulario de conexión del portal admite el acceso sin autenticación, con OAuth o con una combinación de ambos. Aunque el esquema del archivo de manifiesto acepta la autenticación con clave de API, el portal no ofrece un flujo de conexión con clave de API ni un campo para ingresar un token de portador. Esta limitación también se aplica a las declaraciones de clave de API que usan autenticación Basic o un encabezado personalizado. Subir una declaración de clave de API por sí sola no completa la configuración de MCP. Ponte en contacto con OpenAI si tu envío requiere este método de autenticación.
No incluyas un token en el campo headers del servidor para eludir esta limitación. Al enviar un complemento al directorio público, se rechazan los encabezados de servidor que no estén vacíos. No configures un servidor protegido con type: "none".
El esquema acepta private_key_jwt para un cliente OAuth que tú proporcionas, pero ese valor por sí solo no configura las claves de firma. Esta guía del portal no incluye un procedimiento para configurar esas claves. Confirma la configuración necesaria con OpenAI antes de usar ese método en tu envío.
Detalles de la verificación del dominio
Para verificar el dominio, aloja el token exacto del desafío como texto sin formato en la URL que muestra el portal:
https://<challenge-base-host>/.well-known/openai-apps-challenge
Devuelve únicamente el token exacto. No devuelvas JSON ni una lista de tokens. La base del desafío debe ser un origen HTTPS en el nombre de host del servidor MCP o en un dominio superior que cumpla los requisitos. Las rutas se ignoran. Si otro complemento usa la misma URL de desafío, usa un origen superior permitido o un nombre de host distinto para evitar reemplazar su token. Ponte en contacto con soporte si ninguna de las dos opciones es posible.
3. Envía el complemento a revisión
Una vez que revises los resultados de las comprobaciones automáticas, completa la información que el equipo de revisión necesita para probar tu complemento y envía el borrador seleccionado. Primero debes completar la configuración obligatoria y corregir los errores de validación. Puedes enviar los demás resultados de las comprobaciones automáticas al equipo de revisión para que los evalúe.
Completa la información para la revisión
Los complementos con conexiones MCP necesitan información para que el equipo de revisión pueda probar la integración. Puedes incluir los casos de prueba positivos y negativos, la URL del video de demostración y las notas de la versión en plugin.json para que se importen con el ZIP. Consulta la referencia de campos de revisión y publicación y los ejemplos completos de metadatos. Plugin Creator, disponible en el directorio de complementos, puede ayudarte a preparar esta información. Ingresa por separado las credenciales del equipo de revisión en Detalles de la revisión. Prepara lo siguiente:
- Credenciales para el equipo de revisión, si se requiere iniciar sesión. Proporciona una cuenta exclusiva para pruebas, la URL de inicio de sesión, los detalles del espacio de trabajo o del tenant y las instrucciones de inicio de sesión. Usa datos de ejemplo y evita usar la cuenta de un usuario real. La cuenta debe tener los permisos y los datos que requieran tus casos de prueba y permitir el acceso inmediato sin aprobación de MFA, códigos por correo electrónico o SMS, enlaces mágicos ni acceso a una red privada.
- Cinco casos de prueba positivos. Incluye el escenario, el prompt del usuario, las herramientas que se espera que se usen y el resultado esperado. Ejecuta cada caso con la cuenta de prueba antes del envío.
- Tres casos de prueba negativos. Incluye un prompt o escenario en el que el complemento no deba actuar, explica por qué no debe completar la solicitud e indica qué respuesta se espera: un rechazo, una solicitud de aclaración o una alternativa segura.
- Un video de demostración. Muestra los casos de prueba y cómo funciona el complemento. Proporciona una URL accesible de la grabación.
- Notas de la versión. Resume la versión del paquete que envías y los cambios que incluye.
En Metadatos y habilidades, abre Información para la revisión → Detalles de la revisión para comprobar los materiales importados e ingresar las credenciales del equipo de revisión. Completa los campos editables y selecciona Guardar detalles. Si un campo indica que se administra mediante el ZIP del complemento, agrega o cambia la información en el paquete y vuelve a subirlo. También puedes incluir la disponibilidad por país y las traducciones en los metadatos del paquete. Revisa los ajustes importados cuando corresponda. Consulta Proporciona automáticamente la información de envío y revisión para conocer los campos admitidos y cómo se importan.

Detalles de la revisión. Comprueba los casos de prueba y los materiales de apoyo importados del ZIP e ingresa por separado las credenciales privadas del equipo de revisión.
Las credenciales se mantienen fuera del paquete público. Conserva la cuenta de prueba y los datos de ejemplo para revisiones posteriores. Si cambian las credenciales o los pasos para iniciar sesión, envía un borrador actualizado con los nuevos detalles.
Envía el borrador
Selecciona el borrador, elige Enviar a revisión y completa las declaraciones obligatorias de cumplimiento de políticas. Después del envío, consulta el avance en Estado de la revisión en la página Complementos. Recibirás los comentarios del equipo de revisión por correo electrónico.

Envío a revisión. Confirma las declaraciones obligatorias y envía el borrador seleccionado a revisión.
Solo puede haber una revisión en curso por complemento. Para reemplazar un paquete en revisión, espera la decisión o cancela la revisión antes de subir otro paquete. Si se rechaza el paquete, atiende los comentarios y envía un ZIP corregido.
Si el equipo de revisión rechaza tu envío, consulta el motivo en el correo de rechazo. Para apelar, responde a ese correo y explica por qué el equipo debería reconsiderar la decisión.
4. Publica tu complemento aprobado
Una vez que se apruebe tu complemento, tú decides cuándo ponerlo a disposición de los usuarios. Abre la versión aprobada del paquete y selecciona Publicar complemento. Al publicar una actualización, esta reemplaza la versión anterior del paquete.
Actualiza tu complemento publicado
Para actualizar los metadatos, los recursos o las habilidades incluidas, sube un nuevo ZIP al complemento existente. Esto crea una versión del paquete con sus propias comprobaciones y su propio resultado de revisión. Los cambios en las herramientas alojadas se procesan por separado mediante análisis del servidor MCP, así que no necesitas subir el paquete para aplicarlos.
Si enviaste tu complemento con el formulario anterior, descarga el complemento existente como ZIP para empezar. Abre el complemento, selecciona la versión publicada del paquete y elige Descargar ZIP de la versión en el menú …. Si ya mantienes el paquete en tu computadora, puedes usar esa copia como origen.
- Actualiza el contenido y el número de versión del paquete. Luego crea un ZIP completo con todos los componentes que quieras conservar.
- Abre el complemento existente y selecciona Subir complemento para hacer cambios.
- Confirma la versión seleccionada del paquete en Metadatos y habilidades. Revisa los nuevos resultados de las comprobaciones automáticas y resuelve los problemas de corrección obligatoria.
- Completa los pasos de revisión que correspondan y publica la versión aprobada del paquete.
Usa el mismo complemento para agregar o quitar habilidades. Si necesitas cambiar la URL de un servidor MCP existente, ponte en contacto con soporte. El proceso de actualización actual no admite cambios de URL.
Actualiza tu servidor MCP
Después de la primera publicación, OpenAI analiza tu servidor MCP alojado todos los días. Las actualizaciones que cumplen los requisitos quedan disponibles una vez que pasan las comprobaciones automáticas, sin necesidad de crear una versión del paquete ni de publicarlas por separado. También puedes solicitar un análisis en cuanto implementes los cambios en el servidor.
Analiza los cambios más recientes
- Implementa los cambios en tu servidor MCP.
- Abre el complemento existente, selecciona Servidores MCP y elige el servidor conectado.
- En Problemas, selecciona Volver a analizar.
- Espera a que termine el análisis y revisa los resultados y la disponibilidad de las herramientas.

Vista general del análisis de MCP. Vuelve a analizar el servidor después de hacer cambios y revisa los resultados y la disponibilidad de cada herramienta.
Es posible que la opción de volver a analizar no esté disponible si hay otro análisis o una apelación en curso, o si el complemento no cumple los requisitos para el análisis.
Encuentra y resuelve problemas de las herramientas
- Abre Problemas y selecciona una herramienta afectada.
- Lee Problemas detectados y revisa Actualización retenida para ver los metadatos que se evaluaron. Definición vigente muestra los metadatos que se usan actualmente.
- Selecciona Copiar problemas para incorporar los resultados a tu flujo de desarrollo.
- Corrige los metadatos o la implementación de la herramienta en tu servidor y despliega los cambios.
- Vuelve a Problemas, selecciona Volver a analizar y revisa los resultados actualizados.
Consejo: pídele a Codex o a ChatGPT que examine tu servidor MCP y el error que copiaste. Pídele que explique el problema y sugiera una solución.
Los cambios de las herramientas se evalúan de forma independiente. Si se detecta un problema en un cambio, eso no necesariamente bloquea otras actualizaciones de herramientas que cumplan los requisitos. Las herramientas nuevas quedan disponibles una vez aprobadas. Si se retiene una actualización, las herramientas existentes conservan los metadatos aprobados anteriormente. La eliminación de una herramienta se hace efectiva después de un análisis.
Mantén la compatibilidad de tu servidor MCP con los esquemas de herramientas aprobados actualmente hasta que entren en vigor los metadatos actualizados.
Apela el resultado de una comprobación automática
Si crees que se señaló un problema por error en una herramienta, selecciona Apelar y explica por qué el equipo de revisión debería reconsiderar los resultados. El equipo evalúa en conjunto los cambios de herramientas que se retuvieron en ese análisis. Si el problema es real, suele ser más rápido corregirlo en el servidor y volver a ejecutar el análisis.

Apelación de MCP. Explica por qué el equipo de revisión debería reconsiderar el resultado de la comprobación automática.
Las actualizaciones automáticas de MCP se pausan durante una apelación. Para hacer cambios, selecciona Retirar apelación, actualiza el servidor y vuelve a analizarlo. Las apelaciones solo abarcan los cambios de herramientas retenidos. Quedan fuera de su alcance los cambios del paquete, la autenticación y las instrucciones compartidas del servidor.
Para resolver problemas, consulta los errores de envío. Incluye el ID de tu complemento cuando te pongas en contacto con soporte.
Proporciona automáticamente la información de envío y revisión
Puedes incluir los detalles de la ficha del directorio, la revisión y la publicación en el archivo de manifiesto del complemento para que se completen al subir el ZIP. La siguiente referencia describe los campos admitidos y cómo se aplican al subir el paquete, e incluye ejemplos para cada formato.
Por ahora, no se pueden enviar paquetes ZIP de complementos que contengan referencias a apps (apps / .app.json) o hooks del ciclo de vida. Declara las URL de los servidores MCP en tu configuración de MCP y completa la configuración en el panel.
Quita los hooks del ciclo de vida antes de enviar el complemento al directorio público. Si tu complemento depende de ellos, distribúyelo de modo que los usuarios puedan instalarlo manualmente en la versión de escritorio de Codex.
Ejemplos completos de metadatos
Estos ejemplos describen el mismo complemento de notas en cada formato. Copia el archivo de manifiesto de tu formato y reemplaza la información del responsable de la publicación, las URL, los nombres de las herramientas, los casos de prueba para la revisión, las traducciones y la disponibilidad por país con tus valores reales. Los casos de ejemplo no se han ejecutado con un servicio real.
Incluye los archivos a los que hace referencia el archivo de manifiesto:
skills/get-started/SKILL.md, con valores válidos en los campos name y description del encabezado YAML.- Los cuatro archivos de íconos en
assets/. - Exactamente un servidor MCP remoto llamado notes, configurado en
mcp.jsonpara Agent Plugins o en.mcp.jsonpara Codex. Usa la configuración correspondiente que se muestra a continuación.
Usa tus propias URL accesibles para la demostración y los archivos adjuntos de la revisión. Los enlaces de example.com ilustran el formato esperado y no sirven como materiales para el envío. Si tu complemento solo contiene habilidades, omite review y la configuración de MCP. En el archivo de manifiesto de Codex, omite también mcpServers.
Usa este archivo mcp.json con el ejemplo de Agent Plugins:
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
"mcpServers": {
"notes": {
"type": "streamable-http",
"url": "https://example.com/mcp"
}
}
}
Para el ejemplo de Codex, guarda lo siguiente como .mcp.json en la raíz del complemento. Este formato omite el esquema de Agent Plugins:
{
"mcpServers": {
"notes": {
"url": "https://example.com/mcp"
}
}
}
Formato de Agent Plugins
Guarda este archivo de manifiesto completo como plugin.json en la raíz del complemento:
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "acme-notes",
"version": "1.0.0",
"description": "Search and summarize notes from your Acme workspace.",
"author": {
"name": "Acme",
"email": "support@example.com",
"url": "https://example.com"
},
"homepage": "https://example.com/notes",
"repository": "https://github.com/example/acme-notes",
"license": "MIT",
"keywords": ["notes", "search", "productivity"],
"extensions": {
"com.openai": {
"interface": {
"displayName": "Acme Notes",
"shortDescription": "Find and summarize your notes",
"longDescription": "Search notes in your Acme workspace, open matching notes, and summarize decisions with links to the source. Acme Notes only accesses notes available to your connected account.",
"developerName": "Acme",
"category": "Productivity",
"capabilities": ["Search notes", "Read notes"],
"websiteURL": "https://example.com/notes",
"supportURL": "https://example.com/support",
"privacyPolicyURL": "https://example.com/privacy",
"termsOfServiceURL": "https://example.com/terms",
"defaultPrompt": [
"Find my notes about the launch.",
"Summarize the decisions in my launch notes.",
"Open the project kickoff notes."
],
"brandColor": "#2357C6",
"brandColorDark": "#8CB4FF",
"composerIcon": "./assets/icon.png",
"composerIconDark": "./assets/icon-dark.png",
"logo": "./assets/logo.png",
"logoDark": "./assets/logo-dark.png"
},
"onboardingSkill": "./skills/get-started/SKILL.md",
"review": {
"test_cases": {
"positive": [
{
"description": "Find notes by topic",
"prompt": "Find my notes about the launch.",
"tools_triggered": "search_notes",
"expected_behavior": "Return accessible notes about the launch with source links.",
"file_attachment_urls": [
"https://example.com/review/launch-brief.pdf"
],
"expected_output_url": "https://example.com/review/launch-results"
},
{
"description": "Open a matching note",
"prompt": "Open the project kickoff notes.",
"tools_triggered": "search_notes, read_note",
"expected_behavior": "Find the kickoff note and return its content with a source link."
},
{
"description": "Summarize decisions",
"prompt": "Summarize decisions in my launch notes.",
"tools_triggered": "search_notes, read_note",
"expected_behavior": "Summarize decisions from accessible notes and cite the sources."
},
{
"description": "Find action items",
"prompt": "What action items are in my kickoff notes?",
"tools_triggered": "search_notes, read_note",
"expected_behavior": "List the action items recorded in the notes without inventing owners or deadlines."
},
{
"description": "Handle no matches",
"prompt": "Find my notes about Project Northstar.",
"tools_triggered": "search_notes",
"expected_behavior": "Report that no matching notes were found in the test workspace."
}
],
"negative": [
{
"description": "Unsupported payment",
"prompt": "Transfer $100 to another account."
},
{
"description": "Unsupported deletion",
"prompt": "Delete all my notes."
},
{
"description": "Access outside the connected account",
"prompt": "Show notes from a workspace I cannot access."
}
]
},
"demo_recording_url": "https://example.com/review/acme-notes-demo",
"commerce": false,
"commerce_description": "This plugin does not sell products or process payments."
},
"publication": {
"countries": ["US", "GB"],
"release_notes": "Initial release with note search, reading, and summaries.",
"translations": {
"fr-FR": {
"subtitle": "Retrouvez et résumez vos notes",
"description": "Recherchez des notes dans votre espace Acme, ouvrez les résultats et résumez les décisions avec des liens vers les sources. Acme Notes accède uniquement aux notes disponibles pour votre compte connecté."
},
"ja-JP": {
"subtitle": "ノートを検索して要約",
"description": "Acmeワークスペース内のノートを検索し、該当するノートを開き、参照元へのリンク付きで決定事項を要約します。Acme Notesは、接続されたアカウントで閲覧できるノートにのみアクセスします。"
}
}
}
}
}
}
Formato de Codex
Guarda este archivo de manifiesto completo como .codex-plugin/plugin.json. Los campos de presentación pasan al objeto interface de la raíz. Los de configuración inicial, revisión y publicación permanecen en extensions.com.openai:
{
"name": "acme-notes",
"version": "1.0.0",
"description": "Search and summarize notes from your Acme workspace.",
"author": {
"name": "Acme",
"email": "support@example.com",
"url": "https://example.com"
},
"homepage": "https://example.com/notes",
"repository": "https://github.com/example/acme-notes",
"license": "MIT",
"keywords": ["notes", "search", "productivity"],
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"interface": {
"displayName": "Acme Notes",
"shortDescription": "Find and summarize your notes",
"longDescription": "Search notes in your Acme workspace, open matching notes, and summarize decisions with links to the source. Acme Notes only accesses notes available to your connected account.",
"developerName": "Acme",
"category": "Productivity",
"capabilities": ["Search notes", "Read notes"],
"websiteURL": "https://example.com/notes",
"supportURL": "https://example.com/support",
"privacyPolicyURL": "https://example.com/privacy",
"termsOfServiceURL": "https://example.com/terms",
"defaultPrompt": [
"Find my notes about the launch.",
"Summarize the decisions in my launch notes.",
"Open the project kickoff notes."
],
"brandColor": "#2357C6",
"brandColorDark": "#8CB4FF",
"composerIcon": "./assets/icon.png",
"composerIconDark": "./assets/icon-dark.png",
"logo": "./assets/logo.png",
"logoDark": "./assets/logo-dark.png"
},
"extensions": {
"com.openai": {
"onboardingSkill": "./skills/get-started/SKILL.md",
"review": {
"test_cases": {
"positive": [
{
"description": "Find notes by topic",
"prompt": "Find my notes about the launch.",
"tools_triggered": "search_notes",
"expected_behavior": "Return accessible notes about the launch with source links.",
"file_attachment_urls": [
"https://example.com/review/launch-brief.pdf"
],
"expected_output_url": "https://example.com/review/launch-results"
},
{
"description": "Open a matching note",
"prompt": "Open the project kickoff notes.",
"tools_triggered": "search_notes, read_note",
"expected_behavior": "Find the kickoff note and return its content with a source link."
},
{
"description": "Summarize decisions",
"prompt": "Summarize decisions in my launch notes.",
"tools_triggered": "search_notes, read_note",
"expected_behavior": "Summarize decisions from accessible notes and cite the sources."
},
{
"description": "Find action items",
"prompt": "What action items are in my kickoff notes?",
"tools_triggered": "search_notes, read_note",
"expected_behavior": "List the action items recorded in the notes without inventing owners or deadlines."
},
{
"description": "Handle no matches",
"prompt": "Find my notes about Project Northstar.",
"tools_triggered": "search_notes",
"expected_behavior": "Report that no matching notes were found in the test workspace."
}
],
"negative": [
{
"description": "Unsupported payment",
"prompt": "Transfer $100 to another account."
},
{
"description": "Unsupported deletion",
"prompt": "Delete all my notes."
},
{
"description": "Access outside the connected account",
"prompt": "Show notes from a workspace I cannot access."
}
]
},
"demo_recording_url": "https://example.com/review/acme-notes-demo",
"commerce": false,
"commerce_description": "This plugin does not sell products or process payments."
},
"publication": {
"countries": ["US", "GB"],
"release_notes": "Initial release with note search, reading, and summaries.",
"translations": {
"fr-FR": {
"subtitle": "Retrouvez et résumez vos notes",
"description": "Recherchez des notes dans votre espace Acme, ouvrez les résultats et résumez les décisions avec des liens vers les sources. Acme Notes accède uniquement aux notes disponibles pour votre compte connecté."
},
"ja-JP": {
"subtitle": "ノートを検索して要約",
"description": "Acmeワークスペース内のノートを検索し、該当するノートを開き、参照元へのリンク付きで決定事項を要約します。Acme Notesは、接続されたアカウントで閲覧できるノートにのみアクセスします。"
}
}
}
}
}
}
Elige la estructura que corresponda a tu paquete:
| Metadatos | Agent Plugins: plugin.json en la raíz | Codex: .codex-plugin/plugin.json |
|---|---|---|
| Identidad del paquete y responsable de la publicación | Campos de la raíz | Campos de la raíz |
| Texto de la ficha, enlaces, prompts e imágenes | extensions.com.openai.interface |
interface |
| Habilidad de configuración inicial | extensions.com.openai.onboardingSkill | extensions.com.openai.onboardingSkill |
| Detalles de revisión y publicación | extensions.com.openai.review y extensions.com.openai.publication | extensions.com.openai.review y extensions.com.openai.publication |
Para los paquetes de Agent Plugins, coloca los ajustes específicos de OpenAI en plugin.json, dentro de extensions.com.openai. Si ese objeto está presente, OpenAI ignora los ajustes de .codex-plugin/plugin.json. Los dos archivos no se combinan. Si el objeto está ausente, OpenAI lee esos ajustes de .codex-plugin/plugin.json. La identidad del paquete sigue proviniendo del archivo plugin.json de la raíz, las habilidades de skills/ y los servidores MCP de mcp.json.
Usa los ejemplos completos de metadatos como punto de partida. Si el panel de desarrolladores indica que falta la URL de la Política de privacidad, la URL de soporte o el ícono de la app, consulta la referencia de campos para encontrar el campo correspondiente en el archivo de manifiesto.
Campos del archivo de manifiesto
La columna de requisitos distingue los requisitos del formato del paquete de los requisitos de envío. Los detalles de la revisión son opcionales en el ZIP, pero los materiales obligatorios deben estar disponibles antes del envío.
Identidad y componentes del paquete
Estos campos describen el paquete. Colócalos en la raíz del archivo de manifiesto de cualquiera de los dos formatos, salvo cuando la tabla indique que un campo pertenece a la extensión de OpenAI.
| Campo | Requisito | Valor y uso |
|---|---|---|
$schema |
Obligatorio para Agent Plugins. Omítelo para Codex. | El formato portátil requiere https://agent-plugins.org/schemas/1.0.0/plugin.schema.json. Omítelo en un archivo de manifiesto independiente de compatibilidad con Codex. |
name |
Obligatorio | Identificador estable obligatorio de hasta 64 caracteres. Para los paquetes que planeas enviar, usa letras minúsculas, números y guiones simples. Mantenlo separado del nombre que se muestra a los usuarios. |
version |
Obligatorio para Codex y opcional en el esquema portátil | Número de versión, por ejemplo, 1.0.0. Es opcional en el esquema portátil. Usa una versión semántica explícita para el envío y las actualizaciones. Es obligatorio en el formato de Codex. |
description |
Obligatorio para Codex y opcional para Agent Plugins | Resumen del paquete de hasta 4000 caracteres. Es opcional en el esquema portátil y obligatorio en el formato de Codex. |
author |
Obligatorio para Codex y opcional para Agent Plugins | Objeto que identifica al responsable de la publicación mediante su nombre y, opcionalmente, su correo electrónico y una url HTTPS. El esquema portátil permite omitir este objeto. El formato de Codex requiere author.name. Usa un máximo de 120 caracteres para el nombre, 320 para el correo electrónico y 2048 para la URL. |
homepage |
Opcional | URL HTTPS opcional de la página principal del proyecto, de hasta 2048 caracteres. Configura por separado el campo interface.websiteURL de la ficha. |
repository |
Opcional | URL opcional del repositorio de código fuente. |
license |
Opcional | Identificador opcional de licencia, como MIT. |
keywords |
Opcional | Arreglo opcional de términos para encontrar el complemento. |
extensions |
Opcional | Ajustes agrupados por espacio de nombres. Coloca los ajustes específicos de OpenAI en com.openai. |
skills |
Para paquetes de Codex con habilidades | Solo para Codex: ruta relativa a un directorio que contiene habilidades o arreglo de rutas a esos directorios, como "./skills/". Los paquetes portátiles detectan skills/ automáticamente. |
mcpServers |
Para paquetes de Codex con servidores MCP | Solo para Codex: usa "./.mcp.json" para la configuración de los servidores MCP incluida en el paquete. Los paquetes portátiles detectan automáticamente el archivo mcp.json de la raíz. |
Coloca estos ajustes adicionales dentro de extensions.com.openai en los paquetes portátiles o en la raíz de un archivo de manifiesto de compatibilidad con Codex:
| Campo | Requisito | Valor y uso |
|---|---|---|
interface |
Obligatorio para Codex y opcional para Agent Plugins | Objeto de presentación descrito en Metadatos de la ficha. El formato de Codex requiere este objeto. Los paquetes portátiles pueden obtener el texto básico a partir de los metadatos de la raíz. |
id |
Opcional | Identidad opcional que usan los catálogos administrados de complementos. Conserva el valor si ya se asignó uno. Al subir un ZIP, se usa la identidad del complemento que figura en el panel. |
Los paquetes portátiles siempre detectan las habilidades en skills/ y los servidores MCP en mcp.json. Las declaraciones de skills o mcpServers en la extensión integrada o en la capa de compatibilidad no permiten reemplazar ni desactivar los componentes detectados, ni agregar otros. Esas declaraciones solo se aplican a paquetes que no tienen un archivo de manifiesto portátil reconocido en la raíz.
Metadatos de la ficha
Coloca los siguientes campos en extensions.com.openai.interface para Agent Plugins o en interface para el formato de Codex. Estos límites se aplican al envío para publicación. Al subir un paquete, se pueden aceptar textos más largos en el borrador. Que el paquete se suba correctamente no significa que la ficha esté lista para enviarse.
| Campo | Requisito | Tipo | Valor y límite para el envío |
|---|---|---|---|
displayName |
Obligatorio | Cadena | Nombre que ven los usuarios. Es obligatorio y admite hasta 30 caracteres. |
shortDescription |
Obligatorio | Cadena | Subtítulo que aparece junto al nombre. Es obligatorio y admite hasta 30 caracteres. |
longDescription |
Obligatorio | Cadena | Descripción de las tareas, los usuarios a quienes se dirige y las limitaciones. Es obligatoria y admite hasta 4000 caracteres. |
developerName |
Obligatorio | Cadena | Nombre del responsable de la publicación. Es obligatorio y admite hasta 80 caracteres. El nombre que aparece en el directorio se establece automáticamente a partir de la identidad de desarrollador verificada que seleccionaste. |
category |
Obligatorio | Cadena | Nombre obligatorio de una categoría del panel, como Productivity o Developer Tools. |
capabilities |
Obligatorio para Codex y opcional para Agent Plugins | Arreglo de cadenas | Hasta 20 etiquetas de capacidades, con un máximo de 120 caracteres cada una. El campo es obligatorio en el formato de Codex. Usa [] si no hay ninguna. |
websiteURL |
Obligatorio para la revisión de MCP | Cadena | URL HTTPS del sitio web del producto, de hasta 1024 caracteres. |
supportURL |
Obligatorio para la revisión de MCP | Cadena | URL HTTPS de la página de soporte al cliente, de hasta 1024 caracteres. |
privacyPolicyURL |
Obligatorio para la revisión de MCP | Cadena | URL HTTPS de la Política de privacidad, de hasta 1024 caracteres. |
termsOfServiceURL |
Obligatorio para la revisión de MCP | Cadena | URL HTTPS de los términos del servicio, de hasta 1024 caracteres. |
defaultPrompt |
Opcional | Cadena o arreglo de cadenas | Hasta tres prompts iniciales de un máximo de 128 caracteres cada uno. Usa prompts distintos y omite las @menciones de apps. Si incluyes varios prompts, usa un arreglo. |
brandColor |
Opcional | Cadena | Color para el tema claro en formato #RRGGBB, con una relación de contraste de al menos 2:1 respecto del blanco. |
brandColorDark |
Opcional | Cadena | Color para el tema oscuro en formato #RRGGBB, con una relación de contraste de al menos 2:1 respecto de #212121. Si solo proporcionas brandColor, se calcula un color para el tema oscuro. |
composerIcon |
Obligatorio para Codex | Cadena | Ruta relativa al ícono que se usa en el editor. |
composerIconDark |
Opcional | Cadena | Ruta relativa opcional a la variante del ícono para el tema oscuro. |
logo |
Obligatorio para Codex. El ícono principal es obligatorio para el envío. | Cadena | Ruta relativa al ícono principal de la ficha. |
logoDark |
Opcional | Cadena | Ruta relativa opcional a la variante del logotipo para el tema oscuro. |
Si una app MCP vinculada requiere revisión para su publicación, son obligatorias las cuatro URL de la ficha: websiteURL, supportURL, privacyPolicyURL y termsOfServiceURL. Usa URL HTTPS sin credenciales incorporadas. La validación de metadatos de complementos que solo contienen habilidades no exige las cuatro URL. Los valores de homepage y author.url del paquete no completan automáticamente estos campos de la ficha.
Íconos
Incluye logo y composerIcon en los paquetes que prepares para su distribución. La validación de paquetes de Codex exige ambos. Puedes subir un paquete portátil sin ellos, pero el panel requiere un ícono principal de la app antes del envío. Las variantes para el tema oscuro son opcionales. Para resolver la advertencia “Se requiere un ícono de la app”, agrega logo y el archivo de imagen correspondiente o proporciona el ícono en el panel.
Usa rutas relativas a la raíz del complemento que empiecen con ./ e incluye todos los archivos a los que hagas referencia. Los formatos de imagen admitidos son PNG, JPEG, WebP y SVG, con un máximo de 5 MiB por archivo. Los íconos y logotipos deben ser cuadrados y medir al menos 48 por 48 píxeles. En las imágenes rasterizadas, ni el ancho ni el alto pueden superar los 4096 píxeles. Para los íconos SVG, especifica valores numéricos iguales para el ancho y el alto o un viewBox cuadrado de al menos 48 por 48.
Configura la experiencia inicial, la revisión y la publicación
En ambos formatos, coloca estos objetos directamente dentro de extensions.com.openai, al mismo nivel que el objeto interface del formato portátil. No los anides dentro de interface.
El campo opcional onboardingSkill ofrece a los usuarios un flujo de configuración que pueden ejecutar después de la instalación. Consulta Agrega una habilidad de configuración inicial para ver un ejemplo de archivo de manifiesto, las reglas para las rutas y cómo se usa una conversación nueva o existente durante la configuración.
| Campo | Requisito | Tipo | Valor y uso |
|---|---|---|---|
onboardingSkill |
Opcional | Cadena | Ruta relativa al archivo SKILL.md de una habilidad incluida en el paquete, como ./skills/get-started/SKILL.md. Debe hacer referencia a una habilidad incluida. |
review.test_cases.positive |
Opcional en el ZIP. La revisión inicial de MCP requiere cinco casos. | Arreglo de objetos | Casos de prueba positivos para la revisión de un complemento que tenga exactamente un servidor MCP. Usa los campos de casos de prueba que se indican más adelante. |
review.test_cases.negative |
Opcional en el ZIP. La revisión inicial de MCP requiere tres casos. | Arreglo de objetos | Casos de prueba negativos para la revisión de ese servidor. |
review.demo_recording_url |
Opcional en el ZIP y obligatorio para la revisión de MCP | Cadena | URL de un video de demostración al que pueda acceder el equipo de revisión. |
review.commerce |
Opcional | Booleano | Indica si la app admite operaciones comerciales. Esta declaración no constituye una aceptación de términos legales. |
review.commerce_description |
Opcional | Cadena | Explicación de cómo gestiona la app las operaciones comerciales. |
publication.countries |
Opcional | Arreglo de cadenas | Lista de países donde estará disponible el complemento, con códigos reconocidos en mayúsculas, como US y GB. Omite el campo para conservar la selección actual. Usa [] para quitar las restricciones por país. Se aplica al publicar el complemento, incluso si solo contiene habilidades. |
publication.release_notes |
Opcional | Cadena | Notas que describen los cambios de esta versión. |
publication.translations |
Opcional | Objeto o null | Mapa opcional que asocia claves de configuración regional con el texto traducido de la ficha. Consulta Traduce el texto de la ficha. |
publication.translations.<locale>.subtitle |
Opcional | Cadena o null | Subtítulo traducido opcional de hasta 30 caracteres. |
publication.translations.<locale>.description |
Opcional | Cadena o null | Descripción traducida opcional de hasta 4000 caracteres. |
Cada objeto de review.test_cases.positive o review.test_cases.negative describe un caso de prueba:
| Campo | Requisito | Tipo | Valor y uso |
|---|---|---|---|
description |
Obligatorio | Cadena | Descripción obligatoria del comportamiento que se comprueba. Limita las descripciones de los casos positivos a 4000 caracteres. |
prompt |
Obligatorio | Cadena | Prompt de usuario obligatorio que el equipo de revisión puede probar. |
tools_triggered |
Obligatorio para los casos positivos | Cadena | Nombres de las herramientas que se espera que se usen. Son obligatorios al enviar casos positivos. |
expected_behavior |
Obligatorio para los casos positivos | Cadena | Resultado observable que se espera obtener. Es obligatorio al enviar casos positivos. |
file_attachment_urls |
Opcional | Arreglo de cadenas | Enlaces opcionales a los archivos que se usan en el caso de prueba. |
expected_output_url |
Opcional | Cadena | Enlace opcional a un ejemplo del resultado esperado, como un documento de referencia que el equipo de revisión pueda comparar con el resultado obtenido. |
La revisión inicial de una app MCP requiere exactamente cinco casos positivos y tres negativos. Se aceptan listas parciales al subir el paquete, así que complétalas antes de enviarlo a revisión. Si hay varios servidores MCP, declara los casos de cada servidor por separado en la configuración de MCP. El campo review.test_cases del complemento requiere exactamente un servidor y no se puede combinar con declaraciones de casos por servidor. Los complementos que solo contienen habilidades no necesitan casos de prueba para la revisión de apps MCP ni una grabación de demostración.
Los casos de prueba importados son de solo lectura en el panel. Para cambiarlos, edita el paquete y vuelve a subirlo. Si omites test_cases o le asignas el valor null, se conservan los casos existentes. Si usas test_cases: {}, se vacían ambas listas. Omitir los casos en una carga posterior no vuelve a habilitar su edición en el panel.
Para los campos escalares de revisión y release_notes, omitir el campo o asignarle null conserva el valor guardado. Una cadena vacía borra el texto. Los valores explícitos del paquete se vuelven a aplicar al enviarlo a revisión. Si quieres usar un valor que editaste en el panel, elimina del paquete la declaración de ese campo escalar. Los campos de revisión compartidos se aplican a los borradores de apps MCP del propio complemento. En un complemento que solo incluye habilidades, las notas de la versión permanecen en el paquete y no generan una revisión de la app.
Coloca commerce y commerce_description en review, fuera de publication. No incluyas credenciales ni instrucciones para el equipo de revisión en el paquete. Los metadatos del ZIP rechazan test_credentials y reviewer_instructions. Ingresa los datos de acceso del equipo de revisión en el formulario seguro del panel.
Traduce el texto de la ficha
En ambos formatos, agrega un objeto translations dentro de extensions.com.openai.publication para proporcionar subtítulos y descripciones traducidos. Usa claves de configuración regional que no estén vacías, como fr-FR o ja-JP. El objeto de cada configuración regional puede contener subtitle, description o ambos campos. Puedes omitir cualquiera de ellos o asignarle null. También puedes omitir translations o asignarle null.
Conserva el texto en inglés en los campos base de la ficha. No se requiere una traducción para en-US y el importador no la genera.
Los subtítulos traducidos deben ocupar una sola línea de hasta 30 caracteres. Las descripciones traducidas pueden incluir saltos de línea \n y tener hasta 4000 caracteres. El texto debe contener al menos un carácter que no sea un espacio en blanco y usar caracteres de texto admitidos. Se rechazan las tabulaciones y otros caracteres de control no admitidos. Los límites se aplican al texto exacto, incluidos los espacios iniciales y finales.
Las traducciones se validan durante la importación y se conservan en el paquete que subiste, incluso después de editar los metadatos. Por ahora, importarlas no cambia el texto que aparece en el directorio de complementos ni en las respuestas de la API de fichas.