Skip to main content
Glama

Create up to 10 jobs (can spend credits)

create_job
Destructive

Saves up to 10 jobs, each filling one page (page) or one flow (flow, a video) with its own modifications and output: a few files without building a batch. batch adds them to an existing batch; without it they stand alone, named by output fileName or else the template's name. run false saves them pending and spends nothing. run true renders them at once, spending their creditCost when they succeed (failed renders are not charged; the whole request is refused when the credits do not cover it), and the answer waits up to 30 seconds for the files; status processing then means some still render, and get_job a few seconds later gets each file. Every issue across the jobs comes back in one error, with nothing saved. Every call makes new jobs, so after an error check get_job or get_batch_jobs before calling again. For more rows use create_batch. With run, state the cost and get the user's confirmation first. Needs templates:read and batches:create, and renders:create in the user's workspace role to run.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "jobs": "<jobs>"
    },
    "name": "create_job"
  }
}

Input Schema

NameRequiredDescriptionDefault
runNoRender them now, spending their creditCost
jobsYes1 to 10 jobs
batchNoAdd the jobs to this batch; omit for jobs on their own

Output Schema

NameRequiredDescriptionDefault
jobsYes
statusYesprocessing while any job renders (get_job a few seconds later), pending while any waits for run_job, done when each has finished

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • addedInput schema / properties / batch
      Added value: +{
      +  "description": "Add the jobs to this batch; omit for jobs on their own",
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      +  "type": "string"
      +}
    • removedInput schema / properties / batchId
      Removed value: -{
      -  "description": "Add the job to this batch; omit for a job on its own",
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -  "type": "string"
      -}
    • removedInput schema / properties / fileName
      Removed value: -{
      -  "description": "Name of the rendered file, without extension",
      -  "maxLength": 200,
      -  "type": "string"
      -}
    • removedInput schema / properties / flowId
      Removed value: -{
      -  "description": "Instead of pageId: a flow to render as a video (get_template_inputs flows), with a video outputFormat",
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -  "type": "string"
      -}
    • addedInput schema / properties / jobs
      Added value: +{
      +  "description": "1 to 10 jobs",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "flow": {
      +        "description": "Instead of page: a flow to render as a video (get_template_inputs flows), with a video output format",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "modifications": {
      +        "additionalProperties": {
      +          "anyOf": [
      +            {
      +              "anyOf": [
      +                {
      +                  "description": "A text layer's text, with <s1>...</s1> tags for runs when it has several styles; or an image layer's asset id or file name",
      +                  "type": "string"
      +                },
      +                {
      +                  "additionalProperties": {},
      +                  "description": "A text layer's text and visibility",
      +                  "properties": {
      +                    "text": {
      +                      "description": "The layer's new text, tagged like a string value",
      +                      "type": "string"
      +                    },
      +                    "visible": {
      +                      "description": "false hides the layer; layout closes the gap",
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": {},
      +                  "description": "An image layer's image and framing",
      +                  "properties": {
      +                    "asset": {
      +                      "description": "An asset id (search_assets, upload_images), the image's file name, or a designer image key. Omit to keep the template's image and only re-frame it.",
      +                      "type": "string"
      +                    },
      +                    "fit": {
      +                      "description": "cover fills the slot and crops (default), contain shows the whole image, stretch distorts to the slot. The designer's names work too: fill is cover, fit is contain",
      +                      "enum": [
      +                        "cover",
      +                        "contain",
      +                        "stretch",
      +                        "fill",
      +                        "fit"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "panX": {
      +                      "description": "Moves the image by this fraction of the slot width; positive = right",
      +                      "maximum": 1,
      +                      "minimum": -1,
      +                      "type": "number"
      +                    },
      +                    "panY": {
      +                      "description": "Moves the image by this fraction of the slot height; positive = down",
      +                      "maximum": 1,
      +                      "minimum": -1,
      +                      "type": "number"
      +                    },
      +                    "visible": {
      +                      "description": "false hides the layer",
      +                      "type": "boolean"
      +                    },
      +                    "zoom": {
      +                      "description": "Zoom about the slot centre; 1 = none",
      +                      "maximum": 4,
      +                      "minimum": 0.2,
      +                      "type": "number"
      +                    }
      +                  },
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "default": {},
      +        "description": "Layer key to value: a layer's name (case aside) or id, the key get_template_inputs gives, to a plain value: text as a string, an image as an asset id or file name, or { asset, fit, zoom, panX, panY } and { text, visible } when framing or visibility changes. rowExample in get_template_inputs is ready to use. null leaves a layer at the page's own value; layers left out keep it too.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "output": {
      +        "additionalProperties": false,
      +        "description": "What to make; png when omitted",
      +        "properties": {
      +          "fileName": {
      +            "description": "The file's name, without extension",
      +            "maxLength": 200,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "format": {
      +            "default": "png",
      +            "description": "png, jpeg and webp render an image and pdf one vector page; mp4 and gif render the whole motion as a video, and webm (VP9) and mov (ProRes 4444) as a transparent video for overlaying on other footage. Video needs an animated template (get_template_inputs isAnimated) and costs more credits",
      +            "enum": [
      +              "png",
      +              "jpeg",
      +              "webp",
      +              "pdf",
      +              "mp4",
      +              "gif",
      +              "webm",
      +              "mov"
      +            ],
      +            "type": "string"
      +          },
      +          "stillTime": {
      +            "description": "Animated pages, images only: the second of the motion the image shows. Omit it to use the page's own still time (get_template_inputs stillTime), else the last frame. If the page has no still time, ask the user, because an outro or a loop can make the last frame a bad image.",
      +            "maximum": 600,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "page": {
      +        "description": "The page to render (get_template_inputs pages). Give this or flow",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "maxItems": 10,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • removedInput schema / properties / outputFormat
      Removed value: -{
      -  "default": "png",
      -  "description": "Output format. png, jpeg and webp render one image per row and pdf one vector page; mp4 and gif render each row's whole motion as a video, and webm (VP9) and mov (ProRes 4444) as a transparent video for overlaying on other footage. Video needs an animated template (get_template_inputs isAnimated) and costs more credits per row",
      -  "enum": [
      -    "png",
      -    "jpeg",
      -    "webp",
      -    "pdf",
      -    "mp4",
      -    "gif",
      -    "webm",
      -    "mov"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / pageId
      Removed value: -{
      -  "description": "The page to render (get_template_inputs pages). Give this or flowId",
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -  "type": "string"
      -}
    • removedInput schema / properties / row
      Removed value: -{
      -  "additionalProperties": {
      -    "anyOf": [
      -      {
      -        "anyOf": [
      -          {
      -            "description": "A text layer's text, with <s1>...</s1> tags for runs when it has several styles; or an image layer's asset id or file name",
      -            "type": "string"
      -          },
      -          {
      -            "additionalProperties": {},
      -            "description": "A text layer's text and visibility",
      -            "properties": {
      -              "text": {
      -                "description": "The layer's new text, tagged like a string value",
      -                "type": "string"
      -              },
      -              "visible": {
      -                "description": "false hides the layer; layout closes the gap",
      -                "type": "boolean"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "additionalProperties": {},
      -            "description": "An image layer's image and framing",
      -            "properties": {
      -              "asset": {
      -                "description": "An asset id (search_assets, upload_images), the image's file name, or a designer image key. Omit to keep the template's image and only re-frame it.",
      -                "type": "string"
      -              },
      -              "fit": {
      -                "description": "cover fills the slot and crops (default), contain shows the whole image, stretch distorts to the slot. The designer's names work too: fill is cover, fit is contain",
      -                "enum": [
      -                  "cover",
      -                  "contain",
      -                  "stretch",
      -                  "fill",
      -                  "fit"
      -                ],
      -                "type": "string"
      -              },
      -              "panX": {
      -                "description": "Moves the image by this fraction of the slot width; positive = right",
      -                "maximum": 1,
      -                "minimum": -1,
      -                "type": "number"
      -              },
      -              "panY": {
      -                "description": "Moves the image by this fraction of the slot height; positive = down",
      -                "maximum": 1,
      -                "minimum": -1,
      -                "type": "number"
      -              },
      -              "visible": {
      -                "description": "false hides the layer",
      -                "type": "boolean"
      -              },
      -              "zoom": {
      -                "description": "Zoom about the slot centre; 1 = none",
      -                "maximum": 4,
      -                "minimum": 0.2,
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          }
      -        ]
      -      },
      -      {
      -        "type": "null"
      -      }
      -    ]
      -  },
      -  "description": "One row, keyed and valued as create_batch rows are; rowExample in get_template_inputs is a ready one",
      -  "propertyNames": {
      -    "type": "string"
      -  },
      -  "type": "object"
      -}
    • changedInput schema / properties / run / description
      Previous value: -"Render it now, spending its creditCost"New value: +"Render them now, spending their creditCost"
    • removedInput schema / properties / stillTime
      Removed value: -{
      -  "description": "Animated templates only: the second of the motion that each image shows. Omit it to use the page's own still time (get_template_inputs stillTime), else the last frame. If the page has no still time, ask the user, because an outro or a loop can make the last frame a bad image.",
      -  "maximum": 600,
      -  "minimum": 0,
      -  "type": "number"
      -}
    • removedInput schema / properties / templateId
      Removed value: -{
      -  "description": "Optional with pageId or flowId; alone it renders the template's first page",
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "row"
      -]New value: +[
      +  "jobs"
      +]
    • removedOutput schema / properties / batchId
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "format": "uuid",
      -      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "The batch it joined; null for a job on its own"
      -}
    • removedOutput schema / properties / creditCost
      Removed value: -{
      -  "description": "Credits the render spends when it succeeds",
      -  "maximum": 9007199254740991,
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • removedOutput schema / properties / error
      Removed value: -{
      -  "description": "Why the render failed",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / flowId
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "format": "uuid",
      -      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedOutput schema / properties / id
      Removed value: -{
      -  "description": "jobId for run_job and get_job",
      -  "format": "uuid",
      -  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -  "type": "string"
      -}
    • addedOutput schema / properties / jobs
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "batch": {
      +        "anyOf": [
      +          {
      +            "format": "uuid",
      +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The batch it is in; null for a job on its own"
      +      },
      +      "creditCost": {
      +        "description": "Credits the render spends when it succeeds",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "error": {
      +        "description": "Why the render failed",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "file": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "contentType": {
      +                "type": "string"
      +              },
      +              "creativeId": {
      +                "format": "uuid",
      +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      +                "type": "string"
      +              },
      +              "fileName": {
      +                "type": "string"
      +              },
      +              "height": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "sizeBytes": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "url": {
      +                "description": "Link to the rendered file",
      +                "type": "string"
      +              },
      +              "width": {
      +                "anyOf": [
      +                  {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "creativeId",
      +              "url",
      +              "fileName",
      +              "contentType",
      +              "sizeBytes",
      +              "width",
      +              "height"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The rendered file; null until the job succeeds"
      +      },
      +      "flow": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "id": {
      +                "type": "string"
      +              },
      +              "name": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "name"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The flow it renders as a video, if it does"
      +      },
      +      "id": {
      +        "description": "jobId for run_job, get_job and update_job",
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      +        "type": "string"
      +      },
      +      "modifications": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The values it renders, by layer; null for a job made in the Kalpana app"
      +      },
      +      "output": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "format": {
      +            "description": "File format the job renders to",
      +            "enum": [
      +              "png",
      +              "jpeg",
      +              "webp",
      +              "pdf",
      +              "mp4",
      +              "gif",
      +              "webm",
      +              "mov"
      +            ],
      +            "type": "string"
      +          },
      +          "kind": {
      +            "description": "image for still renders (png, jpeg, webp, pdf); video for mp4, gif, webm or mov",
      +            "enum": [
      +              "image",
      +              "video"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "format",
      +          "kind"
      +        ],
      +        "type": "object"
      +      },
      +      "page": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "id": {
      +                "type": "string"
      +              },
      +              "name": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "name"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The page it renders; null for a video"
      +      },
      +      "status": {
      +        "description": "pending waits for run_batch, processing is rendering, success has rendered, failed has a render error, cancelled was stopped by cancel_batch or cancel_job (final, not charged)",
      +        "enum": [
      +          "pending",
      +          "processing",
      +          "success",
      +          "failed",
      +          "cancelled"
      +        ],
      +        "type": "string"
      +      },
      +      "template": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "id": {
      +                "type": "string"
      +              },
      +              "name": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "name"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "status",
      +      "template",
      +      "page",
      +      "flow",
      +      "batch",
      +      "modifications",
      +      "output",
      +      "creditCost",
      +      "error",
      +      "file"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / output
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": false,
      -      "properties": {
      -        "contentType": {
      -          "type": "string"
      -        },
      -        "creativeId": {
      -          "format": "uuid",
      -          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -          "type": "string"
      -        },
      -        "fileName": {
      -          "type": "string"
      -        },
      -        "height": {
      -          "anyOf": [
      -            {
      -              "maximum": 9007199254740991,
      -              "minimum": -9007199254740991,
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "sizeBytes": {
      -          "maximum": 9007199254740991,
      -          "minimum": 0,
      -          "type": "integer"
      -        },
      -        "url": {
      -          "description": "Link to the rendered file",
      -          "type": "string"
      -        },
      -        "width": {
      -          "anyOf": [
      -            {
      -              "maximum": 9007199254740991,
      -              "minimum": -9007199254740991,
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "required": [
      -        "creativeId",
      -        "url",
      -        "fileName",
      -        "contentType",
      -        "sizeBytes",
      -        "width",
      -        "height"
      -      ],
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "description": "The rendered file; null until the job succeeds"
      -}
    • removedOutput schema / properties / outputFormat
      Removed value: -{
      -  "description": "File format the job renders to",
      -  "enum": [
      -    "png",
      -    "jpeg",
      -    "webp",
      -    "pdf",
      -    "mp4",
      -    "gif",
      -    "webm",
      -    "mov"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / outputKind
      Removed value: -{
      -  "description": "image for still renders (png, jpeg, webp, pdf); video for mp4, gif, webm or mov",
      -  "enum": [
      -    "image",
      -    "video"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / pageId
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "format": "uuid",
      -      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • changedOutput schema / properties / status / description
      Previous value: -"pending waits for run_batch, processing is rendering, success has rendered, failed has a render error, cancelled was stopped by cancel_batch or cancel_job (final, not charged)"New value: +"processing while any job renders (get_job a few seconds later), pending while any waits for run_job, done when each has finished"
    • changedOutput schema / properties / status / enum
      Previous value: -[
      -  "pending",
      -  "processing",
      -  "success",
      -  "failed",
      -  "cancelled"
      -]New value: +[
      +  "processing",
      +  "pending",
      +  "done"
      +]
    • removedOutput schema / properties / templateId
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "format": "uuid",
      -      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$",
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "status",
      -  "batchId",
      -  "templateId",
      -  "pageId",
      -  "flowId",
      -  "outputKind",
      -  "outputFormat",
      -  "creditCost",
      -  "error",
      -  "output"
      -]New value: +[
      +  "status",
      +  "jobs"
      +]
  2. Added

TDQS

A4.8/5.0
Behavior5/5

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

Goes far past the annotations, which only say destructive/non-idempotent. It discloses credit semantics (charged only on success, whole request refused if credits are short), the ~30s wait and 'processing' status, aggregate all-or-nothing error behavior, and the non-idempotency warning that every call creates new jobs.

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 core save-vs-render distinction and every sentence carries operational weight, but it is one long run-on paragraph dense with parentheticals, making it harder to scan than a lightly structured version 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?

For a high-stakes, credit-spending, 3-parameter tool with nested job objects, it covers cost, failure charging, refusal conditions, latency, error recovery, and permissions. An output schema exists, so it need not describe return values.

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 100% so the baseline is 3, but the description adds real meaning: run=false saves pending and spends nothing, batch attaches to an existing batch vs standing alone, and naming falls back from output.fileName to the template name. It also clarifies what both run modes do together, which the per-parameter schema text does not.

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 and resource with scope baked in: 'Saves up to 10 jobs, each filling one page (page) or one flow (flow, a video)'. It also names the sibling that handles the other case ('For more rows use create_batch'), so an agent can distinguish it without opening a 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?

Explicit routing guidance: use create_batch for more rows; check get_job or get_batch_jobs after an error before retrying; ask the user to confirm cost before setting run=true. Prerequisites are stated too (templates:read, batches:create, renders:create in workspace role).

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