Skip to main content
Glama

drawing_style

Edit only the requested properties of an existing drawing; all others are preserved. For a text edit send just {id,text,fontSize}; never copy the entire stored style or its hex colours. Get the id from chart_state. Use it to keep several drawings apart โ€” a measured level and a projected one should not be the same colour, and a reader has only the picture to tell them by. Changes the chart you are building; finish with chart_link, or analysis_prepare for a sharing draft that needs human review.

Input Schema

NameRequiredDescriptionDefault
idYesFrom chart_state.
fillNoPalette fill colour, or โ€œnoneโ€.
textNoRequired for text/note/callout: concise words, with for short lines. For emoji: one Unicode emoji, e.g. ๐Ÿ‘€ or โš ๏ธ. Max 500 characters.
colorNoA palette name. โ€œupโ€ and โ€œdownโ€ are the reserved green and red โ€” they assert a bullish or bearish claim, so use them for position zones and not for a measurement.
widthNoStroke width in pixels, 1 to 6.
symbolNoDefaults to the charted symbol.
opacityNoStrength of the whole drawing, 0.1 to 1. Fade a level that is context rather than the decision.
arrowEndNo
fontSizeNoSize 9โ€“160px, normally 12โ€“16 for readable text. Emoji render at twice this size.
textBoldNo
wrapTextNoDefault true: wrap long annotation lines for readability. False only for an explicitly requested single-line label.
lineStyleNo
showStatsNo
textColorNo
arrowStartNo
extendLeftNo
showLabelsNo
showPricesNo
showRatiosNo
extendRightNo
fillOpacityNoShape fill opacity from 0 to 1.
ratioFormatNo
labelPositionNo
labelVerticalNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / fontSize / description
      Previous value: -"Label/text size from 8 to 28."New value: +"Size 9โ€“160px, normally 12โ€“16 for readable text. Emoji render at twice this size."
    • changedInput schema / properties / text / description
      Previous value: -"Text for annotation tools."New value: +"Required for text/note/callout: concise words, with \n for short lines. For emoji: one Unicode emoji, e.g. ๐Ÿ‘€ or โš ๏ธ. Max 500 characters."
    • addedInput schema / properties / wrapText
      Added value: +{
      +  "description": "Default true: wrap long annotation lines for readability. False only for an explicitly requested single-line label.",
      +  "type": "boolean"
      +}
  2. Changed7 schema fields changed
    • addedInput schema / properties / labelPosition
      Added value: +{
      +  "enum": [
      +    "left",
      +    "center",
      +    "right"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / labelVertical
      Added value: +{
      +  "enum": [
      +    "above",
      +    "middle",
      +    "below"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / ratioFormat
      Added value: +{
      +  "enum": [
      +    "value",
      +    "percent"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / showPrices
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / showRatios
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / textBold
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / textColor
      Added value: +{
      +  "enum": [
      +    "blue",
      +    "orange",
      +    "violet",
      +    "aqua",
      +    "yellow",
      +    "magenta",
      +    "neutral",
      +    "white",
      +    "up",
      +    "down"
      +  ],
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is already covered; the description adds real value beyond that by explaining that unspecified properties are preserved (i.e. this is a patch, not a replace) and by warning against copying stored styles or hex colours. It doesn't say what happens with an unknown/stale id, which keeps it from a 5.

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 partial-update rule, then the concrete example, then the workflow. The middle sentence about telling drawings apart is somewhat discursive ("a reader has only the picture to tell them by") but still carries the design rationale for colour choice, so little is truly wasted.

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 24-parameter mutation tool with no output schema, the description covers the essentials an agent needs: partial-update semantics, the minimal payload pattern, id sourcing, and the finishing workflow. It is thinner on the long tail of styling flags, but those are largely self-describing and non-destructive.

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 only 42% across 24 parameters, so the description has to carry weight; it does so for the highest-risk ones by explaining the semantic meaning of "up"/"down" colours (bullish/bearish assertions, not measurements) and by giving a concrete minimal text-edit payload. The remaining booleans (arrowEnd, showStats, showLabels, extendLeft/Right, textBold, etc.) get no explanation in either the schema or the description, so it only partially compensates.

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 and resource ("Edit only the requested properties of an existing drawing") plus the key semantic that distinguishes it from drawing_add: it is a partial update and "all others are preserved." An agent can tell this apart from the sibling creation/freehand tools 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?

Gives explicit when-to-do-what: send just {id,text,fontSize} for a text edit, never re-send the stored style, get the id from chart_state. It also names downstream steps (chart_link, or analysis_prepare for a review draft), so the agent knows both the precondition and the follow-on.

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