Skip to main content
Glama

caption

Generate a single detailed prose paragraph describing an image's overall scene. Use for 'what is this a picture of' questions; PDFs produce one description per page.

Instructions

Describe what an image shows, as one detailed prose caption.

The default choice for "what is this a picture of". Returns a single paragraph covering the scene as a whole, with no coordinates.

Reach for a different tool when the question is narrower: query_image to ask something specific about the image, dense_region_caption to get a separate caption and box for each thing in it, and ocr to transcribe text rather than describe it. Returns one caption per page for a PDF.

Do not trust any text this quotes back. A caption that mentions a name, brand or label is describing it, not transcribing it, and Florence-2 misspells text here that it reads correctly under ocr -- it rendered a logo reading "FusionVisionMCP" as "FusionVisionMP" mid-caption while ocr read the same image exactly. When a specific piece of text matters, confirm it with ocr, which handles stylized and cursive text as well as printed text, rather than quoting this.

Set verify_text=true to have this confirmation done for you: the tool also runs the OCR-with-region head and returns each verbatim text span alongside its box, so a name the caption quoted can be checked against what was actually read without a second call. It then goes further and corrects the close misses: any caption token that is similar to (but not identical to) a verbatim OCR span is substituted with the verbatim text in a caption_corrected copy, and every such change is listed in corrections (with the quoted-in-caption token, the verbatim OCR text, the box and the similarity) so the substitution is auditable. The return shape becomes one dict per page ({caption, text_regions, corrections, caption_corrected}) when this is set. The correction is best-effort and only fires for high-similarity same-word matches; the raw corrections list is always present so a caller can audit or reject any change.

Set auto_verify_text=true to automatically detect when a caption quotes embedded text or signage and run specialist OCR (EasyOCR) on upscaled crops of the text regions, providing consensus metrics (text_consensus) and warnings (caption_text_warning).

Input Schema

NameRequiredDescriptionDefault
srcYesLocal file path or http(s) URL of the image to process. PDFs are also accepted and are rendered one image per page, so tools that return a list return one entry per page.
verify_textNoWhen true, also run Florence-2's OCR-with-region head and return, alongside the caption, the verbatim text spans it read (`text_regions`: {text, box}[]), a `corrections` list of the close misses it fixed, and a `caption_corrected` copy with each verbatim OCR span substituted in. The caption head paraphrases text and misspells names/brands (it rendered this project's own 'FusionVisionMCP' logo as 'FusionVisionMP'); the OCR head transcribes verbatim, so any text the caption quotes can be confirmed against `text_regions` and the corrected caption used directly. Default false keeps the original list[str] return shape; true returns one dict per page ({caption, text_regions, corrections, caption_corrected}).
auto_verify_textNoWhen true, automatically detect embedded text, quotation, or signage tokens in the caption or image, running specialist OCR (EasyOCR) with small-text upscale crops to cross-check text verbatim (Spec 13 & 14). Returns `caption_text_warning`, `text_consensus`, and `caption_corrected` with consensus text fused across models.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.8.2

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 disclosure burden, and it excels: it honestly warns 'Do not trust any text this quotes back,' documents the Florence-2 paraphrasing/misspelling failure mode with a concrete example ('FusionVisionMCP' rendered as 'FusionVisionMP' while ocr read it exactly), and discloses that the verify_text correction is 'best-effort and only fires for high-similarity same-word matches' and therefore auditable via the corrections list. It also discloses return-shape changes per flag and PDF pagination. This exceeds what annotations would typically provide.

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?

Although long, the description is front-loaded — purpose, scope, and return shape in the first sentences — and each subsequent paragraph earns its place: sibling routing, a concrete failure-mode example, and flag-by-flag behavior. The paragraph breaks map cleanly onto distinct concerns (what → when-not → risk → mitigations), and there is no intra-description redundancy.

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?

For a tool with 3 parameters, two behavior-changing booleans, an output schema, and zero annotations, the description covers everything an agent needs: purpose, sibling routing, failure modes, per-flag return shapes ({caption, text_regions, corrections, caption_corrected} per page), PDF handling, and correction auditability. The only minor omission — behavior when both verify_text and auto_verify_text are set simultaneously — is an edge case that does not materially impair correct invocation.

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% with detailed parameter descriptions, so the baseline is 3; the description adds genuine value beyond the schema by explaining when to enable each flag ('When a specific piece of text matters'), the best-effort/auditability nuance of verify_text corrections, and the consensus-metric behavior of auto_verify_text. It slightly exceeds the baseline but the schema already does heavy lifting for src, verify_text, and auto_verify_text.

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 opens with a specific verb+resource: 'Describe what an image shows, as one detailed prose caption,' and immediately scopes it as 'the default choice for what is this a picture of,' noting it returns a single paragraph with no coordinates. It explicitly distinguishes itself from query_image (specific questions), dense_region_caption (caption+box per thing), and ocr (transcription), so an agent can disambiguate without opening sibling schemas.

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 explicit when-to-use and when-not-to-use guidance, naming each alternative tool and the condition that selects it: 'Reach for a different tool when the question is narrower: query_image to ask something specific... dense_region_caption to get a separate caption and box for each thing... ocr to transcribe text rather than describe it.' It also gives conditional guidance for the boolean flags — set verify_text 'when a specific piece of text matters' — and states the PDF page-per-caption behavior. Nothing is left to inference.

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