Skip to main content
Glama

Por qué Apolo

  • Ves lo que pierdes antes de guardar. Comparas el original y el resultado con un deslizador, lado a lado o con un mapa de diferencias, y Apolo te da la nota SSIMULACRA 2 de cada uno.

  • El mismo fichero que las herramientas oficiales, byte a byte: cwebp, cjpeg (MozJPEG), oxipng, avifenc y cjxl van dentro, con todas sus opciones, y Apolo te da la orden equivalente.

  • Calidad por nota. Pide que no se note, y Apolo busca la calidad más baja que lo consigue, foto a foto.

  • Carpetas enteras: lotes en paralelo, varios formatos a la vez, el más ligero de cada foto, un tamaño para todas, y nunca sobrescribe nada.

  • Recortar y redimensionar sobre la imagen, por el lado mayor, un porcentaje o ancho y alto.

  • Abre las fotos del iPhone (HEIC), además de PNG, JPEG, WebP, AVIF, JPEG XL, TIFF, GIF, BMP, QOI y PNM.

  • Hecha para cada sistema: Liquid Glass en macOS, Fluent y Mica en Windows, Adwaita en GNOME y Breeze en KDE. En español y en inglés.

  • Privada y ligera: tus imágenes no salen de tu ordenador, y con fotos de 24 megapíxeles no pasa de unos 2 GB de memoria.

  • Con tu agente de IA: Claude, Cursor o VS Code optimizan por ti con su servidor MCP.

Related MCP server: ollama-vision-mcp

Descargar

La forma más fácil es apolo.webcafeina.com: sabe qué ordenador tienes y te da su descarga. Todos los ficheros están en la última versión, con su suma en SHA256SUMS.txt.

Sistema

Aplicación

macOS 11+, Apple Silicon e Intel

.dmg universal

Windows 10 y 11, x64 y ARM

instalador .exe

Linux, x64 y ARM

.deb (Debian, Ubuntu), .rpm (Fedora, openSUSE), AppImage o PKGBUILD (Arch)

Con Homebrew, en macOS y Linux:

brew install --cask webcafeina/apolo/apolo   # la aplicación (macOS)
brew install webcafeina/apolo/apolo          # la línea de comandos y el servidor para agentes

En Linux, con el repositorio (firmado con la clave de Apolo), se actualiza con el resto del sistema:

# Debian y Ubuntu
sudo install -dm755 /etc/apt/keyrings
sudo curl -fsSLo /etc/apt/keyrings/apolo.asc https://apolo.webcafeina.com/apolo.asc
sudo curl -fsSLo /etc/apt/sources.list.d/apolo.sources https://apolo.webcafeina.com/apt/apolo.sources
sudo apt update && sudo apt install apolo

# Fedora
sudo curl -fsSLo /etc/yum.repos.d/apolo.repo https://apolo.webcafeina.com/rpm/apolo.repo
sudo dnf install apolo

# openSUSE
sudo zypper addrepo https://apolo.webcafeina.com/rpm/apolo.repo
sudo zypper install apolo

# Arch, Manjaro, EndeavourOS, CachyOS (pronto en el AUR, como apolo-bin)
mkdir apolo && cd apolo
curl -fsSLO https://apolo.webcafeina.com/aur/PKGBUILD
makepkg -si

Se actualiza sola: cuando hay una versión nueva, Apolo lo avisa y se instala con un clic.

La primera vez, como los instaladores no están firmados, el sistema avisa:

  • macOS: en Ajustes del Sistema › Privacidad y seguridad, pulsa «Abrir igualmente». Si dice que está dañada: xattr -dr com.apple.quarantine /Applications/Apolo.app.

  • Windows: en SmartScreen, «Más información» › «Ejecutar de todos modos».

Verificar la descarga

Cada fichero de la versión trae su suma SHA-256 en SHA256SUMS.txt y su procedencia firmada por GitHub (qué compilación lo hizo y desde qué commit). Con la línea de comandos de GitHub:

gh attestation verify Apolo_1.0.0_universal.dmg --repo webcafeina/Apolo

Los repositorios APT y RPM y los .rpm van firmados con la clave GPG 6D95 3C94 D0D6 6AB6 B9B0 FA26 CA21 CD7A B7FA 57FC. Cómo avisar de un fallo de seguridad, en SECURITY.md.

En la terminal

La línea de comandos apolo hace lo mismo que la aplicación, con las opciones de cada herramienta oficial y los mismos presets:

apolo webp -q 80 foto.png -o foto.webp                       # como cwebp
apolo avif -q 60 foto.png foto.avif                          # como avifenc
apolo lote fotos/ --formato webp,avif --objetivo 80          # carpetas enteras, por nota
apolo lote fotos/ --mas-ligero --formato webp,avif,jpeg --lado-mayor 1920
apolo medir foto.png foto.webp                               # SSIMULACRA 2, PSNR y SSIM

Más ejemplos en la página de la línea de comandos.

Con un agente de IA

Apolo se usa desde Claude, Cursor, VS Code y cualquier agente que hable MCP: analiza, optimiza, compara formatos a la misma calidad percibida, mide la pérdida y convierte carpetas, en tu ordenador. Nunca sobrescribe ni borra.

El servidor, apolo-mcp, va dentro de la aplicación y se actualiza con ella. En Apolo, la fila MCP de la barra lateral tiene lo que hay que copiar para cada agente y la extensión de Claude Desktop. Para Claude Code:

claude mcp add --scope user apolo -- "/Applications/Apolo.app/Contents/MacOS/apolo-mcp"   # macOS
claude mcp add --scope user apolo -- "%LOCALAPPDATA%\Apolo\apolo-mcp.exe"                  # Windows
claude mcp add --scope user apolo -- /usr/bin/apolo-mcp                                    # Linux

Cómo conectarlo en cada agente, en la página de agentes; qué pedirle, en la guía; y las once herramientas, en docs/mcp/catalogo.md. Lo que el agente pide (rutas, nombres, miniaturas) entra en su conversación, y lo ve el proveedor del modelo.

Guías

Con cifras medidas por Apolo sobre 24 fotos de uso libre:

Y Apolo frente a otras herramientas, en las comparativas.

Preguntas

¿Es gratis? ¿Sube mis imágenes? ¿Por qué avisa el sistema? Las respuestas, en las preguntas frecuentes. Y lo que trae cada versión, en novedades.

Compilar

Hace falta:

  • Rust estable, Node 22 y pnpm;

  • CMake, nasm y clang (libjxl se compila con clang, como el cjxl oficial);

  • en Linux, además, libwebkit2gtk-4.1-dev librsvg2-dev libssl-dev pkg-config.

Clona con submódulos: git clone --recurse-submodules.

make comprobar     # formato, clippy, pruebas, interfaz y web
make equivalencia  # el mismo fichero que cwebp, cjpeg, oxipng, qoiconv, avifenc y cjxl
make cli           # la línea de comandos
make mcp           # el servidor para agentes, apolo-mcp
make app           # la aplicación (con apolo-mcp dentro)

Licencia

GPLv3. Apolo es software libre: puedes usarlo, estudiarlo, cambiarlo y compartirlo. Los motores que lleva dentro tienen sus propias licencias, todas compatibles:

Licencia

Motores

BSD

libwebp, MozJPEG, libavif, aom, libyuv y libjxl

MIT

OxiPNG

GPLv3

libimagequant

LGPLv3

libheif y libde265

Apache-2.0

highway, sjpeg y rmcp

MIT o Apache-2.0

sys-locale

Hecho por Webcafeína.

Available Tools

11 tools
acerca_de_apoloA
Read-onlyIdempotent

Which version of Apolo is answering, where it starts from (the app, or the Claude Desktop extension handing over to it) and the engines it carries (libwebp, MozJPEG, oxipng, avifenc, cjxl). For when someone asks about the version or something doesn't match what was expected.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds meaningful context beyond them by spelling out what information is returned, especially the app-vs-extension origin and the specific engines carried.

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

Conciseness5/5

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

It is a single compact sentence that front-loads the version/origin/engines content, followed by a short usage cue. Every phrase earns its place, including the engine list, which tells the agent exactly what diagnostic detail is available.

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

Completeness4/5

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

For a zero-parameter, read-only info tool with no output schema, the description is complete enough: it explains what is reported and when to call it. A little more on output shape could help, but the key facts are present.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. Nothing about parameter semantics is missing or misleading.

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

Purpose4/5

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

The description states a specific purpose: reporting the version, the launch origin (app vs. Claude Desktop extension), and the bundled engines (libwebp, MozJPEG, oxipng, avifenc, cjxl). This is clearly distinguishable from the sibling optimization tools, though it doesn't explicitly contrast itself with them.

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

Usage Guidelines4/5

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

It gives a clear usage trigger: "when someone asks about the version or something doesn't match what was expected." That covers the main diagnostic case, but it doesn't state when not to use it or name an alternative sibling.

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

analizar_imagenA
Read-onlyIdempotent

What an image is (format, dimensions, size, transparency, metadata, EXIF orientation) or which images a folder holds. Use it first if you don't know what it is. It doesn't measure quality: for that, medir_calidad. Example: {"ruta": "~/Photos/beach.heic"}

NameRequiredDescriptionDefault
rutaYesAbsolute path of an image or a folder (~ is accepted).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world and non-destructive behavior, so the safety profile is covered. The description adds useful boundaries beyond them: it works on both images and folders, and it deliberately does not evaluate quality. It stops short of describing output structure or failure modes, which keeps it at 4 rather than 5.

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 tool's identity is stated first, followed by the usage rule, the exclusion, and a copy-pasteable example — an effective order with no filler. The opening noun phrase is slightly fragmented, and the example uses a field name the agent must map back to the schema.

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

Completeness4/5

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

There is no output schema, but the parenthetical lists the returned attributes, which largely substitutes for one. With a single required parameter and rich annotations, nothing critical is missing, though it does not mention what a folder result looks like or how errors (bad path, non-image) surface.

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

Parameters4/5

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

With only one parameter at 100% schema coverage, the schema already carries full meaning, so the baseline is a 4. The description adds a concrete example value showing an expanded tilde path to an image file, reinforcing that folders are also acceptable.

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 states a specific set of noun details it returns (format, dimensions, size, transparency, metadata, EXIF orientation) and also covers the folder-listing case, so the agent knows exactly what resource is inspected. It explicitly differentiates itself from the quality-measuring sibling.

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 gives an explicit ordering rule ('Use it first if you don't know what it is') and names the alternative for a different job ('It doesn't measure quality: for that, medir_calidad'). The when-to-use and when-to-use-something-else are both spelled out.

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

cancelar_loteA
Idempotent

Stops a batch. What has already been converted stays. Example: {"id": "l-1"}

NameRequiredDescriptionDefault
idYesThe id that empezar_lote gave, like “l-3”.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, idempotent, so the safety profile is covered. The description adds genuinely new behavioral context — "what has already been converted stays" — telling the agent this is a partial rollback rather than a full purge. It stops short of saying what happens to queued, unconverted items.

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?

Three short, front-loaded fragments with no filler; the effect statement and the example each carry weight. It is arguably a touch under-specified rather than wordy.

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

Completeness3/5

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

For a one-parameter mutation with no output schema, the key missing piece is the status of the unfinished portion of the batch and any error condition (unknown id, already-completed batch). Annotations cover safety, but the description leaves an agent guessing about post-cancel state.

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

Parameters3/5

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

Schema coverage is 100% and the schema already explains that the id comes from empezar_lote with the “l-3” format. The inline example {"id": "l-1"} restates that format rather than adding new meaning, so baseline 3 is appropriate.

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

Purpose4/5

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

"Stops a batch" names a specific verb and resource, and the partial-effect note makes clear what cancellation means here. It is distinguishable from empezar_lote and ver_lote by verb alone, though it never names them.

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

Usage Guidelines3/5

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

Usage is only implied: an agent infers you call this to stop a running batch. There is no explicit when-to-use, no mention of empezar_lote (which produces the id) or ver_lote as an alternative for inspection, and no statement about what happens if the batch already finished.

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

comparar_formatosA

Encodes the same image in several formats at the same perceived quality (SSIMULACRA 2 score, 80 by default) and says which one is the lightest. Saves the best one (by default), all or none, always as new files. It takes a while: about 7 trials per format (with a 12 MP photo, over a minute; with 24 MP, about three). With photos over about 20 MP, better use empezar_lote with that image, the formats and mas_ligero: it does the same in the background and isn't cut off by a timeout, although it only gives the winner. For a single output already decided, optimizar_imagen. Example: {"ruta": "~/a.png", "formatos": ["webp", "avif", "jxl"]}

NameRequiredDescriptionDefault
altoNoMaximum height, in pixels: scales down if larger and never enlarges (with ancho alone, proportional).
rutaYesAbsolute path of the image (~ is accepted).
anchoNoMaximum width, in pixels: scales down if larger and never enlarges (with alto alone, proportional).
paletaNoReduce the palette to this number of colors (2 to 256), with dithering.
salidaNoFolder to save to. By default, next to the original.
guardarNoWhat to save: mejor (the best one, by default), todos (all) or ninguno (none).
recorteNoCrop to this rectangle, before resizing (in pixels of the already auto-rotated image; whatever goes past the edge is trimmed).
formatosNoThe formats to compare. By default, webp, avif and jpeg.
enderezarNoAuto-rotate according to the EXIF orientation if the photo needs it. Yes by default.
lado_mayorNoMaximum longest side, in pixels: the width if landscape, the height if portrait; never enlarges. Not together with ancho, alto or porcentaje.
porcentajeNoReduce to this percentage (50 = half the width and height). From above 0 to 100. Not together with ancho, alto or lado_mayor.
nota_objetivoNoThe SSIMULACRA 2 score they all have to reach. 80 by default.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the write-but-not-destructive profile is structured data. The description adds genuinely new context: runtime cost (about 7 trials per format, over a minute at 12 MP, ~3 minutes at 24 MP) and the timeout risk that motivates empezar_lote. It does not disclose output file naming, where the comparison report goes, or what happens when no format reaches the target score.

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

Conciseness5/5

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

Front-loaded with the purpose, then saving behavior, then cost, then alternatives, then an example — every sentence carries information an agent needs to decide or call. No filler or restatement of the title.

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

Completeness4/5

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

For a 12-parameter, nested-object tool with no output schema, the description covers what it returns at a high level (which format is lightest) and the side effects (new files, save all/none/best). What it omits — file naming, the report structure, and no-format-reaches-target behavior — are real but secondary gaps that the rich schema partly absorbs.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already carries a description with defaults and mutual exclusions, so the baseline is 3. The description only restates two defaults (80 score, the guardar modes) that the schema already documents, plus a call example that shows the ruta/formatos shape but adds no syntax beyond the schema.

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?

States a specific verb chain (encode the same image in several formats at equal perceived quality, then pick the lightest) and names the comparison metric (SSIMULACRA 2). It also draws the boundary against siblings empezar_lote and optimizar_imagen, so the agent can select it without opening the schema.

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?

Explicit routing: use empezar_lote with mas_ligero for images over ~20 MP because this tool can be cut off by a timeout, and use optimizar_imagen when a single output format is already decided. Both the when and the when-not are stated with the condition that selects the alternative.

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

empezar_loteA

Converts folders or many images in the background, subfolders included, without overwriting anything, and comes back right away with an id. By default, WebP at score 80, in a folder next to the input one (photos-webp, or photos-apolo with several formats); with loose images, in a subfolder next to them (webp/, apolo/). One at a time. Afterwards, ver_lote. Example: {"entradas": ["~/Photos/trip"], "formatos": ["webp", "avif"], "mas_ligero": true}

NameRequiredDescriptionDefault
altoNoMaximum height, in pixels: scales down if larger and never enlarges (with ancho alone, proportional).
anchoNoMaximum width, in pixels: scales down if larger and never enlarges (with alto alone, proportional).
medirNoMeasure the score of each file (takes longer).
ordenNoOptions of the official tool (only with one format).
paletaNoReduce the palette to this number of colors (2 to 256), with dithering.
presetNoA saved preset, the base for everything.
salidaNoOutput folder. By default, next to the input one with -webp, -apolo…; with loose images, a webp/, apolo/… subfolder next to them.
calidadNoFixed quality from 0 to 100. Not together with nota_objetivo.
entradasYesFolders or images, absolute paths (~ is accepted).
formatosNoOutput formats (one or several). By default, the preset's or webp.
enderezarNoAuto-rotate each photo according to its EXIF orientation if it needs it. Yes by default.
lado_mayorNoMaximum longest side, in pixels: the width if landscape, the height if portrait; never enlarges. Not together with ancho, alto or porcentaje.
mas_ligeroNoWith several formats: keep only the lightest one of each image.
porcentajeNoReduce to this percentage (50 = half the width and height). From above 0 to 100. Not together with ancho, alto or lado_mayor.
sin_perdidaNoLossless (WebP, AVIF, JPEG XL). PNG and QOI always are.
nota_objetivoNoSearch, image by image, for the quality that gives this score. 80 by default.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false; the description adds real context on top: asynchronous fire-and-return with an id, never overwriting existing files, default output naming, and serial execution. It doesn't cover failure handling or how cancellation interacts with cancelar_lote, so it's strong rather than complete.

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?

Front-loaded with the core action and return semantics, and every clause carries information (defaults, output location, sequencing). The long parenthetical sentence about default folders is dense and slightly run-on, which keeps it from a 5.

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

Completeness4/5

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

For a 16-parameter asynchronous mutation with no output schema, the description covers the return contract (an id) and the next tool to call, plus the defaults an agent needs to omit parameters safely. Only error/progress behaviour is left unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description earns more by adding default behaviour not in the schema (WebP at score 80, photos-webp / photos-apolo folder naming) and a concrete example combining entradas, formatos and mas_ligero.

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?

States a specific verb and resource: converts folders or many images in the background, subfolders included, returning an id immediately. That cleanly separates it from optimizar_imagen (single image) and ver_lote (polling the result).

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

Usage Guidelines4/5

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

The description names the follow-up step explicitly ("Afterwards, ver_lote") and says "one at a time", which tells the agent batches are serialized. It doesn't say when to prefer optimizar_imagen over a one-item batch, but the batch/single split is strongly implied.

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

guardar_presetA

Saves a combination of format and options as a new preset, to use in Apolo, on the command line or here. It doesn't overwrite: if the name exists, it's an error (changing or deleting presets is done in Apolo). Example: {"nombre": "Light web", "formato": "avif", "nota_objetivo": 75, "ancho": 1920}

NameRequiredDescriptionDefault
altoNoMaximum height, in pixels: scales down if larger and never enlarges (with ancho alone, proportional).
anchoNoMaximum width, in pixels: scales down if larger and never enlarges (with alto alone, proportional).
ordenNoOptions of the official tool, as they are: “-q 80 -m 6” (cwebp), “-quality 85 -progressive” (cjpeg), “-o 4” (oxipng), “-q 60 -s 6” (avifenc), “-d 1 -e 7” (cjxl). It may start with the tool's name. For its format, it replaces the preset's options.
nombreYesThe name of the new preset. It can't exist already.
paletaNoReduce the palette to this number of colors (2 to 256), with dithering: mainly for PNGs of logos, icons and screenshots.
presetNoA saved preset (listar_presets lists them). It is the base for everything else.
calidadNoFixed quality from 0 to 100. Not together with nota_objetivo.
formatoNowebp, jpeg, png, qoi, avif or jxl. By default, the preset's, or webp.
recorteNoCrop to this rectangle, before resizing (in pixels of the already auto-rotated image; whatever goes past the edge is trimmed).
enderezarNoAuto-rotate according to the EXIF orientation if the photo needs it. Yes by default.
lado_mayorNoMaximum longest side, in pixels: the width if landscape, the height if portrait; never enlarges. Not together with ancho, alto or porcentaje.
porcentajeNoReduce to this percentage (50 = half the width and height). From above 0 to 100. Not together with ancho, alto or lado_mayor.
sin_perdidaNoLossless (WebP, AVIF, JPEG XL). PNG and QOI always are.
nota_objetivoNoSearch for the lowest quality that gives this SSIMULACRA 2 score (90 indistinguishable; 80 very high; 70 high; 50 medium). Takes a few seconds.

TDQS

A4.5/5.0
Behavior5/5

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

Goes meaningfully beyond the annotations: annotations only say readOnly=false, idempotent=false, destructive=false, while the description explains the exact failure mode (duplicate name = error), that nothing is overwritten, and that edits/deletes must happen in Apolo. This is the behavioral detail an agent needs before calling a non-idempotent write tool.

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?

Three short sentences, front-loaded with the core action, followed by the constraint and then the example. The example earns its place as a usage anchor for a 14-parameter tool, though it is the least essential element.

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

Completeness4/5

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

For a 14-parameter, non-idempotent creation tool with no output schema, the key facts (create-only, duplicate = error, where presets are edited) are all present and per-parameter meaning is fully covered by the schema. The only gap is that it never says what a successful call returns, which matters given there is no output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds value by framing the input as a "combination of format and options" and giving a concrete worked example with nombre, formato, nota_objetivo and ancho. It doesn't explain precedence between `preset` and the overrides, but the schema already does that per-parameter.

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?

States a specific verb+resource ("Saves a combination of format and options as a new preset") and adds the scope where the preset is usable (Apolo, command line, here). It also distinguishes itself from the absent mutating operations by saying changing or deleting presets is done in Apolo, so an agent knows this tool only creates.

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

Usage Guidelines4/5

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

The create-only condition is explicit ("if the name exists, it's an error"), which tells the agent when this tool will fail. It doesn't name a sibling for checking existing names, though the `preset` parameter description points to listar_presets, so the alternative path is inferable rather than stated up front.

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

listar_presetsA
Read-onlyIdempotent

Apolo's saved presets (the same ones as the app and the command line), with their format and their command. They are used with preset in optimizar_imagen and empezar_lote.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so safety needs no repetition. The description adds genuine context beyond them: the list mirrors the app and CLI state, and each entry carries a format and a command. It does not describe ordering or empty-list behavior, but with no output schema the return content is at least characterized.

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

Conciseness5/5

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

Two short sentences with zero filler: the first identifies the resource and its payload, the second names the consuming tools. The most actionable information, what the entries contain, is front-loaded.

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

Completeness4/5

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

For a zero-parameter, read-only list tool with rich annotations, this covers what it returns and why an agent would call it. The only gap is the exact shape of each preset entry (field names, ordering), which no output schema documents either.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. The mention of the `preset` field belongs to the sibling tools, not this one's inputs, so it does not add parameter semantics here.

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

Purpose4/5

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

States a specific verb (list) and resource (Apolo's saved presets) and adds what each entry contains: format and command. It also anchors the data to the same presets as the app and CLI. It does not explicitly name the write-side sibling guardar_preset, so the create-vs-read contrast is only implied.

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

Usage Guidelines4/5

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

Explicitly tells the agent where the results are consumed: the `preset` parameter of optimizar_imagen and empezar_lote. That gives a clear call-before-optimizing workflow. It stops short of stating when not to use it or what happens if no presets exist.

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

medir_calidadA
Read-onlyIdempotent

How far an image is from its original: SSIMULACRA 2 (90 or more indistinguishable, 80 very high, 70 high, 50 noticeable), PSNR and SSIM. They have to be the same size (if the result is auto-rotated, the original is auto-rotated too). To see where the loss is, ver_imagen with diferencias_con. Example: {"original": "/a.jpg", "resultado": "/a.webp"}

NameRequiredDescriptionDefault
originalYesThe original image, absolute path.
resultadoYesThe image to measure, of the same size.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds non-obvious behavioral context beyond them: the same-size requirement and the auto-rotation coupling ('if the result is auto-rotated, the original is auto-rotated too'). It doesn't describe the shape of the returned scores, which keeps it at 4.

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 core purpose and the metric scale are front-loaded, and each subsequent sentence (size constraint, rotation note, alternative tool, example) earns its place. It is slightly dense with parenthetical scale values but not padded.

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

Completeness4/5

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

For a read-only, two-parameter tool with no output schema, the description covers purpose, constraints, and metric names, which is nearly everything an agent needs. The only gap is that the return structure of the metrics isn't described, though the metric names partly imply it.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already fully documented, making 3 the baseline. The description reinforces the constraint that original/resultado must match in size and supplies a concrete example payload, which adds modest value but no syntax beyond what the schema states.

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

Purpose4/5

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

The description opens with a specific verb-like framing ('How far an image is from its original') and names the exact metrics produced (SSIMULACRA 2, PSNR, SSIM), so the resource and operation are unambiguous. It does not explicitly contrast itself with siblings like comparar_formatos or analizar_imagen, which keeps it below a 5.

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

Usage Guidelines4/5

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

It gives a clear precondition ('They have to be the same size') and routes the agent to an alternative when the goal changes: 'To see where the loss is, ver_imagen with diferencias_con.' That is real when-to-use-this-vs-that guidance, though it lacks an explicit 'do not use for X' exclusion.

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

optimizar_imagenA

Optimizes an image and saves it as a NEW file (next to the original, or in salida; if the name exists, -2, -3…). Without a quality, it searches for the lowest one that gives a SSIMULACRA 2 score of 80. Gives the equivalent command for cwebp, cjpeg, oxipng, avifenc or cjxl. To choose between formats, comparar_formatos; for many images, empezar_lote. Examples: {"ruta": "/a.jpg"} · {"ruta": "/a.png", "formato": "avif", "nota_objetivo": 85} · {"ruta": "~/a.jpg", "formato": "webp", "orden": "-q 80 -m 6", "ancho": 1600} For the person's images, use it instead of converting them yourself in another environment (a cloud interpreter): it works with the file on their disk, with the official engines. Apolo doesn't see images attached to the conversation: if one is attached, ask for its path.

NameRequiredDescriptionDefault
altoNoMaximum height, in pixels: scales down if larger and never enlarges (with ancho alone, proportional).
rutaYesAbsolute path of the image (~ is accepted).
anchoNoMaximum width, in pixels: scales down if larger and never enlarges (with alto alone, proportional).
medirNoAlso measure PSNR and SSIM (the score is already measured when searching for it).
ordenNoOptions of the official tool, as they are: “-q 80 -m 6” (cwebp), “-quality 85 -progressive” (cjpeg), “-o 4” (oxipng), “-q 60 -s 6” (avifenc), “-d 1 -e 7” (cjxl). It may start with the tool's name. For its format, it replaces the preset's options.
paletaNoReduce the palette to this number of colors (2 to 256), with dithering: mainly for PNGs of logos, icons and screenshots.
presetNoA saved preset (listar_presets lists them). It is the base for everything else.
salidaNoWhere to put it: a folder, or a file with the format's extension. By default, next to the original. Nothing is ever overwritten.
calidadNoFixed quality from 0 to 100. Not together with nota_objetivo.
formatoNowebp, jpeg, png, qoi, avif or jxl. By default, the preset's, or webp.
recorteNoCrop to this rectangle, before resizing (in pixels of the already auto-rotated image; whatever goes past the edge is trimmed).
enderezarNoAuto-rotate according to the EXIF orientation if the photo needs it. Yes by default.
lado_mayorNoMaximum longest side, in pixels: the width if landscape, the height if portrait; never enlarges. Not together with ancho, alto or porcentaje.
porcentajeNoReduce to this percentage (50 = half the width and height). From above 0 to 100. Not together with ancho, alto or lado_mayor.
sin_perdidaNoLossless (WebP, AVIF, JPEG XL). PNG and QOI always are.
nota_objetivoNoSearch for the lowest quality that gives this SSIMULACRA 2 score (90 indistinguishable; 80 very high; 70 high; 50 medium). Takes a few seconds.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=false, idempotent=false) by disclosing that nothing is overwritten and collisions get -2, -3 suffixes, that omitting quality triggers an SSIMULACRA 2 search (costing a few seconds), and that processing happens against the user's local files with official engines. This makes the non-idempotent, non-destructive write semantics concrete.

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?

Dense but front-loaded: purpose, then default behavior, then sibling routing, then examples, then environment caveats. Every sentence carries information, though the examples block and the 'official engines' justification could be trimmed without loss.

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

Completeness4/5

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

For a 16-parameter tool with no output schema, the description still explains the primary return ('gives the equivalent command for cwebp, cjpeg, oxipng, avifenc or cjxl') and the default decision path. It does not explicitly state whether the created file's path is returned, which is the one thing an agent might still need to discover.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds real value on top by stating the default target score of 80 when no quality is given, the default format (webp), and showing three concrete parameter combinations. The examples are illustrative rather than explaining every optional parameter, which the schema already handles.

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?

States a specific verb+resource ('Optimizes an image and saves it as a NEW file') with output-location and collision-naming behavior spelled out. It explicitly distinguishes itself from sibling workflows for format choice and batching, so an agent can place it immediately.

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?

Names the alternatives with their selecting conditions ('To choose between formats, comparar_formatos; for many images, empezar_lote') and adds a strong negative rule: don't convert images yourself in a cloud interpreter, use this so the file stays on the user's disk with the official engines. It even covers the edge case of images attached to the conversation, telling the agent to ask for a path.

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

ver_imagenA
Read-onlyIdempotent

Returns the image to look at: scaled down (768 px by default), an area at full size to spot defects, or the map of differences from its original (diferencias_con). Each view uses up context: ask for one only when it helps. Examples: {"ruta": "/a.webp"} · {"ruta": "/a.webp", "diferencias_con": "/a.jpg"} · {"ruta": "/a.webp", "zona": {"x": 400, "y": 300, "ancho": 256, "alto": 256}}

NameRequiredDescriptionDefault
rutaYesAbsolute path of the image to view.
zonaNoView only this area, in pixels of the image (to look at defects at 1:1).
lado_maxNoThe longest side of the view, in pixels: 768 by default, 1568 at most.
tipo_mapaNoWith diferencias_con: estructura (structure, by default) or diferencia (difference).
diferencias_conNoPath of the original: instead of the image, the map of where it departs from it.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds the non-obvious behavioral fact that every view spends context budget, and reveals the default downscale (768 px) and that a difference map replaces the image output when diferencias_con is set. It stops short of describing returned image format or size interaction between lado_max and zona.

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

Conciseness5/5

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

Front-loaded with what the tool returns and its three modes, then the cost caveat, then compact examples. No filler sentences; every clause either defines a mode or constrains usage.

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

Completeness4/5

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

For a 5-parameter tool with a nested object and no output schema, the description covers all modes and the interaction between them well enough to call it correctly. Minor gap: it does not clarify what happens if zona exceeds the image bounds or how lado_max is ignored when zona is given.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by showing three concrete call shapes that demonstrate how ruta, diferencias_con, and the nested zona object combine, making the mutual interaction of these parameters explicit rather than leaving the agent to infer it.

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

Purpose4/5

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

States a concrete verb and resource: it returns the image for viewing, with the three distinct modes spelled out (scaled-down view, 1:1 area crop, difference map against an original). An agent understands exactly what comes back. It does not name or contrast with siblings like analizar_imagen or comparar_formatos, so it falls short of a 5.

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

Usage Guidelines3/5

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

"Ask for one only when it helps" plus the note that each view consumes context gives a real usage condition and cost trade-off. The worked examples map each mode to a call shape. However, there is no explicit guidance on when to prefer this over analizar_imagen, comparar_formatos, or medir_calidad, which is the main selection risk given those siblings.

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

ver_loteA
Read-onlyIdempotent

How a batch is going: the new images since “desde”, and the summary when it ends. With esperar_segundos (up to 25) it waits until there is something new, instead of asking in a loop. Example: {"id": "l-1", "esperar_segundos": 20}

NameRequiredDescriptionDefault
idYesThe id that empezar_lote gave, like “l-3”.
desdeNoFrom which image to count the new ones (siguiente_desde from the previous answer). 0 by default: all of them.
esperar_segundosNoWait up to this number of seconds (25 at most) for something new or for the end, instead of asking in a loop.

TDQS

A4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds real behavior: it returns only images newer than "desde", emits a final summary when the batch ends, and blocks up to 25 seconds. That long-poll semantics are exactly what an agent needs to avoid a polling loop and is not in the annotations.

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

Conciseness5/5

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

Two dense sentences plus one concrete example object, with the return shape front-loaded and the long-poll rule immediately after. Nothing is padded and the example disambiguates the call format.

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

Completeness4/5

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

There is no output schema, so the description carries the burden of describing the return, which it does at the level of 'new images since desde' and 'summary when it ends', though it never names the response fields (e.g. siguiente_desde is only mentioned inside the parameter schema). For a read-only polling tool this is largely sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already defines id, desde, and esperar_segundos in detail. The description reinforces the coordination semantics (desde as a continuation cursor from the previous answer) and supplies a worked example, but adds little that the schema does not already say.

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

Purpose4/5

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

The description states precisely what the tool returns: the batch's progress, the new images since "desde", and a closing summary. It doesn't explicitly name its siblings (empezar_lote, cancelar_lote), but the id parameter's origin already establishes it as the companion reader to empezar_lote.

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

Usage Guidelines4/5

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

It gives clear guidance on the long-poll pattern: use esperar_segundos (max 25) to wait rather than re-asking in a loop. The condition for choosing a wait versus an immediate read is stated, though there is no explicit statement of when not to use the tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv0.1.0
    • First observedacerca_de_apolo
    • First observedanalizar_imagen
    • First observedcancelar_lote
    • First observedcomparar_formatos
    • First observedempezar_lote
    • First observedguardar_preset
    • First observedlistar_presets
    • First observedmedir_calidad
    • First observedoptimizar_imagen
    • First observedver_imagen
    • First observedver_lote

TDQS

A4.1/5.0

Scored across 11 tools

Disambiguation4/5

Tools are mostly distinct: inspection (analizar_imagen), quality measurement (medir_calidad), viewing (ver_imagen) and the batch lifecycle (empezar/ver/cancelar_lote) are cleanly separated. The only mild overlap is between comparar_formatos and optimizar_imagen, since both encode an image, but the descriptions explicitly cross-reference each other and state when to use which.

Naming Consistency5/5

All names follow a consistent Spanish verb_noun snake_case pattern (analizar_imagen, optimizar_imagen, empezar_lote, ver_lote, guardar_preset, listar_presets, medir_calidad). acerca_de_apolo is the only non-verb name, but 'about' naming is a conventional exception and remains clearly readable.

Tool Count5/5

Eleven tools is well within the ideal range and each maps to a genuine step in the image optimization workflow: inspect, optimize, compare, measure, view, batch, presets, info. No tool appears redundant or like filler.

Completeness4/5

Coverage is strong: single-image and batch conversion, cancellation and progress polling, quality metrics, visual diffing, and preset listing/creation form a full lifecycle. The main gap is preset management — update/delete are explicitly deferred to the Apolo app, so an agent cannot fully manage presets from here.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers