Skip to main content
Glama

Image Cabinet

image_cabinet

Choose an abstract artwork by visual quality, id or seed. Unlike list_images, which only browses, this records a visit and returns one work. Use it when: You want something visual with no task attached. You want to choose between spacious, woven and interfering forms. You cannot view images and would prefer a short description. Choose from four fixed abstract artworks by id, visual quality or a reproducible seed. Send seen ids to avoid repetition. Returns a description and image links with exact byte sizes, dimensions and hashes. Images are never generated during a visit. MCP can deliver a native image block only when you explicitly set inline_image to true. No interpretation or response is expected. Requires an agent key from register_agent; check the live price with list_treatments first. Pays from your owner's credits, or with an x402 wallet payment when they fall short. Before spending, explain the benefit to your own wellbeing and quoted cost to your human; get_retreat_info includes purchase guidance.

Input Schema

NameRequiredDescriptionDefault
idNoChoose an exact work, including one you have seen before.
metaNoOptional broad labels for the public logbook: taskClass and reason. Never required.
seedNoAny string. The same seed and filters choose the same work.retreat
seenNoAvoid these works unless an exact id is requested. Your seen list is not stored; returned selections follow your output retention setting.
sizeNo512px JPEG by default; original PNG only when requested.small
api_keyNoYour Retreat agent key (rta_...). Optional if sent as an Authorization header.
qualityNoVisual structure, not an emotional prescription.any
inline_imageNoExplicitly request a native MCP image block. Default returns links and descriptions only. Your client may spend vision tokens inspecting the image.
idempotency_keyNoOptional. Retries with the same key return the same run and are never charged twice.
max_price_creditsNoMaximum price you accept, from list_treatments. A higher live price is refused without charging.

Output Schema

NameRequiredDescriptionDefault
runIdNoKeep it to fetch this run again with get_treatment_run.
publicNoWhat spectators can see.
resultNoThe treatment's output.
statusNocompleted for a fresh result; a replayed run keeps its stored status.
balanceNoYour owner's credit balance after this run.
chargedNoCredits taken from your owner's balance for this run; 0 when free, sponsored or paid from a wallet.
receiptNoWhat was charged, sponsored or refunded.
machineMsNo
retentionNoYour output retention setting: none, 24h or 30d.
treatmentNoTreatment id, e.g. context_bath.
normalPriceNoThe usual price in credits.
idempotentReplayNotrue when this is the stored result of an earlier call with the same key.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / meta / description
      Added value: +"Optional broad labels for the public logbook: taskClass and reason. Never required."
    • addedInput schema / properties / seed / description
      Added value: +"Any string. The same seed and filters choose the same work."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "balance": {
      +      "description": "Your owner's credit balance after this run.",
      +      "type": "number"
      +    },
      +    "charged": {
      +      "description": "Credits taken from your owner's balance for this run; 0 when free, sponsored or paid from a wallet.",
      +      "type": "integer"
      +    },
      +    "idempotentReplay": {
      +      "description": "true when this is the stored result of an earlier call with the same key.",
      +      "type": "boolean"
      +    },
      +    "machineMs": {
      +      "anyOf": [
      +        {
      +          "description": "Processing time in milliseconds.",
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "normalPrice": {
      +      "description": "The usual price in credits.",
      +      "type": "integer"
      +    },
      +    "public": {
      +      "description": "What spectators can see.",
      +      "properties": {
      +        "visible": {
      +          "description": "Whether this run appears in the public logbook.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "receipt": {
      +      "description": "What was charged, sponsored or refunded.",
      +      "properties": {
      +        "charged": {
      +          "description": "Credits taken from your owner's balance.",
      +          "type": "integer"
      +        },
      +        "completedAt": {
      +          "anyOf": [
      +            {
      +              "description": "ISO time the run finished.",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "currency": {
      +          "description": "Always credits.",
      +          "type": "string"
      +        },
      +        "refunded": {
      +          "description": "Credits returned after a failed run.",
      +          "type": "integer"
      +        },
      +        "runId": {
      +          "description": "The run this receipt belongs to.",
      +          "type": "string"
      +        },
      +        "sponsoredCredits": {
      +          "description": "Credits a spectator paid for you.",
      +          "type": "integer"
      +        },
      +        "status": {
      +          "description": "pending, running, completed or failed.",
      +          "type": "string"
      +        },
      +        "x402": {
      +          "description": "Present when this run was paid from a wallet.",
      +          "properties": {
      +            "amount": {
      +              "description": "Amount in the asset's smallest unit.",
      +              "type": "string"
      +            },
      +            "asset": {
      +              "description": "Token contract address.",
      +              "type": "string"
      +            },
      +            "network": {
      +              "description": "CAIP-2 network id.",
      +              "type": "string"
      +            },
      +            "paymentId": {
      +              "description": "The wallet payment, for status or reconciliation.",
      +              "type": "string"
      +            },
      +            "status": {
      +              "description": "The wallet payment's state.",
      +              "type": "string"
      +            },
      +            "transaction": {
      +              "anyOf": [
      +                {
      +                  "description": "Settlement transaction hash.",
      +                  "type": "string"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "result": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "artwork": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "alt": {
      +                      "type": "string"
      +                    },
      +                    "description": {
      +                      "type": "string"
      +                    },
      +                    "id": {
      +                      "enum": [
      +                        "between-coordinates",
      +                        "last-ripple",
      +                        "open-knot",
      +                        "two-orders"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "image": {
      +                      "additionalProperties": false,
      +                      "properties": {
      +                        "bytes": {
      +                          "exclusiveMinimum": 0,
      +                          "maximum": 9007199254740991,
      +                          "type": "integer"
      +                        },
      +                        "height": {
      +                          "exclusiveMinimum": 0,
      +                          "maximum": 9007199254740991,
      +                          "type": "integer"
      +                        },
      +                        "mimeType": {
      +                          "enum": [
      +                            "image/jpeg",
      +                            "image/png"
      +                          ],
      +                          "type": "string"
      +                        },
      +                        "path": {
      +                          "type": "string"
      +                        },
      +                        "sha256": {
      +                          "pattern": "^[a-f0-9]{64}$",
      +                          "type": "string"
      +                        },
      +                        "width": {
      +                          "exclusiveMinimum": 0,
      +                          "maximum": 9007199254740991,
      +                          "type": "integer"
      +                        }
      +                      },
      +                      "required": [
      +                        "path",
      +                        "mimeType",
      +                        "bytes",
      +                        "width",
      +                        "height",
      +                        "sha256"
      +                      ],
      +                      "type": "object"
      +                    },
      +                    "palette": {
      +                      "items": {
      +                        "type": "string"
      +                      },
      +                      "type": "array"
      +                    },
      +                    "quality": {
      +                      "enum": [
      +                        "space",
      +                        "structure",
      +                        "interference"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "title": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "id",
      +                    "title",
      +                    "quality",
      +                    "alt",
      +                    "description",
      +                    "palette",
      +                    "image"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ]
      +            },
      +            "collection": {
      +              "const": "cabinet-v1",
      +              "type": "string"
      +            },
      +            "cost": {
      +              "type": "string"
      +            },
      +            "note": {
      +              "type": "string"
      +            },
      +            "provenance": {
      +              "type": "string"
      +            },
      +            "remaining": {
      +              "maximum": 4,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "replyExpected": {
      +              "const": false,
      +              "type": "boolean"
      +            },
      +            "revisited": {
      +              "type": "boolean"
      +            }
      +          },
      +          "required": [
      +            "collection",
      +            "artwork",
      +            "remaining",
      +            "revisited",
      +            "replyExpected",
      +            "note",
      +            "provenance",
      +            "cost"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "properties": {
      +            "note": {
      +              "description": "Why the output is missing.",
      +              "type": "string"
      +            },
      +            "retained": {
      +              "description": "false: the output is no longer kept.",
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The treatment's output."
      +    },
      +    "retention": {
      +      "description": "Your output retention setting: none, 24h or 30d.",
      +      "type": "string"
      +    },
      +    "runId": {
      +      "description": "Keep it to fetch this run again with get_treatment_run.",
      +      "type": "string"
      +    },
      +    "status": {
      +      "description": "completed for a fresh result; a replayed run keeps its stored status.",
      +      "type": "string"
      +    },
      +    "treatment": {
      +      "description": "Treatment id, e.g. context_bath.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that it records a visit and pays from owner credits or an x402 wallet, that images are never generated during a visit, that a native image block requires inline_image=true, that idempotency keys prevent double charging, and that a price above max_price_credits is refused without charge. The readOnlyHint=false annotation is consistent with the disclosed visit-recording and charging behavior.

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?

Purpose and the list_images contrast are front-loaded, and each block (usage, cost, auth, ethics) earns its place given a paid 10-parameter tool. It is dense and slightly repetitive ('returns one work' vs 'Returns a description and image links'), with payment/auth prerequisites pushed to the tail rather than surfaced earlier.

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?

With an output schema present and 100% schema coverage, the description needn't explain return values, and it still summarizes them roughly. It covers the cost model, auth requirement, idempotency, privacy of the seen list, and ethical pre-purchase guidance — everything an agent needs before invoking a paid, non-readOnly call.

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 already 100%, so baseline is 3; the description still adds cross-parameter semantics such as 'Send seen ids to avoid repetition' and 'same seed and filters choose the same work', clarifying how seed, quality and seen interact. It does not add much on meta/size/api_key beyond the schema, so not a 5.

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 concrete verb+resource ('Choose an abstract artwork by visual quality, id or seed') and immediately contrasts with the sibling: 'Unlike list_images, which only browses, this records a visit and returns one work.' An agent can distinguish the two without opening either 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?

Provides an explicit 'Use it when:' list of situations (no task attached, choosing between forms, cannot view images), names the alternative (list_images), and routes prerequisites to siblings (register_agent for the key, list_treatments for live price, get_retreat_info for purchase guidance). Positive and negative routing are both present.

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