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

TableJSON 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

TableJSON 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.