Midpoint Card Prices
Server Details
Trading card prices and grading ROI for 1.5M+ Pokémon, Magic, Yu-Gi-Oh! and sports cards. Read-only.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- kolourr/midpoint-mcp
- GitHub Stars
- 0
- Server Listing
- Midpoint MCP server
TDQS
Scored across 9 tools
Each tool targets a distinct user intent—search, current prices, history, grading ROI, set lists, trends, liquidity—and descriptions explicitly state when not to use them. Conceptual overlap between trending_cards and liquid_movers is resolved by liquidity filters and use-case notes, preventing misselection.
Five tools follow a verb_noun pattern (search_cards, get_card_prices, get_price_history, get_set_cards, list_sets), but four are noun phrases (best_cards_to_grade, grading_roi, liquid_movers, trending_cards). While all use snake_case and remain readable, the lack of a single convention reduces predictability.
Nine tools is well within the ideal 3–15 range for a card pricing server, covering search, pricing, history, grading analysis, set browsing, and market trends without redundancy. Each tool earns its place with a clear, non-overlapping role.
The toolset covers the core lifecycle from card search to pricing, history, grading ROI, and set/market views, with IDs flowing between tools to avoid dead ends. Minor gaps remain, such as a direct card-by-id metadata lookup or sealed product pricing, but these are peripheral to the price-focused purpose.
Available Tools
9 toolsbest_cards_to_gradeBest cards to gradeARead-onlyIdempotentInspect
Use this when the user asks which cards in a game, sport or set have the biggest payoff from grading. Ranks priced cards by expected net profit at a 50% gem rate (half PSA 10, half PSA 9, minus raw and the fee), requiring both PSA 9 and PSA 10 prices so thin-market outliers are excluded. Returns card ids for grading_roi. Do not use for a single named card.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | Game or sport to rank. | |
| limit | No | ||
| set_slug | No | Optional set slug (as used on /sets/<game>/<slug>) to rank inside one set. | |
| grading_fee_usd | No | Grading fee to assume. Defaults to $25. |
Output Schema
| Name | Required | Description |
|---|---|---|
| game | Yes | |
| cards | Yes | |
| count | Yes | |
| links | Yes | |
| criteria | Yes | |
| assumed_fee_usd | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, yet the description adds real methodology: the 50% gem-rate assumption, the requirement that both PSA 9 and PSA 10 prices exist to exclude thin-market outliers, and the default $25 fee. It stops short of describing result size or how the limit interacts with ranking, but the substantive behavioral disclosure is strong.
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?
Four tightly packed sentences with the primary trigger front-loaded and zero filler. Dense but every clause carries information; only minor cost is that the methodology clause sits mid-paragraph rather than being separated for scanability.
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?
An output schema exists, so return-value documentation is unnecessary, and the description still notes it returns card ids for grading_roi. Combined with the annotations, the trigger, the exclusion, and the ranking methodology, an agent has everything required to select and call this 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?
Schema description coverage is 75%, so parameter docs do most of the work, but the description still adds meaning: the fee is framed as an assumption used inside the profit formula (not just a number), and the both-prices requirement explains why some cards are silently absent. The 'limit' parameter and the exact gem-rate composition are not explained beyond 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?
States a specific verb and resource ('ranks priced cards by expected net profit'), names the exact ranking criterion (50% gem rate, half PSA 10/half PSA 9, minus raw and fee), and explicitly carves out the sibling use case ('Do not use for a single named card'). An agent can distinguish it from grading_roi, search_cards, and get_card_prices without opening any 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?
Opens with an explicit trigger ('Use this when the user asks which cards in a game, sport or set have the biggest payoff from grading'), states the exclusion ('Do not use for a single named card'), and names the downstream tool ('Returns card ids for grading_roi'). When-to-use, when-not, and the alternative path are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_card_pricesGet card price ladderARead-onlyIdempotentInspect
Use this when the user wants the full current value of a specific card: ungraded prices by condition (NM/LP/MP/HP) and graded prices for every company and grade on record (PSA, CGC, BGS, SGC, TAG). Requires a card id from search_cards. Prices are USD market values from real sold listings, refreshed daily. Do not use to search by name.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | Catalog card id from search_cards, e.g. "swsh7-215" or "pricecharting-1821843". |
Output Schema
| Name | Required | Description |
|---|---|---|
| raw | Yes | |
| card | Yes | |
| links | Yes | |
| graded | Yes | |
| summary | Yes | |
| currency | Yes | |
| captured_on | Yes | Date of the latest price capture (UTC) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by disclosing data provenance ('real sold listings, refreshed daily') and geographic/currency context (USD market values), which annotations don't cover. Annotations already declare read-only/idempotent safety, so the remaining gaps (e.g., how stale a card is) are minor.
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 tight sentences, front-loaded with the trigger condition, then the data scope, then the exclusion. Every sentence carries distinct information with 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?
Given an output schema is present, the description needn't explain return shape; it covers trigger, prerequisites, data provenance, and exclusion. An agent has everything needed 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 coverage is 100% and the schema itself documents card_id format with examples. The description reinforces the dependency ('Requires a card id from search_cards') but adds no syntax or format detail beyond the schema, so baseline 3 applies.
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 precise verb+resource ('full current value of a specific card') and enumerates exactly what is returned: ungraded by condition and graded by company/grade. Distinguishes itself from siblings like search_cards and get_price_history by scope (full ladder vs. history vs. name search).
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 when to use it ('user wants the full current value') and when not to ('Do not use to search by name'), and names the prerequisite source for the card id (search_cards). Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_historyGet price historyARead-onlyIdempotentInspect
Use this when the user asks how a card's price has changed over weeks or months, or wants a trend for the raw or a PSA-graded series. Returns dated USD market values for the last 7 to 180 days. Requires a card id from search_cards. Do not use for forecasts.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| grade | No | PSA grade for a graded series, e.g. "10" or "9". Omit for the raw (ungraded) series. | |
| card_id | Yes | Catalog card id from search_cards. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | |
| name | Yes | |
| links | Yes | |
| points | Yes | Oldest first. Graded series only contain days with sales; gaps are normal. |
| series | Yes | "raw" or "PSA <grade>" |
| source | Yes | |
| card_id | Yes | |
| currency | Yes | |
| last_usd | Yes | |
| first_usd | Yes | |
| change_pct | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine context beyond that: the return payload is dated USD values confined to a 7-180 day window, and the grade parameter selects a raw vs graded series.
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 usage trigger, followed by return shape and the exclusion. No filler, no repetition of the tool title.
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 annotations covering safety and an output schema covering the response shape, the description only needs to cover usage, prerequisites and exclusions, which it does. Minor gap: it does not clarify units/frequency of the dated values or whether the series is daily granularity, though it implies coverage of the last 7-180 days.
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 67%, and the schema already documents grade ('PSA grade... omit for raw') and card_id. The description restates the 7-180 day bound already present as min/max and the raw/PSA distinction already in the schema, so it adds little parameter-level meaning beyond the structured fields.
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 (price history) and scope: dated USD market values for the last 7-180 days, for raw or PSA-graded series. It distinguishes the tool from a simple price lookup by framing it as a trend over weeks/months, though it never names the nearest sibling (get_card_prices) as the contrasting snapshot tool.
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 a clear trigger ('when the user asks how a card's price has changed over weeks or months, or wants a trend'), a negative boundary ('Do not use for forecasts'), and a prerequisite (requires a card id from search_cards). It stops short of naming an alternative tool, so the agent must infer what to use for snapshots or forecasts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_set_cardsCards in a set with pricesARead-onlyIdempotentInspect
Use this when the user wants the most valuable cards in a specific set or a priced checklist of a set. Requires a set id from list_sets. Returns raw and PSA 10 USD prices per card. Do not use for a single named card; use search_cards instead.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | ||
| sort | No | "value" = most valuable first; "number" = checklist order. | value |
| limit | No | ||
| set_id | Yes | Expansion id from list_sets. |
Output Schema
| Name | Required | Description |
|---|---|---|
| game | Yes | |
| cards | Yes | |
| count | Yes | |
| set_id | Yes | |
| set_name | Yes | |
| total_cards | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing the payload contents (raw and PSA 10 USD prices per card) and the provenance of the set_id input, though it says nothing about result volume or how the default limit interacts with a large set.
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 tightly packed sentences: use case first, prerequisite second, exclusion and alternative last. Every clause carries routing or prerequisite information, and there is 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?
An output schema exists, so return values need no elaboration, and the two required parameters are both addressed through the set_id prerequisite. For a read-only list tool with full annotation coverage, nothing an agent needs in order 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 description coverage is 50%: sort and set_id carry inline descriptions, while game is a self-evident enum and limit is bounded by default/minimum/maximum. The description reinforces the set_id provenance and the price output but adds no syntax, format, or interaction detail beyond what the schema already provides, so the baseline 3 is appropriate.
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 and resource — retrieving the cards in a given set along with their prices — and explicitly names the sibling tool it is not (search_cards). It also distinguishes its two primary use shapes (most valuable cards vs. full priced checklist), so an agent can separate it from get_card_prices, list_sets, and search_cards without opening a 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?
Usage conditions are explicit: use it for valuable cards in a set or a priced checklist, and do not use it for a single named card — call search_cards instead. The prerequisite (a set id obtained from list_sets) is also stated, leaving nothing to inference about when to reach for this tool vs. its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grading_roiIs this card worth grading?ARead-onlyIdempotentInspect
Use this when the user asks whether a card is worth grading, submitting to PSA/CGC/BGS/SGC/TAG, or what a PSA 10 adds. Returns raw vs PSA 9 vs PSA 10 market prices, the gem premium, net profit after grading fees per outcome, expected value by gem probability, the break-even gem rate, which company pays most, and a plain-language verdict. Requires a card id from search_cards. It does not assess the condition of the user's copy.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | Catalog card id from search_cards. | |
| grading_fee_usd | No | Grading fee to assume. Defaults to a $25 economy tier; the table also shows $50 and $150. |
Output Schema
| Name | Required | Description |
|---|---|---|
| card | Yes | |
| links | Yes | |
| verdict | Yes | |
| currency | Yes | |
| psa9_usd | Yes | |
| psa10_usd | Yes | |
| captured_on | Yes | |
| net_after_fee | Yes | |
| expected_value | Yes | |
| raw_market_usd | Yes | |
| assumed_fee_usd | Yes | |
| gem_premium_multiple | Yes | PSA 10 price ÷ raw price |
| top_grade_by_company | Yes | |
| break_even_gem_probability | Yes | Chance of a PSA 10 needed to break even at the assumed fee; null when grading never breaks even |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive behavior, so the safety profile is covered. The description adds genuinely useful scope context: the output is an economic model (per-outcome net profit, expected value, break-even gem rate) and it explicitly disclaims condition assessment, which prevents a false expectation. It does not mention fee-tier behavior beyond what the schema says, keeping it from a 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?
The trigger is front-loaded in the first clause, followed by the output inventory and the prerequisite/disclaimer. The long enumeration of return values partially overlaps the output schema, but each clause is informative 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?
With an output schema present, the description need not enumerate return values in detail; it instead supplies the missing decision context (when to call it, what card id source is needed, what it does not do). Combined with rich annotations and 100% schema coverage, an agent has everything required to select and invoke it 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 100% and both parameters are documented there, including the grading_fee default and comparison tiers. The description adds no syntax or format detail beyond restating that a card id from search_cards is required, so the schema is doing the heavy lifting.
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 decision verb ('whether a card is worth grading') plus the concrete artifact returned (raw vs PSA 9 vs PSA 10 prices, gem premium, break-even rate, verdict). It is clearly distinguishable from sibling list/price tools like get_card_prices and best_cards_to_grade because it is scoped to a single card's grading economics.
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 trigger ('when the user asks whether a card is worth grading, submitting to PSA/CGC/BGS/SGC/TAG, or what a PSA 10 adds') and an explicit exclusion ('does not assess the condition of the user's copy'), plus a prerequisite (card id from search_cards). It stops short of routing the agent between this and the bulk sibling best_cards_to_grade, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liquid_moversLiquid movers (rising cards that actually sell)ARead-onlyIdempotentInspect
Use this when the user wants cards that are both rising in price and easy to sell: recent gainers filtered to cards with at least 25 recorded sales a year and a raw price of at least $5, across all games and sports. Better than trending_cards for flipping or selling decisions. Do not use for a single named card.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Restrict to one game or sport; omit for all. | |
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | When this ranking was computed (ISO 8601) |
| cards | Yes | |
| count | Yes | |
| criteria | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so safety is covered. The description adds genuinely new behavioral context absent from structured fields: the fixed liquidity and price floors that define the result set. It does not discuss result ordering or pagination, but the output schema exists to cover returns.
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 use condition, with the qualifier threshold embedded inline. Dense but every clause carries selection-relevant information; 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 filtered-list tool with an output schema and full safety annotations, the description supplies the essential use case, the liquidity criteria, and the sibling routing. The one gap is the undocumented 'limit' parameter, which neither the schema nor the description explains.
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?
Only 50% of the schema carries descriptions: the 'game' enum is documented, but 'limit' (default 15, max 50) has no description anywhere. The description's thresholds ($5, 25 sales) are fixed filters rather than parameters, so they add scope context but not parameter meaning. A baseline 3 fits when the schema does half the work.
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 ('recent gainers' / cards rising in price) with precise scope conditions: at least 25 recorded sales/year and a raw price of at least $5, across all games and sports. It explicitly contrasts itself with the sibling trending_cards, so an agent can distinguish the two without opening 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?
Gives explicit when ('flipping or selling decisions'), an alternative plus its selection criterion ('Better than trending_cards'), and an explicit exclusion ('Do not use for a single named card'). This is the full when/when-not/alternative triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_setsList sets / expansionsARead-onlyIdempotentInspect
Use this to find the set id for a game or sport (e.g. "Evolving Skies", "2019 Panini Prizm") before calling get_set_cards, or when the user asks which sets exist. Newest first. Do not use to price a single card.
| Name | Required | Description | Default |
|---|---|---|---|
| game | Yes | ||
| limit | No | ||
| query | No | Optional substring to filter set names, e.g. "evolving" or "2019 prizm". |
Output Schema
| Name | Required | Description |
|---|---|---|
| game | Yes | |
| sets | Yes | |
| count | Yes | |
| links | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds a behavioral trait not in structured data — results are returned newest first — which matters for list ordering. It stops short of describing pagination or the limit cap.
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 short sentences, purpose front-loaded, with the exclusion clause last. Every sentence earns its place and no filler is present.
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?
An output schema exists so return values needn't be explained, and the description covers purpose, ordering, and the sibling relationship. It is nearly complete, with only minor gaps around how limit/paging behaves 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?
Schema description coverage is only 33%: the game enum and limit bound are structurally expressed but not explained, and only query carries a schema description. The description's inline examples ('Evolving Skies', '2019 Panini Prizm') illustrate the kind of values query accepts, adding marginal meaning, but it never mentions the game or limit 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?
States a specific verb and resource (list sets/expansions) and explicitly frames the purpose as finding a set id for a given game or sport. It also distinguishes itself from siblings by naming get_set_cards as the downstream call and clarifying it is not a pricing tool.
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 explicit when-to-use ('before calling get_set_cards', 'when the user asks which sets exist') and an explicit when-not ('Do not use to price a single card'), plus an alternative destination tool. Nothing 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.
search_cardsSearch card pricesARead-onlyIdempotentInspect
Use this first when the user names a trading card and wants its value, price, or whether to grade it. Searches 1.5M+ Pokémon, Magic, Yu-Gi-Oh!, One Piece, Lorcana, sports (baseball, basketball, football, hockey, soccer, wrestling, UFC and more) and entertainment cards by name, set, number and year, returning ungraded and PSA 10 market prices in USD from real sold listings. Returns card ids for get_card_prices, grading_roi and get_price_history. Do not use for sealed product, for cards you already have an id for, or for price prediction.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Restrict to one game or sport. Omit when unsure. | |
| limit | No | ||
| query | Yes | Card name, optionally with set, number or year. Examples: "Umbreon VMAX Evolving Skies", "1986 Fleer Jordan", "Charizard base set 4/102". | |
| set_id | No | Expansion id from list_sets, to search inside one set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| cards | Yes | |
| count | Yes | |
| query | Yes | |
| matched_on | Yes | The search term that produced the results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds substantive context beyond them: corpus size (1.5M+ cards across named games/sports), that prices come from 'real sold listings' in USD, and that both ungraded and PSA 10 values are returned. It slightly overlaps the output schema by naming returned card ids, but that framing is chaining guidance rather than redundant return documentation.
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 decision rule, then capability, then chaining and exclusions — every sentence carries information. The middle corpus-enumeration sentence is long but dense with disambiguating games/sports, so little could be cut without losing selection signal.
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 search tool with an output schema and full annotations, the description covers the remaining burden: when to reach for it first, what corpus it spans, what currency and grade tiers it returns, and which tools to chain into. Nothing needed 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 75% and the query parameter already carries examples ('Umbreon VMAX Evolving Skies', '1986 Fleer Jordan') and set_id points to list_sets. The description's 'by name, set, number and year' largely restates what the schema demonstrates and says nothing about the game enum or the limit bounds (default 10, max 50). Baseline 3 is appropriate.
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 cards) plus the exact intent it serves: 'when the user names a trading card and wants its value, price, or whether to grade it.' It also distinguishes itself from siblings by positioning as the entry point that feeds get_card_prices, grading_roi and get_price_history.
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 when-to-use ('use this first when the user names a trading card') and explicit when-not ('not for sealed product, for cards you already have an id for, or for price prediction'). The exclusions map directly to siblings like get_card_prices and get_set_cards, so an agent can route without guessing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_cardsTrending cards (30-day price movers)ARead-onlyIdempotentInspect
Use this when the user asks which cards are rising, hot, spiking, crashing or trending, in one game or across all games. Returns the biggest 30-day gainers (or drops) with the percentage change, measured on the PSA 10 price where the card has one and on the raw price otherwise; moves over 300% are excluded as bad data. Do not use for a single named card or for long-term history.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | Restrict to one game or sport; omit for all. | |
| limit | No | ||
| direction | No | "up" = biggest gainers, "down" = biggest drops. | up |
| min_market_usd | No | Ignore cards whose raw price is below this. |
Output Schema
| Name | Required | Description |
|---|---|---|
| game | Yes | |
| cards | Yes | |
| count | Yes | |
| direction | Yes | |
| window_days | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavioral context beyond them: the price basis (PSA 10 where available, raw otherwise), what the percentage is measured against, and the 300% data-quality cutoff that silently removes rows. It does not explain result ordering beyond 'biggest' or any paging behavior, keeping it out of 5 territory.
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 trigger, then output semantics, then exclusions. No filler and no repetition of the title.
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?
An output schema exists, so return-shape detail is unnecessary. What an agent still needs -- when to call it, what the numbers mean, what is filtered out, and when to look elsewhere -- is all present.
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 75% and already documents game, direction and min_market_usd separately. The description adds meaning the schema does not: the rank metric is PSA 10 when present and raw otherwise, which is what ties min_market_usd's raw-price filter and the 'biggest gainers' ordering together.
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 (cards), a specific qualification (30-day price movers), and the exact user intents it serves (rising, hot, spiking, crashing, trending). It is clearly distinguishable from siblings like get_price_history and liquid_movers without opening either 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?
Gives explicit trigger conditions plus two exclusions ('Do not use for a single named card or for long-term history'), which is stronger than most definitions. It stops short of naming the sibling tool to use instead in those cases, so it is not a full 5.
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.
9 tool updates
- First observed
best_cards_to_grade - First observed
get_card_prices - First observed
get_price_history - First observed
get_set_cards - First observed
grading_roi - First observed
liquid_movers - First observed
list_sets - First observed
search_cards - First observed
trending_cards
Related MCP Connectors
Neutral prices + PSA population for PSA-graded vintage Pokémon (WotC 1999–2003). Read-only.
Real sold prices, history & PSA population for graded Pokémon cards (EN/JP/CN). Knows nicknames.
MTG market data: search 114K+ cards, price signals, AI analysis. Free tier available.
Live TCG card and decklist prices for AI assistants. 22+ games, no account, ready-to-buy links.
Related MCP Servers
- AlicenseAqualityDmaintenanceReal-time sports card pricing, market analysis, arbitrage detection, grading ROI, investment advice, and player stats (NBA/NFL/MLB). 9 tools for AI agents helping collectors and investors.92MIT
- AlicenseBqualityCmaintenanceVision-guided Pokémon TCG card identification server that matches exact printings using visual evidence and marketplace data.401MIT
- AlicenseAqualityBmaintenanceOn-chain TCG price oracle for the LitecoinVM ecosystem. 6 tools: search 433K+ trading cards, 60-day price history, Merkle proof verification on LiteForge (Chain 4441), Monte Carlo simulation, and AI card grading via Qwen 2.5 VL.7Business Source 1.1
- FlicenseNot gradedqualityCmaintenanceEnables proving trading-card prices against the LitecoinVM chain with six read-only tools, no wallet, keys, or auth required.-
Glama MCP Gateway
Add one secure layer between your agents and this server.