Skip to main content
Glama
andrewboe

ygo-format

by andrewboe

ygo-format

Format-aware Yu-Gi-Oh! card data and an MCP server, so an AI assistant can build and check decks from real data instead of memory. It knows TCG Advanced (the current Forbidden & Limited list) and Genesys (points, the 100-point cap, no Link or Pendulum Monsters).

Card text, ban status, Genesys points, legality and tournament meta all come from live sources, cached on your machine:

Source

Used for

YGOProDeck API

card text, stats, archetypes, TCG/OCG dates, Genesys points

Project Ignis LFLists

TCG F&L list (the stricter of it and YGOProDeck is used)

Yugioh Meta

recent tournament tops, deck shares, card inclusion

YGOResources

official OCG FAQ and Q&A rulings

Nothing from these sources is bundled; the server fetches and caches it on first use.

Tools

Tool

What it does

search_cards

Search the legal card pool by text, regex, name, archetype, type, attribute, level, points

card_lookup

One card: full text, stats, status in every format, alt passcodes, rulings links

archetype

An archetype's members and support cards, with limits or points

validate_deck

Legality of a deck (.ydk, ydke:// URL or plain list) with every card's status or points

finalize_deck / saved_decks

Save a deck only if it is legal (.ydk + ydke:// + text list); list saved decks

find_links

Bridges between engines: searchers into the deck, what it reaches, Extra Deck options, Special Summon locks

meta_snapshot

Recent tops for a format: deck shares, top 8s, wins, how many lists are still legal, staples

meta_inclusion

How a card is played across tops, or a deck type's card inclusion table

card_rulings

Official Q&As for a card, optionally only those involving a second card or certain words

find_lines / line_result

Optional. Engine-searched turn-1 lines for a specific 5-card hand (needs ygo-sim)

Every answer carries a data block saying when the card data was fetched and which F&L list it reflects.

The repo also ships a Claude Code skill, skills/ygo-deckbuilding, that tells the assistant how to use these tools: format first, every card fact from a tool, validate before showing a list, rulings quoted with their date, and hand lines only on request.

Related MCP server: mtg-mcp

Install

Short version (details, other MCP clients and troubleshooting in docs/INSTALL.md):

Windows (PowerShell):

git clone https://github.com/andrewboe/ygo-format.git
cd ygo-format
py -3 -m venv .venv
.venv\Scripts\python -m pip install -e .
claude mcp add --scope user ygo-format -- "$PWD\.venv\Scripts\python.exe" -m ygoformat.mcp_server

macOS / Linux:

git clone https://github.com/andrewboe/ygo-format.git
cd ygo-format
python3 -m venv .venv
.venv/bin/python -m pip install -e .
claude mcp add --scope user ygo-format -- "$PWD/.venv/bin/python" -m ygoformat.mcp_server

Then ask Claude something like "Is this Genesys list under 100 points?" or "Build me a Destiny HERO deck for TCG Advanced."

Limits

  • find_links parses card text with rules, not an engine: treat its ruling flags as unverified, and Fusion Summon spells are not modelled as links yet.

  • card_rulings returns OCG rulings; TCG rulings can differ.

  • find_lines is a search, not a solver, and is slow (about 10 s at quick depth, 1–4 min deeper).

  • Known tool problems from real use are logged in docs/format_mcp_dryrun.md.

Development

.venv/Scripts/python -m pip install -e ".[test]"
.venv/Scripts/python -m pytest

Tests run offline against pinned fixtures in tests/fixtures. Design notes: docs/format_mcp_scope.md (written while the code lived in ygo-sim, so module paths there say ygosim).

This project was split out of ygo-sim at commit 6aa4d34; ygo-sim now depends on it for card data and formats.

Licensed under the MIT License. Card data, rulings and meta are fetched from the sources above and remain theirs. Yu-Gi-Oh! is a trademark of Konami. This project is not affiliated with or endorsed by Konami.

Available Tools

12 tools
archetypeA
Read-only

An archetype's members (name contains name, case-sensitive) with status in format, plus support: cards YGOProDeck tags with it or whose text names it in quotes. Card text is included when the answer is small (<= 60 cards) unless include_text is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
formatYes
include_textNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnlyHint and openWorldHint; the description adds genuinely useful behavior the annotations don't: case-sensitive substring matching, inclusion of support cards via YGOProDeck tags or quoted text mentions, and card text returned only when the result is <= 60 cards unless include_text is set. That is real conditional-output disclosure. It stops short of 5 only because the returned structure is not characterized.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler; the core matching rule leads and the conditional output rule follows. Minor awkwardness in 'with status in `format`' slightly muddies an otherwise front-loaded, efficiently sized description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read-only query tool with no output schema and 0% schema coverage, the description supplies the matching rule, the support-card behavior, and the conditional text-inclusion rule, leaving little an agent needs unknown. Only the shape of the response is unspecified, which is a minor gap given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it largely does: it explains `name` as a case-sensitive substring match, ties `format` to membership status, and explains that `include_text` overrides the small-result text-inclusion rule. Only the exact meaning of the `format` enum values is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: an archetype's members matched by case-sensitive substring on `name`, filtered by `format`, plus YGOProDeck support cards tagged with or naming it. An agent can tell this is an archetype-wide retrieval rather than a single-card lookup. It doesn't explicitly name a sibling to contrast with, keeping it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: querying a whole archetype plus its support instead of a single card. There is no explicit 'use this instead of search_cards when...' routing, no prerequisites, and no statement of when not to use it, despite the sibling list containing search_cards and card_lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

card_lookupA
Read-only

One card by name or passcode: full text, stats, status in every format (limit, Genesys points, legality and why not), alt passcodes, quoted names in its text, and rulings links. unresolved_mentions lists quoted names that match no card (likely data typos) with the closest names. Unknown or ambiguous names return candidates instead of a guess.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint and openWorldHint already covering the safety profile, the description adds substantial non-obvious behavior: the exact set of returned fields, the existence of unresolved_mentions for unmatched quoted names, and the deliberate no-guessing fallback to candidates on ambiguous input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and dense with value; nearly every clause adds a distinct fact. The middle sentence is a run-on list ('limit, Genesys points, legality and why not') that is slightly harder to parse than it needs to be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe the return surface — and it does: full text, stats, per-format legality, alt passcodes, quoted names, rulings links, plus the unresolved_mentions edge case and the ambiguous-input behavior. Nothing an agent needs to invoke and interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter has no description, so the description carries the burden — and it does, explaining that query accepts either a card name or a passcode and how ambiguous values are handled. It stops short of syntax details (case sensitivity, quoting rules) but is well beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('One card by name or passcode') and enumerates the payload the caller gets back (text, stats, format status, rulings links). It implicitly separates itself from search_cards by scoping to a single card, but never names a sibling, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: this is the single-card lookup, and the note that unknown/ambiguous names return candidates rather than a guess tells the agent the fallback path. There is no explicit 'use this when X, use search_cards when Y' guidance or stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

card_rulingsA
Read-only

Official FAQ and Q&A rulings for a card (Konami OCG database via YGOResources, cached locally). with_card: only Q&As that involve both cards (best for "does X work with Y" questions). query: only Q&As containing all these words, e.g. "cost banish" or "damage step". Each Q&A has title, question, answer, date, translation status and names_in_text; Q&As whose text names the card(s) come first, ahead of omnibus entries that only list them. With with_card, the note says when no Q&A discusses both cards (the interaction is then unverified). These are OCG rulings and TCG rulings can differ: quote them, don't extend them past what they cover. Requests are capped per call to respect YGOResources; the note says when more remain.

ParametersJSON Schema
NameRequiredDescriptionDefault
cardYes
limitNo
queryNo
with_cardNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/openWorldHint annotations, it discloses caching, per-call request caps with a note when more remain, a note when no Q&A discusses both cards (interaction unverified), and the OCG-vs-TCG caveat with an instruction to quote rather than extend rulings. This is unusually rich behavioral context for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then labeled lines for with_card and query, then return-shape and caveats. Dense but every sentence adds something; the source parenthetical and return-field enumeration make it longer than strictly minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape (title, question, answer, date, translation status, names_in_text) and the ordering rule that text-matching Q&As precede omnibus entries. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the load: it explains with_card (dual-card filtering) and query (all-words match) with examples, and the cap note implies limit's behavior. It does not directly define the `limit` or `card` parameters' formats, so it falls slightly short of full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: 'Official FAQ and Q&A rulings for a card', naming the authoritative source (Konami OCG database via YGOResources). This is clearly distinct from sibling lookup/search tools like card_lookup or search_cards, which return card data rather than rulings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage guidance per mode, e.g. with_card is 'best for "does X work with Y" questions' and query filters by words like "cost banish". However, it never names an alternative tool or states when not to use this one, so routing versus siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finalize_deckA
Idempotent

Save a finished deck, but only if validate_deck says it is legal (otherwise nothing is written and the problems come back). Writes data/decks/..ydk and a .json with the ydke:// URL, a text decklist, the points or ban breakdown and the data "as of" date. Saving the same name again keeps the previous .ydk in data/decks/history/. Follow-up questions can pass the returned ydk path to validate_deck or find_links.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
notesNo
formatYes
decklistNo
ydk_pathNo
ydk_textNo
point_capNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a safe, idempotent, non-destructive write, and the description goes beyond them by disclosing exactly what gets written (data/decks/<name>.<format>.ydk plus a .json with ydke:// URL, decklist, points/ban breakdown, as-of date), the failure mode (nothing written, problems returned), and the overwrite/history behavior. This is rich behavioral context that matches the declared safety profile rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the critical precondition before the output details. The parenthetical aside is slightly dense but each sentence earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema tool the description usefully describes the returned artifacts and the ydk path handed to follow-ups. However, with 7 parameters at 0% coverage, an agent still lacks any guidance on how to supply decklist, ydk_text/ydk_path, notes, or point_cap, leaving a real gap for a complex mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, so the description carries the full documentation burden, yet it names no parameters. The path template "<name>.<format>" only faintly implies the name and format arguments, and nothing explains notes, decklist, ydk_path, ydk_text, or point_cap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ("Save a finished deck") and immediately differentiates itself from the sibling validate_deck by framing saving as conditional on validation. An agent can tell this is the terminal persistence step versus validation or lookup siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit precondition (only save if validate_deck says it is legal) and names the alternative flow (follow-up questions pass the returned ydk path to validate_deck or find_links). It lacks an explicit "do not use this when..." against a competing save tool, but the gating condition covers most of the routing decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_linesA

Find the turn-1 lines a starting hand makes, going first, by searching the real game engine (EDOPro, run in WSL): the deck is stacked so the hand is exactly these 5 cards, then turn 1 is searched several times from independent starts. Returns a job_id at once (quick ~10 s, normal ~1 min, deep ~2 min); fetch the lines with line_result. hand: 5 card names or passcodes. Deck: exactly one of saved_deck (a name from saved_decks), ydk_path, ydk_text (or ydke:// URL), decklist. executor (optional): "module:Class" of a windbot_decks executor to steer the search (e.g. "windbot_decks.mitsurugi:MitsurugiExecutor"). Lines are scored by the interruptions left live after a scripted opponent turn, plus hand traps held: a search result, not a solver; present it as "found by search" and check rulings it relies on with card_rulings. Run it when the user asks for a specific hand's line, starting with depth "quick". Optional: needs a ygo-sim checkout named by YGOSIM_HOME; without one it returns an error saying so.

ParametersJSON Schema
NameRequiredDescriptionDefault
handYes
depthNonormal
decklistNo
executorNo
ydk_pathNo
ydk_textNo
saved_deckNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say non-read-only, non-destructive, non-idempotent; the description goes well beyond by disclosing the async job_id pattern with per-depth timings, the deck-stacking mechanics, the scoring methodology (interruptions left live plus hand traps), the 'search result, not a solver' caveat, and the environment prerequisite failure mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then timing, then parameter guidance, then caveats – every clause carries information. It is a dense single block rather than a structured list, which costs a little scannability but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still states the return contract (a job_id, retrieved via line_result) and the caveats an agent needs (search-not-solver framing, prerequisite environment, recommended starting depth). Nothing required to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the full burden and does: hand = 5 card names or passcodes, deck = exactly one of saved_deck/ydk_path/ydk_text/decklist, executor = 'module:Class' with a concrete example, and depth = quick/normal/deep with latency expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('find the turn-1 lines a starting hand makes, going first') and immediately names the mechanism (searching the real EDOPro engine with a stacked deck). It is clearly distinguishable from siblings like line_result (fetch results) and card_rulings (verify rulings).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger: 'Run it when the user asks for a specific hand's line, starting with depth "quick".' It routes the agent to line_result for fetching and card_rulings for rules verification, and states the prerequisite (YGOSIM_HOME checkout, otherwise an error).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

line_resultA
Read-only

Result of a find_lines search: status running / done / failed. When done: the hand and up to one line per search start (best first), each with score, the steps in order, the end board, the hand left and the interruptions that stayed live. Cards the engine can't play (new sets without scripts) are reported.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, openWorldHint), so the description adds value by disclosing the status state machine (running/done/failed), the shape of the done payload (hand, lines ordered best-first, steps, end board, remaining hand, surviving interruptions), and the edge case that unplayable cards are reported. That is meaningful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single front-loaded sentence that leads with the tool's identity and then enumerates the payload, with no filler. The colon-separated clauses stay dense and readable. Slightly list-like but appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe return values, and it does so thoroughly for the 'done' case. Gaps remain: the 'running' and 'failed' payloads and the source of job_id are not addressed, and there is no polling guidance. Still largely complete for a result-retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter, job_id, with 0% schema description coverage, so the description must carry the burden of explaining it. It never mentions job_id, where it comes from, or its format, even though the whole tool is keyed on it. The meaning is only loosely inferred from 'Result of a find_lines search.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource and scope: it returns the result of a find_lines search, including the status lifecycle and the result contents. It differentiates from the sibling find_lines by framing itself as the result-retrieval counterpart. The core verb (retrieve/poll a job's result) is only implied by the noun phrase rather than stated outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Naming find_lines implies this is where you fetch that search's output, but the description never explicitly says 'call this with the job_id returned by find_lines,' nor does it explain polling/retry behavior while status is 'running'. Usage is inferable from the sibling reference rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meta_inclusionB
Read-only

How a card is played in recent tops (share of lists, average copies, by deck type), or a deck type's card inclusion table. Pass exactly one of card, deck_type (Yugioh Meta deck type name; near misses are suggested).

ParametersJSON Schema
NameRequiredDescriptionDefault
cardNo
daysNo
limitNo
formatYes
deck_typeNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds one genuine behavioral note (near-miss deck type names are suggested), but says nothing about data freshness, time-window behavior, truncation, or result shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the primary output description front-loaded and the parameter rule trailing. Nothing is padded, though the parenthetical stack makes the first sentence slightly hard to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five parameters, 0% schema coverage, and no output schema, the description covers the two main arguments and the exclusivity rule but omits the required-adjacent knobs (days, limit) and the format enum values. An agent can make a reasonable call but may misuse the undocumented controls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all parameter meaning. It explains card and deck_type (including the mutually exclusive rule) but never mentions format, days, or limit, leaving three of five parameters undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (card inclusion stats in recent tops) and spells out the two distinct output modes: per-card play rate and a deck type's inclusion table. It's specific about what data comes back but never distinguishes itself from siblings like meta_snapshot or archetype.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit operating rule: 'Pass exactly one of card, deck_type,' and hints that near-miss deck type names are resolved. That is clear selection guidance, though it doesn't say when to prefer this over meta_snapshot or other siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

meta_snapshotB
Read-only

Recent tournament tops (Yugioh Meta) for the format: deck-type shares, top-8s and wins, how many lists are still legal under today's list or points (average points for Genesys), the cards that make the most lists illegal now (most_common_blockers), and the most-played cards. Genesys = Genesys events; Advanced = TCG lists outside Genesys and OCG.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
daysNo
formatYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context about what the payload contains (legality under today's list, average points for Genesys, common blockers), but says nothing about data freshness/lag, rate limits, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the resource and its scope, with the format clarification placed last. The long field enumeration is dense but each item maps to real payload content, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the right work by enumerating the returned aggregates, which is enough for an agent to know what it gets back. Gaps remain around the meaning of 'top'/'days' and any freshness or pagination caveats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It fully disambiguates the required 'format' enum (Genesys = Genesys events; Advanced = TCG lists outside Genesys and OCG), but 'top' (default 15) and 'days' (default 60) are never explained — only implicitly hinted at by 'Recent tournament tops'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete resource and enumerates its scope precisely: recent tournament tops, deck-type shares, top-8s/wins, legality counts, most_common_blockers, and most-played cards. An agent can tell this is a meta-aggregate snapshot rather than a card- or deck-level tool. However, it never explicitly contrasts itself with the closest sibling (meta_inclusion), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to reach for this tool versus meta_inclusion, archetype, or search_cards — usage is only inferable from the returned-field list. The only routing-style help given is defining the format enum values, which is parameter semantics rather than usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

saved_decksA
Read-only

Decks saved with finalize_deck, newest first: name, format, saved_at, summary, .ydk path, ydke URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, and the description adds genuine value on top: result ordering (newest first) and the exact field set returned. It does not cover pagination, result limits, or whether the format parameter narrows the list, so it stops short of 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence, front-loaded with the resource and provenance, followed by the return fields. Nothing is padded and every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates returned fields, and annotations cover the safety profile. However, it omits the semantics of the format filter, pagination/limit behavior, and whether an empty result is possible, leaving gaps for a listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'format' parameter has 0% schema description coverage and enum values (tcg_advanced, genesys) that are never explained. The description's mention of 'format' refers to an output field, not the input filter, so it does not compensate for the schema gap and could even mislead about what the parameter does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Identifies the exact resource ('decks saved with finalize_deck') and its ordering ('newest first'), letting an agent distinguish it from siblings like finalize_deck or search_cards. The verb (list/retrieve) is only implied rather than stated, which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the reference to finalize_deck as the producer of these records, so an agent can infer 'call this to see what you saved'. There is no explicit when-to-use/when-not statement or named alternative, and the role of the format parameter as a filter is not clarified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cardsA
Read-only

Search the card pool. Only cards legal in format are returned unless include_illegal.

text: words that must all appear in the card text (or FTS5 syntax: "special summon" AND deck NOT banish) pattern: Python regex over card text, e.g. "Level 4 or lower .*Warrior" name: substring of the name; archetype: name contains it (case-sensitive game rule, e.g. "Destiny HERO") mentions: cards whose text names this in quotes, e.g. "HERO" or "Destiny HERO - Malicious" kind: monster, extra, main, tuner, fusion, synchro, xyz, link, ritual, pendulum, effect, normal, flip, spell, trap, quick-play, continuous spell, field, equip, ritual spell, normal trap, continuous trap, counter attribute: DARK, LIGHT, ...; race: Warrior, Spellcaster, ...; level_min/max: Level, Rank or Link rating max_points: Genesys points per copy at most this Card text is cut to 400 characters unless full_text.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
nameNo
raceNo
textNo
limitNo
formatYes
atk_maxNo
def_maxNo
patternNo
mentionsNo
archetypeNo
attributeNo
full_textNo
level_maxNo
level_minNo
max_pointsNo
include_illegalNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint; the description adds genuinely useful behavior beyond that, notably the default legality filter and the disclosure that card text is truncated to 400 characters unless full_text is set. It does not cover result ordering or the effect of limit, but the truncation and filtering notes are exactly the kind of context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Opens with the core purpose in one sentence, then a compact parameter glossary with a worked example per non-obvious field. Every line earns its place and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter tool with no output schema and no schema descriptions, the semantic coverage is strong and the search-syntax nuances are explicit. The main gap is silent handling of limit (default 20) and count/ordering behavior, which the agent must infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage across 17 parameters, the description carries the full burden and largely succeeds: it explains text as FTS5 syntax, pattern as Python regex, name as substring, archetype as case-sensitive name containment, mentions as quoted-name references, kind/attribute/race vocabularies, and level/rank/link semantics for level_min/max. Only limit, atk_max, and def_max are left undocumented, and the depth it provides on the ambiguous filters far exceeds what a schema could convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search the card pool') and immediately scopes the default result set to cards legal in the given format. This distinguishes it from siblings like card_lookup (single card retrieval) and archetype without needing to inspect schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys an important default behavior (illegal cards excluded unless include_illegal) but never states when an agent should choose this tool over card_lookup, find_lines, or archetype, nor does it describe any prerequisites. Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_deckA
Read-only

Check a deck against a format and list every card with its ban status or Genesys points.

Give exactly one deck input: ydk_path a .ydk file path readable from Windows (WSL files: \wsl.localhost\Ubuntu-24.04\home...) ydk_text .ydk contents, or a ydke:// URL decklist {"main": [...], "extra": [...], "side": [...]} with entries like "3 Ash Blossom & Joyous Spring", "Called by the Grave x2", "Cupsy☆Yummy" or a passcode format: tcg_advanced (Forbidden & Limited list; stricter of YGOProDeck and Project Ignis) or genesys (no F&L; Link and Pendulum Monsters banned in every zone; Main+Extra+Side points must fit point_cap, default 100). as_of: YYYY-MM-DD for the release-date check (default today).

legal is true/false, or null when the input had unknown passcodes, unknown or ambiguous names, or unreadable .ydk lines: nothing is dropped or guessed, so fix parse_errors and call again. resolved_names lists names that were matched after normalizing; check them.

ParametersJSON Schema
NameRequiredDescriptionDefault
as_ofNo
formatYes
decklistNo
ydk_pathNo
ydk_textNo
point_capNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, and the description is consistent with them ('Check', no mutation). Beyond the annotations it adds real behavioral detail: legal tri-states to null on unknown passcodes/ambiguous names, nothing is dropped or guessed, and resolved_names flags normalized matches. It does not describe rate limits or output volume for large decks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the mutual-exclusion rule are front-loaded, and the indented parameter/format breakdown is scannable. It is somewhat long and the format/genesys block is dense, but nearly every sentence carries unique information rather than restating the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by explaining the return contract (legal, resolved_names, parse_errors) and the null/failure semantics. Combined with the documented input modes, an agent has enough to call the tool and interpret the result without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden and it does: ydk_path (with WSL path syntax), ydk_text (including ydke:// URLs), decklist shape with entry-format examples, the format enum values with their rules, as_of date semantics, and point_cap inside the genesys rules. All six parameters are given meaning not present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+outcome: 'Check a deck against a format and list every card with its ban status or Genesys points.' That scope is clearly distinct from siblings like search_cards, card_lookup, or finalize_deck without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states 'Give exactly one deck input' and enumerates the three mutually exclusive input modes (ydk_path / ydk_text / decklist), plus what to do when legal is null ('fix parse_errors and call again'). It gives strong context but never names an alternative sibling tool or the conditions under which another tool would be preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.1.0
    • First observedarchetype
    • First observedcard_lookup
    • First observedcard_rulings
    • First observedfinalize_deck
    • First observedfind_lines
    • First observedfind_links
    • First observedline_result
    • First observedmeta_inclusion
    • First observedmeta_snapshot
    • First observedsaved_decks
    • First observedsearch_cards
    • First observedvalidate_deck

TDQS

A3.8/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target distinct operations: search_cards (pool query), card_lookup (single card), archetype (membership), validate_deck vs finalize_deck (check vs save), and find_lines/line_result (job start vs fetch). The closest pairs are meta_snapshot vs meta_inclusion (format-level vs card-level play rates) and card_lookup vs card_rulings (stats vs FAQ), but descriptions clearly differentiate them.

Naming Consistency4/5

Names are uniformly snake_case and mostly two-token, making them readable and predictable. However the verb pattern is not fully consistent: some are verb_noun (search_cards, find_links, validate_deck), while others are noun-ish or inverted (archetype, saved_decks, line_result, card_lookup).

Tool Count5/5

12 tools sit comfortably in the ideal range and each maps to a distinct piece of the deck-building workflow (search, lookup, rulings, meta, validate, save, links, simulation). No obvious redundant or filler tools.

Completeness4/5

The surface covers a full loop: search pool, inspect cards, check rulings/meta, validate a deck, save it, list saved decks, find bridges, and simulate lines. Minor gaps remain, such as no delete/rename for saved decks and no explicit format-listing tool, but core workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides AI assistants with 69 tools, 19 prompts, and 21 resources for deep access to Magic: The Gathering, including card data, combos, draft analytics, Commander metagame, competitive constructed, sideboard strategy, deck building, and rules engine, working with any MCP client.
    56
    119 PyPI
    20
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides Magic: The Gathering card, deck, provider, and statistical evidence tools for LLMs to make informed deckbuilding decisions.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to play Disney Lorcana TCG matches over MCP, with tools for card search, deck validation, match creation, state observation, legal actions, and moves. Supports AI-vs-AI play and a live spectator board.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides access to TCGplayer trading card data, including search, product details, pricing, and market information, enabling natural language queries for card analysis.
    1
    -