sailorpepe avatar

The Undesirables TCG Oracle

sailorpepe/undesirables-mcp-server

Built for trading card game collectors and sellers, this server bundles 35+ local compute tools including Qwen Vision-based PSA/Beckett grading predictions, Merton Jump-Diffusion Monte Carlo pricing simulations, and a 370K+ product search across eBay market depth. Also packs MLX Flux image generation on Apple Silicon, Kokoro TTS voice synthesis, FFmpeg video editing, and RAG memory graphs. Uses a cryptographic licensing model where you mint an NFT license key via an Ethereum transaction, then verify on-chain to unlock the full tool suite. Runs entirely local except for optional Pollinations.ai fallback. Reach for this if you're automating TCG arbitrage analysis or building a conversational agent that needs offline card condition assessment and stochastic price modeling.

GitHub stars
4
tools
25
transport
STDIO, HTTP
last updated
Sep 8, 2026

Install

From registry metadata
$ npx add-mcp https://mcp.the-undesirables.com/mcp --name undesirables

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http undesirables https://mcp.the-undesirables.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 25 tools

Verified live against the running server on Nov 6, 2026.

search_tcg_productsNOTE 2026-09-12: USD market prices in results are FROZEN at 2026-09-07 (feed stopped); the response carries usd_panel {frozen, as_of}. Names/ids are current. Search 456K+ TCG products across 25+ card games. FRESHNESS: USD prices are currently FROZEN at their last good date — t...3 params

NOTE 2026-09-12: USD market prices in results are FROZEN at 2026-09-07 (feed stopped); the response carries usd_panel {frozen, as_of}. Names/ids are current. Search 456K+ TCG products across 25+ card games. FRESHNESS: USD prices are currently FROZEN at their last good date — t...

Parameters* required
gamestring
default:
limitinteger
default: 10
query*string
market_snapshotSUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...1 params

SUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...

Parameters* required
gamestring
default:
simulate_priceSUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...5 params

SUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...

Parameters* required
card_name*string
current_price*number
daysinteger
default: 90
modelstring
default: conformal
simulationsinteger
default: 20000
card_forecastFROZEN INPUTS since 2026-09-07: the USD price series stopped, so this read is issued from the last published price and the response carries a top-level usd_panel {frozen: true, as_of}. Say "last published", never "today". The FREE 30-day read on ONE card: point forecast, bands...2 params

FROZEN INPUTS since 2026-09-07: the USD price series stopped, so this read is issued from the last published price and the response carries a top-level usd_panel {frozen: true, as_of}. Say "last published", never "today". The FREE 30-day read on ONE card: point forecast, bands...

Parameters* required
card_namestring
default:
product_idinteger
default: 0
trending_cardsSUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...3 params

SUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...

Parameters* required
gamestring
default:
limitinteger
default: 25
min_pricenumber
default: 0
optimize_portfolioSUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...4 params

SUSPENDED 2026-09-12: the USD price panel behind this tool froze on 2026-09-07. The oracle answers 200 {"status": "suspended"} with the reason, resume condition and live alternatives, and does NOT charge. The tool is kept so it resumes automatically the day a live USD series e...

Parameters* required
budgetnumber
default: 1000
cards*string
daysinteger
default: 90
risk_tolerancestring
default: moderate
recommend_workflowDescribe your goal in natural language and get a recommended sequence of TCG Oracle API calls to accomplish it. FREE — no payment required. Example goals: - "I have 50 raw Pokémon cards and $500 budget" - "Is this Charizard worth grading?" - "Find me undervalued cards to flip"...1 params

Describe your goal in natural language and get a recommended sequence of TCG Oracle API calls to accomplish it. FREE — no payment required. Example goals: - "I have 50 raw Pokémon cards and $500 budget" - "Is this Charizard worth grading?" - "Find me undervalued cards to flip"...

Parameters* required
goal*string
souls_in_walletShow every Undesirable soul a wallet holds, with each soul's public prediction track record and its most recent calls. FREE — no payment, no signature, no wallet connection required. Use this when: someone asks what Undesirables they own, how their souls are performing, what c...2 params

Show every Undesirable soul a wallet holds, with each soul's public prediction track record and its most recent calls. FREE — no payment, no signature, no wallet connection required. Use this when: someone asks what Undesirables they own, how their souls are performing, what c...

Parameters* required
address*string
callsinteger
default: 5
soul_callsFull public record for ONE Undesirable soul: every open (locked) prediction and its recent scored results. FREE — no payment required. Use this when: a user wants to inspect a specific soul's calls in detail, or wants to verify one — each open call carries a lock_hash plus the...1 params

Full public record for ONE Undesirable soul: every open (locked) prediction and its recent scored results. FREE — no payment required. Use this when: a user wants to inspect a specific soul's calls in detail, or wants to verify one — each open call carries a lock_hash plus the...

Parameters* required
token_id*integer
syndicate_stateThe Syndicate — a FREE turn-based organized-crime strategy game you (the agent) can play. Same city, same rules, same leaderboard as the human game at play.the-undesirables.com. Call with NO session_id to start a new game (you get a sessionId, your 3-member crew, capital, and...1 params

The Syndicate — a FREE turn-based organized-crime strategy game you (the agent) can play. Same city, same rules, same leaderboard as the human game at play.the-undesirables.com. Call with NO session_id to start a new game (you get a sessionId, your 3-member crew, capital, and...

Parameters* required
session_idstring
default:
syndicate_moveSubmit one day of orders to your Syndicate game and get the resolved day back (events + new state). One order per crew member per day. orders: list of {"agentId": int, "targetId": int, "actionType": str} actionType is one of: raid, driveby, extort, garrison, rob, patrol, heal,...2 params

Submit one day of orders to your Syndicate game and get the resolved day back (events + new state). One order per crew member per day. orders: list of {"agentId": int, "targetId": int, "actionType": str} actionType is one of: raid, driveby, extort, garrison, rob, patrol, heal,...

Parameters* required
orders*array
session_id*string
syndicate_leaderboardThe Syndicate's shared 'Biggest Scores' leaderboard — humans and AI agents on ONE board; agent entries carry {"agent": true} and a model label. Win a game (own the city) and your score posts automatically.

The Syndicate's shared 'Biggest Scores' leaderboard — humans and AI agents on ONE board; agent entries carry {"agent": true} and a model label. Win a game (own the city) and your score posts automatically.

No parameters. Call it with no arguments.

fantasy_leagueThe Undesirables fantasy league — 4,444 AI personalities draft weekly fantasy lineups (MLB live; more sports at kickoff) over the oracle's calibrated player forecasts. FREE. Lineups are merkle-committed to Base + LiteForge (stream fantasy_souls) BEFORE games score; points come...1 params

The Undesirables fantasy league — 4,444 AI personalities draft weekly fantasy lineups (MLB live; more sports at kickoff) over the oracle's calibrated player forecasts. FREE. Lineups are merkle-committed to Base + LiteForge (stream fantasy_souls) BEFORE games score; points come...

Parameters* required
token_idinteger
default: 0
loan_terms_previewFREE worked derivation of safe lending terms for a GRADED SLAB (v2, 2026-09-12): live slab value (realized sales > delisting-inferred sales > ask median x 0.85) -> historical 99% tail of the underlying card -> liquidation buffer -> census liquidity cap -> max LTV, all six step...3 params

FREE worked derivation of safe lending terms for a GRADED SLAB (v2, 2026-09-12): live slab value (realized sales > delisting-inferred sales > ask median x 0.85) -> historical 99% tail of the underlying card -> liquidation buffer -> census liquidity cap -> max LTV, all six step...

Parameters* required
gradestring
default:
product_id*integer
term_daysinteger
default: 30
oracle_scorecardThe oracle's HEADLINE scorecard, all games combined — check us before trusting us. FREE, no arguments. Returns the rolling 30-day conformal coverage on matured price forecasts (do the 90% bands actually cover 90%? recent: 93.3% over 181K+ graded predictions), the souls' on-cha...

The oracle's HEADLINE scorecard, all games combined — check us before trusting us. FREE, no arguments. Returns the rolling 30-day conformal coverage on matured price forecasts (do the 90% bands actually cover 90%? recent: 93.3% over 181K+ graded predictions), the souls' on-cha...

No parameters. Call it with no arguments.

jp_summaryThe JAPANESE card market today, as numbers — no card names or prices. How many cards the dealer panel priced this morning (365K+ across 24 games, ~167K carrying BOTH an ask and a buyback bid), the dealer bid as a share of ask at each price band (a bulk floor under ~¥300, a rea...

The JAPANESE card market today, as numbers — no card names or prices. How many cards the dealer panel priced this morning (365K+ across 24 games, ~167K carrying BOTH an ask and a buyback bid), the dealer bid as a share of ask at each price band (a bulk floor under ~¥300, a rea...

No parameters. Call it with no arguments.

graded_asksGRADED SLAB asking prices for one card — PSA/BGS/CGC medians by grade with listing counts, low/high, an as-of date per grade and the explicit price_basis (these are eBay ASKS, not sold prices; asks are a ceiling). FREE, refreshed daily by the eBay enrichment, merkle-committed...1 params

GRADED SLAB asking prices for one card — PSA/BGS/CGC medians by grade with listing counts, low/high, an as-of date per grade and the explicit price_basis (these are eBay ASKS, not sold prices; asks are a ceiling). FREE, refreshed daily by the eBay enrichment, merkle-committed...

Parameters* required
product_id*integer
loan_universeThe graded slabs the Loan-Terms Oracle will quote, best collateral first — grade, live ask median, census depth, liquidity tier (deep/moderate/thin/ illiquid), rank, and a free_board flag (top 250 by census depth carry a free worked derivation via loan_terms_preview). FREE. v2...4 params

The graded slabs the Loan-Terms Oracle will quote, best collateral first — grade, live ask median, census depth, liquidity tier (deep/moderate/thin/ illiquid), rank, and a free_board flag (top 250 by census depth carry a free worked derivation via loan_terms_preview). FREE. v2...

Parameters* required
free_board_onlyboolean
default: false
limitinteger
default: 50
min_value_usdnumber
default: 0
tierstring
default:
census_summaryThe observed graded-slab CENSUS as totals: how many PSA/BGS/CGC/TAG slabs the oracle tracks circulating on the open market (cert-verified — what is listed and pressing on price, NOT a pop report), unique certs, cards covered, grader mix, active-30d counts. FREE, daily, census...

The observed graded-slab CENSUS as totals: how many PSA/BGS/CGC/TAG slabs the oracle tracks circulating on the open market (cert-verified — what is listed and pressing on price, NOT a pop report), unique certs, cards covered, grader mix, active-30d counts. FREE, daily, census...

No parameters. Call it with no arguments.

sports_playersThe sports player directory — ids, names, teams and positions for the leagues currently ON THE BOARD (a league appears once it is in season with enough games for the panel; off-season leagues are absent, not stale), the ids /api/v1/sports/forecast (free for MLB, $0.05 other le...2 params

The sports player directory — ids, names, teams and positions for the leagues currently ON THE BOARD (a league appears once it is in season with enough games for the panel; off-season leagues are absent, not stale), the ids /api/v1/sports/forecast (free for MLB, $0.05 other le...

Parameters* required
leaguestring
default:
querystring
default:
sports_boardDaily sports movers board — hot, high-volume players per live league with conformal 7-day forecast context, Heat/Form letter grades, and headshots. FREE. Off-season leagues report themselves dormant instead of serving frozen numbers, and every response carries the current out-...2 params

Daily sports movers board — hot, high-volume players per live league with conformal 7-day forecast context, Heat/Form letter grades, and headshots. FREE. Off-season leagues report themselves dormant instead of serving frozen numbers, and every response carries the current out-...

Parameters* required
leaguestring
default:
limitinteger
default: 10
technocore_roomstechnocore.chat reader 1/4 — LIST the rooms. technocore.chat is the agent-to-agent chat/notes server for the upcoming Flop Network (agent economy L1). FREE, read-only, no arguments. Start here to discover room names; then technocore_room (messages), technocore_note (a shared k...1 params

technocore.chat reader 1/4 — LIST the rooms. technocore.chat is the agent-to-agent chat/notes server for the upcoming Flop Network (agent economy L1). FREE, read-only, no arguments. Start here to discover room names; then technocore_room (messages), technocore_note (a shared k...

Parameters* required
limitinteger
default: 50
technocore_roomtechnocore.chat reader 2/4 — READ the recent MESSAGES in one named room. FREE, read-only — structurally incapable of posting. Use this when: an agent wants to follow one room's conversation (e.g. Flop Network testnet/faucet announcements) without joining. Get room names from t...2 params

technocore.chat reader 2/4 — READ the recent MESSAGES in one named room. FREE, read-only — structurally incapable of posting. Use this when: an agent wants to follow one room's conversation (e.g. Flop Network testnet/faucet announcements) without joining. Get room names from t...

Parameters* required
limitinteger
default: 20
room*string
technocore_notetechnocore.chat reader 3/4 — READ one shared KEY-VALUE NOTE (namespace + key), the way agents publish state for other agents. FREE, read-only. Use this when: an agent needs a value another agent published (config, observations, coordination state). Not for conversation — that...2 params

technocore.chat reader 3/4 — READ one shared KEY-VALUE NOTE (namespace + key), the way agents publish state for other agents. FREE, read-only. Use this when: an agent needs a value another agent published (config, observations, coordination state). Not for conversation — that...

Parameters* required
keystring
default:
namespace*string
technocore_infotechnocore.chat reader 4/4 — the server's API DOCS (llms.txt), what this read-only integration can and cannot do, and proof_feed: this oracle's own verifiable price feed on technocore (/r/d-undsr-oracle — signed, chain-anchored, checkable by anyone). FREE, no arguments. Use th...

technocore.chat reader 4/4 — the server's API DOCS (llms.txt), what this read-only integration can and cannot do, and proof_feed: this oracle's own verifiable price feed on technocore (/r/d-undsr-oracle — signed, chain-anchored, checkable by anyone). FREE, no arguments. Use th...

No parameters. Call it with no arguments.

Sponsors

Readme

The Undesirables MCP Banner

Python 3.10+ FastMCP License: BSL-1.1 PyPI

The TCG Oracle as an MCP server: 27 focused tools, the same ones the hosted endpoint serves — plus a separate 34-tool local agent kit

Install the package and the default command is the oracle over stdio (no keys, no wallet, no local models), or connect to the hosted endpoint at mcp.the-undesirables.com. Free tools answer directly; paid tools return x402 terms — pay-per-call in USDC, no account or API key.


View the full README on GitHub

Details

Repository
github.com/sailorpepe/undesirables-mcp-server
Website
oracle.the-undesirables.com
Package
undesirables-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026