Skip to main content
Glama

photo_shadow_adder

Add Drop Shadow — Add a drop shadow effect to an image, producing a PNG with transparency. [category: photo]

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
blurNoShadow edge softness in px. 0 = hard-edged rectangle of a shadow.
fileYesImage to shadow — JPG, PNG, or WebP only (max 25 MB). BMP is NOT accepted here, unlike most photo tools.
angleNoWhich way the shadow falls, in degrees clockwise from the right: 0 moves it right, 90 down, 180 left, 270 up. The default 45 puts it down and to the right, as if lit from the top left.
opacityNoShadow darkness 0-100. Affects the shadow layer only, never the image itself.
distanceNoShadow offset in px.
shadow_colorNoHex shadow color. Field name is 'shadow_color' — not 'color'.#000000
output_formatNoLeave blank to keep the format it came in as. Only PNG keeps the area around the shadow see-through; JPG and WebP are flattened onto white.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • changedInput schema / properties / angle / default
      Previous value: -315New value: +45
    • changedInput schema / properties / angle / description
      Previous value: -"Shadow direction in degrees."New value: +"Which way the shadow falls, in degrees clockwise from the right: 0 moves it right, 90 down, 180 left, 270 up. The default 45 puts it down and to the right, as if lit from the top left."
    • addedInput schema / properties / angle / x-ui / draw
      Added value: +{
      +  "of": "shadow",
      +  "role": "angle"
      +}
    • addedInput schema / properties / blur / x-ui / draw
      Added value: +{
      +  "of": "shadow",
      +  "role": "blur"
      +}
    • addedInput schema / properties / distance / x-ui / draw
      Added value: +{
      +  "of": "shadow",
      +  "role": "distance"
      +}
    • addedInput schema / properties / opacity / x-ui / draw
      Added value: +{
      +  "max": 100,
      +  "of": "shadow",
      +  "role": "opacity"
      +}
    • addedInput schema / properties / output_format / x-ui / draw
      Added value: +{
      +  "of": "shadow",
      +  "role": "format",
      +  "see_through": [
      +    "png"
      +  ]
      +}
    • addedInput schema / properties / shadow_color / x-ui
      Added value: +{
      +  "draw": {
      +    "names": {
      +      "aqua": [
      +        0,
      +        255,
      +        255
      +      ],
      +      "beige": [
      +        245,
      +        245,
      +        220
      +      ],
      +      "black": [
      +        0,
      +        0,
      +        0
      +      ],
      +      "blue": [
      +        0,
      +        0,
      +        255
      +      ],
      +      "brown": [
      +        165,
      +        42,
      +        42
      +      ],
      +      "crimson": [
      +        220,
      +        20,
      +        60
      +      ],
      +      "cyan": [
      +        0,
      +        255,
      +        255
      +      ],
      +      "fuchsia": [
      +        255,
      +        0,
      +        255
      +      ],
      +      "gold": [
      +        255,
      +        215,
      +        0
      +      ],
      +      "gray": [
      +        128,
      +        128,
      +        128
      +      ],
      +      "green": [
      +        0,
      +        128,
      +        0
      +      ],
      +      "grey": [
      +        128,
      +        128,
      +        128
      +      ],
      +      "indigo": [
      +        75,
      +        0,
      +        130
      +      ],
      +      "ivory": [
      +        255,
      +        255,
      +        240
      +      ],
      +      "khaki": [
      +        240,
      +        230,
      +        140
      +      ],
      +      "lavender": [
      +        230,
      +        230,
      +        250
      +      ],
      +      "lime": [
      +        0,
      +        255,
      +        0
      +      ],
      +      "magenta": [
      +        255,
      +        0,
      +        255
      +      ],
      +      "maroon": [
      +        128,
      +        0,
      +        0
      +      ],
      +      "navy": [
      +        0,
      +        0,
      +        128
      +      ],
      +      "olive": [
      +        128,
      +        128,
      +        0
      +      ],
      +      "orange": [
      +        255,
      +        165,
      +        0
      +      ],
      +      "pink": [
      +        255,
      +        192,
      +        203
      +      ],
      +      "purple": [
      +        128,
      +        0,
      +        128
      +      ],
      +      "red": [
      +        255,
      +        0,
      +        0
      +      ],
      +      "salmon": [
      +        250,
      +        128,
      +        114
      +      ],
      +      "silver": [
      +        192,
      +        192,
      +        192
      +      ],
      +      "tan": [
      +        210,
      +        180,
      +        140
      +      ],
      +      "teal": [
      +        0,
      +        128,
      +        128
      +      ],
      +      "turquoise": [
      +        64,
      +        224,
      +        208
      +      ],
      +      "violet": [
      +        238,
      +        130,
      +        238
      +      ],
      +      "white": [
      +        255,
      +        255,
      +        255
      +      ],
      +      "yellow": [
      +        255,
      +        255,
      +        0
      +      ]
      +    },
      +    "of": "shadow",
      +    "role": "color"
      +  }
      +}
    • addedInput schema / x-draw
      Added value: +{
      +  "shadow": {
      +    "noun": "shadow",
      +    "shape": "shadow",
      +    "title": "The shadow"
      +  }
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / output_format / x-ui
      Added value: +{
      +  "unset_label": "Keeps input format"
      +}
  3. Changed4 schema fields changed
    • addedInput schema / properties / angle / x-ui
      Added value: +{
      +  "unit": "deg"
      +}
    • addedInput schema / properties / blur / x-ui
      Added value: +{
      +  "unit": "px"
      +}
    • addedInput schema / properties / distance / x-ui
      Added value: +{
      +  "unit": "px"
      +}
    • addedInput schema / properties / opacity / x-ui
      Added value: +{
      +  "unit": "%"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / output_format / description
      Previous value: -"Optional output format."New value: +"Leave blank to keep the format it came in as. Only PNG keeps the area around the shadow see-through; JPG and WebP are flattened onto white."
    • addedInput schema / properties / output_format / enum
      Added value: +[
      +  "png",
      +  "jpg",
      +  "webp"
      +]
  5. First observed

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that output is a PNG with transparency, which is mildly inaccurate since output_format defaults to the input format and only PNG preserves transparency — a subtle inconsistency the schema corrects.

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 front-loaded sentence with the effect and output stated up front; slightly redundant by restating the title verbatim, plus a category tag, but no significant waste.

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?

For a single-effect image mutation tool, the description plus a fully documented 7-parameter schema and safety annotations gives an agent enough to call it correctly. It lacks only usage routing and a note that non-PNG outputs flatten onto white.

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 coverage is 100% and every parameter (blur, angle, opacity, distance, shadow_color, output_format) is thoroughly documented in the schema. The description adds no parameter detail, so the baseline 3 is appropriate.

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 specific verb (add) and resource (drop shadow effect on an image) and names the output artifact. It is clearly distinguishable from photo siblings like photo_add_border or photo_rounded_corners, though it never explicitly differentiates itself from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

No guidance on when to use this versus alternatives such as photo_editor, photo_add_border, or photo_rounded_corners, and no prerequisites (e.g. input constraints) stated in the description. Only implied usage from the name.

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