Skip to main content
Glama

Put the owner's photo or logo online

attach_image

Use for the owner's own photos and logo (pages, menu, shop, gallery, blog). action "drop_link" (with site_id) makes a link where the owner drops many photos from a phone or computer (one website, one hour, no sign-in); action "dropped" then lists each photo's name and /_g/u/… path. Default: copies one image from a public link (url), or one small image as data_base64.

Input Schema

NameRequiredDescriptionDefault
urlNoPublic http(s) link to the image file.
actionNosave (default): one image from url or data_base64. drop_link: a link where the owner drops many photos from a phone or computer (one website, 1 hour). dropped: the photos dropped for the website, with paths.
site_idNodrop_link and dropped: the website (see list_sites).
filenameNoOriginal file name, e.g. "logo.png".
data_base64NoThe image file itself, base64-encoded (instead of url).

Output Schema

NameRequiredDescriptionDefault
urlNoSaving one image: its full address.
pathNoSaving one image: the path to use in HTML or module data, e.g. /_g/u/abc.webp.
textYesThe answer in words, the same as the text content: read it (for get_guide the whole guide, for get_site the files' contents).
typeNoImage type.
bytesNo
widthNo
heightNo
photosNodropped: every photo dropped for the website, oldest first.
site_idNodrop_link / dropped: the website.
drop_urlNodrop_link: the link to give the owner (works once, for this website, until expires_at).
expires_atNodrop_link: when the link stops working (ISO time).
max_photosNodrop_link: photos one link takes.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • addedInput schema / properties / action
      Added value: +{
      +  "description": "save (default): one image from url or data_base64. drop_link: a link where the owner drops many photos from a phone or computer (one website, 1 hour). dropped: the photos dropped for the website, with paths.",
      +  "enum": [
      +    "save",
      +    "drop_link",
      +    "dropped"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / site_id
      Added value: +{
      +  "description": "drop_link and dropped: the website (see list_sites).",
      +  "maxLength": 40,
      +  "type": "string"
      +}
    • addedOutput schema / properties / drop_url
      Added value: +{
      +  "description": "drop_link: the link to give the owner (works once, for this website, until expires_at).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / expires_at
      Added value: +{
      +  "description": "drop_link: when the link stops working (ISO time).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / max_photos
      Added value: +{
      +  "description": "drop_link: photos one link takes.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / path / description
      Previous value: -"Path to use in HTML or module data, e.g. /_g/u/abc.webp."New value: +"Saving one image: the path to use in HTML or module data, e.g. /_g/u/abc.webp."
    • addedOutput schema / properties / photos
      Added value: +{
      +  "description": "dropped: every photo dropped for the website, oldest first.",
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "bytes": {
      +        "type": "number"
      +      },
      +      "dropped_at": {
      +        "type": "string"
      +      },
      +      "height": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "name": {
      +        "description": "Clean name from the file name (\"burger.jpg\" → \"burger\").",
      +        "type": "string"
      +      },
      +      "path": {
      +        "description": "Path to use in the website's HTML or Part data, e.g. /_g/u/abc.webp.",
      +        "type": "string"
      +      },
      +      "type": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "used": {
      +        "description": "Already on one of the website's pages or Parts.",
      +        "type": "boolean"
      +      },
      +      "width": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "path",
      +      "url",
      +      "bytes",
      +      "width",
      +      "height",
      +      "type",
      +      "used",
      +      "dropped_at"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / site_id
      Added value: +{
      +  "description": "drop_link / dropped: the website.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / url / description
      Previous value: -"Full address of the image."New value: +"Saving one image: its full address."
    • changedOutput schema / required
      Previous value: -[
      -  "path",
      -  "url",
      -  "width",
      -  "height",
      -  "bytes",
      -  "type",
      -  "text"
      -]New value: +[
      +  "text"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / text
      Added value: +{
      +  "description": "The answer in words, the same as the text content: read it (for get_guide the whole guide, for get_site the files' contents).",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "path",
      -  "url",
      -  "width",
      -  "height",
      -  "bytes",
      -  "type"
      -]New value: +[
      +  "path",
      +  "url",
      +  "width",
      +  "height",
      +  "bytes",
      +  "type",
      +  "text"
      +]
  3. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag it as non-read-only, open-world, non-idempotent and non-destructive, so the safety bar is partly covered. The description adds real behavioral detail beyond that: the drop link is scoped to one website and expires in an hour, requires no sign-in, and 'dropped' returns each photo's name and a /_g/u/… path. It does not say what happens to an existing image on overwrite or what the default save returns.

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?

Front-loads the purpose, then walks the actions in a single dense paragraph. Every clause carries information, though the run of parentheticals and semicolons makes it harder to scan than a short bulleted action list would be.

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?

An output schema exists, so return values needn't be spelled out, and the annotations carry the safety profile. The description covers all three action paths, the site scoping, the link's lifetime and the no-sign-in property — enough for an agent to choose a path and call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already defines url, action, site_id, filename and data_base64, including that site_id applies only to drop_link/dropped. The description reinforces the site_id prerequisite and hints that data_base64 should be a 'small' image, but adds little else in the way of format or constraint meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource — putting the owner's own photo or logo online — and enumerates the surfaces it serves (pages, menu, shop, gallery, blog). The three action modes are each given a distinct meaning. It does not, however, distinguish itself from the sibling upload_files, which an agent could plausibly confuse with this.

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?

Gives clear context for when to use it (owner's own photos and logo, not third-party imagery) and ties each action to a scenario: drop_link for bulk phone/computer uploads, dropped for retrieving what was dropped, default for a single image. It lacks an explicit exclusion rule such as 'use upload_files instead for X'.

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