Card Grader MCP
Pricing
from $30.00 / 1,000 card identification (single photo)s
Card Grader MCP
Vision-based trading card identification, centering analysis, and grading assessment. Supports Pokémon, Magic: The Gathering, Yu-Gi-Oh!, and sports cards.
Pricing
from $30.00 / 1,000 card identification (single photo)s
Rating
0.0
(0)
Developer
Brian Mowell
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
Vision-based trading card identification, centering analysis, and grading assessment.
Supported card types: Pokémon TCG, Magic: The Gathering, Yu-Gi-Oh!, sports cards (Topps, Panini, Upper Deck, Bowman, etc.)
Grading services: CGC, PSA, BGS, SGC, TAG
Tools
| Tool | Description | PPE |
|---|---|---|
identify_card | Single front photo → name, set, rarity, centering, value | $0.03 |
identify_card_both_sides | Front + back → full centering both sides + damage | $0.05 |
analyze_centering | Centering-only analysis → L/R, T/B ratios, CGC/PSA/BGS sub-grades | $0.03 |
estimate_card_value | Text-only value lookup (no image needed) | $0.02 |
grade_assessment | Full submission assessment → submit/borderline/skip + reasoning | $0.04 |
Setup
Environment Variables
$export ANTHROPIC_API_KEY="sk-ant-..."
Set in Apify Console → Source → Environment Variables (mark as secret).
Local Development
cd card-graderpython3 -m venv venvsource venv/bin/activatepip install -r requirements.txtexport ANTHROPIC_API_KEY="sk-ant-..."python run_server.py
Server starts on http://localhost:4321/mcp
Testing
Encode a test image
$BASE64=$(base64 -w 0 /path/to/card.jpg)
Test identify_card
from server import identify_cardimport base64with open("card.jpg", "rb") as f:b64 = base64.b64encode(f.read()).decode()result = identify_card(image_data=b64, mime_type="image/jpeg")print(result)
Test analyze_centering
from server import analyze_centeringimport base64with open("card.jpg", "rb") as f:b64 = base64.b64encode(f.read()).decode()result = analyze_centering(image_data=b64)print(result["centering"])
Test estimate_card_value (no image)
from server import estimate_card_valueresult = estimate_card_value(card_name="Charizard",card_set="Base Set",card_number="4/102",year=1999,rarity="holo rare",card_variant="shadowless",condition="near mint raw",)print(result)
Test grade_assessment
from server import grade_assessmentimport base64with open("card.jpg", "rb") as f:b64 = base64.b64encode(f.read()).decode()result = grade_assessment(image_data=b64,target_grade="10",grading_service="CGC",)print(result["assessment"]["submission_recommendation"])print(result["assessment"]["cgc_summary"])
Test identify_card_both_sides
from server import identify_card_both_sidesimport base64with open("front.jpg", "rb") as f:front_b64 = base64.b64encode(f.read()).decode()with open("back.jpg", "rb") as f:back_b64 = base64.b64encode(f.read()).decode()result = identify_card_both_sides(front_image_data=front_b64,back_image_data=back_b64,)print(result["card"]["cgc_summary"])
Deploy to Apify
rm -rf venvapify push
After push: re-enable Actor Standby in Apify Console → Settings.
Claude Desktop config
{"mcpServers": {"card-grader": {"command": "npx","args": ["-y", "mcp-remote", "https://YOUR_USERNAME--card-grader.apify.actor/mcp?token=apify_api_XXXXX"]}}}
CGC Centering Scale Reference
| Sub-Grade | L/R & T/B |
|---|---|
| 10 (Pristine) | 55/45 or better |
| 9.5 (Gem Mint) | 60/40 or better |
| 9 (Mint) | 65/35 or better |
| 8.5 (NM/Mint+) | 65/35–70/30 |
| 8 (NM/Mint) | 70/30–75/25 |
| 7.5 and below | Worse than 75/25 |
Note: Centering is measured from photos. Corners, edges, and surface require hands-on inspection for accurate sub-grades.
License
MIT — Mowell Labs 2025