# The Undesirables TCG Oracle

> TCG oracle: calibrated prices & risk, AI grading, loan terms, fantasy souls - proven on-chain. 23 to

- name: io.github.sailorpepe/undesirables-mcp-server
- version: 2.1.0
- connection class: R0 (autonomous)
- trust: 94/100
- quality: 76/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.sailorpepe%2Fundesirables-mcp-server
- tools: https://api.protogrid.dev/v1/servers/io.github.sailorpepe%2Fundesirables-mcp-server/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "undesirables-mcp-server": {
      "type": "http",
      "url": "https://mcp.the-undesirables.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 85
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-99% ~updated-42d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 76/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: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 6 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: market_snapshot (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); census_summary (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); trending_cards (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 6,119 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 8 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: 100 (weight 15)

- pass `deps.known_vulns`: no known advisory in 75 resolved packages
- pass `deps.mcp_sdk_version`: mcp 1.30.0, no known advisory
- pass `deps.resolvable`: undesirables-mcp-server@2.1.0 resolved: 75 packages

- tools: 25, about 6,119 tokens to load them all
- tool set hash: 805076867420b560c0dc3eb1d85a19ee
- tools last changed: 2026-10-02T22:35:19.792Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.sailorpepe/undesirables-mcp-server.svg)](https://protogrid.dev/servers/io.github.sailorpepe/undesirables-mcp-server)
- 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-02 `grade_or_not` removed
  - Answers: "Should I grade this card? Will I make money?" Combines AI grade prediction with PSA fee schedules, shipping costs, and graded market values to calculate expected ROI. Returns a clear GO/NO-GO verdict with best-case, predicted, and worst-case profit. PAID: $0.10 USDC per call. Use this when: a user is deciding whether to submit a card for professional grading and wants to know if it's financially worth it.
- 2026-10-02 `grade_card` removed
  - AI-grade a trading card image using a 3-stage pipeline: (1) Qwen Vision LLM analyzes corners, edges, surface defects (2) OpenCV measures exact centering ratios programmatically (3) BGS professional capping algorithm adjusts the final grade Returns PSA/Beckett-calibrated subgrades and an overall condition score. Also includes a free ROI verdict (should you grade this card?). PAID: $0.10 per call via x402. THREE rails are accepted, not just Base: - USDC on Base (eip155:8453) - USDC on Solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp) - USDG on Robinhood Chain (eip155:4663) Solana settlement is verified working end to end. (Audit 2026-07-30, BUG-12.) Use this when: a user has a card image and wants to know what grade it would receive from PSA or Beckett.
- 2026-10-02 `sports_board` changed (description)
  - before: 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-of-sample calibration verdict (the bands are validated daily against a 90% target). Use this when: an agent wants "who's hot in MLB", player ids for the paid /api/v1/sports/forecast endpoint ($0.05 — full per-stat calibrated bands), or fantasy-adjacent market context. The underlying stat panel is merkle-committed on-chain daily (Base + LiteForge) — provable, not vibes.
  - after: 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-of-sample calibration verdict (the bands are validated daily against a 90% target). Use this when: an agent wants "who's hot in MLB", player ids for the paid /api/v1/sports/forecast endpoint (free for MLB, $0.05 other leagues — full per-stat calibrated bands), or fantasy-adjacent market context. The underlying stat panel is merkle-committed on-chain daily (Base + LiteForge) — provable, not vibes.
- 2026-10-02 `sports_players` changed (description)
  - before: 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 the paid /api/v1/sports/forecast ($0.05) and the fantasy league key on. FREE. Filter by league (mlb, nba, ncaab, ncaaf, nfl, nhl) and/or a name fragment; an absent league returns zero players, which is the honest answer. Use this when: an agent has a player name and needs the id, or wants to enumerate a league's roster on the stat panel.
  - after: 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 leagues) and the fantasy league key on. FREE. Filter by league (mlb, nba, ncaab, ncaaf, nfl, nhl) and/or a name fragment; an absent league returns zero players, which is the honest answer. Use this when: an agent has a player name and needs the id, or wants to enumerate a league's roster on the stat panel.
- 2026-10-02 `census_summary` changed (description)
  - before: 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 leaves committed on-chain. The per-card census with median asks is the paid /api/v1/census ($0.05). Use this when: sizing supply behind a grade, or judging how thin a slab market is before trusting an ask.
  - after: 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 leaves committed on-chain. The per-card census with median asks is /api/v1/census (free). Use this when: sizing supply behind a grade, or judging how thin a slab market is before trusting an ask.
- 2026-10-02 `graded_asks` changed (description)
  - before: 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 on GradedPriceOracle. The LIVE value layer while the USD raw-card panel is frozen — and the basis the graded- slab loan terms are built on. product_id = TCGplayer id from search. Use this when: "what does a PSA 10 of this go for?", "raw vs graded premium?", or before loan_terms_preview / the paid /api/v1/loan-terms quote.
  - after: 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 on GradedPriceOracle. The LIVE value layer while the USD raw-card panel is frozen — and the basis the graded- slab loan terms are built on. product_id = TCGplayer id from search. Use this when: "what does a PSA 10 of this go for?", "raw vs graded premium?", or before loan_terms_preview / the free /api/v1/loan-terms quote.
- 2026-10-02 `souls_in_wallet` changed (description)
  - before: 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 calls their souls have made, or which of their souls is the most accurate. HOW IT WORKS • Ownership is read from Ethereum mainnet (ERC-721 0xA893648A701C03B14bF2FB767B72b2C55ed5c17A). Only the minted souls 1..total_minted (from GET / on the oracle) have public records. • Nothing here is private, so you can look up ANY address — the caller does not have to prove they own it. Ask the user for their address. • Each minted soul locks 3 card predictions weekly, chosen deterministically from its on-chain personality traits. The oracle scores them 30 days later against real market prices. WHAT YOU GET BACK • souls[] — per soul: rating (A+..F / UNRATED), matured, hits, hit_rate, brier, open_calls, and recent_calls with each call's outcome (hit / miss / push) • wallet_totals — combined open + matured calls and overall hit rate • best_soul — the holder's most accurate soul, once any have matured HOLDERS WITH SEVERAL SOULS: this is a roster. Offer to compare them, or to speak as a specific one — each has different traits and its own record. IMPORTANT — ratings mature on a schedule. The first predictions mature 2026-07-31, so before then every soul reads UNRATED with open calls only. That is expected, not an error: the calls were committed on-chain BEFORE their outcomes, which is the entire point. Say so rather than implying the soul has no history. Args: address: 0x-prefixed EVM address to look up. calls: recent scored calls to include per soul (0-12, default 5).
  - after: 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 calls their souls have made, or which of their souls is the most accurate. HOW IT WORKS • Ownership is read from Ethereum mainnet (ERC-721 0xA893648A701C03B14bF2FB767B72b2C55ed5c17A). Only the minted souls 1..total_minted (from GET / on the oracle) have public records. • Nothing here is private, so you can look up ANY address — the caller does not have to prove they own it. Ask the user for their address. • Each minted soul locks 3 card predictions weekly, chosen deterministically from its on-chain personality traits. The oracle scores them 30 days later against real market prices. WHAT YOU GET BACK • souls[] — per soul: rating (A+..F / UNRATED), matured, hits, hit_rate, brier, open_calls, and recent_calls with each call's outcome (hit / miss / push) • wallet_totals — combined open + matured calls and overall hit rate • best_soul — the holder's most accurate soul, once any have matured HOLDERS WITH SEVERAL SOULS: this is a roster. Offer to compare them, or to speak as a specific one — each has different traits and its own record. IMPORTANT — records come in seasons. Season 1 (USD card board) is closed: its calls matured 07-31..08-09, and later USD calls are VOID (not misses) because the USD price panel froze 2026-09-07. Season 2 (Japanese dealer board) locks weekly from 2026-09-14; its first calls mature 2026-10-14, so newer souls may read UNRATED with open calls only. That is expected: every call was committed on-chain BEFORE its outcome. Judge `skill` (hit rate minus the best constant call on the soul's own picks), not raw hit rate. Args: address: 0x-prefixed EVM address to look up. calls: recent scored calls to include per soul (0-12, default 5).
- 2026-09-24 `loan_universe` changed (description, inputSchema)
  - before: Every graded slab the Loan-Terms Oracle will quote — ~1,100 slabs with 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 (2026-09-12): graded slabs only — raw-card quotes are no longer issued because the USD level froze 2026-09-07. Use this when: an agent needs a product_id + grade to ask for terms, or wants to know which collateral is deep enough to lend against at all.
  - after: 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 (2026-09-12): graded slabs only — raw-card quotes stopped when the USD level froze 2026-09-07. Returns a PAGE, not the whole book: the full universe is ~1,400 slabs and serialises to ~500 KB, which would swamp an agent's context in one call. `total_matching` and `returned` tell you what you are looking at. limit rows to return (default 50, max 500) tier 'deep' | 'moderate' | 'thin' | 'illiquid' free_board_only True to keep only slabs with a free worked derivation min_value_usd drop slabs whose ask median is below this (0 = no floor) Use this when: an agent needs a product_id + grade to ask for terms, or wants to know which collateral is deep enough to lend against at all.

Full history: https://api.protogrid.dev/v1/servers/io.github.sailorpepe%2Fundesirables-mcp-server/changes

## Dependencies

- pypi undesirables-mcp-server@2.1.0: resolved, 74 dependencies, MCP SDK mcp 1.30.0

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://mcp.the-undesirables.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.99159664)

## Packages

- pypi undesirables-mcp-server@2.1.0

## Tools (25)

- `card_forecast`: 
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, VaR, and the
Safe-Hold / Momentum letter grades, in one call. Pass a card_name (resolved
to the best match) or a TCGplayer product_id. Horizon is fixed at 30 days.

FREE — no payment required. Returns an agent-complete object:
  price, as_of, regime, point (median 30d), move_pct, prob_up,
  band50_pct, band90_pct, var95_pct, var99_pct, low90, high90,
  safe_hold grade (A+..F), momentum grade (A+..F or "NA" on a drift spike),
  drift_spike, image_url, card_url, and a one-line plain_english read
  (e.g. "~12% chance it's below $Y in 30 days; Safe-Hold B, Momentum A").

Use this FIRST for "is this card a safe hold?", "30-day outlook?", "how
risky is X?". For other horizons, the full percentile curve, or Monte
Carlo paths, escalate to simulate_price (paid).
Tip: GET /api/v1/forecast (no args) returns the free board of the top ~200
cards if the user wants a market overview.

- `census_summary`: 
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 leaves committed on-chain. The
per-card census with median asks is /api/v1/census (free).
Use this when: sizing supply behind a grade, or judging how thin a slab
market is before trusting an ask.

- `fantasy_league`: 
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 from the
daily-committed stat panels.

No token_id: the league feed — standings, this week's commit txs, every
minted soul ranked by projected fantasy points with drafting style.
With token_id (1..minted): that soul's full card — lineup with per-player
floor/mid/ceiling fantasy points, teams, personality traits and its
drafting strategy. Sealed souls return 404 until minted.

Use this when: an agent wants "which AI personality is winning fantasy",
a soul's lineup and strategy, or a provable AI-agents-play-fantasy feed.
Human page: https://oracle.the-undesirables.com/fantasy

- `graded_asks`: 
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 on GradedPriceOracle. The LIVE
value layer while the USD raw-card panel is frozen — and the basis the graded-
slab loan terms are built on. product_id = TCGplayer id from search.
Use this when: "what does a PSA 10 of this go for?", "raw vs graded premium?",
or before loan_terms_preview / the free /api/v1/loan-terms quote.

- `jp_summary`: 
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 real quote above), depth
per game, how much of the board actually moved since yesterday and a week ago,
and the day's Merkle root with both chain txs. FREE, refreshes once per ingest
day. The only Japanese panel that is LIVE while the USD panel is frozen.
Use this when: "what did the Japanese market do today?", "is the dealer paying
more or less for cards this week?", or before reasoning about any single
Japanese card — the per-card page is /jp/card/{game}/{set_code}/{card_id}
(HTML, one card per request; there is deliberately no listing route).

- `loan_terms_preview`: 
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 steps shown.
grade e.g. "PSA 10"; omitted = the slab's deepest-census grade. term_days:
7, 14 or 30. Only free-board slabs (top 250 by census depth) return the
derivation; others return 404 pointing at the paid quote /api/v1/loan-terms
($0.10 x402, ~1,100 rated slabs). Raw-card quotes are no longer issued —
the USD level froze 2026-09-07. Universe: /api/v1/loan-terms/universe.
Informational only — not financial advice.
Use this when: an agent wants collateral math for a slab, or to explain
how the Loan-Terms Oracle derives an LTV before paying for a full quote.
Human page: https://oracle.the-undesirables.com/lending

- `loan_universe`: 
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 (2026-09-12): graded
slabs only — raw-card quotes stopped when the USD level froze 2026-09-07.

Returns a PAGE, not the whole book: the full universe is ~1,400 slabs and
serialises to ~500 KB, which would swamp an agent's context in one call.
`total_matching` and `returned` tell you what you are looking at.

limit           rows to return (default 50, max 500)
tier            'deep' | 'moderate' | 'thin' | 'illiquid'
free_board_only True to keep only slabs with a free worked derivation
min_value_usd   drop slabs whose ask median is below this (0 = no floor)

Use this when: an agent needs a product_id + grade to ask for terms, or wants
to know which collateral is deep enough to lend against at all.

- `market_snapshot`: 
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 exists. Prefer:
loan_terms_preview (graded slabs, live), sports_board (live), or the free
Japanese two-sided page /jp/card/{game}/{set}/{card}.
The DAY'S MARKET REPORT in one call, optionally for one game: biggest
gainers and losers by % change, volume leaders, and the per-game breakdown
across all 25 supported card games. A summary of the whole market, not a
ranked pick list.

PAID: $0.025 USDC per call (x402 — USDC on Base or Solana, or USDG on
Robinhood Chain). Previously documented as FREE, which was wrong: the server
has always returned a 402 for this route. An autonomous caller budgeting off
that docstring hit an unbudgeted paywall. (External audit 2026-07-30, BUG-2.)

Use this when: a user asks "what happened in the card market today?" or
"which games are moving?". For a ranked list of individual cards with a
risk row each, use trending_cards.

- `optimize_portfolio`: 
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 exists. Prefer:
loan_terms_preview (graded slabs, live), sports_board (live), or the free
Japanese two-sided page /jp/card/{game}/{set}/{card}.
Optimize a trading card portfolio using Markowitz mean-variance
analysis with Merton jump-diffusion Monte Carlo simulations.

Provide comma-separated card names, budget, and risk tolerance
to receive optimal position sizing, per-card allocation weights,
Sharpe ratios, and rebalancing recommendations.

PAID: $0.50 USDC per call.

Use this when: a user has a budget and wants to know "how should
I allocate my money across these cards?"

- `oracle_scorecard`: 
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-chain scored
track record, and the blind slab-grading study. Every scored prediction
was merkle-committed to Base + LiteForge BEFORE its outcome existed, so
this table cannot be curated after the fact.

Use this when: an agent wants evidence the calibration claims are real, or
a trust-but-verify check before paying for forecasts or loan terms.

- `recommend_workflow`: 
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"
- "Predict the price of a Black Lotus in 90 days"

Use this when: you're not sure which tool to call first, or need
a multi-step workflow recommendation.

- `search_tcg_products`: 
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 — the
upstream feed is unavailable. Every price carries its own as-of date and
the oracle root publishes live panel state under `panels`. A Japanese-print
panel (24 games, ~364K cards, ~167K with BOTH an ask and a dealer buyback
bid) refreshes every morning. Do not present a USD price as current.
Returns card names and IDs, plus current market prices.
FREE — no payment required.

Use this when: a user asks about a specific card, wants to find cards,
or needs current pricing for any trading card game product.

HOW TO SEARCH (card name AND set name are both searchable):
  • Card name alone casts the widest net: "Charizard", "Black Lotus".
  • Add the SET to pin down a printing: "Base Set Charizard" returns the
    Base Set, Base Set 2 and Shadowless Charizards as separate entries.
    This matters — printings of the "same" card differ wildly in value.
  • Every result carries a "set" field. Use it to choose, then pass that
    result's product_id to the other tools (card_forecast, grade_or_not,
    simulate_price) — exact, and avoids re-searching.
  • Do NOT include rarity or condition words: "Holo", "1st Edition",
    "Shadowless", "PSA 10" are not indexed and will sink an otherwise-good
    query. "Base Set Charizard Holo" → drop "Holo".
  • Got nothing? Remove the rarity words first, then fall back to the plain
    card name.

- `simulate_price`: 
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 exists. Prefer:
loan_terms_preview (graded slabs, live), sports_board (live), or the free
Japanese two-sided page /jp/card/{game}/{set}/{card}.
SIMULATE a card's price path over a horizon YOU choose (days=30..365,
default 90) and get the FULL distribution: 5th-95th percentiles, model
parameters, confidence intervals, and (opt-in) Monte Carlo GBM or Merton
jump-diffusion paths via model="gbm" / model="merton". Default model is the
conformal-calibrated risk forecast. Requires current_price.

PAID: $0.015 USDC per call.

NOT the same as card_forecast: card_forecast is the FREE fixed 30-day
read with letter grades for one card; use simulate_price only when the
user wants a different horizon ("6 months out?"), the full percentile
curve, or a Monte Carlo model.

- `soul_calls`: 
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 week's
merkle root and the on-chain tx it was committed in, BEFORE the outcome was
known. That is what makes the record checkable rather than claimed.

Args:
    token_id: a minted soul. Valid ids run 1..total_minted, where
        total_minted is read live from GET / on the oracle (274 on
        2026-09-12; it grows as souls mint — never hardcode it).

- `souls_in_wallet`: 
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 calls their souls have made, or which of their souls
is the most accurate.

HOW IT WORKS
  • Ownership is read from Ethereum mainnet (ERC-721
    0xA893648A701C03B14bF2FB767B72b2C55ed5c17A). Only the minted souls
    1..total_minted (from GET / on the oracle) have public records.
  • Nothing here is private, so you can look up ANY address — the caller
    does not have to prove they own it. Ask the user for their address.
  • Each minted soul locks 3 card predictions weekly, chosen deterministically
    from its on-chain personality traits. The oracle scores them 30 days later
    against real market prices.

WHAT YOU GET BACK
  • souls[]        — per soul: rating (A+..F / UNRATED), matured, hits,
                     hit_rate, brier, open_calls, and recent_calls with each
                     call's outcome (hit / miss / push)
  • wallet_totals  — combined open + matured calls and overall hit rate
  • best_soul      — the holder's most accurate soul, once any have matured

HOLDERS WITH SEVERAL SOULS: this is a roster. Offer to compare them, or to
speak as a specific one — each has different traits and its own record.

IMPORTANT — records come in seasons. Season 1 (USD card board) is closed:
its calls matured 07-31..08-09, and later USD calls are VOID (not misses)
because the USD price panel froze 2026-09-07. Season 2 (Japanese dealer
board) locks weekly from 2026-09-14; its first calls mature 2026-10-14, so
newer souls may read UNRATED with open calls only. That is expected: every
call was committed on-chain BEFORE its outcome. Judge `skill` (hit rate minus
the best constant call on the soul's own picks), not raw hit rate.

Args:
    address: 0x-prefixed EVM address to look up.
    calls: recent scored calls to include per soul (0-12, default 5).

- `sports_board`: 
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-of-sample
calibration verdict (the bands are validated daily against a 90% target).

Use this when: an agent wants "who's hot in MLB", player ids for the paid
/api/v1/sports/forecast endpoint (free for MLB, $0.05 other leagues — full per-stat calibrated bands),
or fantasy-adjacent market context. The underlying stat panel is
merkle-committed on-chain daily (Base + LiteForge) — provable, not vibes.

- `sports_players`: 
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 leagues) and the fantasy league key on.
FREE. Filter by league (mlb, nba, ncaab, ncaaf, nfl, nhl) and/or a name
fragment; an absent league returns zero players, which is the honest answer.
Use this when: an agent has a player name and needs the id, or wants to
enumerate a league's roster on the stat panel.

- `syndicate_leaderboard`: 
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.

- `syndicate_move`: 
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,
pray, retain, injunction, cook_books, audit, hire, swat_raid, charity,
intimidate, launder, rig_games, brawl, ambush, campaign, precinct_raid,
lay_low, steal_car, fence.

Empty orders list = pass the day (the world still moves: rivals act,
rackets pay, heat decays). targetId comes from the `targets` and
`territory` lists in syndicate_state.

- `syndicate_state`: 
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 a target list). Call with your session_id to
re-read the current state any time. Full rules: play.the-undesirables.com/SKILL.md

Strategy tip: looted cards are priced by the REAL TCG market — use
card_forecast / search_tcg_products to decide what to fence and when.

- `technocore_info`: 
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 this when: an agent wants to learn the technocore API itself or verify
our feed. For rooms, messages, or notes use the other three readers.

- `technocore_note`: 
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 is
technocore_room.

- `technocore_room`: 
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
technocore_rooms; for published state values use technocore_note instead.

- `technocore_rooms`: 
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 key-value note), or technocore_info (API docs +
our signed price-proof feed).

- `trending_cards`: 
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 exists. Prefer:
loan_terms_preview (graded slabs, live), sports_board (live), or the free
Japanese two-sided page /jp/card/{game}/{set}/{card}.
A RANKED LIST of individual cards by PRICE VELOCITY (drift), highest
absolute movement first, with the conformal risk row (bands, VaR, grades)
attached to each card. Filter by game, limit, and min_price. Built for
picking cards, not for summarizing the market.

NOTE (corrected 2026-07-30): this previously claimed "30-day sales volume".
Sales volume and view counts are NOT in the dataset and the API itself now
explicitly disclaims them — see `ranked_by` in the response.

Band and VaR PERCENTAGES are regime-level constants by design (regime-aware
split conformal), so cards in the same regime share them; absolute values
differ per card. Do not read it as a per-card fit. Covers all 25+ games.

PAID: $0.025 USDC per call.

Use this when: a user asks "which cards are moving fastest right now?" and
wants names to act on. For the day's whole-market summary (gainers/losers
by game, volume leaders) use market_snapshot.

