# tcgdata.dev — European TCG Prices

> European TCG card data, EUR guide prices and available daily history across six catalogues.

- name: dev.tcgdata/tcgdata
- version: 1.1.0
- connection class: unknown (unknown)
- trust: 58/100 flags: no-repository
- quality: 97/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/dev.tcgdata%2Ftcgdata
- tools: https://api.protogrid.dev/v1/servers/dev.tcgdata%2Ftcgdata/tools

**Not classified yet.** The remote endpoints have not been probed successfully, or the listing has nothing to connect to.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "tcgdata": {
      "type": "http",
      "url": "https://tcgdata.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${api_key}"
      }
    }
  }
}
```

Placeholders to fill: `${api_key}`.

## Trust

- hygiene: 80
- liveness: 17
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website -unreachable(2 failures) +updated-11d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 97/100 (good)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 86400000)

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 12 of 12 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 11 of 12 tools declare all four hints; missing: list_games (destructiveHint)
- pass `tools.token_cost`: about 2,688 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 12, about 2,688 tokens to load them all
- tool set hash: 398cee57d8b82335874a3c3e3274dece
- badge: [![protogrid quality](https://protogrid.dev/badge/dev.tcgdata/tcgdata.svg)](https://protogrid.dev/servers/dev.tcgdata/tcgdata)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://tcgdata.dev/mcp (streamable-http, auth none, reachable false, uptime30d 0.925)

## Packages

_none_

## Tools (12)

- `batch_prices`: Read EUR prices for mixed-game tcg_ IDs in one request. Starter/Growth allow 100 supplied IDs, Scale 200, before deduplication. Preserve unavailable_ids separately from successful results. Never split or retry automatically. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `get_card`: Read stored variant metadata and pricing availability without requiring a fresh quote. Includes game fields and image paths. Use get_card_image to return the artwork as an MCP image block. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `get_card_image`: Return verified WebP artwork as an MCP image block, with request metadata. Use the ID and query fields from images.small/large; catv_ source variants require their parent catalogue_card_id. Optional face selects a Magic face. Never pass an arbitrary image URL. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `get_card_prices`: Compatibility alias of get_prices. Read measured EUR prices for one exact variant, with observed_at and quote scope. Null is unknown, never zero. Product guides do not filter condition, language or edition. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `get_catalogue_card`: Read one Japanese source card, variants, provenance and explicit pricing references. Only use returned tcg_ price-variant IDs for price tools. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `get_price_history`: Read daily EUR observations for an approved stored variant, independently of its current price. UTC window ends on to or today. Read coverage and preserve missing_dates; never interpolate. Use earlier to dates for older windows. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `get_prices`: Read measured EUR prices for one exact variant, with observed_at and quote scope. Null is unknown, never zero. Product guides do not filter condition, language or edition. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `get_usage`: Read account request usage and limits, shared across keys and games. This call counts itself and cannot bypass exhausted limits. Check request metadata on existing results first. Published-plan upgrade suggestions link to the owner's account page and activate after Stripe confirms payment. Custom access requires a separate agreement and manual activation. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `list_catalogue_sets`: Search Japanese Pokémon source sets and paginate with the returned next_cursor. Returns catalogue set IDs to use with search_catalogue_cards. A set record is a catalogue membership, not proof of one physical printing. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `list_games`: List the six supported game identifiers and catalogue languages. Static API capabilities, no API request or account usage.
- `search_cards`: Find variant candidates across six games, even without a current price. Returns stable tcg_ IDs, identifying fields, pricing availability and next_cursor. Use view=full to compare printed_number and finish_details. Preserve separate printings; choose an exact candidate before requesting prices. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
- `search_catalogue_cards`: Search the price-independent Japanese Pokémon source catalogue, including cards with no price-variant match. cat_ identifies a source card; catv_ identifies a source variant. Use pricing.price_variants[].id (tcg_) for prices, never guess a bridge. One admitted API call consumes one shared account request, including admitted errors. No automatic retries.
