# Centering Lab

> Measure card centering and check PSA, BGS, CGC and SGC centering ceilings and standards.

- name: com.centeringlab/centering-lab
- version: 1.2.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 80/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.centeringlab%2Fcentering-lab
- tools: https://api.protogrid.dev/v1/servers/com.centeringlab%2Fcentering-lab/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "centering-lab": {
      "type": "http",
      "url": "https://centeringlab.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-15d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 80/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 3 of 3 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 3,669 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 50 (weight 15)

- pass `stability.changes`: 4 tool changes in 30 days
- fail `stability.rug_pull`: 4 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 3, about 3,669 tokens to load them all
- tool set hash: 36b91c431033acb3363c80d192f90a84
- tools last changed: 2026-10-05T18:21:02.358Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.centeringlab/centering-lab.svg)](https://protogrid.dev/servers/com.centeringlab/centering-lab)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-05 `measure_card_centering` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Measure worst-station left/right and top/bottom card centering from one photograph. Ask front or back before calling. Request a whole card, flat on a dark surface, straight from above and out of its sleeve. The photo is processed on the server in memory and discarded, unlike the local-only website. Use a public HTTPS URL or image bytes supported by the client. If a chat attachment cannot be passed to this remote tool, send the user to https://centeringlab.com/. needs-review or failed means no grade ceilings: suggest a retake or manual website adjustment. Never predict a final grade.
  - after: 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.
- 2026-10-05 `get_centering_standards` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Look up card centering thresholds for PSA, BGS, CGC and SGC, optionally by house and front/back. Use for threshold/rules questions and source checks. Returns per-band official/interpreted/approximate status, source links, verification date/provenance and rounding rule. TAG is excluded. These are centering ceilings, not grade predictions.
  - after: 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.
- 2026-10-05 `grade_centering` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Return centering ceilings for PSA/BGS/CGC/SGC; optional house limits output. Keys: front_lr, front_tb, back_lr, back_tb, house. Example: {"front_lr":"55/45","front_tb":"60/40"}. Accept percentages (55), fractions (0.55), or pairs summing to 100 or 1; / - – — : x or spaces, optional %. Scalar 1 is ambiguous and rejected. L/R or left/right suffixes require *_lr; T/B or top/bottom require *_tb. Fractions are disclosed in normalizations. At least one axis required. Missing axes/faces may lower ceilings; BGS uses both axes. Not a grade prediction.
  - after: 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.
- 2026-10-04 `grade_centering` changed (description, inputSchema, outputSchema) **meaning changed**
  - before: Convert known card centering ratios into the maximum grade permitted by centering at PSA, BGS, CGC and SGC. Use for questions such as “is 58/42 a PSA 10?” without needing a photo. Accept reversed ratios and percentages. At least one axis is required. Missing axes or faces may lower the ceiling; never describe it as a predicted grade. BGS uses both axes. Return provenance, limiting face/axis and distance to the next step.
  - after: Return centering ceilings for PSA/BGS/CGC/SGC; optional house limits output. Keys: front_lr, front_tb, back_lr, back_tb, house. Example: {"front_lr":"55/45","front_tb":"60/40"}. Accept percentages (55), fractions (0.55), or pairs summing to 100 or 1; / - – — : x or spaces, optional %. Scalar 1 is ambiguous and rejected. L/R or left/right suffixes require *_lr; T/B or top/bottom require *_tb. Fractions are disclosed in normalizations. At least one axis required. Missing axes/faces may lower ceilings; BGS uses both axes. Not a grade prediction.

Full history: https://api.protogrid.dev/v1/servers/com.centeringlab%2Fcentering-lab/changes

## Remotes

- https://centeringlab.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (3)

- `get_centering_standards`: 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.
- `grade_centering`: 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.
- `measure_card_centering`: 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.
