Centering Lab
Server Details
Measure card centering and check PSA, BGS, CGC and SGC centering ceilings and standards.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 3 tools
The three tools target genuinely different inputs (published standards, user-supplied ratios, an actual photo), but the standards-vs-grading boundary is fuzzy enough that both descriptions must shout with emphatic 'USE ONLY'/'USE THIS TOOL whenever' rules to prevent misselection. Descriptions do resolve it well, but the overlap is inherent rather than absent.
All three names are snake_case, verb-first, and share the same domain object ('centering'): get_centering_standards, grade_centering, measure_card_centering. The pattern is fully predictable.
Three tools map cleanly onto the domain's three jobs — look up standards, grade supplied ratios, measure a photo — with no filler tool and nothing obviously missing from the surface. Small count is justified by a narrow single-purpose scope.
Lookup, grading, and image measurement cover the full user workflow, including documented handling of edge cases (SGC back with no published ceiling, TAG exclusion, incomplete inputs). Minor gaps remain: no batch/compare operation and no dedicated capability-listing tool ({} on standards only partially fills that role).
Available Tools
3 toolsget_centering_standardsCard centering standards and sourcesARead-onlyIdempotentInspect
USE ONLY for questions about published THRESHOLDS, tolerance, rules or SOURCES without grading the user's supplied numeric ratios. For PSA 10 compatibility with supplied ratios use grade_centering instead; it applies rounding and house-specific rules. If face/axis is unknown, ask first without any call. Example: {"house":"BGS","face":"back"}; fields optional, {} returns all. Houses PSA/BGS/CGC/SGC (case accepted), TAG excluded: explain proprietary assessment; never substitute another house. Face front/back in English; case/spaces accepted, reverse/obverse and translations rejected. SGC back has empty bands, no published table or ceiling; never invent one. Returns official/interpreted/approximate status, sources and verification. Not a final-grade prediction.
| Name | Required | Description | Default |
|---|---|---|---|
| face | No | 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. | |
| house | No | Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| tag_note | Yes | |
| standards | Yes | |
| disclaimer | Yes | |
| rounding_rule | Yes | |
| normalizations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent safety profile, but the description adds substantial context beyond them: supported houses, TAG exclusion with an instruction to explain proprietary assessment, the SGC back empty-band edge case with a 'never invent one' guardrail, and the official/interpreted/approximate return status. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the critical 'USE ONLY' constraint and tightly packed with rules, but it reads as a dense run-on block. Nearly every clause earns its place, though the sentence count could be trimmed for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with an output schema, the description is complete: it names the supported/unsupported houses, the optional-param default, the face-unknown ask-first rule, and even summarizes the return status fields. Nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with enum descriptions, so the baseline is 3. The description still adds meaning: both fields are optional and '{} returns all', case/whitespace are accepted, and it clarifies the rejected aliases (reverse/obverse, translations).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening 'USE ONLY for questions about published THRESHOLDS, tolerance, rules or SOURCES' states a specific resource and scope, and it explicitly distinguishes itself from the sibling grade_centering. An agent can tell what this returns (standards/sources, not a grading) without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use, when-not (do not grade supplied numeric ratios), and the named alternative ('use grade_centering instead'), plus edge-case routing ('If face/axis is unknown, ask first without any call'). This is a complete routing instruction set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grade_centeringGrade known card centering ratiosARead-onlyIdempotentInspect
USE THIS TOOL whenever the user supplies numeric centering ratios and asks whether a card meets PSA/BGS/CGC/SGC or asks for a centering ceiling. Do not calculate by looking up standards yourself. Example: {"front_lr":"55/45","front_tb":"60/40","house":"PSA"}. At least one known face AND axis; if either is unknown, ask first, never assume front/LR. Optional house PSA/BGS/CGC/SGC, TAG excluded. Flat front_lr/front_tb/back_lr/back_tb, or nested {"front":{"lr":"55/45","tb":"60/40"}}; no duplicates. Key/house case accepted. Ratios: percentages, fractions, pairs with / - – — : x or spaces, optional %, or [55,45]/["55","45"]. Scalar 1 rejected; use 1/99. Axis suffix must match field. Changes disclosed in normalizations. Partial input gives incomplete=true: report provisional ceiling and missing data. A ceiling from centering alone is NOT a predicted grade. SGC back alone has no published ceiling.
| Name | Required | Description | Default |
|---|---|---|---|
| back | No | Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}. | |
| front | No | Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}. | |
| house | No | Optional: return only PSA/BGS/CGC/SGC. Case/outer spaces accepted. TAG excluded; never substitute a different house. Example: PSA. | |
| back_lr | No | Back left/right. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations. | |
| back_tb | No | Back top/bottom. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations. | |
| front_lr | No | Front left/right. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations. | |
| front_tb | No | Front top/bottom. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| back | Yes | |
| front | Yes | |
| summary | Yes | |
| combined | Yes | |
| disclaimer | Yes | |
| incomplete | Yes | |
| missing_faces | Yes | |
| normalizations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: discloses that input is normalized and 'changes disclosed in normalizations', that partial input yields incomplete=true with a provisional ceiling, that a centering ceiling is NOT a predicted grade, that SGC back has no published ceiling, and that TAG is excluded and scalar 1 rejected. These are real behavioral facts an agent needs before trusting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the imperative and an inline example, then packs constraints tightly. It is appropriately sized for a 7-parameter tool with nested objects, though the back half reads as a dense run-on where a few sentences (normalizations, SGC back) could be grouped for faster scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description still covers input grammar, partial-result semantics, the ceiling-vs-grade caveat, and house coverage limits. Nothing an agent needs to invoke or interpret the call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds cross-field rules the schema cannot express: no duplicates, never mix flat and nested forms, and 'axis suffix must match field', plus key/house case tolerance. It does repeat much of the ratio grammar already present in the schema, so it lands just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (grade centering ratios) against named grading houses, and the opening imperative 'USE THIS TOOL whenever the user supplies numeric centering ratios' plus 'Do not calculate by looking up standards yourself' cleanly separates it from get_centering_standards and measure_card_centering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive trigger (user supplies numeric ratios and asks about PSA/BGS/CGC/SGC or a ceiling) and a clear precondition ('at least one known face AND axis; if either is unknown, ask first, never assume front/LR'). It implicitly excludes the measurement case handled by measure_card_centering but never names that sibling, so routing between the two is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measure_card_centeringMeasure centering from a card photoARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| face | Yes | Required: front or back (English). Ask the user before calling if unclear. Case/outer whitespace accepted, e.g. Front; reverse/obverse are rejected. | |
| card_size | No | standard = 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_url | No | 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). | |
| image_base64 | No | 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). |
Output Schema
| Name | Required | Description |
|---|---|---|
| lr | Yes | |
| tb | Yes | |
| code | Yes | |
| face | Yes | 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. |
| advice | Yes | |
| status | Yes | |
| summary | Yes | |
| ceilings | Yes | |
| warnings | Yes | |
| card_size | Yes | |
| adjust_url | Yes | |
| confidence | Yes | |
| disclaimer | Yes | |
| elapsed_ms | Yes | |
| image_bytes | Yes | |
| normalizations | Yes |
TDQS
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.
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.
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.
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.
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.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
get_centering_standards10 fields changed- added
Input schema / properties / face / descriptionAdded 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." - added
Input schema / properties / face / examplesAdded value: +[ + "front", + "back" +] - added
Input schema / properties / house / descriptionAdded value: +"Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted)." - added
Input schema / properties / house / examplesAdded value: +[ + "PSA", + "BGS" +] - added
Output schema / properties / normalizationsAdded 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" +} - added
Output schema / properties / standards / items / properties / face / descriptionAdded 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." - added
Output schema / properties / standards / items / properties / face / examplesAdded value: +[ + "front", + "back" +] - added
Output schema / properties / standards / items / properties / house / descriptionAdded value: +"Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted)." - added
Output schema / properties / standards / items / properties / house / examplesAdded value: +[ + "PSA", + "BGS" +] - changed
Output schema / requiredPrevious value: -[ - "standards", - "rounding_rule", - "tag_note", - "summary", - "disclaimer" -]New value: +[ + "normalizations", + "standards", + "rounding_rule", + "tag_note", + "summary", + "disclaimer" +]
- Changed
grade_centering31 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "front_lr" + ] + }, + { + "required": [ + "front_tb" + ] + }, + { + "required": [ + "back_lr" + ] + }, + { + "required": [ + "back_tb" + ] + }, + { + "required": [ + "front" + ] + }, + { + "required": [ + "back" + ] + } +] - added
Input schema / properties / backAdded value: +{ + "additionalProperties": false, + "anyOf": [ + { + "required": [ + "lr" + ] + }, + { + "required": [ + "tb" + ] + } + ], + "description": "Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}.", + "examples": [ + { + "lr": "55/45", + "tb": "60/40" + } + ], + "properties": { + "lr": { + "anyOf": [ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } + ], + "description": "Known left/right ratio. Example: 55/45.", + "examples": [ + "55/45" + ] + }, + "tb": { + "anyOf": [ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } + ], + "description": "Known top/bottom ratio. Example: 60/40.", + "examples": [ + "60/40" + ] + } + }, + "type": "object" +} - changed
Input schema / properties / back_lr / anyOfPrevious value: -[ - { - "const": 0, - "type": "number" - }, - { - "exclusiveMaximum": 1, - "exclusiveMinimum": 0, - "type": "number" - }, - { - "exclusiveMinimum": 1, - "maximum": 100, - "type": "number" - }, - { - "maxLength": 80, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } +] - changed
Input schema / properties / back_lr / descriptionPrevious value: -"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations."New value: +"Back left/right. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - added
Input schema / properties / back_lr / examplesAdded value: +[ + "65/35", + [ + 65, + 35 + ] +] - changed
Input schema / properties / back_tb / anyOfPrevious value: -[ - { - "const": 0, - "type": "number" - }, - { - "exclusiveMaximum": 1, - "exclusiveMinimum": 0, - "type": "number" - }, - { - "exclusiveMinimum": 1, - "maximum": 100, - "type": "number" - }, - { - "maxLength": 80, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } +] - changed
Input schema / properties / back_tb / descriptionPrevious value: -"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations."New value: +"Back top/bottom. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - added
Input schema / properties / back_tb / examplesAdded value: +[ + "60/40", + [ + 60, + 40 + ] +] - added
Input schema / properties / frontAdded value: +{ + "additionalProperties": false, + "anyOf": [ + { + "required": [ + "lr" + ] + }, + { + "required": [ + "tb" + ] + } + ], + "description": "Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}.", + "examples": [ + { + "lr": "55/45", + "tb": "60/40" + } + ], + "properties": { + "lr": { + "anyOf": [ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } + ], + "description": "Known left/right ratio. Example: 55/45.", + "examples": [ + "55/45" + ] + }, + "tb": { + "anyOf": [ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } + ], + "description": "Known top/bottom ratio. Example: 60/40.", + "examples": [ + "60/40" + ] + } + }, + "type": "object" +} - changed
Input schema / properties / front_lr / anyOfPrevious value: -[ - { - "const": 0, - "type": "number" - }, - { - "exclusiveMaximum": 1, - "exclusiveMinimum": 0, - "type": "number" - }, - { - "exclusiveMinimum": 1, - "maximum": 100, - "type": "number" - }, - { - "maxLength": 80, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } +] - changed
Input schema / properties / front_lr / descriptionPrevious value: -"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations."New value: +"Front left/right. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - added
Input schema / properties / front_lr / examplesAdded value: +[ + "55/45", + [ + 55, + 45 + ] +] - changed
Input schema / properties / front_tb / anyOfPrevious value: -[ - { - "const": 0, - "type": "number" - }, - { - "exclusiveMaximum": 1, - "exclusiveMinimum": 0, - "type": "number" - }, - { - "exclusiveMinimum": 1, - "maximum": 100, - "type": "number" - }, - { - "maxLength": 80, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "anyOf": [ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } + ], + "description": "Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations.", + "examples": [ + "55/45", + 0.55, + "0.55/0.45" + ] + }, + { + "items": { + "type": [ + "number", + "string" + ] + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + } +] - changed
Input schema / properties / front_tb / descriptionPrevious value: -"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations."New value: +"Front top/bottom. Optional individually; supply at least one known axis. Do not guess the face or axis. Example: 55/45. Known face/axis ratio. Examples: 55/45, 0.55, [55,45] (service alternative). A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - added
Input schema / properties / front_tb / examplesAdded value: +[ + "60/40", + [ + 60, + 40 + ] +] - changed
Input schema / properties / house / descriptionPrevious value: -"Optional: return only this grading house."New value: +"Optional: return only PSA/BGS/CGC/SGC. Case/outer spaces accepted. TAG excluded; never substitute a different house. Example: PSA." - added
Input schema / properties / house / examplesAdded value: +[ + "PSA" +] - changed
Output schema / properties / back / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "ceilings": { - "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" - } - }, - "type": "object" - }, - "missing_axes": { - "items": { - "enum": [ - "lr", - "tb" - ], - "type": "string" - }, - "type": "array" - }, - "ratios": { - "additionalProperties": false, - "properties": { - "lr": { - "type": [ - "number", - "null" - ] - }, - "tb": { - "type": [ - "number", - "null" - ] - } - }, - "required": [ - "lr", - "tb" - ], - "type": "object" - } - }, - "required": [ - "ratios", - "missing_axes", - "ceilings" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "ceilings": { + "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" + } + }, + "type": "object" + }, + "missing_axes": { + "items": { + "enum": [ + "lr", + "tb" + ], + "type": "string" + }, + "type": "array" + }, + "ratios": { + "additionalProperties": false, + "properties": { + "lr": { + "type": [ + "number", + "null" + ] + }, + "tb": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "lr", + "tb" + ], + "type": "object" + } + }, + "required": [ + "ratios", + "missing_axes", + "ceilings" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / combined / properties / BGS / properties / limiting_face / descriptionAdded 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." - added
Output schema / properties / combined / properties / BGS / properties / limiting_face / examplesAdded value: +[ + "front", + "back" +] - added
Output schema / properties / combined / properties / CGC / properties / limiting_face / descriptionAdded 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." - added
Output schema / properties / combined / properties / CGC / properties / limiting_face / examplesAdded value: +[ + "front", + "back" +] - added
Output schema / properties / combined / properties / PSA / properties / limiting_face / descriptionAdded 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." - added
Output schema / properties / combined / properties / PSA / properties / limiting_face / examplesAdded value: +[ + "front", + "back" +] - added
Output schema / properties / combined / properties / SGC / properties / limiting_face / descriptionAdded 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." - added
Output schema / properties / combined / properties / SGC / properties / limiting_face / examplesAdded value: +[ + "front", + "back" +] - changed
Output schema / properties / front / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "ceilings": { - "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" - } - }, - "type": "object" - }, - "missing_axes": { - "items": { - "enum": [ - "lr", - "tb" - ], - "type": "string" - }, - "type": "array" - }, - "ratios": { - "additionalProperties": false, - "properties": { - "lr": { - "type": [ - "number", - "null" - ] - }, - "tb": { - "type": [ - "number", - "null" - ] - } - }, - "required": [ - "lr", - "tb" - ], - "type": "object" - } - }, - "required": [ - "ratios", - "missing_axes", - "ceilings" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "ceilings": { + "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" + } + }, + "type": "object" + }, + "missing_axes": { + "items": { + "enum": [ + "lr", + "tb" + ], + "type": "string" + }, + "type": "array" + }, + "ratios": { + "additionalProperties": false, + "properties": { + "lr": { + "type": [ + "number", + "null" + ] + }, + "tb": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "lr", + "tb" + ], + "type": "object" + } + }, + "required": [ + "ratios", + "missing_axes", + "ceilings" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / missing_faces / items / descriptionAdded 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." - added
Output schema / properties / missing_faces / items / examplesAdded value: +[ + "front", + "back" +] - removed
Output schema / properties / normalizations / items / properties / field / enumRemoved value: -[ - "front_lr", - "front_tb", - "back_lr", - "back_tb" -] - changed
Output schema / properties / normalizations / items / requiredPrevious value: -[ - "field", - "input", - "ratio", - "note" -]New value: +[ + "field", + "note" +]
- Changed
measure_card_centering13 fields changed- changed
Input schema / properties / card_size / descriptionPrevious 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." - added
Input schema / properties / card_size / examplesAdded value: +[ + "standard", + "small" +] - changed
Input schema / properties / face / descriptionPrevious 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." - added
Input schema / properties / face / examplesAdded value: +[ + "front", + "back" +] - changed
Input schema / properties / image_base64 / descriptionPrevious 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)." - added
Input schema / properties / image_base64 / examplesAdded value: +[ + "data:image/png;base64,iVBORw0KGgo=" +] - changed
Input schema / properties / image_url / descriptionPrevious 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)." - added
Input schema / properties / image_url / examplesAdded value: +[ + "https://images.example.org/card.jpg" +] - changed
Output schema / properties / ceilings / anyOfPrevious 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" + } +] - added
Output schema / properties / face / descriptionAdded 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." - added
Output schema / properties / face / examplesAdded value: +[ + "front", + "back" +] - added
Output schema / properties / normalizationsAdded 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" +} - changed
Output schema / requiredPrevious 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" +]
1 tool update
- Changed
grade_centering14 fields changed- changed
Input schema / properties / back_lr / anyOfPrevious value: -[ - { - "maximum": 100, - "minimum": 0, - "type": "number" - }, - { - "maxLength": 40, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } +] - changed
Input schema / properties / back_lr / descriptionPrevious value: -"A percentage (55 or 45), or two percentages summing to 100 (\"55/45\" or \"45/55\"). Normalized to the larger side."New value: +"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - changed
Input schema / properties / back_tb / anyOfPrevious value: -[ - { - "maximum": 100, - "minimum": 0, - "type": "number" - }, - { - "maxLength": 40, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } +] - changed
Input schema / properties / back_tb / descriptionPrevious value: -"A percentage (55 or 45), or two percentages summing to 100 (\"55/45\" or \"45/55\"). Normalized to the larger side."New value: +"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - changed
Input schema / properties / front_lr / anyOfPrevious value: -[ - { - "maximum": 100, - "minimum": 0, - "type": "number" - }, - { - "maxLength": 40, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } +] - changed
Input schema / properties / front_lr / descriptionPrevious value: -"A percentage (55 or 45), or two percentages summing to 100 (\"55/45\" or \"45/55\"). Normalized to the larger side."New value: +"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - changed
Input schema / properties / front_tb / anyOfPrevious value: -[ - { - "maximum": 100, - "minimum": 0, - "type": "number" - }, - { - "maxLength": 40, - "minLength": 1, - "type": "string" - } -]New value: +[ + { + "const": 0, + "type": "number" + }, + { + "exclusiveMaximum": 1, + "exclusiveMinimum": 0, + "type": "number" + }, + { + "exclusiveMinimum": 1, + "maximum": 100, + "type": "number" + }, + { + "maxLength": 80, + "minLength": 1, + "type": "string" + } +] - changed
Input schema / properties / front_tb / descriptionPrevious value: -"A percentage (55 or 45), or two percentages summing to 100 (\"55/45\" or \"45/55\"). Normalized to the larger side."New value: +"A percentage within 0–100 (55 or 45; 1 is ambiguous and rejected), a fraction between 0 and 1 (0.55), or a pair summing to 100 or 1. Separators: / - – — : x or spaces; optional %. Axis suffix L/R or left/right for *_lr, T/B or top/bottom for *_tb. Normalized to the larger side; fractions are disclosed in normalizations." - added
Input schema / properties / houseAdded value: +{ + "description": "Optional: return only this grading house.", + "enum": [ + "PSA", + "BGS", + "CGC", + "SGC" + ], + "type": "string" +} - changed
Output schema / properties / back / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "ceilings": { - "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" - }, - "missing_axes": { - "items": { - "enum": [ - "lr", - "tb" - ], - "type": "string" - }, - "type": "array" - }, - "ratios": { - "additionalProperties": false, - "properties": { - "lr": { - "type": [ - "number", - "null" - ] - }, - "tb": { - "type": [ - "number", - "null" - ] - } - }, - "required": [ - "lr", - "tb" - ], - "type": "object" - } - }, - "required": [ - "ratios", - "missing_axes", - "ceilings" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "ceilings": { + "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" + } + }, + "type": "object" + }, + "missing_axes": { + "items": { + "enum": [ + "lr", + "tb" + ], + "type": "string" + }, + "type": "array" + }, + "ratios": { + "additionalProperties": false, + "properties": { + "lr": { + "type": [ + "number", + "null" + ] + }, + "tb": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "lr", + "tb" + ], + "type": "object" + } + }, + "required": [ + "ratios", + "missing_axes", + "ceilings" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / combined / requiredRemoved value: -[ - "PSA", - "BGS", - "CGC", - "SGC" -] - changed
Output schema / properties / front / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "ceilings": { - "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" - }, - "missing_axes": { - "items": { - "enum": [ - "lr", - "tb" - ], - "type": "string" - }, - "type": "array" - }, - "ratios": { - "additionalProperties": false, - "properties": { - "lr": { - "type": [ - "number", - "null" - ] - }, - "tb": { - "type": [ - "number", - "null" - ] - } - }, - "required": [ - "lr", - "tb" - ], - "type": "object" - } - }, - "required": [ - "ratios", - "missing_axes", - "ceilings" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "ceilings": { + "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" + } + }, + "type": "object" + }, + "missing_axes": { + "items": { + "enum": [ + "lr", + "tb" + ], + "type": "string" + }, + "type": "array" + }, + "ratios": { + "additionalProperties": false, + "properties": { + "lr": { + "type": [ + "number", + "null" + ] + }, + "tb": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "lr", + "tb" + ], + "type": "object" + } + }, + "required": [ + "ratios", + "missing_axes", + "ceilings" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / normalizationsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "field": { + "enum": [ + "front_lr", + "front_tb", + "back_lr", + "back_tb" + ], + "type": "string" + }, + "input": { + "type": [ + "number", + "string" + ] + }, + "note": { + "type": "string" + }, + "ratio": { + "type": "string" + } + }, + "required": [ + "field", + "input", + "ratio", + "note" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "front", - "back", - "combined", - "incomplete", - "missing_faces", - "summary", - "disclaimer" -]New value: +[ + "front", + "back", + "combined", + "normalizations", + "incomplete", + "missing_faces", + "summary", + "disclaimer" +]
3 tool updates
- First observed
get_centering_standards - First observed
grade_centering - First observed
measure_card_centering
Related MCP Connectors
Trading card prices and grading ROI for 1.5M+ Pokémon, Magic, Yu-Gi-Oh! and sports cards. Read-only.
Trading-card research and seller economics: identify cards, check sold comps, and compare fees.
Real sold prices, history & PSA population for graded Pokémon cards (EN/JP/CN). Knows nicknames.
Verified trading card sales and prices by grade: Pokemon, Magic, Yu-Gi-Oh!, sports, Harry Potter.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to look up trading-card market values across Pokémon, Magic, sports and other TCG catalogs, including raw prices by condition, graded ladders, price history, trending movers and set checklists. It also calculates grading ROI — gem premiums, net profit after fees, expected value and break-even gem rates — so collectors can decide whether a card is worth submitting.-
- AlicenseNot gradedqualityCmaintenanceEnables users to check a Pokémon trading-card listing for deterministic, rule-based risk signals such as proxy wording, missing cert numbers, off-platform payment requests, and suspiciously low asks, along with a common-fakes checklist and ready-made sold-comp search links. It is informational only and never authenticates, grades, appraises, or returns prices.1 npmMIT
- AlicenseBqualityDmaintenanceVision-guided Pokémon TCG card identification server that matches exact printings using visual evidence and marketplace data.401MIT
- FlicenseNot gradedqualityDmaintenanceClassifies Bowman Prospects baseball cards using image recognition, provides player statistics and market pricing data to determine card value.1-
Glama MCP Gateway
Add one secure layer between your agents and this server.