# Errores de subida del MCP de PlayDrop y cómo recuperarte

La forma de los errores de las herramientas MCP de PlayDrop, cuándo reintentar con el mismo requestId y la solución de cada código de error habitual.

Source: https://www.playdrop.ai/es/create/learn/errors

Cada error de una herramienta MCP de PlayDrop conserva su código `error` estable y los detalles que tenga, como `path`, `field`, `name` o `expected`, y añade:

- `message`: qué ha fallado, en palabras sencillas.
- `retryable`: `true` solo cuando la misma llamada exacta puede funcionar más adelante.
- `nextAction`: la corrección concreta.
- `docsUrl` y `documentationTopic`: la guía que hay que leer, también disponible con `get_documentation`.

## Reintenta o corrige

- **Errores reintentables** (fallos temporales, límites de frecuencia, una finalización interrumpida): repite la misma llamada exacta con el mismo `requestId` tras una breve espera. No crees otra versión.
- **Respuesta perdida:** no puedes saber si ha funcionado, así que reintenta con el mismo contenido y el mismo `requestId`. PlayDrop devuelve el resultado original en lugar de publicar dos veces.
- **Entrada rechazada:** corrige primero el campo o el archivo indicado. El contenido modificado necesita un nuevo `requestId`; reintentar con la misma entrada vuelve a fallar.
- **Resultados parciales de un paquete:** los elementos completados siguen publicados. Una solicitud corregida debe contener solo el trabajo pendiente.
- **`send_feedback`** no tiene clave de reintento. Tras un fallo ambiguo, no lo reenvíes automáticamente: puede que el primer mensaje haya llegado.

## Errores habituales

| Código | Qué hacer |
|---|---|
| `advanced_upload_required` | El juego usa el SDK, un servidor, archivos separados o campos exclusivos de los paquetes. Conserva esas funciones y sube un [paquete](https://www.playdrop.ai/es/create/learn/packaging) con un nuevo `requestId`. |
| `invalid_html_file` | El HTML está vacío o pesa más de 10 MiB. Usa un paquete para los juegos más grandes. |
| `visibility_required` | Una app del paquete no tiene visibilidad. Indica `visibility` en la solicitud o en la app: `public`, `unlisted` o `private`. |
| `invalid_visibility` | Usa `public`, `unlisted` o `private`. |
| `visibility_conflict` | La solicitud y una entrada de app piden visibilidades distintas. Indica solo una, para que el público nunca cambie sin avisar. |
| `expected_current_version_required` | Añade el nombre de cada app a `expectedCurrentVersion`: `null` para un juego nuevo y, si no, la versión actual de `list_games`. |
| `current_version_changed` | Alguien ha publicado una versión más reciente. Llama a `list_games`, confirma el destino con tu usuario y sube con la versión actual y un nuevo `requestId`. |
| `game_exists_use_id`, `game_not_found` | Llama a `list_games`, usa el `gameId` o el nombre correctos y conserva el nombre existente del juego. |
| `request_id_content_conflict` | Este `requestId` ya pertenece a otro contenido. Usa un ID nuevo o vuelve a enviar el contenido original sin cambios. |
| `catalogue_file_missing_or_invalid` | Un archivo no se ha subido o sus bytes no coinciden. Vuelve a llamar a `prepare_catalogue_upload` con la misma entrada y el mismo `requestId`, haz PUT de los archivos que faltan y vuelve a completar la subida. |
| `catalogue_files_unclaimed` | Algunos archivos no los usa ninguna entrada del catálogo. Haz referencia a ellos, da a los archivos de la ficha `role: "LISTING"` y `app`, o elimínalos. |
| `entry_point_missing` | `apps[].file` indica un archivo que no se ha subido. Sin `file`, la entrada es `<name>.html` por defecto. |
| `archive_catalogue_required` | Pon catalogue.json en la raíz del ZIP, no dentro de una carpeta. |
| `archive_too_large` | Más de 20 MiB comprimido: descomprímelo y sube la carpeta con archivos firmados, que admite hasta 50 MiB por archivo. Más de 200 MiB descomprimido: el propio juego es demasiado grande para una versión; comprime o elimina recursos. |
| `procedural_module_validation_unavailable` | Los modelos 3D procedurales ejecutables o de formato personalizado no se pueden subir mediante MCP. Hornéalos o haz referencia a un recurso publicado. |
| `upload_expired`, `upload_cancelled` | Vuelve a preparar la subida con un nuevo `requestId` y complétala en menos de 30 minutos. |
| `invalid_token`, `insufficient_scope` | Vuelve a conectar la cuenta de PlayDrop en tu app de IA y permite la publicación. |

Los errores de campos del catálogo, como una etiqueta, una declaración de mandos o un modo de juego no válidos, remiten a la [referencia de catalogue.json](https://www.playdrop.ai/es/create/learn/catalogue-json).

## Conexión y archivos adjuntos

- **Conexión caducada:** una conexión activa se renueva sola mientras se usa. Una conexión sin usar durante 30 días, o una que caducó antes de esta regla, hay que volver a conectarla.
- **Archivo adjunto rechazado:** PlayDrop solo descarga archivos del propio servicio de adjuntos del host. Es una restricción del alojamiento de archivos, no de país. Pasa el adjunto resuelto por el host o sube los archivos con URL firmadas. Nunca te inventes un `download_url` ni un `file_id`.

## Informa de un problema

Si un error parece incorrecto o la siguiente acción no funciona, llama una vez a `send_feedback` con el nombre de la herramienta, el código de error, lo que enviaste (sin tokens ni URL firmadas) y lo que esperabas.

## Guías relacionadas

- [Publicar desde tu app de IA](https://www.playdrop.ai/es/create/learn/mcp-publishing): Cómo publican los agentes de IA en PlayDrop mediante MCP: vía simple y paquete, pruebas privadas, publish_game_version, actualizaciones, límites y errores.
- [Empaquetado y .play](https://www.playdrop.ai/es/create/learn/packaging): Organiza una carpeta, ZIP o .play compilado con catalogue.json en la raíz, declara medios de la ficha y servidores, y súbelo con prepare_catalogue_upload.
- [Solución de problemas](https://www.playdrop.ai/es/create/learn/troubleshooting): Revisa tareas bloqueadas, correcciones, recompensas o ganancias ausentes, límites de Créditos y errores de importación web.
