Measure card centering and check PSA, BGS, CGC and SGC centering ceilings and standards.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
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.
Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted).
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.
| Argument | Type | Description |
|---|---|---|
| face | string | 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 | string | Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"face": {
"enum": [
"front",
"back"
],
"type": "string",
"examples": [
"front",
"back"
],
"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."
},
"house": {
"enum": [
"PSA",
"BGS",
"CGC",
"SGC"
],
"type": "string",
"examples": [
"PSA",
"BGS"
],
"description": "Grading house: PSA, BGS, CGC or SGC; TAG is excluded. Case/outer whitespace accepted by the service. Example: PSA (psa also accepted)."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| back | object | Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}. |
| front | object | Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}. |
| house | string | Optional: return only PSA/BGS/CGC/SGC. Case/outer spaces accepted. TAG excluded; never substitute a different house. Example: PSA. |
| back_lr | any | 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. |
Measure one ACTUAL photograph. Example shape: {"face":"front","image_base64":"<complete actual image bytes>"}. 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.
| Argument | Type | Description |
|---|---|---|
| face* | string | 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 | string | standard = 63×88 mm; small = 59×86 mm. Japanese Pokémon uses standard; Yu-Gi-Oh! uses small. Case/outer whitespace accepted. Example: standard. |
| image_url | string | 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 |
| back_tb | any | 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 | any | 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 | any | 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. |
{
"type": "object",
"anyOf": [
{
"required": [
"front_lr"
]
},
{
"required": [
"front_tb"
]
},
{
"required": [
"back_lr"
]
},
{
"required": [
"back_tb"
]
},
{
"required": [
"front"
]
},
{
"required": [
"back"
]
}
],
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"back": {
"type": "object",
"anyOf": [
{
"required": [
"lr"
]
},
{
"required": [
"tb"
]
}
],
"examples": [
{
"lr": "55/45",
"tb": "60/40"
}
],
"properties": {
"lr": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"55/45"
],
"description": "Known left/right ratio. Example: 55/45."
},
"tb": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"60/40"
],
"description": "Known top/bottom ratio. Example: 60/40."
}
},
"description": "Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}.",
"additionalProperties": false
},
"front": {
"type": "object",
"anyOf": [
{
"required": [
"lr"
]
},
{
"required": [
"tb"
]
}
],
"examples": [
{
"lr": "55/45",
"tb": "60/40"
}
],
"properties": {
"lr": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"55/45"
],
"description": "Known left/right ratio. Example: 55/45."
},
"tb": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"60/40"
],
"description": "Known top/bottom ratio. Example: 60/40."
}
},
"description": "Alternative nested form; supply lr and/or tb, never mix with the corresponding flat keys. Example: {lr:'55/45',tb:'60/40'}.",
"additionalProperties": false
},
"house": {
"enum": [
"PSA",
"BGS",
"CGC",
"SGC"
],
"type": "string",
"examples": [
"PSA"
],
"description": "Optional: return only PSA/BGS/CGC/SGC. Case/outer spaces accepted. TAG excluded; never substitute a different house. Example: PSA."
},
"back_lr": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"65/35",
[
65,
35
]
],
"description": "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": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"60/40",
[
60,
40
]
],
"description": "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": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"55/45",
[
55,
45
]
],
"description": "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": {
"anyOf": [
{
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"exclusiveMaximum": 1,
"exclusiveMinimum": 0
},
{
"type": "number",
"maximum": 100,
"exclusiveMinimum": 1
},
{
"type": "string",
"maxLength": 80,
"minLength": 1
}
],
"examples": [
"55/45",
0.55,
"0.55/0.45"
],
"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."
},
{
"type": "array",
"items": {
"type": [
"number",
"string"
]
},
"maxItems": 2,
"minItems": 2
}
],
"examples": [
"60/40",
[
60,
40
]
],
"description": "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."
}
},
"additionalProperties": false
}| string |
| 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). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"face"
],
"properties": {
"face": {
"enum": [
"front",
"back"
],
"type": "string",
"examples": [
"front",
"back"
],
"description": "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": {
"enum": [
"standard",
"small"
],
"type": "string",
"default": "standard",
"examples": [
"standard",
"small"
],
"description": "standard = 63×88 mm; small = 59×86 mm. Japanese Pokémon uses standard; Yu-Gi-Oh! uses small. Case/outer whitespace accepted. Example: standard."
},
"image_url": {
"type": "string",
"format": "uri",
"examples": [
"https://images.example.org/card.jpg"
],
"maxLength": 8192,
"description": "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": {
"type": "string",
"examples": [
"data:image/png;base64,iVBORw0KGgo="
],
"maxLength": 12582912,
"minLength": 4,
"description": "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)."
}
},
"additionalProperties": false
}