ygo-format
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ygo-formatIs my deck legal for TCG Advanced?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
card text, stats, archetypes, TCG/OCG dates, Genesys points | |
TCG F&L list (the stricter of it and YGOProDeck is used) | |
recent tournament tops, deck shares, card inclusion | |
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 the legal card pool by text, regex, name, archetype, type, attribute, level, points |
| One card: full text, stats, status in every format, alt passcodes, rulings links |
| An archetype's members and support cards, with limits or points |
| Legality of a deck (.ydk, |
| Save a deck only if it is legal (.ydk + |
| Bridges between engines: searchers into the deck, what it reaches, Extra Deck options, Special Summon locks |
| Recent tops for a format: deck shares, top 8s, wins, how many lists are still legal, staples |
| How a card is played across tops, or a deck type's card inclusion table |
| Official Q&As for a card, optionally only those involving a second card or certain words |
| 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_servermacOS / 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_serverThen ask Claude something like "Is this Genesys list under 100 points?" or "Build me a Destiny HERO deck for TCG Advanced."
Limits
find_linksparses card text with rules, not an engine: treat its ruling flags as unverified, and Fusion Summon spells are not modelled as links yet.card_rulingsreturns OCG rulings; TCG rulings can differ.find_linesis 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 pytestTests 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 toolsarchetypeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| format | Yes | ||
| include_text | No |
TDQS
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.
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.
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.
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.
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.
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_lookupARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
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.
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.
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.
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.
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.
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_rulingsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| card | Yes | ||
| limit | No | ||
| query | No | ||
| with_card | No |
TDQS
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.
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.
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.
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.
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.
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_deckAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| notes | No | ||
| format | Yes | ||
| decklist | No | ||
| ydk_path | No | ||
| ydk_text | No | ||
| point_cap | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hand | Yes | ||
| depth | No | normal | |
| decklist | No | ||
| executor | No | ||
| ydk_path | No | ||
| ydk_text | No | ||
| saved_deck | No |
TDQS
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.
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.
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.
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.
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.
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.
find_linksBRead-only
Bridges and support for a deck (or just a few cards), legal in format and within budget.
A "fetch" is an add / Special Summon / Set / Fusion Summon effect (never a cost; Extra Deck monsters
can't come from hand or Deck).
your_archetypes_unplayed members of your archetypes you don't run: which of your cards fetch them
(fetched_by) and which of yours they fetch (fetches_your); check these first
into_your_deck outside cards that fetch your cards, most-played targets first (with evidence)
your_deck_reaches what your cards already fetch outside the list, by archetype (named/archetype links)
generic_searchers your cards that fetch by Attribute/Type only (e.g. any Level 4 Warrior), one line each
bridges other engines tied to your deck through those cards; mostly_blocked_by_deck_locks
marks engines your own locks would stop
extra_deck_options Extra Deck monsters your monsters can be material for, lock-compatible first
deck_locks your deck's Special Summon locks and conditions, with which of your own cards they block
Suggestions that break one of your locks carry breaks_deck_locks. more_not_shown counts cut items.
Genesys: suggestions are limited to the points left (point_cap minus the deck's points) unless
max_points is given. Links are parsed from card text, not verified rulings: read each item's
evidence and ruling_flags, and validate_deck any final list.
| Name | Required | Description | Default |
|---|---|---|---|
| cards | No | ||
| limit | No | ||
| format | Yes | ||
| decklist | No | ||
| ydk_path | No | ||
| ydk_text | No | ||
| point_cap | No | ||
| archetypes | No | ||
| max_points | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, openWorldHint), and the description adds meaningful caveats beyond that: 'Links are parsed from card text, not verified rulings', the instruction to read evidence/ruling_flags and validate_deck, the Genesys point-limitation rule, and more_not_shown for truncated items. These are real behavioral disclosures an agent cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose and the 'fetch' definition, but the body is a dense, indentation-heavy enumeration of output sections with idiosyncratic spacing that reads like copied field docs rather than a curated description. Much of it is necessary given no output schema, but the structure is hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 and explains each result section, which is genuinely helpful. But for a 9-parameter tool at 0% schema coverage it omits how the input options (cards vs decklist vs ydk_path/ydk_text, archetypes, limit) relate, so an agent still can't call it correctly from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description must carry the burden. It explains format, point_cap/point_cap-vs-max_points interaction, but leaves cards, decklist, ydk_path, ydk_text, archetypes and limit entirely unexplained, including the mutually-exclusive deck-input options — a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states the resource produced: bridges and support (cards that 'fetch' your cards) for a deck or a few cards, constrained by format and budget. The definition of 'fetch' makes the domain precise. However it never distinguishes itself from the similarly named sibling find_lines, leaving an agent to guess which retrieval tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is partial routing guidance ('check these first' for your_archetypes_unplayed, 'validate_deck any final list', and the Genesys point-cap rule), but no explicit statement of when to use find_links versus find_lines, search_cards, or archetype. Usage is implied by the output-section list rather than declared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
line_resultARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_inclusionBRead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| card | No | ||
| days | No | ||
| limit | No | ||
| format | Yes | ||
| deck_type | No |
TDQS
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.
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.
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.
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.
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.
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_snapshotBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| days | No | ||
| format | Yes |
TDQS
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.
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.
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.
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.
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.
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_decksARead-only
Decks saved with finalize_deck, newest first: name, format, saved_at, summary, .ydk path, ydke URL.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No |
TDQS
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.
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.
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.
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.
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.
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_cardsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| name | No | ||
| race | No | ||
| text | No | ||
| limit | No | ||
| format | Yes | ||
| atk_max | No | ||
| def_max | No | ||
| pattern | No | ||
| mentions | No | ||
| archetype | No | ||
| attribute | No | ||
| full_text | No | ||
| level_max | No | ||
| level_min | No | ||
| max_points | No | ||
| include_illegal | No |
TDQS
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.
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.
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.
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.
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.
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_deckARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ||
| format | Yes | ||
| decklist | No | ||
| ydk_path | No | ||
| ydk_text | No | ||
| point_cap | No |
TDQS
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.
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.
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.
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.
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.
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.
12 tool updates
v0.1.0- First observed
archetype - First observed
card_lookup - First observed
card_rulings - First observed
finalize_deck - First observed
find_lines - First observed
find_links - First observed
line_result - First observed
meta_inclusion - First observed
meta_snapshot - First observed
saved_decks - First observed
search_cards - First observed
validate_deck
TDQS
Scored across 12 tools
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.
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).
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.
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
Related MCP Connectors
A living memory and world-building layer for your AI: cards, worlds, personas and agent dispatch.
Read-only search of 2,189 AI agent tools (MCP servers, x402 APIs) with daily automated trust scores.
Independent directory of agentic AI tools — search, compare & recommend via MCP. Read-only.
- manthanOAuthtech.sirune
List and create Manthan concept-card decks from an AI agent — no AI quota spent for imports.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides 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.56119 PyPI20MIT
- FlicenseNot gradedqualityAmaintenanceProvides Magic: The Gathering card, deck, provider, and statistical evidence tools for LLMs to make informed deckbuilding decisions.-
- AlicenseNot gradedqualityDmaintenanceEnables 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
- FlicenseNot gradedqualityBmaintenanceProvides access to TCGplayer trading card data, including search, product details, pricing, and market information, enabling natural language queries for card analysis.1-