Skip to main content
Glama

Before & After Image

before_after_image

Free (no credits): one comparison image from a before and an after photo of the same place — e.g. an empty room and its virtual staging, a daylight shot and its dusk version, a room before and after a restyle. Side by side, stacked, or split by a line; original shape, square, 4:5 or 9:16. Write the labels in the user's language. Returns a finished image at once.

Input Schema

NameRequiredDescriptionDefault
aspectNoShape of the image: original (follows the photos), 1:1 square, 4:5 Instagram post, 9:16 Stories/Reels.original
labelsNoShow the Before / After labels.
layoutNoside = next to each other, stack = one above the other, vsplit = one frame split by a vertical line, diagonal = split by a slanted line.side
listingIdNoA property folder (from list_listings or create_listing) to put the result in. Results of a photo that is already in a folder go there by themselves.
afterLabelNoLabel text for the after photo, in the user's language (default "After").
afterR2PathNoStorage path of the after photo — the alternative to afterImageUrl.
beforeLabelNoLabel text for the before photo, in the user's language (default "Before").
beforeR2PathNoStorage path of the before photo — the alternative to beforeImageUrl. For a Pixly result, its original photo is the job's source.
afterImageUrlNoThe AFTER photo (e.g. the staged room, the dusk version). Public https URL or data: URI; or afterR2Path.
beforeImageUrlNoThe BEFORE photo (e.g. the empty room, the daylight shot). Public https URL or data: URI; or beforeR2Path.

Output Schema

NameRequiredDescriptionDefault
jobsNoSeveral jobs at once (get_job with jobIds, or a plan's steps): each one's jobId, status and results
noteNo
typeNo
errorNo
jobIdYesPass to get_job to poll
quoteNoPresent when status is "awaiting_confirmation": nothing ran and nothing was charged yet — the price and settings the user is asked to confirm
statusYespending | processing | completed | failed — anything not completed/failed is still running
createdAtNo
resultUrlsNoPresent when completed; valid 7 days
completedAtNo
resultPathsNoStorage path of each result — pass one as r2Path (or beforeR2Path, a photos[] item) to run another tool on this result
creditsChargedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / listingId
      Added value: +{
      +  "description": "A property folder (from list_listings or create_listing) to put the result in. Results of a photo that is already in a folder go there by themselves.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / jobs
      Added value: +{
      +  "description": "Several jobs at once (get_job with jobIds, or a plan's steps): each one's jobId, status and results",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • addedOutput schema / properties / quote
      Added value: +{
      +  "description": "Present when status is \"awaiting_confirmation\": nothing ran and nothing was charged yet — the price and settings the user is asked to confirm",
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • addedOutput schema / properties / resultPaths
      Added value: +{
      +  "description": "Storage path of each result — pass one as r2Path (or beforeR2Path, a photos[] item) to run another tool on this result",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive, open-world behavior. The description adds two useful facts beyond them: it is credit-free, and it returns synchronously ('Returns a finished image at once'), which tells the agent not to poll for a job. It stops short of stating whether repeated calls produce new artifacts, which the non-idempotent hint would make relevant.

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?

One densely packed sentence, front-loaded with the most decision-relevant token ('Free (no credits)') and closing with the output/timing statement. Every clause carries information, though the enumeration of examples and layout/aspect forms duplicates schema enums and could be tightened.

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?

With 10 parameters, 100% schema coverage, an output schema present, and annotations covering the safety profile, the description supplies what structured fields cannot: the free-of-cost condition, the synchronous return, and the paired-photo premise. Nothing essential for correct invocation is missing; only explicit sibling routing is absent.

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

Parameters5/5

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

Although schema coverage is already 100%, the description adds genuine semantics beyond the schema: it declares the implicit requirement of a before/after pair of the same place (which 0-required-parameter schema does not enforce) and reiterates the label-language rule. The layout and aspect options it mentions ('side by side, stacked, or split by a line; original shape, square, 4:5 or 9:16') map to enum values already documented, so the added value sits mainly in the input-pairing constraint.

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 concrete verb and artifact: it produces 'one comparison image from a before and an after photo of the same place', backed by three concrete example pairs (empty room/staged, daylight/dusk, before/after restyle). It also names the output medium ('a finished image at once'), which implicitly separates it from the sibling before_after_reel. An agent can identify the resource and result type 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 Guidelines4/5

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

It gives rich when-to-use context in the form of scenario examples ('an empty room and its virtual staging', 'a daylight shot and its dusk version') and flags a cost condition ('Free (no credits)'). However, it never states when to choose this over alternatives like before_after_reel or day_to_night, nor any exclusions or prerequisites, so selection guidance is contextual rather than explicit.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources