Skip to main content
Glama

Measure centering from a card photo

measure_card_centering
Read-onlyIdempotent

Measure one ACTUAL photograph. Example shape: {"face":"front","image_base64":""}. Ask front/back BEFORE calling if unknown. Exactly one user-provided public HTTPS image URL (port 443) or complete base64 source, never both. Never decode, repair or re-encode bytes yourself; never invent, shorten or rewrite base64; pass it verbatim, including an image data-URL prefix or whitespace (service normalizes). If chat attachment cannot be forwarded, send user to https://centeringlab.com/. card_size standard=63×88 mm including Japanese Pokémon; small=59×86 mm including Yu-Gi-Oh!, not inferred from language. Request a whole card flat from above on dark surface; if sleeved/toploader or tilted, recommend a retake first. Borderless: suggest back/manual site. API photos reach server memory; site stays local. needs-review/failed gives ceilings=null: retake or adjust manually, no grade prediction. Inspect status/code even on HTTP 200; respect Retry-After.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
faceYesRequired: front or back (English). Ask the user before calling if unclear. Case/outer whitespace accepted, e.g. Front; reverse/obverse are rejected.
card_sizeNostandard = 63×88 mm; small = 59×86 mm. Japanese Pokémon uses standard; Yu-Gi-Oh! uses small. Case/outer whitespace accepted. Example: standard.standard
image_urlNoPublic HTTPS image URL, port 443. Private network addresses and non-image responses are rejected. Use only a URL supplied by the user: never invent one. Example syntax: https://images.example.org/card.jpg (placeholder, never fetch it).
image_base64NoActual base64 raster image bytes supplied by the client. Image data-URL prefix and whitespace/newlines are accepted and normalization is disclosed. Never invent bytes or substitute an attachment filename. Example syntax: data:image/png;base64,... (ellipsis is not valid bytes).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
lrYes
tbYes
codeYes
faceYesFace: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front.
adviceYes
statusYes
summaryYes
ceilingsYes
warningsYes
card_sizeYes
adjust_urlYes
confidenceYes
disclaimerYes
elapsed_msYes
image_bytesYes
normalizationsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changed
    • changedInput schema / properties / card_size / description
      Previous value: -"standard = 63×88 mm; small = 59×86 mm."New value: +"standard = 63×88 mm; small = 59×86 mm. Japanese Pokémon uses standard; Yu-Gi-Oh! uses small. Case/outer whitespace accepted. Example: standard."
    • addedInput schema / properties / card_size / examples
      Added value: +[
      +  "standard",
      +  "small"
      +]
    • changedInput schema / properties / face / description
      Previous value: -"Required: ask the user whether the photo shows the front or back if unclear."New value: +"Required: front or back (English). Ask the user before calling if unclear. Case/outer whitespace accepted, e.g. Front; reverse/obverse are rejected."
    • addedInput schema / properties / face / examples
      Added value: +[
      +  "front",
      +  "back"
      +]
    • changedInput schema / properties / image_base64 / description
      Previous value: -"Raw base64 encoded raster image, without a data-URL prefix. Intended for clients that can supply image bytes."New value: +"Actual base64 raster image bytes supplied by the client. Image data-URL prefix and whitespace/newlines are accepted and normalization is disclosed. Never invent bytes or substitute an attachment filename. Example syntax: data:image/png;base64,... (ellipsis is not valid bytes)."
    • addedInput schema / properties / image_base64 / examples
      Added value: +[
      +  "data:image/png;base64,iVBORw0KGgo="
      +]
    • changedInput schema / properties / image_url / description
      Previous value: -"Public HTTPS image URL, port 443. Private network addresses and non-image responses are rejected."New value: +"Public HTTPS image URL, port 443. Private network addresses and non-image responses are rejected. Use only a URL supplied by the user: never invent one. Example syntax: https://images.example.org/card.jpg (placeholder, never fetch it)."
    • addedInput schema / properties / image_url / examples
      Added value: +[
      +  "https://images.example.org/card.jpg"
      +]
    • changedOutput schema / properties / ceilings / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "BGS": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "borderline": {
      -            "type": "boolean"
      -          },
      -          "distance_to_next": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "limiting_axis": {
      -            "enum": [
      -              "lr",
      -              "tb"
      -            ],
      -            "type": "string"
      -          },
      -          "limiting_face": {
      -            "enum": [
      -              "front",
      -              "back"
      -            ],
      -            "type": "string"
      -          },
      -          "maximum_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "rank": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "source": {
      -            "type": "string"
      -          },
      -          "source_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "sources": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "standard_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "unconstrained": {
      -            "type": "boolean"
      -          },
      -          "verification": {
      -            "type": "string"
      -          },
      -          "verified": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "maximum_grade",
      -          "label",
      -          "rank",
      -          "limiting_face",
      -          "limiting_axis",
      -          "distance_to_next",
      -          "next_grade",
      -          "next_label",
      -          "borderline",
      -          "unconstrained",
      -          "source_status",
      -          "standard_status",
      -          "source",
      -          "sources",
      -          "verified",
      -          "verification"
      -        ],
      -        "type": "object"
      -      },
      -      "CGC": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "borderline": {
      -            "type": "boolean"
      -          },
      -          "distance_to_next": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "limiting_axis": {
      -            "enum": [
      -              "lr",
      -              "tb"
      -            ],
      -            "type": "string"
      -          },
      -          "limiting_face": {
      -            "enum": [
      -              "front",
      -              "back"
      -            ],
      -            "type": "string"
      -          },
      -          "maximum_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "rank": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "source": {
      -            "type": "string"
      -          },
      -          "source_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "sources": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "standard_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "unconstrained": {
      -            "type": "boolean"
      -          },
      -          "verification": {
      -            "type": "string"
      -          },
      -          "verified": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "maximum_grade",
      -          "label",
      -          "rank",
      -          "limiting_face",
      -          "limiting_axis",
      -          "distance_to_next",
      -          "next_grade",
      -          "next_label",
      -          "borderline",
      -          "unconstrained",
      -          "source_status",
      -          "standard_status",
      -          "source",
      -          "sources",
      -          "verified",
      -          "verification"
      -        ],
      -        "type": "object"
      -      },
      -      "PSA": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "borderline": {
      -            "type": "boolean"
      -          },
      -          "distance_to_next": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "limiting_axis": {
      -            "enum": [
      -              "lr",
      -              "tb"
      -            ],
      -            "type": "string"
      -          },
      -          "limiting_face": {
      -            "enum": [
      -              "front",
      -              "back"
      -            ],
      -            "type": "string"
      -          },
      -          "maximum_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "rank": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "source": {
      -            "type": "string"
      -          },
      -          "source_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "sources": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "standard_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "unconstrained": {
      -            "type": "boolean"
      -          },
      -          "verification": {
      -            "type": "string"
      -          },
      -          "verified": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "maximum_grade",
      -          "label",
      -          "rank",
      -          "limiting_face",
      -          "limiting_axis",
      -          "distance_to_next",
      -          "next_grade",
      -          "next_label",
      -          "borderline",
      -          "unconstrained",
      -          "source_status",
      -          "standard_status",
      -          "source",
      -          "sources",
      -          "verified",
      -          "verification"
      -        ],
      -        "type": "object"
      -      },
      -      "SGC": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "borderline": {
      -            "type": "boolean"
      -          },
      -          "distance_to_next": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "limiting_axis": {
      -            "enum": [
      -              "lr",
      -              "tb"
      -            ],
      -            "type": "string"
      -          },
      -          "limiting_face": {
      -            "enum": [
      -              "front",
      -              "back"
      -            ],
      -            "type": "string"
      -          },
      -          "maximum_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_grade": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "next_label": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "rank": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "source": {
      -            "type": "string"
      -          },
      -          "source_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "sources": {
      -            "items": {
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "standard_status": {
      -            "enum": [
      -              "official",
      -              "interpreted",
      -              "approximate"
      -            ],
      -            "type": "string"
      -          },
      -          "unconstrained": {
      -            "type": "boolean"
      -          },
      -          "verification": {
      -            "type": "string"
      -          },
      -          "verified": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "maximum_grade",
      -          "label",
      -          "rank",
      -          "limiting_face",
      -          "limiting_axis",
      -          "distance_to_next",
      -          "next_grade",
      -          "next_label",
      -          "borderline",
      -          "unconstrained",
      -          "source_status",
      -          "standard_status",
      -          "source",
      -          "sources",
      -          "verified",
      -          "verification"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "PSA",
      -      "BGS",
      -      "CGC",
      -      "SGC"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "BGS": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "borderline": {
      +            "type": "boolean"
      +          },
      +          "distance_to_next": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "limiting_axis": {
      +            "enum": [
      +              "lr",
      +              "tb"
      +            ],
      +            "type": "string"
      +          },
      +          "limiting_face": {
      +            "description": "Face: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front.",
      +            "enum": [
      +              "front",
      +              "back"
      +            ],
      +            "examples": [
      +              "front",
      +              "back"
      +            ],
      +            "type": "string"
      +          },
      +          "maximum_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "rank": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "source": {
      +            "type": "string"
      +          },
      +          "source_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "sources": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "standard_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "unconstrained": {
      +            "type": "boolean"
      +          },
      +          "verification": {
      +            "type": "string"
      +          },
      +          "verified": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "maximum_grade",
      +          "label",
      +          "rank",
      +          "limiting_face",
      +          "limiting_axis",
      +          "distance_to_next",
      +          "next_grade",
      +          "next_label",
      +          "borderline",
      +          "unconstrained",
      +          "source_status",
      +          "standard_status",
      +          "source",
      +          "sources",
      +          "verified",
      +          "verification"
      +        ],
      +        "type": "object"
      +      },
      +      "CGC": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "borderline": {
      +            "type": "boolean"
      +          },
      +          "distance_to_next": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "limiting_axis": {
      +            "enum": [
      +              "lr",
      +              "tb"
      +            ],
      +            "type": "string"
      +          },
      +          "limiting_face": {
      +            "description": "Face: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front.",
      +            "enum": [
      +              "front",
      +              "back"
      +            ],
      +            "examples": [
      +              "front",
      +              "back"
      +            ],
      +            "type": "string"
      +          },
      +          "maximum_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "rank": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "source": {
      +            "type": "string"
      +          },
      +          "source_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "sources": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "standard_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "unconstrained": {
      +            "type": "boolean"
      +          },
      +          "verification": {
      +            "type": "string"
      +          },
      +          "verified": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "maximum_grade",
      +          "label",
      +          "rank",
      +          "limiting_face",
      +          "limiting_axis",
      +          "distance_to_next",
      +          "next_grade",
      +          "next_label",
      +          "borderline",
      +          "unconstrained",
      +          "source_status",
      +          "standard_status",
      +          "source",
      +          "sources",
      +          "verified",
      +          "verification"
      +        ],
      +        "type": "object"
      +      },
      +      "PSA": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "borderline": {
      +            "type": "boolean"
      +          },
      +          "distance_to_next": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "limiting_axis": {
      +            "enum": [
      +              "lr",
      +              "tb"
      +            ],
      +            "type": "string"
      +          },
      +          "limiting_face": {
      +            "description": "Face: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front.",
      +            "enum": [
      +              "front",
      +              "back"
      +            ],
      +            "examples": [
      +              "front",
      +              "back"
      +            ],
      +            "type": "string"
      +          },
      +          "maximum_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "rank": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "source": {
      +            "type": "string"
      +          },
      +          "source_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "sources": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "standard_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "unconstrained": {
      +            "type": "boolean"
      +          },
      +          "verification": {
      +            "type": "string"
      +          },
      +          "verified": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "maximum_grade",
      +          "label",
      +          "rank",
      +          "limiting_face",
      +          "limiting_axis",
      +          "distance_to_next",
      +          "next_grade",
      +          "next_label",
      +          "borderline",
      +          "unconstrained",
      +          "source_status",
      +          "standard_status",
      +          "source",
      +          "sources",
      +          "verified",
      +          "verification"
      +        ],
      +        "type": "object"
      +      },
      +      "SGC": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "borderline": {
      +            "type": "boolean"
      +          },
      +          "distance_to_next": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "limiting_axis": {
      +            "enum": [
      +              "lr",
      +              "tb"
      +            ],
      +            "type": "string"
      +          },
      +          "limiting_face": {
      +            "description": "Face: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front.",
      +            "enum": [
      +              "front",
      +              "back"
      +            ],
      +            "examples": [
      +              "front",
      +              "back"
      +            ],
      +            "type": "string"
      +          },
      +          "maximum_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_grade": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "next_label": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "rank": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "source": {
      +            "type": "string"
      +          },
      +          "source_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "sources": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "standard_status": {
      +            "enum": [
      +              "official",
      +              "interpreted",
      +              "approximate"
      +            ],
      +            "type": "string"
      +          },
      +          "unconstrained": {
      +            "type": "boolean"
      +          },
      +          "verification": {
      +            "type": "string"
      +          },
      +          "verified": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "maximum_grade",
      +          "label",
      +          "rank",
      +          "limiting_face",
      +          "limiting_axis",
      +          "distance_to_next",
      +          "next_grade",
      +          "next_label",
      +          "borderline",
      +          "unconstrained",
      +          "source_status",
      +          "standard_status",
      +          "source",
      +          "sources",
      +          "verified",
      +          "verification"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "PSA",
      +      "BGS",
      +      "CGC",
      +      "SGC"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / face / description
      Added value: +"Face: front or back, in English. Ask the user if unknown. Case and outer whitespace accepted; never use reverse/obverse or translated names. Example: front."
    • addedOutput schema / properties / face / examples
      Added value: +[
      +  "front",
      +  "back"
      +]
    • addedOutput schema / properties / normalizations
      Added value: +{
      +  "default": [],
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "field": {
      +        "type": "string"
      +      },
      +      "input": {
      +        "type": [
      +          "number",
      +          "string"
      +        ]
      +      },
      +      "note": {
      +        "type": "string"
      +      },
      +      "ratio": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "field",
      +      "note"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "status",
      -  "code",
      -  "face",
      -  "card_size",
      -  "lr",
      -  "tb",
      -  "confidence",
      -  "warnings",
      -  "ceilings",
      -  "adjust_url",
      -  "advice",
      -  "elapsed_ms",
      -  "image_bytes",
      -  "summary",
      -  "disclaimer"
      -]New value: +[
      +  "normalizations",
      +  "status",
      +  "code",
      +  "face",
      +  "card_size",
      +  "lr",
      +  "tb",
      +  "confidence",
      +  "warnings",
      +  "ceilings",
      +  "adjust_url",
      +  "advice",
      +  "elapsed_ms",
      +  "image_bytes",
      +  "summary",
      +  "disclaimer"
      +]
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnly/idempotent/openWorld; the description adds substantial beyond-schema context: bytes are passed verbatim and normalized server-side, API photos reach server memory while the site stays local, needs-review/failed yields null ceilings, inspect status even on HTTP 200, and respect Retry-After. This is rich operational disclosure not available anywhere else.

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 with the core action and the example, but the body is a dense run-on of many unrelated constraints (bytes, size, retake, borderless, memory, status codes) with no structural grouping, which hampers scanning despite each clause being useful.

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 tool with an output schema, the description needn't explain return values, yet it still covers the failure surface (null ceilings), transport constraints, size disambiguation, and fallback routing. Nothing an agent needs to call it correctly is missing.

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 description coverage is 100% and enums are documented in the schema, so the baseline is 3. The description reinforces verbatim byte handling and card-size mappings that already live in the schema, adding reinforcement rather than new semantics.

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+resource ('Measure...centering') on 'one ACTUAL photograph', and differentiates from siblings: this measures from a supplied photo, whereas grade_centering and get_centering_standards are distinct. The example payload anchors the purpose concretely.

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 when-to-use: 'Ask front/back BEFORE calling if unknown', 'if sleeved/toploader or tilted, recommend a retake first', 'Borderless: suggest back/manual site', and 'If chat attachment cannot be forwarded, send user to...'. It also states exclusions (never both source types) and routes to the site fallback.

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