Skip to main content
Glama

Chart honesty check

chart_lint
Read-only

Lint a chart specification for graphical integrity, in the tradition of Edward Tufte (The Visual Display of Quantitative Information) and Alberto Cairo (How Charts Lie). Pass spec as a JSON object or JSON string with: type (bar, column, line, area, pie, donut, scatter, bubble), title, source, units, labels (categories), series (list of {name, values, axis?}), axis {min, max, label}, axis2 {min, max} or dualAxis, threeD, stacked, sizeEncoding (area, radius, diameter, width, volume), decoration (list or object naming gradient, shadow, pattern, texture, heavyGridlines, border, backgroundImage, pictograph, ornament), valuesArePercent. Checks: clipped data, non-zero bar or area baselines with the lie factor (size of the effect shown in the graphic divided by the size of the effect in the data) computed from your first series, zoomed line axes, size encodings that scale by radius or volume (with the drawn ratio worked out), 3D, decoration that lowers the data-ink ratio, pies with more than about five slices or negative values, stacked or multi-line overload, dual axes, and a missing title, source or units. Each finding has an id, severity (error, warn, info), plain explanation and the numbers behind it. Pure computation: nothing is stored or logged.

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": {
      "spec": "<spec>"
    },
    "name": "chart_lint"
  }
}

Input Schema

NameRequiredDescriptionDefault
specYesChart spec as a JSON object or a JSON string. See the tool description for fields.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real value on top: 'Pure computation: nothing is stored or logged' removes any side-effect worry, and it discloses the shape of what comes back (findings with id, severity of error/warn/info, explanation, and the underlying numbers) — important because there is no output schema.

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?

A single dense paragraph that front-loads the purpose and justification before descending into field and check enumeration; every clause carries usable information. It is long, but the length is largely earned by the empty input schema, and the long comma-separated lists of checks and decoration tokens are the least scannable part.

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?

With one loosely-typed parameter, no output schema, and no siblings that overlap, the description supplies exactly what is missing: the spec vocabulary, the check catalogue, and the finding structure. An agent could construct a valid call and interpret the response from this text alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only declares that `spec` is an object or JSON string, saying nothing about its internals. The description compensates fully, enumerating every accepted field — type with its eight permitted chart forms, series entries with optional axis, axis/axis2/dualAxis, sizeEncoding modes, decoration tokens, valuesArePercent — which is far beyond what the structured data provides.

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 and resource — 'lint a chart specification for graphical integrity' — and anchors it in named methodologies (Tufte, Cairo), which tells an agent exactly what class of problem it detects. It does not explicitly differentiate itself from nearby siblings like chart_chooser, chart_colour_check, or data_table_vs_chart, so it falls short of a 5.

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

Usage Guidelines3/5

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

The enumerated checks imply the situations the tool is for (you have a draft chart spec and want integrity problems flagged), but there is no explicit when-to-use / when-not-to-use guidance and no named alternative for adjacent needs such as palette validation or chart-type selection. Usage is inferable rather than stated.

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