Skip to main content
Glama

Check accessibility

mzizi_check_accessibility
Read-onlyIdempotent

Check a design against the Mzizi floors. Colours: the WCAG 2.x contrast ratio of a foreground on a background (#RRGGBB), with the AA-large, AA and AAA verdicts and whether it meets the Mzizi floor of 7:1. Spacing: pass any of insetPx (text to container edge), controlGapPx, labelGapPx, itemGapPx (gaps) and leading (body line height) and each is compared with the spacing floor the pinned registry states (nothing may go under it): the spacing floor (14px inset, 7px gaps between controls, 7px between a label and its field, 7px between items, 1.5 body leading). Give colours, spacing values, or both. Computed locally, no network. It does not compute APCA Lc or simulate colour-vision deficiency; read the Mzizi accessibility doctrine (mzizi_get_tokens family=accessibility) for those rules. To check a project's source rather than values, run mzizi check (@nyuchi/mzizi-cli).

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "mzizi_check_accessibility"
  }
}

Input Schema

NameRequiredDescriptionDefault
insetPxNoPadding between text and its container edge, in px.
leadingNoBody line height as a unitless ratio, e.g. 1.5.
itemGapPxNoGap between sibling items in a list, grid or toolbar, in px.
backgroundNoBackground colour as #RRGGBB, e.g. #FFFFFF. Give with foreground.
foregroundNoForeground colour as #RRGGBB, e.g. #1B1A17. Give with background.
labelGapPxNoGap between a label and its field, in px.
controlGapPxNoGap between adjacent interactive controls, visible edge to visible edge, in px.

Output Schema

NameRequiredDescriptionDefault
passesNo
spacingNo
backgroundNo
foregroundNo
contrastRatioNo
meetsMziziFloorNo
spacingUnavailableNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • changedInput schema / properties / background / description
      Previous value: -"Background colour as #RRGGBB, e.g. #FFFFFF."New value: +"Background colour as #RRGGBB, e.g. #FFFFFF. Give with foreground."
    • addedInput schema / properties / controlGapPx
      Added value: +{
      +  "description": "Gap between adjacent interactive controls, visible edge to visible edge, in px.",
      +  "maximum": 1000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / foreground / description
      Previous value: -"Foreground colour as #RRGGBB, e.g. #1B1A17."New value: +"Foreground colour as #RRGGBB, e.g. #1B1A17. Give with background."
    • addedInput schema / properties / insetPx
      Added value: +{
      +  "description": "Padding between text and its container edge, in px.",
      +  "maximum": 1000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / itemGapPx
      Added value: +{
      +  "description": "Gap between sibling items in a list, grid or toolbar, in px.",
      +  "maximum": 1000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / labelGapPx
      Added value: +{
      +  "description": "Gap between a label and its field, in px.",
      +  "maximum": 1000,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / leading
      Added value: +{
      +  "description": "Body line height as a unitless ratio, e.g. 1.5.",
      +  "maximum": 10,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "foreground",
      -  "background"
      -]
    • addedOutput schema / properties / spacing
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "checks": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "minimum": {
      +            "type": "number"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "passes": {
      +            "type": "boolean"
      +          },
      +          "unit": {
      +            "enum": [
      +              "px",
      +              "ratio"
      +            ],
      +            "type": "string"
      +          },
      +          "value": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "value",
      +          "minimum",
      +          "unit",
      +          "passes"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "floor": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "controlGapPx": {
      +          "type": "number"
      +        },
      +        "insetPx": {
      +          "type": "number"
      +        },
      +        "itemGapPx": {
      +          "type": "number"
      +        },
      +        "labelGapPx": {
      +          "type": "number"
      +        },
      +        "leadingBody": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "insetPx",
      +        "controlGapPx",
      +        "labelGapPx",
      +        "itemGapPx",
      +        "leadingBody"
      +      ],
      +      "type": "object"
      +    },
      +    "meetsFloor": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "floor",
      +    "checks",
      +    "meetsFloor"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / spacingUnavailable
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "foreground",
      -  "background",
      -  "contrastRatio",
      -  "passes",
      -  "meetsMziziFloor"
      -]
  2. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / background / description
      Previous value: -"Background colour as #RRGGBB."New value: +"Background colour as #RRGGBB, e.g. #FFFFFF."
    • addedInput schema / properties / background / maxLength
      Added value: +16
    • changedInput schema / properties / foreground / description
      Previous value: -"Foreground colour as #RRGGBB."New value: +"Foreground colour as #RRGGBB, e.g. #1B1A17."
    • addedInput schema / properties / foreground / maxLength
      Added value: +16
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": false,
      +  "properties": {
      +    "background": {
      +      "type": "string"
      +    },
      +    "contrastRatio": {
      +      "type": "number"
      +    },
      +    "foreground": {
      +      "type": "string"
      +    },
      +    "meetsMziziFloor": {
      +      "type": "boolean"
      +    },
      +    "passes": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "aa": {
      +          "type": "boolean"
      +        },
      +        "aaLarge": {
      +          "type": "boolean"
      +        },
      +        "aaa": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "aaLarge",
      +        "aa",
      +        "aaa"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "foreground",
      +    "background",
      +    "contrastRatio",
      +    "passes",
      +    "meetsMziziFloor"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world, non-destructive; the description corroborates with 'Computed locally, no network' and adds genuine behavioral context: the exact thresholds applied (AA-large/AA/AAA, Mzizi 7:1, 14px inset, 7px gaps, 1.5 leading) and the explicit capability limits. It stops short of describing response shape, though an output schema exists to cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and logically ordered (colours, spacing, limits, alternatives), but the spacing sentence is dense and partly redundant: it says each value is compared with 'the spacing floor the pinned registry states (nothing may go under it)' and then repeats the same floors parenthetically as '(14px inset, 7px gaps..., 1.5 body leading)'. The nested parentheticals make it harder to scan than it needs to 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 seven-parameter, all-optional tool with an output schema, the description covers purpose, accepted inputs, thresholds, capability boundaries, and where to go for the missing capabilities. Nothing an agent needs in order to call it correctly is absent.

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 baseline is 3; the description earns above that by grouping the seven optional parameters into colour pairs versus spacing values and stating the at-least-one-of calling rule, which the schema alone does not convey (no required fields). It mostly restates the schema's own per-parameter meaning otherwise.

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?

The description opens with a specific verb and resource ('Check a design against the Mzizi floors') and immediately splits the two checkable domains, colours (contrast ratio) and spacing (floors). It also names what it is not (APCA/CVD simulation, source scanning) and routes those to mzizi_get_tokens and the mzizi CLI, so an agent can distinguish it from every sibling.

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?

It states the calling contract explicitly: 'Give colours, spacing values, or both', with each spacing parameter named. It also gives exclusions with alternatives — 'It does not compute APCA Lc or simulate colour-vision deficiency; read the Mzizi accessibility doctrine (mzizi_get_tokens family=accessibility)' and 'To check a project's source rather than values, run mzizi check'.

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