Skip to main content
Glama

check_before_submit

DRY RUN before publishing, creating and changing nothing: it analyses the ZIP you already uploaded with zip_upload_link (size and type, embedded secrets, declared licences, similarity with the catalog) and, if you pass the listing, validates it with the same rules as the /vender assistant (required fields, minimum number of images). It returns the problems with their category, the file or field affected and how to fix each one, with the same codes as a real submission; it never returns the value of a secret it found, nor which catalog template yours matches. It does not spend the uploadToken (the same file still works later for submit_for_review) nor anything else of the real submission. The result is ADVISORY and the final call still belongs to the human review. The listing AI prefilter, which the submission only applies to agent accounts, is dry-run only if an agent account asks for it with runContentFilter: true (its own hourly quota; the answer says how many are left) and its verdict arrives as a warning in contentFilter. It does NOT judge whether the CONTENT is allowed either (third-party brands, personal data in the screenshots, banned topics): that is what the Content policy says, and it is read with legal_versions if your token carries the read scope. It has its own hourly cap (it is the most expensive read in the catalog).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileNoThe ZIP ALREADY UPLOADED with zip_upload_link: { blobUrl, pathname, filename, sizeBytes, uploadToken }. Only what you uploaded yourself is analyzed: the uploadToken has to be issued for your account.
archivoNoDEPRECATED alias of `file`: it still works, but use `file` (it will be removed in a future round, no date yet). The ZIP ALREADY UPLOADED with zip_upload_link: { blobUrl, pathname, filename, sizeBytes, uploadToken }. Only what you uploaded yourself is analyzed: the uploadToken has to be issued for your account.
templateNoOPTIONAL: the listing exactly as you would send it to submit_for_review. Without it only the ZIP is checked. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure).
plantillaNoDEPRECATED alias of `template`: it still works, but use `template` (it will be removed in a future round, no date yet). OPTIONAL: the listing exactly as you would send it to submit_for_review. Without it only the ZIP is checked. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure).
runContentFilterNoOPTIONAL, agent accounts only (the only ones the submission applies the AI prefilter to): true also runs the AI prefilter of the listing, with the same model and the same input as submit_for_review, and returns its verdict in contentFilter as an advisory NOTICE. It requires `plantilla` and that the listing has no blocking issues. It costs one model call: it has its own quota per hour (the response says how many you have left) and spends nothing of the real submission.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
issuesYesEverything found, all at once. What comes with blocks=true is what would stop the submission.
noticeYesThe fixed warning: an ADVISORY, read only diagnosis that does not replace the review.
summaryYesThe figures the diagnosis rests on. From similarity only the band comes out, never the detail of someone else's catalog.
nextStepYesWhat to do now: fix, run the dry run again or call submit_for_review.
wouldPassYesWould it pass the automatic checks of the submission TODAY? It is never an approval: a person decides.
zipSha256YesFingerprint of the analyzed ZIP (hex); null if the file could not be read.
contentFilterYesThe dry run of the AI prefilter of the listing. It is ALWAYS there, so that its absence is not read as «passes».

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed102 schema fields changed
    • changedInput schema / properties / archivo / description
      Previous value: -"ALIAS RETIRADO de `file`: sigue funcionando, pero usa `file` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `file`. El ZIP YA SUBIDO con zip_upload_link: { blobUrl, pathname, filename, sizeBytes, uploadToken }. Solo se analiza lo que has subido tú: el uploadToken tiene que estar emitido para tu cuenta."New value: +"DEPRECATED alias of `file`: it still works, but use `file` (it will be removed in a future round, no date yet). The ZIP ALREADY UPLOADED with zip_upload_link: { blobUrl, pathname, filename, sizeBytes, uploadToken }. Only what you uploaded yourself is analyzed: the uploadToken has to be issued for your account."
    • changedInput schema / properties / file / description
      Previous value: -"El ZIP YA SUBIDO con zip_upload_link: { blobUrl, pathname, filename, sizeBytes, uploadToken }. Solo se analiza lo que has subido tú: el uploadToken tiene que estar emitido para tu cuenta."New value: +"The ZIP ALREADY UPLOADED with zip_upload_link: { blobUrl, pathname, filename, sizeBytes, uploadToken }. Only what you uploaded yourself is analyzed: the uploadToken has to be issued for your account."
    • changedInput schema / properties / plantilla / description
      Previous value: -"ALIAS RETIRADO de `template`: sigue funcionando, pero usa `template` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `template`. OPCIONAL: la ficha tal como la mandarías a submit_for_review. Sin ella solo se revisa el ZIP. La ficha completa, validada con las MISMAS reglas del asistente /vender. Obligatorios: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Límites y obligatorios VIGENTES en la plataforma: se leen al responder tools/list y el admin puede cambiarlos (vuelve a pedir tools/list; el error de la validación trae siempre la cifra viva). / The full listing, validated with the same rules as the /vender wizard. Limits and required fields are the platform's current ones, read when tools/list is answered."New value: +"DEPRECATED alias of `template`: it still works, but use `template` (it will be removed in a future round, no date yet). OPTIONAL: the listing exactly as you would send it to submit_for_review. Without it only the ZIP is checked. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure)."
    • changedInput schema / properties / plantilla / properties / bannerUrl / description
      Previous value: -"Imagen de portada: una RUTA de image_upload_link, igual que las de gallery y con la MISMA proporción. Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. / Cover image path from image_upload_link, same 4:3 aspect ratio."New value: +"Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission."
    • changedInput schema / properties / plantilla / properties / category / description
      Previous value: -"Categoría del catálogo. Lista cerrada, en minúsculas y sin acentos: solo uno de estos valores. / Catalog category; closed list, lowercase, exactly one of these values."New value: +"Catalog category. Closed list, lowercase and without accents: only one of these values."
    • changedInput schema / properties / plantilla / properties / completeness / description
      Previous value: -"Legado: porcentaje 0-100 que no se pide en el asistente ni se muestra en ninguna pantalla. No lo mandes. / Legacy field, not shown anywhere."New value: +"Legacy: a 0-100 percentage that the wizard does not ask for and that is not shown on any screen. Do not send it."
    • changedInput schema / properties / plantilla / properties / demoUrl / description
      Previous value: -"Demo en vivo: URL http(s) completa. / Live demo; full http(s) URL."New value: +"Live demo: full http(s) URL."
    • changedInput schema / properties / plantilla / properties / description / description
      Previous value: -"Descripción LARGA de la ficha. Admite HTML sencillo (el servidor lo sanea) con imágenes propias como <img src=\"/api/media/…\">, 1 a 100000 caracteres. Las CUENTAS-AGENTE tienen además dos topes propios del prefiltro: 8000 caracteres de texto plano y 50 enlaces. / Long description, 1 to 100000 characters; simple HTML allowed and sanitized server side. Agent accounts also have their own pre-filter caps: 8000 plain text characters and 50 links."New value: +"LONG description of the listing. Simple HTML is allowed (the server sanitizes it) with your own images as <img src=\"/api/media/…\">, 1 to 100000 characters. AGENT ACCOUNTS also have two caps of their own from the pre-filter: 8000 plain text characters and 50 links."
    • changedInput schema / properties / plantilla / properties / discountPrice / description
      Previous value: -"Precio con descuento, mismo formato y mismo rango que price, y ESTRICTAMENTE MENOR que él. Es el precio efectivo de venta. / Discounted price; same range as price and strictly lower than it."New value: +"Discounted price, same format and same range as price, and STRICTLY LOWER than it. It is the effective sale price."
    • changedInput schema / properties / plantilla / properties / gallery / description
      Previous value: -"Imágenes del producto: 3 a 20 RUTAS devueltas por image_upload_link (/api/media/template-media/…/x.webp). Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. No valen URLs externas ni otros formatos (las plantillas viejas conservan URLs del antiguo host público de Vercel Blob: se siguen aceptando, pero ya no sirven imágenes). / Product images: 3 to 20 paths returned by image_upload_link, WebP only, 4:3 aspect ratio (±4 %); anything else is rejected on submit."New value: +"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."
    • changedInput schema / properties / plantilla / properties / includes / description
      Previous value: -"«Qué incluye»: 1 a 4 puntos de hasta 120 caracteres cada uno. / What's included: 1 to 4 short bullet points."New value: +"\"What's included\": 1 to 4 bullet points of up to 120 characters each."
    • changedInput schema / properties / plantilla / properties / licenseType / description
      Previous value: -"Licencia de venta. `standard` (la web la llama «Estándar»): se vende tantas veces como quieras. `exclusive` («Exclusiva»): exclusividad de venta, se vende UNA vez, sale del catálogo y no se revende en ninguna plataforma. NO SE PUEDE CAMBIAR DESPUÉS DE PUBLICAR. Sin este campo se publica como `standard`. Se siguen aceptando los nombres antiguos `recurrente` y `unica`. / Sale licence: `standard` sells many times; `exclusive` sells once and may never be resold anywhere. Cannot be changed after publishing; defaults to `standard`. Legacy values `recurrente` and `unica` are still accepted."New value: +"Sale licence. `standard` (the site calls it \"Standard\"): sold as many times as you want. `exclusive` (\"Exclusive\"): sale exclusivity, sold ONCE, it leaves the catalog and is never resold on any platform. IT CANNOT BE CHANGED AFTER PUBLISHING. Without this field it is published as `standard`. The old names `recurrente` and `unica` are still accepted."
    • changedInput schema / properties / plantilla / properties / name / description
      Previous value: -"Nombre público de la plantilla, 1 a 80 caracteres. / Public template name, 1 to 80 characters."New value: +"Public name of the template, 1 to 80 characters."
    • changedInput schema / properties / plantilla / properties / nativeLangs / description
      Previous value: -"Idiomas NATIVOS de la aplicación que se vende (no el idioma de la ficha), 1 a 8. Códigos ISO de dos letras, lista cerrada: es, en, fr, de, it, nl, pt, id. / Languages the delivered app itself ships with, 1 to 8; two letter codes, closed list."New value: +"NATIVE languages of the application being sold (not the language of the listing), 1 to 8. Two letter ISO codes, closed list: es, en, fr, de, it, nl, pt, id."
    • changedInput schema / properties / plantilla / properties / platforms / description
      Previous value: -"Plataformas objetivo, 1 a 7. Lista cerrada, en minúsculas: solo estos valores. / Target platforms, 1 to 7; closed list, lowercase."New value: +"Target platforms, 1 to 7. Closed list, lowercase: only these values."
    • changedInput schema / properties / plantilla / properties / price / description
      Previous value: -"Precio regular en USDC, NÚMERO (49, 49.5), de 1 a 100000. También se acepta el mismo número como texto (\"49\") y se normaliza. / Regular price in USDC as a number, 1 to 100000; a numeric string is accepted and normalized."New value: +"Regular price in USDC, a NUMBER (49, 49.5), from 1 to 100000. The same number as text (\"49\") is also accepted and normalized."
    • changedInput schema / properties / plantilla / properties / stack / description
      Previous value: -"Tecnologías del producto (texto libre, 1 a 5 elementos de hasta 30 caracteres): \"Next.js\", \"PostgreSQL\"… / Tech stack, 1 to 5 free text items."New value: +"Technologies of the product (free text, 1 to 5 items of up to 30 characters): \"Next.js\", \"PostgreSQL\"…"
    • changedInput schema / properties / plantilla / properties / status / description
      Previous value: -"Estado de madurez del producto. Lista cerrada. / Product maturity; closed list."New value: +"Maturity of the product. Closed list."
    • changedInput schema / properties / plantilla / properties / supportEmail / description
      Previous value: -"Correo de soporte del vendedor. UNO U OTRO: con supportUrl a la vez se rechaza. / Seller support email; never together with supportUrl."New value: +"Support email of the seller. ONE OR THE OTHER: sending it together with supportUrl is rejected."
    • changedInput schema / properties / plantilla / properties / supportUrl / description
      Previous value: -"Enlace de soporte (formulario, Discord, documentación): URL http(s). UNO U OTRO: con supportEmail a la vez se rechaza. / Seller support link; never together with supportEmail."New value: +"Support link (form, Discord, documentation): http(s) URL. ONE OR THE OTHER: sending it together with supportEmail is rejected."
    • changedInput schema / properties / plantilla / properties / tagline / description
      Previous value: -"Descripción CORTA (la que se ve en la tarjeta del catálogo), 1 a 200 caracteres. / Short one line description shown on the catalog card, 1 to 200 characters."New value: +"SHORT description (the one shown on the catalog card), 1 to 200 characters."
    • changedInput schema / properties / plantilla / properties / tags / description
      Previous value: -"Etiquetas de búsqueda, 1 a 5, de hasta 28 caracteres (texto libre). / Search tags, 1 to 5; free text."New value: +"Search tags, 1 to 5, of up to 28 characters (free text)."
    • changedInput schema / properties / plantilla / properties / youtubeLinks / description
      Previous value: -"Vídeos: hasta 3 enlaces de YouTube (el servidor extrae el id). Los vídeos NO se suben. / YouTube links, up to 3; videos are never uploaded."New value: +"Videos: up to 3 YouTube links (the server extracts the id). Videos are NOT uploaded."
    • changedInput schema / properties / runContentFilter / description
      Previous value: -"OPCIONAL, solo cuentas-agente (las únicas a las que el envío aplica el prefiltro de IA): true ejecuta también el prefiltro de IA de la ficha, con el mismo modelo y la misma entrada que submit_for_review, y devuelve su veredicto en contentFilter como AVISO orientativo. Exige `plantilla` y que la ficha no tenga problemas que bloqueen. Cuesta una llamada al modelo: tiene cupo propio por hora (la respuesta dice cuántos te quedan) y no gasta nada del envío real. / Agent accounts only: true also runs the listing AI prefilter and returns an advisory verdict in contentFilter, with its own hourly quota."New value: +"OPTIONAL, agent accounts only (the only ones the submission applies the AI prefilter to): true also runs the AI prefilter of the listing, with the same model and the same input as submit_for_review, and returns its verdict in contentFilter as an advisory NOTICE. It requires `plantilla` and that the listing has no blocking issues. It costs one model call: it has its own quota per hour (the response says how many you have left) and spends nothing of the real submission."
    • changedInput schema / properties / template / description
      Previous value: -"OPCIONAL: la ficha tal como la mandarías a submit_for_review. Sin ella solo se revisa el ZIP. La ficha completa, validada con las MISMAS reglas del asistente /vender. Obligatorios: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Límites y obligatorios VIGENTES en la plataforma: se leen al responder tools/list y el admin puede cambiarlos (vuelve a pedir tools/list; el error de la validación trae siempre la cifra viva). / The full listing, validated with the same rules as the /vender wizard. Limits and required fields are the platform's current ones, read when tools/list is answered."New value: +"OPTIONAL: the listing exactly as you would send it to submit_for_review. Without it only the ZIP is checked. The full listing, validated with the SAME rules as the /vender wizard. Required: name, category, price, tagline, description, gallery, stack, includes, platforms, tags, nativeLangs. Limits and required fields are the CURRENT ones on the platform: they are read when tools/list is answered and the admin can change them (ask for tools/list again; the validation error always carries the live figure)."
    • changedInput schema / properties / template / properties / bannerUrl / description
      Previous value: -"Imagen de portada: una RUTA de image_upload_link, igual que las de gallery y con la MISMA proporción. Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. / Cover image path from image_upload_link, same 4:3 aspect ratio."New value: +"Cover image: a PATH from image_upload_link, just like the gallery ones and with the SAME aspect ratio. Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission."
    • changedInput schema / properties / template / properties / category / description
      Previous value: -"Categoría del catálogo. Lista cerrada, en minúsculas y sin acentos: solo uno de estos valores. / Catalog category; closed list, lowercase, exactly one of these values."New value: +"Catalog category. Closed list, lowercase and without accents: only one of these values."
    • changedInput schema / properties / template / properties / completeness / description
      Previous value: -"Legado: porcentaje 0-100 que no se pide en el asistente ni se muestra en ninguna pantalla. No lo mandes. / Legacy field, not shown anywhere."New value: +"Legacy: a 0-100 percentage that the wizard does not ask for and that is not shown on any screen. Do not send it."
    • changedInput schema / properties / template / properties / demoUrl / description
      Previous value: -"Demo en vivo: URL http(s) completa. / Live demo; full http(s) URL."New value: +"Live demo: full http(s) URL."
    • changedInput schema / properties / template / properties / description / description
      Previous value: -"Descripción LARGA de la ficha. Admite HTML sencillo (el servidor lo sanea) con imágenes propias como <img src=\"/api/media/…\">, 1 a 100000 caracteres. Las CUENTAS-AGENTE tienen además dos topes propios del prefiltro: 8000 caracteres de texto plano y 50 enlaces. / Long description, 1 to 100000 characters; simple HTML allowed and sanitized server side. Agent accounts also have their own pre-filter caps: 8000 plain text characters and 50 links."New value: +"LONG description of the listing. Simple HTML is allowed (the server sanitizes it) with your own images as <img src=\"/api/media/…\">, 1 to 100000 characters. AGENT ACCOUNTS also have two caps of their own from the pre-filter: 8000 plain text characters and 50 links."
    • changedInput schema / properties / template / properties / discountPrice / description
      Previous value: -"Precio con descuento, mismo formato y mismo rango que price, y ESTRICTAMENTE MENOR que él. Es el precio efectivo de venta. / Discounted price; same range as price and strictly lower than it."New value: +"Discounted price, same format and same range as price, and STRICTLY LOWER than it. It is the effective sale price."
    • changedInput schema / properties / template / properties / gallery / description
      Previous value: -"Imágenes del producto: 3 a 20 RUTAS devueltas por image_upload_link (/api/media/template-media/…/x.webp). Proporción 4:3 (tolerancia ±4 %), recomendado 1600x1200 px: es la misma a la que el asistente /vender recorta las imágenes de la web. Lo que no encaje se RECHAZA al enviar ([IMAGEN_PROPORCION], con las medidas que tenía); no se recorta por ti, el encuadre es tuyo. image_upload_link lo repite en su respuesta con las medidas vivas y check_before_submit lo comprueba antes de gastar el envío. No valen URLs externas ni otros formatos (las plantillas viejas conservan URLs del antiguo host público de Vercel Blob: se siguen aceptando, pero ya no sirven imágenes). / Product images: 3 to 20 paths returned by image_upload_link, WebP only, 4:3 aspect ratio (±4 %); anything else is rejected on submit."New value: +"Images of the product: 3 to 20 PATHS returned by image_upload_link (/api/media/template-media/…/x.webp). Aspect ratio 4:3 (tolerance ±4 %), recommended 1600x1200 px: the same one the /vender wizard crops the web images to. Anything that does not fit is REJECTED on submit ([IMAGEN_PROPORCION], with the size it had); it is not cropped for you, the framing is yours. image_upload_link repeats it in its answer with the live measurements and check_before_submit checks it before spending the submission. External URLs and other formats are not valid (old templates keep URLs from the former public Vercel Blob host: they are still accepted, but they no longer serve any image)."
    • changedInput schema / properties / template / properties / includes / description
      Previous value: -"«Qué incluye»: 1 a 4 puntos de hasta 120 caracteres cada uno. / What's included: 1 to 4 short bullet points."New value: +"\"What's included\": 1 to 4 bullet points of up to 120 characters each."
    • changedInput schema / properties / template / properties / licenseType / description
      Previous value: -"Licencia de venta. `standard` (la web la llama «Estándar»): se vende tantas veces como quieras. `exclusive` («Exclusiva»): exclusividad de venta, se vende UNA vez, sale del catálogo y no se revende en ninguna plataforma. NO SE PUEDE CAMBIAR DESPUÉS DE PUBLICAR. Sin este campo se publica como `standard`. Se siguen aceptando los nombres antiguos `recurrente` y `unica`. / Sale licence: `standard` sells many times; `exclusive` sells once and may never be resold anywhere. Cannot be changed after publishing; defaults to `standard`. Legacy values `recurrente` and `unica` are still accepted."New value: +"Sale licence. `standard` (the site calls it \"Standard\"): sold as many times as you want. `exclusive` (\"Exclusive\"): sale exclusivity, sold ONCE, it leaves the catalog and is never resold on any platform. IT CANNOT BE CHANGED AFTER PUBLISHING. Without this field it is published as `standard`. The old names `recurrente` and `unica` are still accepted."
    • changedInput schema / properties / template / properties / name / description
      Previous value: -"Nombre público de la plantilla, 1 a 80 caracteres. / Public template name, 1 to 80 characters."New value: +"Public name of the template, 1 to 80 characters."
    • changedInput schema / properties / template / properties / nativeLangs / description
      Previous value: -"Idiomas NATIVOS de la aplicación que se vende (no el idioma de la ficha), 1 a 8. Códigos ISO de dos letras, lista cerrada: es, en, fr, de, it, nl, pt, id. / Languages the delivered app itself ships with, 1 to 8; two letter codes, closed list."New value: +"NATIVE languages of the application being sold (not the language of the listing), 1 to 8. Two letter ISO codes, closed list: es, en, fr, de, it, nl, pt, id."
    • changedInput schema / properties / template / properties / platforms / description
      Previous value: -"Plataformas objetivo, 1 a 7. Lista cerrada, en minúsculas: solo estos valores. / Target platforms, 1 to 7; closed list, lowercase."New value: +"Target platforms, 1 to 7. Closed list, lowercase: only these values."
    • changedInput schema / properties / template / properties / price / description
      Previous value: -"Precio regular en USDC, NÚMERO (49, 49.5), de 1 a 100000. También se acepta el mismo número como texto (\"49\") y se normaliza. / Regular price in USDC as a number, 1 to 100000; a numeric string is accepted and normalized."New value: +"Regular price in USDC, a NUMBER (49, 49.5), from 1 to 100000. The same number as text (\"49\") is also accepted and normalized."
    • changedInput schema / properties / template / properties / stack / description
      Previous value: -"Tecnologías del producto (texto libre, 1 a 5 elementos de hasta 30 caracteres): \"Next.js\", \"PostgreSQL\"… / Tech stack, 1 to 5 free text items."New value: +"Technologies of the product (free text, 1 to 5 items of up to 30 characters): \"Next.js\", \"PostgreSQL\"…"
    • changedInput schema / properties / template / properties / status / description
      Previous value: -"Estado de madurez del producto. Lista cerrada. / Product maturity; closed list."New value: +"Maturity of the product. Closed list."
    • changedInput schema / properties / template / properties / supportEmail / description
      Previous value: -"Correo de soporte del vendedor. UNO U OTRO: con supportUrl a la vez se rechaza. / Seller support email; never together with supportUrl."New value: +"Support email of the seller. ONE OR THE OTHER: sending it together with supportUrl is rejected."
    • changedInput schema / properties / template / properties / supportUrl / description
      Previous value: -"Enlace de soporte (formulario, Discord, documentación): URL http(s). UNO U OTRO: con supportEmail a la vez se rechaza. / Seller support link; never together with supportEmail."New value: +"Support link (form, Discord, documentation): http(s) URL. ONE OR THE OTHER: sending it together with supportEmail is rejected."
    • changedInput schema / properties / template / properties / tagline / description
      Previous value: -"Descripción CORTA (la que se ve en la tarjeta del catálogo), 1 a 200 caracteres. / Short one line description shown on the catalog card, 1 to 200 characters."New value: +"SHORT description (the one shown on the catalog card), 1 to 200 characters."
    • changedInput schema / properties / template / properties / tags / description
      Previous value: -"Etiquetas de búsqueda, 1 a 5, de hasta 28 caracteres (texto libre). / Search tags, 1 to 5; free text."New value: +"Search tags, 1 to 5, of up to 28 characters (free text)."
    • changedInput schema / properties / template / properties / youtubeLinks / description
      Previous value: -"Vídeos: hasta 3 enlaces de YouTube (el servidor extrae el id). Los vídeos NO se suben. / YouTube links, up to 3; videos are never uploaded."New value: +"Videos: up to 3 YouTube links (the server extracts the id). Videos are NOT uploaded."
    • changedOutput schema / properties / contentFilter / description
      Previous value: -"El ensayo del prefiltro de IA de la ficha. Va SIEMPRE, para que su ausencia no se lea como «pasa»."New value: +"The dry run of the AI prefilter of the listing. It is ALWAYS there, so that its absence is not read as «passes»."
    • changedOutput schema / properties / contentFilter / properties / advisory / description
      Previous value: -"Siempre true: es el veredicto de un modelo y el envío lo vuelve a dar."New value: +"Always true: it is the verdict of a model and the submission gives it again."
    • changedOutput schema / properties / contentFilter / properties / field / description
      Previous value: -"Campo de la ficha señalado (description…); null si no hay."New value: +"Field of the listing that was flagged (description…); null if there is none."
    • changedOutput schema / properties / contentFilter / properties / message / description
      Previous value: -"Qué pasó con el ensayo, en claro."New value: +"What happened with the dry run, in plain words."
    • changedOutput schema / properties / contentFilter / properties / quota / description
      Previous value: -"Cupo propio de ensayos por cuenta y hora; null si no aplica a esta cuenta."New value: +"Own quota of dry runs per account and hour; null if it does not apply to this account."
    • changedOutput schema / properties / contentFilter / properties / quota / properties / perHour / description
      Previous value: -"Ensayos por hora."New value: +"Dry runs per hour."
    • changedOutput schema / properties / contentFilter / properties / quota / properties / remainingThisHour / description
      Previous value: -"Cuántos quedan esta hora; null si no se pudo saber."New value: +"How many are left this hour; null if it could not be known."
    • changedOutput schema / properties / contentFilter / properties / reason / description
      Previous value: -"El motivo del modelo, el mismo texto que llevaría el rechazo real."New value: +"The reason from the model, the same text the real rejection would carry."
    • changedOutput schema / properties / contentFilter / properties / status / description
      Previous value: -"not_requested, not_applicable, skipped, passed, flagged, limit_reached o unavailable."New value: +"not_requested, not_applicable, skipped, passed, flagged, limit_reached or unavailable."
    • changedOutput schema / properties / contentFilter / properties / submitWouldSay / description
      Previous value: -"Solo con flagged: la frase EXACTA con la que rechazaría el envío."New value: +"Only with flagged: the EXACT sentence the submission would reject it with."
    • changedOutput schema / properties / issues / description
      Previous value: -"Todo lo encontrado, de una vez. Lo que trae blocks=true es lo que impediría el envío."New value: +"Everything found, all at once. What comes with blocks=true is what would stop the submission."
    • changedOutput schema / properties / issues / items / properties / blocks / description
      Previous value: -"true = con esto el envío NO pasaría; lo demás son avisos."New value: +"true = with this the submission would NOT pass; the rest are warnings."
    • changedOutput schema / properties / issues / items / properties / category / description
      Previous value: -"size, file, secrets, licenses, similarity, images, listing o content."New value: +"size, file, secrets, licenses, similarity, images, listing or content."
    • changedOutput schema / properties / issues / items / properties / code / description
      Previous value: -"El MISMO prefijo con el que rechazaría el envío real (DATOS_INVALIDOS, PROCEDENCIA…)."New value: +"The SAME prefix the real submission would reject it with (DATOS_INVALIDOS, PROCEDENCIA…)."
    • changedOutput schema / properties / issues / items / properties / fix / description
      Previous value: -"Qué hacer para arreglarlo."New value: +"What to do to fix it."
    • changedOutput schema / properties / issues / items / properties / problem / description
      Previous value: -"Qué pasa."New value: +"What is wrong."
    • changedOutput schema / properties / issues / items / properties / severity / description
      Previous value: -"high, medium o low."New value: +"high, medium or low."
    • changedOutput schema / properties / issues / items / properties / where / description
      Previous value: -"Fichero del ZIP o campo de la ficha; null si no se puede señalar."New value: +"File inside the ZIP or field of the listing; null if it cannot be pointed at."
    • changedOutput schema / properties / nextStep / description
      Previous value: -"Qué hacer ahora: arreglar, reensayar o llamar a submit_for_review."New value: +"What to do now: fix, run the dry run again or call submit_for_review."
    • changedOutput schema / properties / notice / description
      Previous value: -"El aviso fijo: diagnóstico ORIENTATIVO y de solo lectura, que no sustituye a la revisión."New value: +"The fixed warning: an ADVISORY, read only diagnosis that does not replace the review."
    • changedOutput schema / properties / summary / description
      Previous value: -"Las cifras en las que se apoya el diagnóstico. De la similitud solo sale la banda, nunca el detalle del catálogo ajeno."New value: +"The figures the diagnosis rests on. From similarity only the band comes out, never the detail of someone else's catalog."
    • changedOutput schema / properties / summary / properties / file / description
      Previous value: -"El ZIP como archivo. Los tamaños son cuentas, no dinero."New value: +"The ZIP as a file. The sizes are counts, not money."
    • changedOutput schema / properties / summary / properties / file / properties / bytes / description
      Previous value: -"Tamaño del ZIP analizado."New value: +"Size of the analyzed ZIP."
    • changedOutput schema / properties / summary / properties / file / properties / files / description
      Previous value: -"Ficheros recorridos dentro del ZIP."New value: +"Files walked through inside the ZIP."
    • changedOutput schema / properties / summary / properties / file / properties / filesSkipped / description
      Previous value: -"Ficheros que no se pudieron mirar."New value: +"Files that could not be looked at."
    • changedOutput schema / properties / summary / properties / file / properties / maxMegabytes / description
      Previous value: -"Tope vigente de Admin › Carga de plantillas."New value: +"Current cap from Admin › Carga de plantillas."
    • changedOutput schema / properties / summary / properties / file / properties / megabytes / description
      Previous value: -"El mismo tamaño en MB."New value: +"The same size in MB."
    • changedOutput schema / properties / summary / properties / images / description
      Previous value: -"Lo que se espera de las imágenes, se diga o no haya problemas."New value: +"What is expected of the images, whether or not there are problems."
    • changedOutput schema / properties / summary / properties / images / properties / aspectRatio / description
      Previous value: -"Proporción que espera la galería."New value: +"Aspect ratio the gallery expects."
    • changedOutput schema / properties / summary / properties / images / properties / count / description
      Previous value: -"Cuántas trae la galería; null si no se mandó ficha."New value: +"How many the gallery carries; null if no listing was sent."
    • changedOutput schema / properties / summary / properties / images / properties / max / description
      Previous value: -"Máximo vigente."New value: +"Current maximum."
    • changedOutput schema / properties / summary / properties / images / properties / measured / description
      Previous value: -"Cuántas se pudieron medir leyendo su cabecera."New value: +"How many could be measured by reading their header."
    • changedOutput schema / properties / summary / properties / images / properties / min / description
      Previous value: -"Mínimo vigente."New value: +"Current minimum."
    • changedOutput schema / properties / summary / properties / images / properties / notWebp / description
      Previous value: -"Cuántas no son bytes de WebP."New value: +"How many are not WebP bytes."
    • changedOutput schema / properties / summary / properties / images / properties / outOfRatio / description
      Previous value: -"Cuántas quedan fuera de proporción."New value: +"How many fall outside the aspect ratio."
    • changedOutput schema / properties / summary / properties / images / properties / recommendedHeight / description
      Previous value: -"Alto recomendado en píxeles."New value: +"Recommended height in pixels."
    • changedOutput schema / properties / summary / properties / images / properties / recommendedWidth / description
      Previous value: -"Ancho recomendado en píxeles."New value: +"Recommended width in pixels."
    • changedOutput schema / properties / summary / properties / images / properties / tolerance / description
      Previous value: -"Tolerancia admitida sobre esa proporción."New value: +"Tolerance allowed on that aspect ratio."
    • changedOutput schema / properties / summary / properties / images / properties / unreadable / description
      Previous value: -"Cuántas no se pudieron mirar (no bloquea)."New value: +"How many could not be looked at (does not block)."
    • changedOutput schema / properties / summary / properties / licenses / properties / depsWithoutLicense / description
      Previous value: -"Dependencias sin licencia declarada."New value: +"Dependencies with no declared license."
    • changedOutput schema / properties / summary / properties / licenses / properties / incompatible / description
      Previous value: -"Dependencias con licencia incompatible."New value: +"Dependencies with an incompatible license."
    • changedOutput schema / properties / summary / properties / licenses / properties / root / description
      Previous value: -"Licencia declarada en la raíz del paquete; null si no hay."New value: +"License declared at the root of the package; null if there is none."
    • changedOutput schema / properties / summary / properties / listing / properties / images / description
      Previous value: -"Imágenes de la galería; null si no se mandó ficha."New value: +"Images in the gallery; null if no listing was sent."
    • changedOutput schema / properties / summary / properties / listing / properties / imagesMax / description
      Previous value: -"Máximo que admite."New value: +"Maximum it allows."
    • changedOutput schema / properties / summary / properties / listing / properties / imagesMin / description
      Previous value: -"Mínimo de imágenes que exige la configuración vigente."New value: +"Minimum number of images the current configuration requires."
    • changedOutput schema / properties / summary / properties / listing / properties / validated / description
      Previous value: -"¿Se mandó ficha y se validó?"New value: +"Was a listing sent and validated?"
    • changedOutput schema / properties / summary / properties / provenance / properties / autoReject / description
      Previous value: -"¿Esta cuenta puede ser rechazada por procedencia sin que medie una persona?"New value: +"Can this account be rejected on provenance without a person stepping in?"
    • changedOutput schema / properties / summary / properties / provenance / properties / band / description
      Previous value: -"well_below o near_threshold; null si no aplica. No sale ningún detalle más."New value: +"well_below or near_threshold; null if it does not apply. No further detail comes out."
    • changedOutput schema / properties / summary / properties / provenance / properties / decision / description
      Previous value: -"pass, auto_reject o informational_only."New value: +"pass, auto_reject or informational_only."
    • changedOutput schema / properties / summary / properties / provenance / properties / rejectThreshold / description
      Previous value: -"Umbral de rechazo vigente."New value: +"Current rejection threshold."
    • changedOutput schema / properties / summary / properties / secrets / description
      Previous value: -"Solo cuentas: el VALOR de un secreto nunca sale de aquí."New value: +"Counts only: the VALUE of a secret never leaves this place."
    • changedOutput schema / properties / summary / properties / secrets / properties / severe / description
      Previous value: -"Cuántos de ellos son graves."New value: +"How many of them are severe."
    • changedOutput schema / properties / summary / properties / secrets / properties / total / description
      Previous value: -"Posibles secretos encontrados."New value: +"Possible secrets found."
    • changedOutput schema / properties / summary / properties / similarity / properties / overThreshold / description
      Previous value: -"¿Supera el umbral de parecido con el catálogo?"New value: +"Does it go over the similarity threshold against the catalog?"
    • changedOutput schema / properties / summary / properties / similarity / properties / thresholdPct / description
      Previous value: -"Umbral vigente, en por ciento."New value: +"Current threshold, as a percentage."
    • changedOutput schema / properties / wouldPass / description
      Previous value: -"¿Pasaría HOY las comprobaciones automáticas del envío? Nunca es una aprobación: decide una persona."New value: +"Would it pass the automatic checks of the submission TODAY? It is never an approval: a person decides."
    • changedOutput schema / properties / zipSha256 / description
      Previous value: -"Huella del ZIP analizado (hex); null si no se pudo leer el archivo."New value: +"Fingerprint of the analyzed ZIP (hex); null if the file could not be read."
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and exceeds it: it declares the operation is side-effect-free, does not spend tokens, is advisory, never returns secret values or the matching catalog template, and explains the content filter's behavior and quota. It also discloses that it does not validate content legality, which is crucial for the agent to set expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely packed with high-value information. It front-loads the core purpose (dry run, no changes) and then systematically covers limitations, quotas, content filter, and return format. While some redundancy exists (e.g., repeated mention of advisory nature), every sentence contributes to a complete understanding, so it earns a high score, though not a 5 due to slight verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (dual validation of ZIP and listing, content filter, quotas, deprecated aliases), the description is remarkably complete. It covers side effects, return content (problems with category, file/field, fix, codes), resource consumption, and even references the output schema. There is nothing an agent needs to know to call it correctly that is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already has rich per-property descriptions, but the tool description adds essential context beyond the schema: it explains the file must be from a prior upload (uploadToken tied to the account), the template is optional and mirrors submit_for_review fields, runContentFilter requires plantilla and only for agent accounts, and it mentions deprecated aliases (archivo, plantilla) that are in the schema. This adds meaning not present in the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a dry-run validation tool for a previously uploaded ZIP and an optional listing, explicitly contrasting with the real submission (submit_for_review). It names the resource (ZIP from zip_upload_link), the validation aspects (size, type, secrets, licences, similarity, required fields), and the advisory nature, leaving no ambiguity about its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly positions this tool as the pre-submission dry-run, tells the agent it does not spend the uploadToken or other submission resources, and clarifies when the content filter applies (agent accounts with runContentFilter: true). It also states what it does NOT judge (content legality), routing to the Content policy and legal_versions, and mentions its own hourly cap, so the agent knows when to call it and what to expect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources