# uk.co.leewinder/tcgdex (npm · @leewinder/mcp-tcgdex)

MCP server exposing the TCGdex Pokémon TCG API to LLM tools

- Trust score: 82/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `@leewinder/mcp-tcgdex`: 82/100 (this document), [markdown](https://verifymcp.io/servers/uk-co-leewinder-tcgdex/leewinder-mcp-tcgdex.md), [page](https://verifymcp.io/servers/uk-co-leewinder-tcgdex/leewinder-mcp-tcgdex)

## Channel facts

- Registry: `npm`
- Package: `@leewinder/mcp-tcgdex`
- Version: `1.0.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 0 of 8 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 31 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 62/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3258 tokens (~465/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the uk.co.leewinder/tcgdex MCP server?

uk.co.leewinder/tcgdex runs locally as an npm package, launched with npx -y @leewinder/mcp-tcgdex. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add uk-co-leewinder-tcgdex -- npx -y @leewinder/mcp-tcgdex
```

### Cursor

```json
{
  "mcpServers": {
    "uk-co-leewinder-tcgdex": {
      "command": "npx",
      "args": [
        "-y",
        "@leewinder/mcp-tcgdex"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "uk-co-leewinder-tcgdex": {
      "command": "npx",
      "args": [
        "-y",
        "@leewinder/mcp-tcgdex"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add uk-co-leewinder-tcgdex -- npx -y @leewinder/mcp-tcgdex
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "uk-co-leewinder-tcgdex": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@leewinder/mcp-tcgdex"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add uk-co-leewinder-tcgdex --command npx --arg -y --arg @leewinder/mcp-tcgdex
```

### Hermes

```yaml
mcp_servers:
  uk-co-leewinder-tcgdex:
    command: "npx"
    args: ["-y", "@leewinder/mcp-tcgdex"]
```

### Netclaw

```json
{
  "McpServers": {
    "uk-co-leewinder-tcgdex": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@leewinder/mcp-tcgdex"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add uk-co-leewinder-tcgdex -t stdio -c npx -a -y @leewinder/mcp-tcgdex
```

### Other

```json
{
  "mcpServers": {
    "uk-co-leewinder-tcgdex": {
      "command": "npx",
      "args": [
        "-y",
        "@leewinder/mcp-tcgdex"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 82, 0)

- [security] Stability: 0.97 → pass

### 2026-11-03 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 78, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-21 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (7)

### `list_card_field_values` (~279 tokens)

List the values a card `field` accepts in a language, which search_cards' filters take. `contains` filters them case-insensitively before paging; read further pages while `hasMore` is true. Values come from upstream as they are, so near-identical spellings of one artist can both appear.

Input parameters:

- `contains` (string): Case-insensitive substring, applied to the whole field before paging, e.g. 'arita' finds 'Mitsuhiro Arita'.
- `field` (string, required): The card field to list values for. 'type' is a Pokémon card's type (Fire, Water, …); 'energy' is an Energy card's class (Normal or Special); 'category' is the kind of card (Pokemon, Trainer or Energy…
- `language` (string): Catalogue language. Names, values and set lists are localised (the Asian catalogues have their own set ids), so look values up in it; prices are the same in every language.
- `page` (integer): Zero-indexed page. A page past the end is an empty success with `hasMore` false.
- `size` (integer): Results per page; only `hasMore` says whether more exist.

Output parameters:

- `hasMore` (boolean): True when at least one further page of results exists after this one. Request every result by incrementing 'page' until this is false. There is deliberately no total count: the length of the returned…
- `language` (string): The catalogue language this response was read in.
- `page` (integer): The zero-indexed page of results this response holds, whether it was requested or defaulted to.
- `size` (integer): The page size this response was built with, whether it was requested or defaulted to. It is the maximum number of results this page can hold, not the number it does hold — the last page holds fewer.
- `values` (array): One page of the field's accepted values, in the requested language, after any 'contains' filter. Pass a value back as listed when filtering a card search. Values come from the upstream data as-is and…

### `list_sets` (~278 tokens)

List a language's sets, each with its `id`, `name`, `platform`, `releaseDate`, `serie` and card counts — the values a `set` filter takes. Oldest first unless `sort` or `order` say otherwise: `order` 'desc' lists the newest first. `contains` and `platform` filter the whole catalogue before paging.

Input parameters:

- `contains` (string): Case-insensitive substring of the id or name, applied before paging.
- `language` (string): Catalogue language. Names, values and set lists are localised (the Asian catalogues have their own set ids), so look values up in it; prices are the same in every language.
- `order` (string): Whether the order runs ascending or descending — 'desc' on `releaseDate` puts the newest set first.
- `page` (integer): Zero-indexed page. A page past the end is an empty success with `hasMore` false.
- `platform` (string): 'TCG' for printed sets, 'TCG Pocket' for digital ones; applied before paging. Some catalogues hold only one.
- `size` (integer): Results per page; only `hasMore` says whether more exist.
- `sort` (string): `releaseDate` (default), `name` or `id`.

Output parameters:

- `hasMore` (boolean): True when at least one further page of results exists after this one. Request every result by incrementing 'page' until this is false. There is deliberately no total count: the length of the returned…
- `language` (string): The catalogue language this response was read in.
- `order` (string): 'asc' (default) or 'desc'; 'desc' by `releaseDate` lists the newest set first.
- `page` (integer): The zero-indexed page of results this response holds, whether it was requested or defaulted to.
- `sets` (array): One page of sets, in the requested language, after any 'contains' and 'platform' filters. Catalogues differ enormously in size — 220 sets in English against 2 in Polish — so a set missing here is mis…
- `size` (integer): The page size this response was built with, whether it was requested or defaulted to. It is the maximum number of results this page can hold, not the number it does hold — the last page holds fewer.
- `sort` (string): What the sets were ordered by, whether requested or defaulted to.

### `search_cards` (~951 tokens)

Search the card catalogue; every filter is optional and they combine with AND. Exact filters (`type`, `energy`, `category`, `trainer`, `stage`, `rarity`, `illustrator`, `variant`, `suffix`, `regulation`) take values from list_card_field_values and match whole, with letter case corrected to the catalogue's — unless two values differ only by case, like suffixes 'EX' and 'ex', which is an error naming both. An unknown value is an error too, so an empty page means real values matched nothing. `name` and `effect` match substrings; `pokemon` finds every card depicting a Pokémon; `attack` and `ability` text is checked over the first 300 matches of the other filters, as `textSearch` reports. Results come in a fixed `sort` order, and `detail` sets how much of each card is returned. Read further pages while `hasMore` is true. Prices come from get_card_pricing, not from cards.

Input parameters:

- `ability` (string): Case-insensitive text in an ability's name or effect. Checked over the first 300 matches of the other filters, which it needs at least one of; `textSearch` says whether that covered every match.
- `attack` (string): Case-insensitive text in an attack's name or effect. Checked over the first 300 matches of the other filters, which it needs at least one of; `textSearch` says whether that covered every match.
- `category` (string): Filter by the kind of card (Pokemon, Trainer or Energy).
- `detail` (string): 'summary' (default): identity, set, platform, rarity and images. 'full' adds rules text, legality and every searchable field; it costs about three times the bytes.
- `effect` (string): Case-insensitive substring of a Trainer or Energy card's effect text.
- `energy` (string): Filter by an Energy card's class (Normal or Special).
- `hp` (object): Filter by hit points. Both bounds inclusive.
- `illustrator` (string): Filter by the credited artist. Some artists appear under two spellings; list_card_field_values with `contains` shows both.
- `language` (string): Catalogue language. Names, values and set lists are localised (the Asian catalogues have their own set ids), so look values up in it; prices are the same in every language.
- `name` (string): Case-insensitive substring of the card name. Names repeat heavily; tell results apart by set and number.
- `order` (string): 'asc' (default) or 'desc'.
- `page` (integer): Zero-indexed page. A page past the end is an empty success with `hasMore` false.
- `platform` (string): 'TCG' for printed cards, 'TCG Pocket' for digital ones.
- `pokedex` (integer): Filter by a National Pokédex number. Matches any card depicting it.
- `pokemon` (string): A Pokémon's name in the request language, resolved to its Pokédex number (echoed back) to find every card depicting it.
- `rarity` (string): Filter by the print rarity ('None' for a card printed without one).
- `regulation` (string): Filter by the regulation mark letter.
- `retreat` (object): Filter by retreat cost, where 0 is free. Both bounds inclusive.
- `set` (string): Filter to one set by id ('sv04.5') or printed name ('Paldean Fates'), ignoring case; a name several sets share covers them all. list_sets lists both.
- `size` (integer): Results per page; only `hasMore` says whether more exist.
- `sort` (string): Order by `id` (default, unique, so pages never overlap) or `name`, alphabetically ignoring case. Cards cannot be ordered by release date.
- `stage` (string): Filter by a Pokémon's evolution stage (Basic, Stage1, …).
- `suffix` (string): Filter by the name suffix (EX, GX, V, ex, …). Pokémon TCG Pocket's ex cards are recorded as 'EX'.
- `trainer` (string): Filter by a Trainer card's subtype (Item, Supporter, …).
- `type` (string): Filter by a Pokémon card's type (Fire, Water, …). A dual-type card matches either type.
- `variant` (string): Filter by a printing the card exists in (normal, holo, reverse, firstEdition). True of most cards in several variants at once.

Output parameters:

- `cards` (array): One page of matching cards, in the requested language, in the shape 'detail' names. A summary carries the card's id, number, name, set, platform, rarity and images; a full card adds its rules text (a…
- `detail` (string): The level of detail this response was built with, whether it was requested or defaulted to. It decides which shape the cards below take.
- `hasMore` (boolean): True when at least one further page of results exists after this one. Request every result by incrementing 'page' until this is false. There is deliberately no total count: the length of the returned…
- `language` (string): The catalogue language this response was read in.
- `order` (string): The direction of the order, whether requested or defaulted to.
- `page` (integer): The zero-indexed page of results this response holds, whether it was requested or defaulted to.
- `pokemon` (object): What the `pokemon` filter resolved to. Absent when none was given.
- `size` (integer): The page size this response was built with, whether it was requested or defaulted to. It is the maximum number of results this page can hold, not the number it does hold — the last page holds fewer.
- `sort` (string): What the matches were ordered by, whether requested or defaulted to.
- `textSearch` (object): How much an `attack` or `ability` search covered. Absent when neither was given.

### `get_set` (~224 tokens)

Read one set by id or printed name: its series, release date, platform and card counts, with a page of its cards in printed order as checklist lines of `id`, `localId`, `name` and `rarity`. Call get_card for a card that matters. Legality is per card, from get_card: upstream's set-level flag is wrong for every current set.

Input parameters:

- `language` (string): Catalogue language. Names, values and set lists are localised (the Asian catalogues have their own set ids), so look values up in it; prices are the same in every language.
- `page` (integer): Zero-indexed page. A page past the end is an empty success with `hasMore` false.
- `set` (string, required): The set to read, as id ('sv04.5') or printed name ('Paldean Fates'), ignoring case; a name several sets share covers them all. list_sets lists both.
- `size` (integer): Results per page; only `hasMore` says whether more exist.

Output parameters:

- `cards` (array): One page of the set's cards, in printed order, in the requested language. Four sets in the English catalogue hold no cards at all, so an empty list here is an honest answer rather than a failure. Eac…
- `hasMore` (boolean): True when at least one further page of results exists after this one. Request every result by incrementing 'page' until this is false. There is deliberately no total count: the length of the returned…
- `language` (string): The catalogue language this response was read in.
- `page` (integer): The zero-indexed page of results this response holds, whether it was requested or defaulted to.
- `set` (object): What the set is: its identity, its series, when it was released and how large it is. Tournament legality is not given for a set, because it belongs to each card — one set can mix regulation marks, an…
- `size` (integer): The page size this response was built with, whether it was requested or defaulted to. It is the maximum number of results this page can hold, not the number it does hold — the last page holds fewer.

### `get_card` (~263 tokens)

Read one whole card by its `id`, or by its `set` and the number printed on it, `localId` — not both. The set may be an id or a printed name, ignoring case, and leading zeros in the number are optional. Returns the shape search_cards gives at `detail` 'full'. A card that does not exist is an error saying whether the set or the number was wrong.

Input parameters:

- `id` (string): Global card id, e.g. 'swsh3-136'. Give it alone; take it from a search_cards or get_set result rather than composing one.
- `language` (string): Catalogue language. Names, values and set lists are localised (the Asian catalogues have their own set ids), so look values up in it; prices are the same in every language.
- `localId` (string): The number printed on the card, e.g. '105'; leading zeros are optional. Give it with `set`, not with `id`.
- `set` (string): The card's set, given with `localId`: id ('sv04.5') or printed name ('Paldean Fates'), ignoring case; a name several sets share covers them all. list_sets lists both.

Output parameters:

- `card` (object): The whole card, in the requested language: every field you can search on, its rules text (attacks, abilities and effect), its weaknesses and resistances, its tournament legality and its image URLs. M…
- `language` (string): The catalogue language this response was read in.

### `get_card_pricing` (~493 tokens)

Price up to 50 cards in EUR, USD or GBP, from Cardmarket (EUR) and TCGplayer (USD) side by side, with one total per market — never blended, since one is a trend and the other a market price. Name each card by `id`, or by `set` and `localId`, with an optional `variant` and `quantity`. Each line's `status` is `priced`; `unpriced`; `ambiguous`, when no `variant` was named and the copy held is unclear — name one of its `variants`; or `unavailable`, when the card could not be read or the line is malformed, which never fails the call. A missing price gives a `reason`: `no_listing`, `variant_unpriced`, `variant_not_printed`, `separate_product` (sold as a product of its own and unpriced here, like Base Set's 1st Edition or a Poké Ball reverse), `window_unavailable`, `platform_unpriced`, `unavailable` or `unrecognised_shape`. `approximateVariant` marks a price that may cover more than the printing named, and `separatelyListedPrintings` counts printings sold separately. Each price has its native `amount` and a `convertedAmount` at the ECB rate in `exchangeRates.rates`. A total is `complete` only when every line is priced. `warnings` flag markets more than 10× apart for a printing, and stale rates. Prices are for one copy in unspecified condition, before fees, and the same in every language.

Input parameters:

- `basis` (string): Which figure to read. 'market' is TCGplayer's market price and Cardmarket's trend; 'low' the lowest listing; the day averages are Cardmarket's alone. TCGplayer gives `window_unavailable` for an avera…
- `cards` (array, required): One line per card, named the way get_card names one. A bad line is reported as unavailable; it never fails the call.
- `currency` (string, required): The currency to convert to. Each price is also given in its market's own currency.
- `language` (string): Catalogue language. Names, values and set lists are localised (the Asian catalogues have their own set ids), so look values up in it; prices are the same in every language.

Output parameters:

- `basis` (string): The figure read, whether requested or defaulted to.
- `currency` (string): The requested currency, echoed.
- `exchangeRates`: The exchange rates every converted amount here used. Null when nothing needed converting, or when no rates could be fetched.
- `language` (string): The catalogue language this response was read in.
- `lines` (array): One entry per requested line, in the order asked.
- `totals` (object): One total per market, never blended into one: the two markets measure prices differently, and a line priced in one market may be unpriced in the other.
- `warnings` (array): Anything that limits how far these numbers can be relied on, such as exchange rates that are stale or unavailable, or prices the two markets put more than 10× apart. Empty when nothing does.

### `rank_card_prices` (~567 tokens)

Rank the cards matching `name`, `pokemon`, `pokedex`, `set` or `rarity` — at least one, matched as in search_cards — by one market's price, most valuable first unless `order` is 'asc'. Each card is ranked once, by its highest-priced printing in `rankMarket`: a row in `cards` gives that `variant`, its `price`, and the other market's price as `otherMarket`. Upstream cannot sort by price, so the first 300 matches are read; `truncated` says more matched, and `coverage` accounts for every card read, counting unpriced ones by the same `reason` codes get_card_pricing uses. `separatelyListedPrintings` counts printings sold separately and not ranked. A row's `warnings` flag markets more than 10× apart; the order still follows `rankMarket`. Prices show the native `amount` and a `convertedAmount` at the rate in `exchangeRates.rates`, for one copy in unspecified condition, before fees.

Input parameters:

- `basis` (string): Which figure to rank by. 'market' is TCGplayer's market price and Cardmarket's trend; 'low' the lowest listing; the day averages are Cardmarket's alone. So an average needs `rankMarket` 'cardmarket'.
- `currency` (string, required): The currency to show prices in; it never changes the order. Each price is also given in its market's own currency.
- `language` (string): Catalogue language. Names, values and set lists are localised (the Asian catalogues have their own set ids), so look values up in it; prices are the same in every language.
- `limit` (integer): How many rows to return; fewer when fewer cards have a price.
- `name` (string): Case-insensitive substring of the card name. Names repeat heavily; tell results apart by set and number.
- `order` (string): 'desc' (default) puts the most valuable first.
- `pokedex` (integer): Filter by a National Pokédex number. Matches any card depicting it.
- `pokemon` (string): A Pokémon's name in the request language, resolved to its Pokédex number (echoed back) to find every card depicting it.
- `rankMarket` (string, required): The one market whose price orders the ranking; each row shows the other's too.
- `rarity` (string): Filter by the print rarity ('None' for a card printed without one).
- `set` (string): Filter to one set by id ('sv04.5') or printed name ('Paldean Fates'), ignoring case; a name several sets share covers them all. list_sets lists both.

Output parameters:

- `basis` (string): The figure ranked by, whether requested or defaulted to.
- `cards` (array): The ranked cards, best first in the order asked. Cards with no price in the ranked market are not listed — 'coverage' counts them.
- `coverage` (object): How much of what matched the ranking actually covers. Nothing is left out without being counted here.
- `currency` (string): The requested currency, echoed.
- `exchangeRates`: The exchange rates every converted amount here used. Null when nothing needed converting, or when no rates could be fetched.
- `language` (string): The catalogue language this response was read in.
- `limit` (integer): The most rows this response could hold, whether requested or defaulted to.
- `order` (string): The order used, whether requested or defaulted to.
- `pokemon` (object): What the `pokemon` filter resolved to. Absent when none was given.
- `rankMarket` (string): The market ranked by, echoed.
- `truncated` (boolean): True when more than 300 cards matched, so only the first 300 in the catalogue's own order were considered and a card beyond them may outrank everything here. Narrow the filters until this is false to…
- `warnings` (array): Anything that limits how far these numbers can be relied on, such as exchange rates that are stale or unavailable, or prices the two markets put more than 10× apart. Empty when nothing does.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/uk-co-leewinder-tcgdex/leewinder-mcp-tcgdex#diagnostics

## Score history

- 2026-11-05: 82
- 2026-11-04: 82
- 2026-11-03: 82
- 2026-11-02: 81
- 2026-11-01: 81
- 2026-10-31: 80
- 2026-10-30: 80
- 2026-10-29: 79
- 2026-10-28: 79
- 2026-10-27: 78
- 2026-10-26: 78
- 2026-10-25: 78
- 2026-10-24: 77
- 2026-10-23: 77
- 2026-10-22: 76
- 2026-10-21: 76
- 2026-10-20: 75
- 2026-10-19: 75
- 2026-10-18: 74
- 2026-10-17: 74
- 2026-10-16: 73
- 2026-10-15: 73
- 2026-10-14: 72
- 2026-10-13: 68
- 2026-10-12: 68
- 2026-10-11: 68
- 2026-10-04: 28

## Common questions

### What is the uk.co.leewinder/tcgdex MCP server?

uk.co.leewinder/tcgdex is an MCP server listed in the public MCP registry as uk.co.leewinder/tcgdex. MCP server exposing the TCGdex Pokémon TCG API to LLM tools. This page covers its npm package (@leewinder/mcp-tcgdex).

### Is the uk.co.leewinder/tcgdex MCP server safe to use?

uk.co.leewinder/tcgdex scores 82 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the uk.co.leewinder/tcgdex MCP server expose?

uk.co.leewinder/tcgdex exposes 7 tools: list_card_field_values, list_sets, search_cards, get_set, get_card, and 2 more. Their descriptions and schemas cost roughly 3,055 tokens of context every time the server is loaded.

### Is the uk.co.leewinder/tcgdex MCP server still maintained?

uk.co.leewinder/tcgdex is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the uk.co.leewinder/tcgdex MCP server under?

uk.co.leewinder/tcgdex declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/@leewinder/mcp-tcgdex
- Socket report: https://socket.dev/npm/package/@leewinder/mcp-tcgdex
- Repository: https://gitlab.com/lee.winder/tcgdex-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/uk-co-leewinder-tcgdex/leewinder-mcp-tcgdex.xml
- Changelog JSON feed: https://verifymcp.io/servers/uk-co-leewinder-tcgdex/leewinder-mcp-tcgdex.json
- HTML version of this page: https://verifymcp.io/servers/uk-co-leewinder-tcgdex/leewinder-mcp-tcgdex
