Skip to main content
Glama

Scan a web page

scan_page

Open a web page in a browser on Iminify's servers, collect every image it loads (scrolling to the bottom), and compress each one with the settings given; the finished scan also reports how the page shows its images (get_scan, in audit). It answers straight away with the scan queued; a scan takes from a few seconds to a few minutes, so call get_scan until its status is no longer queued or scanning and images_in_progress is 0. Each scan counts one against the account's daily page scans; the images it finds do not count against its daily images. Pages on private networks are refused, and a page behind a login usually comes back with no images. The page scans reference: https://www.iminify.com/docs/page-scans

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYesThe page to scan. https:// can be left out.
levelNoHow hard to compress. "smart" (the default) finds the lowest quality that still looks like the original; "ultra" goes further and softens fine texture a little; "lossless" changes no pixel; "none" only converts, resizes and strips metadata.
scaleNoResize to this percentage of the original, 1 to 100. Not together with width or height.
widthNoResize to this width in pixels. Alone, the height follows the aspect ratio; with height too, the image is resized to exactly that size.
formatNoConvert to this format. "auto" encodes every format that can hold the image and keeps the smallest. Leave it out to keep each image's own format (a HEIC or TIFF always comes back in another one).
heightNoResize to this height in pixels, the same way as width.
alt_textNoWrite an AI alt text for each image the page shows with no alt attribute, for the audit's suggested_alt. On by default; false leaves it out. Each counts against the account's daily AI alt texts.
keep_metadataNoKeep the EXIF metadata (camera, date, location). Off by default, which strips it; the orientation is applied to the pixels first.
alt_text_languageNoThe language to write the alt text in, as a language tag. English ("en") by default. The suggested file name follows it for languages written in the Latin alphabet and is in English otherwise.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoThe scan's id.
urlNoThe page scanned.
hintNoWhat to do next, while the scan or its images are still running.
noteNoWhat the scan found, or why it stopped.
auditNoThe page audit: oversized images, missing dimensions and alt text, lazy loading in the wrong place, the largest contentful paint. Null until the scan has finished.
imagesNoThe images the scan found, newest first.
statusNo
skippedNoThe images the scan found and did not compress, each with why.
settingsNo
share_urlNoThe page report's public link while it is shared; it answers only while the account has Pro.
created_atNo
updated_atNo
saved_bytesNo
images_countNo
original_sizeNoBytes, over the finished images.
saved_percentNo
optimized_sizeNoBytes, over the finished images.
images_finishedNo
images_in_progressNo
alt_texts_in_progressNoFinished images whose AI alt text for the audit's suggested_alt is still being written.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • addedInput schema / properties / alt_text
      Added value: +{
      +  "description": "Write an AI alt text for each image the page shows with no alt attribute, for the audit's suggested_alt. On by default; false leaves it out. Each counts against the account's daily AI alt texts.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / alt_text_language
      Added value: +{
      +  "description": "The language to write the alt text in, as a language tag. English (\"en\") by default. The suggested file name follows it for languages written in the Latin alphabet and is in English otherwise.",
      +  "enum": [
      +    "en",
      +    "es",
      +    "fr",
      +    "de",
      +    "it",
      +    "pt",
      +    "nl",
      +    "pl",
      +    "sv",
      +    "tr",
      +    "ru",
      +    "uk",
      +    "ar",
      +    "fa",
      +    "he",
      +    "hi",
      +    "id",
      +    "vi",
      +    "th",
      +    "ja",
      +    "ko",
      +    "zh-Hans",
      +    "zh-Hant"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / alt_texts_in_progress
      Added value: +{
      +  "description": "Finished images whose AI alt text for the audit's suggested_alt is still being written.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / audit / properties / images / items / properties / suggested_alt
      Added value: +{
      +  "description": "An AI alt text for an image the page shows without one, once written; null while alt_texts_in_progress counts it, or when it was skipped, failed or not asked for.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / audit / properties / images / items / required
      Previous value: -[
      -  "url",
      -  "format",
      -  "bytes",
      -  "natural_width",
      -  "natural_height",
      -  "rendered_width",
      -  "rendered_height",
      -  "above_fold",
      -  "largest_paint",
      -  "alt",
      -  "findings",
      -  "wasted_bytes",
      -  "outcome",
      -  "skip_reason",
      -  "image_id",
      -  "format_sizes"
      -]New value: +[
      +  "url",
      +  "format",
      +  "bytes",
      +  "natural_width",
      +  "natural_height",
      +  "rendered_width",
      +  "rendered_height",
      +  "above_fold",
      +  "largest_paint",
      +  "alt",
      +  "findings",
      +  "wasted_bytes",
      +  "outcome",
      +  "skip_reason",
      +  "image_id",
      +  "format_sizes",
      +  "suggested_alt"
      +]
    • addedOutput schema / properties / images / items / properties / alt_text
      Added value: +{
      +  "description": "The AI alt text, or null when none was asked for.",
      +  "properties": {
      +    "language": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "pending: being written, a few seconds after the image is completed or already-optimized; it waits for a retry while the image is failed or cancelled. written: ready. failed: ask again with write_alt_text. skipped: the day's AI alt texts were used up.",
      +      "enum": [
      +        "pending",
      +        "written",
      +        "failed",
      +        "skipped"
      +      ],
      +      "type": "string"
      +    },
      +    "suggested_name": {
      +      "description": "A descriptive file name without an extension, for rename_image.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "text": {
      +      "description": "One sentence for the image's alt attribute, once written.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "text",
      +    "language",
      +    "suggested_name"
      +  ],
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / images / items / required
      Previous value: -[
      -  "id",
      -  "status",
      -  "name",
      -  "original",
      -  "optimized",
      -  "saved_bytes",
      -  "saved_percent",
      -  "settings",
      -  "scan_id",
      -  "source_url",
      -  "share_url",
      -  "created_at",
      -  "updated_at"
      -]New value: +[
      +  "id",
      +  "status",
      +  "name",
      +  "original",
      +  "optimized",
      +  "saved_bytes",
      +  "saved_percent",
      +  "settings",
      +  "alt_text",
      +  "scan_id",
      +  "source_url",
      +  "share_url",
      +  "created_at",
      +  "updated_at"
      +]
  2. Changed1 schema field changed
    • addedOutput schema / properties / share_url
      Added value: +{
      +  "description": "The page report's public link while it is shared; it answers only while the account has Pro.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / audit
      Added value: +{
      +  "description": "The page audit: oversized images, missing dimensions and alt text, lazy loading in the wrong place, the largest contentful paint. Null until the scan has finished.",
      +  "properties": {
      +    "bytes": {
      +      "description": "What a browser downloaded for the images listed.",
      +      "type": "integer"
      +    },
      +    "findings": {
      +      "description": "How many images have each finding.",
      +      "properties": {
      +        "eager_below_fold": {
      +          "type": "integer"
      +        },
      +        "lazy_above_fold": {
      +          "type": "integer"
      +        },
      +        "lcp_not_prioritized": {
      +          "type": "integer"
      +        },
      +        "missing_alt": {
      +          "type": "integer"
      +        },
      +        "oversized": {
      +          "type": "integer"
      +        },
      +        "without_dimensions": {
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "oversized",
      +        "without_dimensions",
      +        "lazy_above_fold",
      +        "eager_below_fold",
      +        "missing_alt",
      +        "lcp_not_prioritized"
      +      ],
      +      "type": "object"
      +    },
      +    "formats": {
      +      "description": "How many images arrived in each format, as a browser received them.",
      +      "items": {
      +        "properties": {
      +          "count": {
      +            "type": "integer"
      +          },
      +          "format": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "format",
      +          "count"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "images": {
      +      "description": "Every image address the page had, in the page's order. Only when get_scan is called with audit_images.",
      +      "items": {
      +        "properties": {
      +          "above_fold": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "alt": {
      +            "enum": [
      +              "missing",
      +              "empty",
      +              "present",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "bytes": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "findings": {
      +            "items": {
      +              "enum": [
      +                "oversized",
      +                "without_dimensions",
      +                "lazy_above_fold",
      +                "eager_below_fold",
      +                "missing_alt",
      +                "lcp_not_prioritized"
      +              ],
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "format": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "format_sizes": {
      +            "description": "What each format came to when the scan's format was auto.",
      +            "items": {
      +              "properties": {
      +                "bytes": {
      +                  "type": "integer"
      +                },
      +                "format": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "format",
      +                "bytes"
      +              ],
      +              "type": "object"
      +            },
      +            "type": [
      +              "array",
      +              "null"
      +            ]
      +          },
      +          "image_id": {
      +            "description": "The compressed image, for get_image.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "largest_paint": {
      +            "type": "boolean"
      +          },
      +          "natural_height": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "natural_width": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "outcome": {
      +            "enum": [
      +              "compressed",
      +              "skipped",
      +              "left_out"
      +            ],
      +            "type": "string"
      +          },
      +          "rendered_height": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "rendered_width": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "skip_reason": {
      +            "enum": [
      +              "duplicate",
      +              "unsupported_format",
      +              "too_large",
      +              "tracking_pixel",
      +              "private_network",
      +              "unreadable",
      +              "unreachable",
      +              "refused",
      +              "failed",
      +              null
      +            ],
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "url": {
      +            "type": "string"
      +          },
      +          "wasted_bytes": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "url",
      +          "format",
      +          "bytes",
      +          "natural_width",
      +          "natural_height",
      +          "rendered_width",
      +          "rendered_height",
      +          "above_fold",
      +          "largest_paint",
      +          "alt",
      +          "findings",
      +          "wasted_bytes",
      +          "outcome",
      +          "skip_reason",
      +          "image_id",
      +          "format_sizes"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "images_found": {
      +      "type": "integer"
      +    },
      +    "largest_paint": {
      +      "description": "The largest contentful paint: the biggest thing in the first screen.",
      +      "properties": {
      +        "element": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "kind": {
      +          "enum": [
      +            "image",
      +            "text",
      +            "none"
      +          ],
      +          "type": "string"
      +        },
      +        "url": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "kind",
      +        "element",
      +        "url"
      +      ],
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "oversized_bytes": {
      +      "description": "About how many bytes the oversized images would shed at twice their shown size.",
      +      "type": "integer"
      +    },
      +    "rendered": {
      +      "description": "False when only the page's HTML could be read, so nothing about how images are shown is known.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "rendered",
      +    "images_found",
      +    "largest_paint",
      +    "findings",
      +    "oversized_bytes",
      +    "bytes",
      +    "formats"
      +  ],
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  4. Changed2 schema fields changed
    • addedOutput schema / properties / images / items / properties / source_url
      Added value: +{
      +  "description": "The address it was fetched from: its address on the scanned page, or the url it was sent as. Null for a file.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / images / items / required
      Previous value: -[
      -  "id",
      -  "status",
      -  "name",
      -  "original",
      -  "optimized",
      -  "saved_bytes",
      -  "saved_percent",
      -  "settings",
      -  "scan_id",
      -  "share_url",
      -  "created_at",
      -  "updated_at"
      -]New value: +[
      +  "id",
      +  "status",
      +  "name",
      +  "original",
      +  "optimized",
      +  "saved_bytes",
      +  "saved_percent",
      +  "settings",
      +  "scan_id",
      +  "source_url",
      +  "share_url",
      +  "created_at",
      +  "updated_at"
      +]
  5. Changed3 schema fields changed
    • addedOutput schema / properties / images / items / properties / settings / properties / format
      Added value: +{
      +  "description": "The format asked for, or null when none was sent. auto stays auto after the image finishes.",
      +  "enum": [
      +    "auto",
      +    "webp",
      +    "avif",
      +    "png",
      +    "jpg",
      +    null
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / images / items / properties / settings / required
      Previous value: -[
      -  "level",
      -  "keep_metadata",
      -  "width",
      -  "height",
      -  "scale"
      -]New value: +[
      +  "level",
      +  "format",
      +  "keep_metadata",
      +  "width",
      +  "height",
      +  "scale"
      +]
    • addedOutput schema / properties / skipped
      Added value: +{
      +  "description": "The images the scan found and did not compress, each with why.",
      +  "items": {
      +    "properties": {
      +      "message": {
      +        "type": "string"
      +      },
      +      "reason": {
      +        "enum": [
      +          "duplicate",
      +          "unsupported_format",
      +          "too_large",
      +          "tracking_pixel",
      +          "private_network",
      +          "unreadable",
      +          "unreachable",
      +          "refused",
      +          "failed"
      +        ],
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "url",
      +      "reason",
      +      "message"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "created_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "hint": {
      +      "description": "What to do next, while the scan or its images are still running.",
      +      "type": "string"
      +    },
      +    "id": {
      +      "description": "The scan's id.",
      +      "type": "string"
      +    },
      +    "images": {
      +      "description": "The images the scan found, newest first.",
      +      "items": {
      +        "properties": {
      +          "created_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "hint": {
      +            "description": "What to do next, when the status alone does not say.",
      +            "type": "string"
      +          },
      +          "id": {
      +            "description": "The image's id.",
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "The name the optimized copy downloads under.",
      +            "type": "string"
      +          },
      +          "optimized": {
      +            "description": "Null until the image has finished.",
      +            "properties": {
      +              "download_url": {
      +                "description": "Works without a token for an hour.",
      +                "type": "string"
      +              },
      +              "format": {
      +                "type": "string"
      +              },
      +              "height": {
      +                "type": "integer"
      +              },
      +              "name": {
      +                "type": "string"
      +              },
      +              "size": {
      +                "description": "Bytes.",
      +                "type": "integer"
      +              },
      +              "width": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "name",
      +              "format",
      +              "size",
      +              "width",
      +              "height",
      +              "download_url"
      +            ],
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "original": {
      +            "properties": {
      +              "download_url": {
      +                "description": "Works without a token for an hour.",
      +                "type": "string"
      +              },
      +              "format": {
      +                "type": "string"
      +              },
      +              "height": {
      +                "type": "integer"
      +              },
      +              "name": {
      +                "type": "string"
      +              },
      +              "size": {
      +                "description": "Bytes.",
      +                "type": "integer"
      +              },
      +              "width": {
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "name",
      +              "format",
      +              "size",
      +              "width",
      +              "height",
      +              "download_url"
      +            ],
      +            "type": "object"
      +          },
      +          "saved_bytes": {
      +            "description": "Negative when the optimized copy is larger.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "saved_percent": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "scan_id": {
      +            "description": "The page scan that found it, if one did.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "settings": {
      +            "properties": {
      +              "height": {
      +                "type": [
      +                  "integer",
      +                  "null"
      +                ]
      +              },
      +              "keep_metadata": {
      +                "type": "boolean"
      +              },
      +              "level": {
      +                "enum": [
      +                  "none",
      +                  "lossless",
      +                  "ultra",
      +                  "smart",
      +                  null
      +                ],
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "scale": {
      +                "type": [
      +                  "integer",
      +                  "null"
      +                ]
      +              },
      +              "width": {
      +                "type": [
      +                  "integer",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "level",
      +              "keep_metadata",
      +              "width",
      +              "height",
      +              "scale"
      +            ],
      +            "type": "object"
      +          },
      +          "share_url": {
      +            "description": "Its public page, once shared.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "enum": [
      +              "queued",
      +              "optimizing",
      +              "completed",
      +              "failed",
      +              "already-optimized",
      +              "cancelled"
      +            ],
      +            "type": "string"
      +          },
      +          "updated_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "status",
      +          "name",
      +          "original",
      +          "optimized",
      +          "saved_bytes",
      +          "saved_percent",
      +          "settings",
      +          "scan_id",
      +          "share_url",
      +          "created_at",
      +          "updated_at"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "images_count": {
      +      "type": "integer"
      +    },
      +    "images_finished": {
      +      "type": "integer"
      +    },
      +    "images_in_progress": {
      +      "type": "integer"
      +    },
      +    "note": {
      +      "description": "What the scan found, or why it stopped.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "optimized_size": {
      +      "description": "Bytes, over the finished images.",
      +      "type": "integer"
      +    },
      +    "original_size": {
      +      "description": "Bytes, over the finished images.",
      +      "type": "integer"
      +    },
      +    "saved_bytes": {
      +      "type": "integer"
      +    },
      +    "saved_percent": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "settings": {
      +      "properties": {
      +        "format": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "height": {
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "keep_metadata": {
      +          "type": "boolean"
      +        },
      +        "level": {
      +          "enum": [
      +            "none",
      +            "lossless",
      +            "ultra",
      +            "smart"
      +          ],
      +          "type": "string"
      +        },
      +        "scale": {
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "width": {
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "level",
      +        "format",
      +        "keep_metadata",
      +        "width",
      +        "height",
      +        "scale"
      +      ],
      +      "type": "object"
      +    },
      +    "status": {
      +      "enum": [
      +        "queued",
      +        "scanning",
      +        "completed",
      +        "failed",
      +        "no-image-found",
      +        "cancelled"
      +      ],
      +      "type": "string"
      +    },
      +    "updated_at": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "url": {
      +      "description": "The page scanned.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  7. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources