The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Midpoint Card Prices listing page.
Trading-card market prices and grading ROI as Model Context Protocol tools. Read-only, no account, no API key. Powers the Midpoint Card Prices plugin in ChatGPT and works with Claude, Claude Code, Cursor and any MCP client.
https://mcp.cardcenteringtool.com/mcp (Streamable HTTP)com.cardcenteringtool/card-prices (https://registry.modelcontextprotocol.io/v0.1/servers?search=com.cardcenteringtool)Plain questions in a collector's words. The assistant picks the tool, finds the card and answers with prices, the capture date and a link to the card page.
Every answer can include raw prices by condition (NM/LP/MP/HP), the graded ladder for PSA, CGC, BGS, SGC and TAG, the PSA 9 and PSA 10 premium over raw, net profit after $25/$50/$150 fees, expected value by gem rate, the break-even gem rate, 7–180 days of price history, 30-day movers, liquid movers, best cards to grade, and priced set checklists.
Coverage: Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Disney Lorcana, Riftbound, Gundam, Dragon Ball, Digimon; baseball, basketball, football, hockey, soccer, wrestling, UFC, racing, tennis, golf, boxing; Marvel, Star Wars, Garbage Pail Kids and other entertainment and TCG sets.
Remote server, nothing to install. Add it to any MCP client that supports HTTP servers:
Clients that only speak stdio (Claude Desktop, some IDE plugins) can bridge with mcp-remote:
claude mcp add --transport http midpoint https://mcp.cardcenteringtool.com/mcpnpx @modelcontextprotocol/inspector and connect to the endpoint.No authentication. Streamable HTTP transport. Rate limited per client IP.
Find cards by name, set, number or year and return raw and PSA 10 USD prices with the card id.
Inputs: query, game?, set_id?, limit?
Full price ladder for one card: raw by condition (NM/LP/MP/HP) and graded prices for PSA, CGC, BGS, SGC and TAG by grade.
The ladder is for the card's primary printing (variant, e.g. "holofoil"); other printings of the same id
(reverse holo, 1st edition…) come back separately under other_variants and are never mixed in. raw_note is
set when the raw ladder is out of condition order (thin data).
Inputs: card_id
Is this card worth grading? Raw vs PSA 9 vs PSA 10, gem premium, net profit after $25/$50/$150 fees, expected value by gem rate, break-even gem rate, which company pays most, and a plain verdict.
Inputs: card_id, grading_fee_usd?
Dated market values over 7 to 180 days for the raw series or a PSA grade (1–10, half grades allowed). The series
follows one printing (variant). coverage says how many of the days have a capture and how to read repeated or
sparse values: a value repeated on consecutive days is an unchanged market estimate, not a frozen market.
Inputs: card_id, days?, grade?
Cards with the biggest expected net profit from grading in a game or set (half PSA 10, half PSA 9, minus raw and the fee; both graded prices required).
Inputs: game, set_slug?, grading_fee_usd?, limit?
Biggest 30-day gainers or drops, one game or all.
Inputs: game?, direction?, min_market_usd?, limit?
Rising cards (30-day change > 0) with a recorded sales count of 25+ in the last year. Each candidate's own 40-day
series is checked first (enough captures, stable baseline, no one-capture jump); unstable ones are dropped and
counted in excluded_unstable. trending_cards applies the same check. Cards whose source does not
track yearly volume are excluded unless include_unknown_volume is set.
Inputs: game?, include_unknown_volume?, limit?
Sets and expansions for a game, newest first, with ids.
Inputs: game, query?, limit?
Priced checklist or most valuable cards in a set.
Inputs: game, set_id, sort?, limit?
Every tool is read-only (readOnlyHint: true, destructiveHint: false, openWorldHint: false), returns
structuredContent with an output schema, and links back to the matching page on cardcenteringtool.com.
Card ids are the public URL keys (swsh7-215, pricecharting-1821843).
Game keys: pokemon magicthegathering yugioh onepiece lorcana riftbound gundam dragonball digimon baseball basketball football hockey soccer wrestling ufc racing tennis golf boxing marvel starwars gpk entertainment othertcg.
The same nine tools as slash commands (/price, /grade, /history, /trending, /movers,
/set), answered as embeds. Source in src/discord/, built by the same npm run build, run
with npm run start:discord (or Dockerfile.discord as a second Coolify app). It is a plain
HTTP client of the public server: no database, no secrets beyond the bot token. The server
labels its calls and links as client discord.
Environment: DISCORD_BOT_TOKEN, DISCORD_CLIENT_ID (both from the Discord Developer Portal →
your application → Bot / General Information), optional MCP_URL (defaults to production) and
APP_LINK (defaults to https://www.cardcenteringtool.com/go/discord). Invite URL:
https://discord.com/oauth2/authorize?client_id=<CLIENT_ID>&scope=bot%20applications.commands&permissions=2048
(Send Messages). Commands are registered globally on boot; Discord can take up to an hour to
show them in every server after the first registration.
Requests carry only the tool arguments (card names, ids, filters) and the caller's IP for rate limiting. Privacy policy: https://www.cardcenteringtool.com/privacy. Support: https://www.cardcenteringtool.com/contact.