Skip to main content
Glama

image_pipeline

Run a multi-step image pipeline

Chain multiple operations (resize, compress, convert, crop) in sequence. The image is fetched once, then each operation is applied to the output of the previous one. Max 10 operations per pipeline.

Responses:

200: Processed image binary (Success Response) Content-Type: application/json Content-Type: image/jpeg

Example Response:

"string"

Content-Type: image/png

Example Response:

"string"

Content-Type: image/webp

Example Response:

"string"

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceYesImage source: a public URL (https://...) or a base64-encoded string (optionally as a data URI like data:image/png;base64,...).
deliveryNo
operationsYesOrdered list of operations to apply sequentially. Each operation receives the output of the previous one. Max 10.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / delivery / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "mode": {
      -        "const": "inline",
      -        "default": "inline",
      -        "title": "Mode",
      -        "type": "string"
      -      }
      -    },
      -    "title": "InlineDelivery",
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "headers": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional storage headers to include on the PUT call (Content-Type, Cache-Control, x-amz-acl, etc.). Whitelisted at SSRF layer.",
      -        "title": "Headers"
      -      },
      -      "mode": {
      -        "const": "put_url",
      -        "title": "Mode",
      -        "type": "string"
      -      },
      -      "put_url": {
      -        "description": "Customer-signed presigned PUT URL where the optimized bytes will be written. Must be https://. Cloud credentials never reach our infrastructure; only the URL itself is used and discarded after the request.",
      -        "format": "uri",
      -        "maxLength": 2083,
      -        "minLength": 1,
      -        "title": "Put Url",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "put_url"
      -    ],
      -    "title": "PutUrlDelivery",
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "callback_url": {
      -        "description": "Customer endpoint where the optimized bytes will be POSTed. Must be https://. For async/large jobs. We send an X-Pig-Sha256 header of the body so the receiver can verify integrity. No credentials are stored on our side; secure the endpoint with a token in the URL itself.",
      -        "format": "uri",
      -        "maxLength": 2083,
      -        "minLength": 1,
      -        "title": "Callback Url",
      -        "type": "string"
      -      },
      -      "headers": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional headers to include on the POST call (Content-Type, Cache-Control, x-amz-*, etc.). Whitelisted at SSRF layer.",
      -        "title": "Headers"
      -      },
      -      "mode": {
      -        "const": "callback_url",
      -        "title": "Mode",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "callback_url"
      -    ],
      -    "title": "CallbackDelivery",
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "mode": {
      +        "const": "inline",
      +        "default": "inline",
      +        "title": "Mode",
      +        "type": "string"
      +      }
      +    },
      +    "title": "InlineDelivery",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "headers": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional storage headers to include on the PUT call (Content-Type, Cache-Control, x-amz-acl, etc.). Whitelisted at SSRF layer.",
      +        "title": "Headers"
      +      },
      +      "mode": {
      +        "const": "put_url",
      +        "title": "Mode",
      +        "type": "string"
      +      },
      +      "put_url": {
      +        "description": "Customer-signed presigned PUT URL where the optimized bytes will be written. Must be https://. Cloud credentials never reach our infrastructure; only the URL itself is used and discarded after the request.",
      +        "format": "uri",
      +        "maxLength": 2083,
      +        "minLength": 1,
      +        "title": "Put Url",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "put_url"
      +    ],
      +    "title": "PutUrlDelivery",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "callback_url": {
      +        "description": "Customer endpoint where the optimized bytes will be POSTed. Must be https://. For async/large jobs. We send an X-Pig-Sha256 header of the body so the receiver can verify integrity. No credentials are stored on our side; secure the endpoint with a token in the URL itself.",
      +        "format": "uri",
      +        "maxLength": 2083,
      +        "minLength": 1,
      +        "title": "Callback Url",
      +        "type": "string"
      +      },
      +      "headers": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional headers to include on the POST call (Content-Type, Cache-Control, x-amz-*, etc.). Whitelisted at SSRF layer.",
      +        "title": "Headers"
      +      },
      +      "mode": {
      +        "const": "callback_url",
      +        "title": "Mode",
      +        "type": "string"
      +      },
      +      "secret": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional HMAC secret. When set, we sign the POST body with HMAC-SHA256 and send 'X-Pig-Signature: sha256=<hex>'. Used per request and never stored. Recompute the HMAC on your endpoint to authenticate the callback (constant-time compare).",
      +        "title": "Secret"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "callback_url"
      +    ],
      +    "title": "CallbackDelivery",
      +    "type": "object"
      +  }
      +]
  2. Changed2 schema fields changed
    • addedInput schema / properties / delivery / discriminator / mapping / callback_url
      Added value: +"#/components/schemas/CallbackDelivery"
    • changedInput schema / properties / delivery / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "mode": {
      -        "const": "inline",
      -        "default": "inline",
      -        "title": "Mode",
      -        "type": "string"
      -      }
      -    },
      -    "title": "InlineDelivery",
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "headers": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional storage headers to include on the PUT call (Content-Type, Cache-Control, x-amz-acl, etc.). Whitelisted at SSRF layer.",
      -        "title": "Headers"
      -      },
      -      "mode": {
      -        "const": "put_url",
      -        "title": "Mode",
      -        "type": "string"
      -      },
      -      "put_url": {
      -        "description": "Customer-signed presigned PUT URL where the optimized bytes will be written. Must be https://. Cloud credentials never reach our infrastructure; only the URL itself is used and discarded after the request.",
      -        "format": "uri",
      -        "maxLength": 2083,
      -        "minLength": 1,
      -        "title": "Put Url",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "put_url"
      -    ],
      -    "title": "PutUrlDelivery",
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "mode": {
      +        "const": "inline",
      +        "default": "inline",
      +        "title": "Mode",
      +        "type": "string"
      +      }
      +    },
      +    "title": "InlineDelivery",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "headers": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional storage headers to include on the PUT call (Content-Type, Cache-Control, x-amz-acl, etc.). Whitelisted at SSRF layer.",
      +        "title": "Headers"
      +      },
      +      "mode": {
      +        "const": "put_url",
      +        "title": "Mode",
      +        "type": "string"
      +      },
      +      "put_url": {
      +        "description": "Customer-signed presigned PUT URL where the optimized bytes will be written. Must be https://. Cloud credentials never reach our infrastructure; only the URL itself is used and discarded after the request.",
      +        "format": "uri",
      +        "maxLength": 2083,
      +        "minLength": 1,
      +        "title": "Put Url",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "put_url"
      +    ],
      +    "title": "PutUrlDelivery",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "callback_url": {
      +        "description": "Customer endpoint where the optimized bytes will be POSTed. Must be https://. For async/large jobs. We send an X-Pig-Sha256 header of the body so the receiver can verify integrity. No credentials are stored on our side; secure the endpoint with a token in the URL itself.",
      +        "format": "uri",
      +        "maxLength": 2083,
      +        "minLength": 1,
      +        "title": "Callback Url",
      +        "type": "string"
      +      },
      +      "headers": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional headers to include on the POST call (Content-Type, Cache-Control, x-amz-*, etc.). Whitelisted at SSRF layer.",
      +        "title": "Headers"
      +      },
      +      "mode": {
      +        "const": "callback_url",
      +        "title": "Mode",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "callback_url"
      +    ],
      +    "title": "CallbackDelivery",
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • addedInput schema / properties / delivery
      Added value: +{
      +  "discriminator": {
      +    "mapping": {
      +      "inline": "#/components/schemas/InlineDelivery",
      +      "put_url": "#/components/schemas/PutUrlDelivery"
      +    },
      +    "propertyName": "mode"
      +  },
      +  "oneOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "mode": {
      +          "const": "inline",
      +          "default": "inline",
      +          "title": "Mode",
      +          "type": "string"
      +        }
      +      },
      +      "title": "InlineDelivery",
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "headers": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {
      +                "type": "string"
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Optional storage headers to include on the PUT call (Content-Type, Cache-Control, x-amz-acl, etc.). Whitelisted at SSRF layer.",
      +          "title": "Headers"
      +        },
      +        "mode": {
      +          "const": "put_url",
      +          "title": "Mode",
      +          "type": "string"
      +        },
      +        "put_url": {
      +          "description": "Customer-signed presigned PUT URL where the optimized bytes will be written. Must be https://. Cloud credentials never reach our infrastructure; only the URL itself is used and discarded after the request.",
      +          "format": "uri",
      +          "maxLength": 2083,
      +          "minLength": 1,
      +          "title": "Put Url",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "mode",
      +        "put_url"
      +      ],
      +      "title": "PutUrlDelivery",
      +      "type": "object"
      +    }
      +  ],
      +  "title": "delivery",
      +  "type": "string"
      +}
  4. First observed

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses key behaviors: image is fetched once, operations apply sequentially, max 10 operations, and response content types. It omits side effects like writing to PUT URLs or callbacks, but covers essential processing behavior well.

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?

The description is concise and front-loaded with the core behavior, followed by structured response examples. No wasted words; the separation of processing logic and responses aids readability.

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?

The tool is complex with delivery modes and multi-step processing, and the description covers the pipeline flow and limits. Missing details like error cases and delivery side effects are partly covered by the schema, making the description adequate for selection and invocation.

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 67%, with detailed descriptions for source and operations. The description restates operation types but adds little beyond the schema. It does not clarify delivery semantics, which are complex but already well described in the schema.

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?

Description clearly states 'Run a multi-step image pipeline' and details that it chains operations (resize, compress, convert, crop) in sequence. This distinguishes it from sibling single-operation tools like resize_image and compress_image.

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?

The description implies use for multi-step workflows by explaining sequencing and a 10-operation limit. It doesn't explicitly contrast with single-operation siblings, but the use case is evident from the context.

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