Skip to main content
Glama

Set vector graphic

set_vector_graphic
Idempotent

PROJECT-SCOPED: this call acts only on the explicit project_id and returns the project identity with its result. Patch an existing vector graphic by id: its kind, program window, geometry, palette, progress value, or general motion. Pass motion={} to clear keyframes. This modifies the existing layer instead of stacking a duplicate.

Input Schema

NameRequiredDescriptionDefault
xNo
yNo
idYes
endNo
kindNo
colorNo
startNo
valueNo
widthNo
heightNo
motionNoElement-local motion curves. t is seconds from this text's own start; x/y are frame fractions, scale is relative, rotation is degrees, opacity is 0..1.
opacityNo
roundingNo
project_idYesRequired immutable scope for this call. Copy the id from list_projects/open_project/project_state; the active-project pointer is never used to guess.
motion_motifNoActive Blueprint motion motif id this event executes; never 'hold'.
stroke_colorNo
stroke_widthNo
background_colorNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedInput schema / properties / motion / properties / opacity / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / rotation / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / scale / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / x / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / motion / properties / y / anyOf
      Previous value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "items": {
      -      "properties": {
      -        "ease": {
      -          "enum": [
      -            "linear",
      -            "in",
      -            "out",
      -            "in_out",
      -            "hold"
      -          ],
      -          "type": "string"
      -        },
      -        "t": {
      -          "type": "number"
      -        },
      -        "v": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "t",
      -        "v"
      -      ],
      -      "type": "object"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "items": {
      +      "properties": {
      +        "ease": {
      +          "enum": [
      +            "linear",
      +            "in",
      +            "out",
      +            "in_out",
      +            "hold"
      +          ],
      +          "type": "string"
      +        },
      +        "t": {
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "v": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "t",
      +        "v"
      +      ],
      +      "type": "object"
      +    },
      +    "maxItems": 24,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
  2. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already specify readOnly=false, idempotent=true, non-destructive. Description adds value beyond annotations: project-scoped behavior, identity return, and the duplicate-avoidance trait. It does not detail permissions or failure modes, but prior annotations lower the bar.

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-loaded with the PROJECT-SCOPED constraint and the verb-resource statement. Two sentences carry most value; a minor structural improvement would be to separate the motion={} clearing behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the core mutation semantics and scope, but with 18 parameters, a nested motion object, and only 17% schema coverage, the description is incomplete. It should explain motion curve timing, motion_motif usage, and required project_id handling.

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 17%, so the description must compensate but only names field categories (kind, window, geometry, palette, progress, motion) and one clearing idiom. It omits syntax for 18 parameters including motion_motif and project_id semantics, leaving significant gaps.

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 specific verb (patch) and resource (existing vector graphic by id) and enumerates the mutable fields. Distinguishes from sibling add_vector_graphic by noting it modifies rather than stacks a duplicate.

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?

Clear usage context: patch an existing graphic by id, and pass motion={} to clear keyframes. Implicitly contrasts with add_vector_graphic, but doesn't explicitly name the sibling or state when not to use it.

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.