Commander Workshop MCP
Commander Workshop MCP
Commander Workshop 是一个本地优先的 MCP 服务器,用于构建、检查、比较和完成万智牌:指挥官套牌。它结合了固定的规则和卡牌数据与您明确导入的收藏,将套牌意图与所有权分离,并将完整的计划转化为抽取、交换、替代、代牌或购买。
该服务器适用于无约束的构筑、以库存优先的构组、Bracket 3 规划以及固定预算的预组升级。它评估有边界的完整候选方案,并给出在此约束下的最佳发现,而非声称拥有通用的力量分数或数学上完美的套牌。
功能
需求 | Commander Workshop 提供的内容 |
构筑或升级 | 在可组合约束下的完整、合法检查计划 |
理解套牌 | 法术力、曲线、角色、组件、主题证据和不确定性 |
使用您拥有的卡牌 | 通过 ManaBox 和映射的 CSV 导入,包含活页夹/套牌位置 |
保持计划诚实 | 套牌列表从不暗示所有权;已组好的套牌副本会被报告 |
查找缺失的卡牌 | 非预留的可用性加上可执行的完成计划 |
尊重预算 | 原生 USD/EUR 约束以及 50 单位的 Bracket 3 升级预设 |
检查价格 | 本地 Scryfall 估算或可选的只读 CardTrader 报价 |
与代理集成 | 通过 stdio 提供十一个 MCP 工具和不可变、分页的资源 |
Related MCP server: scryfall-mcp
隐私承诺
默认情况下,您的收藏、活页夹名称、位置和物理套牌分配保持本地。本地导入仅限于配置的根目录。服务器不会推送套牌、修改收藏、预留卡牌、将市场物品添加到购物车或完成购买。可选的市场价格查询仅发送最低限度的印刷要求,并从环境或 MCP 主机密钥存储中读取凭据。
安装
Commander Workshop 需要 Python 3.11 或更新版本。从仓库签出后:
python -m venv .venv
. .venv/bin/activate
python -m pip install -e .V1 目前仅支持 POSIX 文件系统。其不可变的发布路径需要目录文件描述符、O_DIRECTORY、O_NOFOLLOW、硬链接、fsync 和咨询锁;不支持 Windows。stdio 服务器还期望准备好接下来要验证的本地输入。
目录和规则设置
V1 在服务器启动时故意不发出网络请求。通过 Scryfall 文档化的批量数据 API 下载 Scryfall Default Cards JSONL gzip,准备 docs/rules-bundle.md 中指定的五文件规则包,然后运行经过测试的离线引导命令:
.venv/bin/commander-workshop-bootstrap \
--data-dir /absolute/path/to/commander-workshop-data \
--catalog-jsonl-gz /absolute/path/to/default-cards.jsonl.gz \
--catalog-url https://data.scryfall.io/default-cards.jsonl.gz \
--catalog-retrieved-at 2026-08-15T12:00:00+00:00 \
--rules-bundle /absolute/path/to/rules-bundle使用实际的下载 URL 和检索时间。--data-dir 是一个安全的安装根目录;它可能已经包含无关文件,引导程序不会删除或覆盖这些文件。该命令验证 gzip 和规则,在 environments/<sha256> 下构建一个内容寻址的环境,并且仅在完整表示持久化后发布原子性的 READY 标记。重试会恢复精确的不完整环境并返回相同版本。已发布的目录和规则文件是独占的字节副本,没有保留的阶段别名。符号链接的输入、硬链接别名、意外的侧载文件和冲突的现有内容会安全失败。
在构建之前,引导程序通过其版本化输入标识发现一个完全验证的 READY 环境,因此正常的相同输入重试不会创建新阶段。失败的阶段是惰性的,可能会保留以供手动检查;引导程序永远不会递归删除它无法证明属于它的阶段内容。
打印的数据目录仍然是可变的安装根目录,MCP 记录在 records/ 下写入。打印的目录和规则路径指向经过验证的就绪版本。请同时使用这三个值;没有有效 READY 标记的目录是不完整的引导状态,并且永远不会被返回。
环境变量 | 目的 | 引导输出形状 |
| 用于内容寻址 MCP 记录的可变运行时根目录 |
|
| 目录 |
|
| 规则集 JSON |
|
| 允许的本地导入根目录,由操作系统路径分隔符分隔 | 无文件导入 |
| 可选的只读 CardTrader 身份验证 | 未设置 |
引导后,将 COMMANDER_WORKSHOP_IMPORT_ROOTS 设置为一个或多个现有的绝对目录,并对其他变量使用打印的值。缺失、过期或无效的关键源会安全失败。有关数据流,请参阅架构指南。
Claude、Codex 和通用 stdio 配置
对于 Claude Desktop 或使用通用 JSON 形状的其他主机,复制 examples/mcp-config.json 并替换其中的绝对占位路径。
Codex 可以从 config.toml 使用相同的可执行文件:
[mcp_servers.commander_workshop]
command = "/absolute/path/to/commander-workshop-mcp/.venv/bin/commander-workshop-mcp"
args = []
[mcp_servers.commander_workshop.env]
COMMANDER_WORKSHOP_DATA_DIR = "/absolute/install-root"
COMMANDER_WORKSHOP_CATALOG_CURRENT = "/absolute/install-root/environments/<printed-sha256>/catalog/current.json"
COMMANDER_WORKSHOP_RULESET = "/absolute/install-root/environments/<printed-sha256>/rules/current.json"
COMMANDER_WORKSHOP_IMPORT_ROOTS = "/absolute/path/to/imports"任何 MCP v2 客户端都可以使用这些环境变量将绝对虚拟环境可执行文件作为本地 stdio 子进程启动。V1 中没有 HTTP 服务或账户设置。pipx 安装也可行:使用 pipx environment --value PIPX_BIN_DIR 返回的绝对路径,加上 commander-workshop-mcp。
端到端示例:无约束构筑
使用
search_cards检查固定的目录,并使用load_deck检查构筑过程中产生的每个完整候选套牌。调用
plan_deck,操作为build,卡池为all_legal,设置所需的 bracket/theme/proxy 维度,并提交一至八个完整候选方案。读取返回的commander://plans/...资源。(可选)加载收藏,为获胜计划调用
resolve_availability,然后调用create_fulfillment_plan。可用性仍然是假设性的;完成操作仅在该不可变结果内分配一个副本。
在构筑过程中,此流程不受库存约束,但仍然可以在用户决定行动之前显示手头有什么以及缺少什么。完整的 plan_deck 请求模板 已通过验收套件的模式验证。
端到端示例:仅拥有的构筑
将物理收藏导出为 ManaBox CSV 或带有显式列映射的 CSV,然后在严格模式下调用
load_collection_snapshot。使用
search_library按名称、印刷、活页夹或已组套牌分配查找候选卡牌。调用
plan_deck,卡池为owned_only,并设置收藏快照 ID。包含未拥有的非基本卡牌的候选方案会违反硬约束。读取计划和可用性资源,查看活页夹抽取和冲突。已分配给套牌的副本会被报告,而不会默认视为空闲。
使用完整的 仅拥有请求模板,将其中的套牌和收藏 ID 替换为先前工具的结果。
端到端示例:Bracket 3 USD/EUR 50 预组升级
导出或粘贴预组套牌并调用
load_deck;它仍然是套牌意图,而非所有权声明。加载完整的升级候选方案,并调用
plan_deck,操作为upgrade,预组套牌作为starting_deck_id,Bracket 3,以及precon-upgrade-50-usd或precon-upgrade-50-eur场景预设语义。检查精确的添加/删除、带日期的 bracket 证据、Game Changers、主题事实以及有保证的本币获取上限。缺少必需的价格证据无法以零通过上限。
(可选)解决库存问题,使用
create_fulfillment_plan选择抽取/交换/替代/代牌,然后为剩余的购买行调用price_purchases。定价仅供参考,且永远不会下订单。
USD 50 请求模板 包含完整的场景、候选证据、分数定义、bracket 策略和起始套牌字段。对于 EUR 预设,请更改货币和总预算策略。
支持的导入
ManaBox 收藏 CSV,将物理活页夹和已注册套牌与愿望清单或其他非拥有列表分开。
通用收藏 CSV,带有数量和精确卡牌身份的显式映射,以及可选的印刷和位置字段。
竞技场风格和常见的数量/名称/系列/编号套牌文本。
用户从 Moxfield、Archidekt、Deckbox、Deckstats、TopDecked 及类似主机导出的套牌文本,前提是符合支持的文本格式。
粘贴或选择您有权使用的导出。V1 不会抓取账户页面、重用浏览器 cookie 或调用未文档化的套牌主机端点。直接托管 URL 返回 unsupported_source;请导出套牌并导入其文本。
工具
公开的界面正好是十一个工具:
工具 | 目的 |
| 在有界过滤器和分页条件下搜索经过验证的本地目录。 |
| 规范化一个严格或显式部分的本地收藏快照。 |
| 规范化套牌文本,不推断所有权。 |
| 搜索物理副本、位置、印刷和套牌分配。 |
| 检查精确构筑、合法性、Rule Zero 和场景事实。 |
| 报告结构指标、角色、组件、证据和不确定性。 |
| 在组合场景下选择完整的、最佳发现的候选方案。 |
| 比较精确的更改和证据,而不使用聚合力量分数。 |
| 在不预留的情况下查找精确副本、冲突、替代品、代牌和缺口。 |
| 为未解决的购买创建带日期的只读价格快照。 |
| 选择抽取、套牌交换、替代品、代牌和购买。 |
每个工具都返回一个版本化的信封,包含稳定的结果 ID、状态、简明摘要、问题、来源标记,并且通常还有一个资源 URI。
资源
commander://cards/{oracle_id}
commander://searches/{result_id}
commander://collections/{snapshot_id}
commander://decks/{deck_id}
commander://plans/{plan_id}
commander://availability/{resolution_id}
commander://prices/{snapshot_id}
commander://fulfillment/{plan_id}
commander://rules/current
commander://presets记录是不可变的,且是内容寻址的。收藏和广泛搜索是有界且分页的;工具摘要避免重复收藏内容。
场景维度
规划场景由以下独立选择组成:
操作:构建、升级或分析;
bracket:1 到 5,带有带日期的回合和 Game Changer 证据;
卡池:
all_legal、prefer_owned或owned_only;预算:本币总额和可选的单卡上限,包括 USD/EUR 50 预组升级预设;
代牌政策:无、拥有一张或无限制(如果游戏组允许);
主题政策:严格契约、灵活偏好或强度导向;
受保护的已组套牌、固定的规则集和确定性种子。
套牌适配度和战略强度不会合并为一个分数。官方指挥官规则仍然具有权威性,且规则零的覆盖必须明确声明。
定价语义
price_purchases 将商品小计、供应商小计、运费和预估到岸总价分开。未知商品或运费保持 null,绝不设为 0。只有在所选策略下,每个必需购买都有符合条件的已知证据时,才能通过有保障的预算。
Scryfall 目录价格是指示性的 PriceEstimate 观察数据,而非结账报价。CardTrader 列表是只读的 PurchaseQuote 观察数据。规划估算使用声明的时效窗口,最长不超过 24 小时;CardTrader 可能使用更短的列表有效期。部分过时的观察数据会明确标注 unknown_price、认证问题、中断或速率限制问题。
供应商限制
Scryfall 估算来自已验证的本地目录,可能缺少货币、版本、品相、语言、数量或运费信息,且不可购买。
CardTrader 为可选,需要
CARDTRADER_API_TOKEN,仅使用固定的文档化 GET 端点,不跟踪重定向,也不优化多卖家购物篮。Cardmarket 和 TCGplayer 默认未启用;任何未来适配器必须尊重访问限制和供应商条款。
任何供应商都不能更改套牌合法性、收藏所有权、代牌政策或预留库存。任何供应商都不提供购物车或购买操作。
正常测试和持续集成不发出实时市场或套牌托管请求。
开发
python -m pip install -e '.[test]'
python scripts/check_public_tree.py
ruff check src tests scripts
pytest -q
python -m build隐私扫描器会检查追踪树中的私有路径、凭据、数据库、不安全的数据导出、符号链接以及未记录/过大的夹具。所有测试数据均为合成且确定性的。
架构
参见 docs/architecture.md 了解组件边界、不可变存储、信任边界、规划/执行流程以及扩展点。
安全报告
遵循 SECURITY.md。使用私有安全通告和最小合成复现;切勿附带收藏导出、卡册库存、令牌或其他个人数据。
致谢
卡牌名称、规则文本和目录元数据可能源自 Scryfall,其数据和致谢要求适用。万智牌规则和指挥官套牌分级政策由 威世智 发布。供应商名称和市场数据归其各自所有者所有。
非关联声明
Commander Workshop MCP 是非官方的粉丝软件。它与威世智、Scryfall、CardTrader 或任何其他套牌托管商或市场无关联,也未获得其认可、赞助或批准。万智牌、指挥官及相关商标归威世智及其各自所有者所有。
Commander Workshop MCP 是根据粉丝内容政策允许的非官方粉丝内容。未经威世智批准/认可。所使用的材料部分归威世智所有。©威世智有限责任公司。
许可证
本软件根据 MIT 许可证 发布。第三方卡牌、规则和市场数据仍受其自身条款和许可证约束。
Available Tools
11 toolsanalyze_deckC
Store evidence-backed structural metrics without a scalar power score.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits like whether this tool is read-only, destructive, has side effects, requires authorization, or has rate limits. The description only says it stores structural metrics, which implies a write operation, but it does not explain persistence, idempotency, or what happens to existing data. This is insufficient for a tool that accepts a complex request with nested objects.
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?
The description is very brief (one short sentence). While it is efficient, it omits critical information that could be added without much more text. It earns a 4 for being concise, not verbose.
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?
Despite having an output schema and a single parameter, the tool is conceptually complex (involves scenarios, win packages, score definitions) and has many sibling tools. The description does not explain the return format, how the analysis is performed, what constitutes 'evidence-backed metrics', or how the output relates to the input. The tool is under-described for its complexity.
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%, meaning the description must add meaning to the parameters, but it does not. The input schema defines a single 'request' parameter containing multiple nested objects (ScenarioInput, WinPackageInput, ScoreDefinitionInput, etc.), yet the description offers no explanation of how these fields relate to the analysis or what values they accept. For a complex tool with one parameter that is a nested object, this is 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 description includes a verb (Store) and a resource (structural metrics, no scalar power score), which suggests the tool persists or records analysis results. However, the meaning of 'evidence-backed structural metrics' and 'without a scalar power score' is vague and does not clearly distinguish this from sibling tools like 'check_deck' or 'plan_deck'. The score is 3 because it indicates what the tool does but lacks specificity.
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 guidance on when to use this tool versus alternatives such as 'check_deck', 'plan_deck', or 'compare_decks'. The description does not explain prerequisites, expected input context, or conditions under which this tool is appropriate. This is a critical gap given the complex input schema with nested objects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_deckC
Check exact construction legality without inferring bracket fit.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for disclosing behavioral traits. It states 'without inferring bracket fit' but fails to explain whether the tool is read-only, what permissions it requires, what side effects exist, or the nature of its return value. For a legality-checking tool, this is insufficient.
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?
The description is a single, front-loaded sentence that wastes no words. It efficiently communicates the purpose without fluff. However, it is perhaps too concise—adding a brief sentence about input or output could improve it without sacrificing conciseness.
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?
Given the complexity of the input schema (nested objects with many properties) and the presence of an output schema, the description is too sparse. It does not explain what the output represents (pass/fail, detailed violations), what 'bracket fit' means in context, or note any prerequisites like authentication or specific game format. The tool is moderately complex but the description covers almost none of the needed context.
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 input schema has 0% description coverage for parameters, and the tool description adds no information whatsoever about the 'request' object or its nested properties. The agent receives no guidance on how to construct the required input (e.g., deck_id, scenario), making parameter understanding entirely reliant on the schema structure alone.
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 uses the specific verb 'Check' and identifies the resource as 'deck construction legality', clearly stating the tool's core function. It further distinguishes itself by noting 'without inferring bracket fit', which sets it apart from potential sibling tools like analyze_deck or plan_deck that might involve inference. This makes the purpose unambiguous and differentiated.
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 explicit guidance on when to use this tool versus alternatives. The description hints at a distinction ('without inferring bracket fit') but does not specify situations where this tool is preferred over analyze_deck, plan_deck, or others. No alternatives are named, nor are when-not scenarios provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_decksB
Compare two to eight raw decks or plan winners without scalar scoring.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait: it does not produce a scalar score. Since no annotations are provided, the description carries the full burden of behavioral transparency. It also hints at a comparison output (likely showing differences or side-by-side). However, it does not explain what the output format looks like, whether it's read-only or has side effects, or how it handles invalid or missing IDs.
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?
The description is a single concise sentence that packs key information: action, item count range, items compared, and what is NOT done (no scalar scoring). It is front-loaded and efficient. However, given the complexity of the tool and the 0% schema coverage, a slightly longer description might add necessary clarity without being verbose.
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?
The tool has 1 parameter with 0% schema coverage, no annotations, and an output schema exists (but its content is not shown). The description provides the count constraint and item type, but fails to explain what the output contains (e.g., a comparison table, list of differences), how conflicts are resolved (e.g., if IDs are invalid), or whether the tool is read-only. Given the complexity of comparing multiple decks, the description is somewhat incomplete.
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 a single parameter 'deck_or_plan_ids' with a type of array of strings. Schema description coverage is 0%, so the description must compensate. The description says 'compare two to eight raw decks or plan winners', which adds the constraint of min/max count (2-8) and the types of strings ('deck_or_plan_ids' → decks or plan winners). However, it does not specify the format of each ID (e.g., should they be full IDs or partial?), whether the order matters, or how mixed types (e.g., both deck and plan IDs) are handled.
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 uses specific verbs ('compare', 'without scalar scoring') and names the resource ('raw decks or plan winners'). It clearly states the tool compares decks, not scalar scores, and implies a parallel/cross comparison. However, 'plan winners' is a domain term that may need more explanation, and 'raw decks' could be clarified to avoid confusion with 'check_deck' or 'analyze_deck'.
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 states a use case (compare decks without scalar scoring) and implies it's an alternative to scoring-based evaluation. However, it does not explicitly say when NOT to use this tool (e.g., when you need a numeric score, use 'check_deck' or 'analyze_deck') or mention any prerequisites (e.g., deck/plan IDs must exist). The sibling tools suggest possible alternatives, but no guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_fulfillment_planB
Allocate each physical copy once inside an immutable plan result.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are missing, so the description carries the full weight. It hints at immutability ('immutable plan result') which implies the plan cannot be modified post-creation, a key behavioral trait. However, it does not disclose whether the action is destructive (overwrites existing allocations), requires authentication/authorization, or has rate limits. A 3 reflects partial disclosure but missing critical behavioral details for a mutation 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?
The description is a single, concise sentence of only 8 words, with no redundant phrases. Every word ('allocate', 'physical copy', 'once', 'immutable', 'plan result') serves a purpose. It fits the tool's likely complexity and is front-loaded with the action and key constraint ('immutable').
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?
Given the tool has a complex structure (nested object with 3 fields), no annotations, no output schema explanation (though output schema exists, context signals say 'has output schema: true', but description doesn't leverage it), the description is insufficient. It covers the core purpose but omits parameter details, error scenarios, and return values. The completeness is adequate for a simple tool but gaps remain for the nested input schema.
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% (context signals), so the description must compensate entirely. The description does not elaborate on the parameters (resolution_id, mode, exact_target_id). However, because there is only one parameter (request) that is an object with nested fields, and the description is minimal, it cannot adequately explain their semantics. Average baseline is 3, but given the very low coverage, a 4 would require description to fully cover parameters. Here it fails, but schema has no descriptions at all, so 4 is too generous. Actually, since coverage is 0% and description doesn't clarify params, score should be 2.
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 'Allocate each physical copy once inside an immutable plan result' clearly identifies the verb (Allocate) and resource (physical copy within an immutable plan result), distinguishing it from sibling tools like 'search_cards' or 'compare_decks'. It specifies a unique action ('allocate') and context ('immutable plan'), making the purpose unambiguous.
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 provides no guidance on when to use this tool versus alternatives like 'resolve_availability' or 'plan_deck'. It does not mention any prerequisites (e.g., a plan must exist), exclusions (e.g., cannot modify after allocation), or conditions (e.g., requires permissions). Context signals show sibling tools share similar domains (planning/resolving), making such guidance critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_collection_snapshotC
Normalize a supported local collection file into an immutable snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| format | No | auto | |
| mapping | No | ||
| observed_at | Yes | ||
| allow_partial | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool 'normalizes' and creates an 'immutable snapshot', implying a read-only transformation, but does not disclose potential side effects (e.g., does it modify the original file? Consume significant memory? Require specific permissions?). The term 'supported' is left undefined.
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?
Extremely concise at 8 words, but overly terse. Lacks contextual sentences that would help the agent understand usage (e.g., supported formats, snapshot benefits). Edge cases like not providing any parameter details make it under-specified rather than efficiently written.
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?
Given the complexity (5 parameters, output schema exists) and no annotations, the description is incomplete. The output schema exists but the description doesn't hint at what the snapshot contains (e.g., card objects? aggregated data?). Required distinction from 'load_deck' or 'search_library' is missing. Agent would likely misuse the tool without external knowledge.
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%, meaning the description adds zero meaning beyond parameter names and types. For example, 'mapping' parameter is described only by schema (object mapping strings to strings) with no context on what it maps (e.g., field names? column indexes?). 'allow_partial' defaults to false but the description never explains partiality. The description does not compensate for the low schema coverage.
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 uses a specific verb ('Normalize') and resource ('local collection file'), clearly stating the output ('immutable snapshot'). It distinguishes this from siblings like 'load_deck' by emphasizing the 'collection' context.
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?
No guidance on when to use this tool versus alternatives (e.g., search_cards, load_deck, analyze_deck). The description does not mention prerequisites (e.g., file must exist locally, supported format) or what 'supported' means.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_deckC
Normalize deck text without treating it as evidence of ownership.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| label | Yes | ||
| format | No | arena |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations are missing entirely, the description carries the full burden for behavioral disclosure. It states a key behavioral trait: the tool does not treat the deck as evidence of ownership, which implies it is a safe, non-destructive operation. However, it fails to describe side effects, authorization needs, or what happens with invalid input. The output schema exists but the description does not reference return behavior, leaving gaps.
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?
The description is a single, concise sentence with no extraneous content. It front-loads the core action ('normalize deck text') and adds a key discriminator. While brief, it earns its place by being focused.
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?
Given the tool has 3 parameters with 0% schema description coverage, an output schema (which could document return values), and a complex sibling set, the description is too sparse. It does not explain the normalization process, input requirements, output structure, or how this differs from similar tools like 'check_deck'. Substantial gaps remain for the agent to select and invoke correctly.
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 for documenting parameters. It mentions none of the three parameters ('text', 'label', 'format') explicitly. 'text' and 'label' are required but their purpose is only inferred from the tool's context. The 'format' parameter has a default but no explanation of its role. This is 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 description 'Normalize deck text without treating it as evidence of ownership' uses a specific verb ('normalize') and identifies the resource ('deck text'). However, the phrase 'without treating it as evidence of ownership' is ambiguous and does not clearly differentiate this tool from siblings like 'check_deck' or 'analyze_deck'. The lack of clarity on what 'normalize' means reduces the score.
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?
No guidance is provided on when to use this tool versus alternatives like 'check_deck' or 'analyze_deck'. The description implies a specific constraint (not treating as evidence) but does not explain what that means for usage. No exclusion criteria or context signals (e.g., prerequisites like deck format constraints) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_deckC
Evaluate one to eight complete client-submitted candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral transparency. It discloses only that candidates must be 'complete' and between 'one to eight', but it does not mention side effects, read-only status, permissions, or what the evaluation returns. This is a minimal disclosure for a complex 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?
The description is a single sentence of eight words, stating the action and key constraints with no redundant or extraneous information. It is highly concise and front-loaded with the main verb.
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?
Given the extremely complex input schema and the presence of an output schema, a one-sentence description is wholly inadequate. It does not explain what a 'candidate' is, what the evaluation entails, or how the tool fits into the overall workflow, making it insufficient for an agent to understand and use the tool correctly.
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 description adds a meaningful constraint on the 'candidates' parameter by specifying 'one to eight' and requiring completeness, which the schema itself does not enforce. However, it gives no details about the many other fields in the 'request' object, leaving the agent to rely solely on the schema structure and names.
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 clearly uses the verb 'Evaluate' with a specific resource ('candidates') and a scope ('one to eight'), making the core action understandable. However, it does not clarify that these are deck candidates or that the tool produces a plan, which would distinguish it from sibling tools like analyze_deck or compare_decks.
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 provides no guidance on when to use this tool versus alternatives. It neither explains prerequisites, exclusions, nor mentions any competing tools, leaving the agent without contextual selection cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_purchasesC
Price unresolved purchases without adding to a cart or buying anything.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only mentions that pricing does not add to cart or buy, but lacks details on authentication, rate limits, side effects, or output format. The presence of an output schema is not leveraged.
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?
The description is a single sentence, so it is concise. However, it is too short for the tool's complexity; conciseness should not come at the expense of completeness.
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?
Given the complex nested input schema, the lack of annotations, and no output schema documentation, the description is woefully incomplete. The agent would not know how to properly construct the request or interpret results.
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%, and the description does not explain any parameters. The agent must guess the meaning of fulfillment_plan_id, provider_id, and the nested policy object with its fields (currency, accepted_finishes, etc.). This is a critical 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 description clearly states the verb 'price' and resource 'unresolved purchases', and distinguishes the action from adding to cart or buying. However, 'unresolved purchases' is somewhat vague and could be more specific.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., create_fulfillment_plan), prerequisites, or when not to use it. The description is purely functional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_availabilityC
Resolve complete decks against physical copies without reserving them.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It only reveals that the tool does not reserve copies. Missing are details on whether it modifies any data, required permissions, side effects (e.g., caching), limitations (e.g., only checks against a specific collection), or rate limits. The single behavioral trait is helpful but insufficient.
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?
The description is a single short sentence, which is concise but comes at the expense of necessary detail. It lacks structure such as bullet points or sections. While every word earns its place, the description is underspecified for practical use, earning an average score.
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?
Despite having an output schema and one parameter (with complex internals), the description fails to explain how the tool is used in practice. It does not address the input's nested structure, the meaning of 'substitutes', or what the output contains. An agent would struggle to form a correct request without additional context.
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%. The description does not mention any parameters or explain what 'ResolveAvailabilityRequest', 'collection_id', 'substitutes', etc., represent. The complex nested structure with arrays and enums (e.g., 'proxy_policy' likely has valid values) is entirely undocumented in the description. This leaves the AI agent with no guidance beyond raw schema names.
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 clearly states the action ('resolve complete decks against physical copies') and adds a critical constraint ('without reserving them'). It distinguishes this tool from sibling tools like create_fulfillment_plan and price_purchases, which involve reservations or purchases. However, 'resolve' is somewhat abstract and could be more explicit (e.g., 'check availability').
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 provides no guidance on when to use this tool versus alternatives. For example, it does not indicate whether this tool should be used before creating a fulfillment plan or after loading a deck. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cardsB
Search the verified local card catalog with bounded pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| type_contains | No | ||
| color_identity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions 'bounded pagination' (adding behavioral context) but doesn't disclose if it's read-only, what happens to the returned data, rate limits, or authentication needs. The description adds some value beyond nothing.
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?
The description is a single sentence with no wasted words. It could be slightly longer to add param context, but it remains concise and front-loaded with the key action.
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 5 parameters, 0% schema coverage, no annotations, and an output schema present, the description is too sparse. It leaves the agent guessing about param semantics, return structure (despite output schema existing), and behavioral boundaries.
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. It only mentions 'bounded pagination', hinting at limit/offset, but gives no meaning for query, type_contains, color_identity, or how they interact. This is insufficient for 5 parameters.
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 it searches a card catalog with bounded pagination, which is a specific verb-resource combination. It distinguishes from sibling tools like search_library by mentioning 'verified local card catalog', though it doesn't explicitly differentiate from all siblings.
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 implies usage for searching cards with pagination but provides no guidance on when to use this tool vs siblings like search_library or load_collection_snapshot. No exclusion or alternative context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_libraryC
Search a stored collection without disclosing its contents in the summary.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| snapshot_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| issues | No | |
| status | Yes | |
| summary | Yes | |
| result_id | Yes | |
| resource_uri | Yes | |
| source_stamps | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey all behavioral traits. It hints at a privacy feature (not disclosing contents in summary), but omits whether this is a read-only operation, what other side effects exist, or any required permissions. The agent is left to infer safety and behavior from the name alone.
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?
The description is a single sentence, which is concise, but it is under-informative. It earns its place by adding the disclosure constraint, yet it omits crucial details that could be added without significant bloat. Balance between brevity and completeness is off.
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?
Given the tool has 4 parameters, 2 required, and an output schema present, the description is incomplete. It fails to cover usage context, parameter roles, or differentiation from siblings. The output schema may define return structure, but the description does not help the agent understand when or how to invoke this tool effectively.
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 should explain parameters. It does not. 'snapshot_id' and 'query' are required but their meaning is entirely left to the schema title fields, which provide no context. The description adds no parameter-specific information.
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 clearly states the tool's action: 'Search a stored collection'. It adds a distinguishing behavioral note about not disclosing contents in the summary. However, 'stored collection' is somewhat vague and doesn't explicitly contrast with sibling tools like 'search_cards' or 'load_collection_snapshot'.
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?
No guidance is provided on when to use this tool versus its siblings. The description does not mention scenarios, prerequisites, or alternatives. An agent has no context to decide between 'search_library' and 'search_cards' or other search/load operations.
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.
11 tool updates
v0.1.0- First observed
analyze_deck - First observed
check_deck - First observed
compare_decks - First observed
create_fulfillment_plan - First observed
load_collection_snapshot - First observed
load_deck - First observed
plan_deck - First observed
price_purchases - First observed
resolve_availability - First observed
search_cards - First observed
search_library
TDQS
Scored across 11 tools
Each tool targets a distinct operation: searching card catalogs vs collections, loading different file types, checking legality vs analyzing metrics vs evaluating candidates, comparing, resolving availability, creating fulfillment plans, and pricing. No two tools appear to overlap in purpose.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., search_cards, load_deck, check_deck). The verbs are varied but clear, and the nouns accurately describe the target resource. The pattern is uniform across all 11 tools.
With 11 tools, the server covers the essential workflows for a Commander deck workshop: searching, loading, checking, analyzing, planning, comparing, fulfillment, and pricing. The count feels well-scoped without being overwhelming or insufficient.
The tool set covers the full lifecycle from card and collection intake through deck validation, comparison, availability resolution, and fulfillment. There is no obvious missing operation; all necessary steps for the intended domain are present.
Maintenance
Related MCP Connectors
Organize and track your Magic: The Gathering collection, decks, prices and imports.
Live TCG card and decklist prices for AI assistants. 22+ games, no account, ready-to-buy links.
MTG market data: search 114K+ cards, price signals, AI analysis. Free tier available.
Commander deck reviews, precon upgrades, budget swaps, bracket guidance and mana bases.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA comprehensive Model Context Protocol server that provides AI assistants with rich Magic: The Gathering information, including card data, comprehensive rules, EDHREC recommendations, combo interactions, and intelligent Commander deck generation.98 PyPI1MIT
- FlicenseNot gradedqualityDmaintenanceProvides access to Magic: The Gathering card data via Scryfall API, including search, rulings, sets, and local deck management with multi-owner support.-
- AlicenseAqualityDmaintenanceProvides AI assistants with comprehensive Magic: The Gathering data including card info, combos, draft analytics, Commander metagame, constructed formats, sideboard strategy, deck building, and rules.74MIT
- FlicenseNot gradedqualityAmaintenanceProvides Magic: The Gathering card, deck, provider, and statistical evidence tools for LLMs to make informed deckbuilding decisions.-