Lorcana MCP
MCP server for searching, exploring, and aggregating Disney Lorcana cards.
Ask AI about Lorcana MCP
Powered by Claude Β· Grounded in docs
I know everything about Lorcana MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Lorcana MCP Server
An MCP server for searching and aggregating Disney Lorcana cards.
Startup behavior
On startup, the server fetches all cards from lorcanajson.org via a GET request to https://lorcanajson.org/files/current/en/allCards.json.
Cards are kept in-memory as a Python list for fast filtering. With ~2,700 cards this is lightweight and requires no external database. A local JSON file cache (LORCANA_CACHE_PATH, default cards.json) lets the server skip the API fetch on subsequent startups.
Startup data loading is controlled by:
LORCANA_REFRESH_ON_STARTUP:true: always fetch from API and repopulate storagefalse: use existing cache if available
LORCANA_SKIP_IF_DB_EXISTS:true(default): skip API fetch if the cache file already contains cardsfalse: fetch and repopulate
Quick start (no clone required)
The server is published to GHCR and the MCP Registry. Pull and run it directly:
docker pull ghcr.io/danielenricocahall/lorcana-mcp:latest
docker run --rm -i ghcr.io/danielenricocahall/lorcana-mcp:latest
To persist the card cache across container restarts, mount a volume:
docker run --rm -i \
-e LORCANA_CACHE_PATH=/data/cards.json \
-e LORCANA_SKIP_IF_DB_EXISTS=true \
-v lorcana_mcp_data:/data \
ghcr.io/danielenricocahall/lorcana-mcp:latest
Run locally (stdio MCP)
uv run python main.py
Docker
Build image
docker build -t lorcana-mcp:latest .
Run as stdio MCP server
docker run --rm -i lorcana-mcp:latest
Docker Compose
Start with compose
docker compose build
docker compose run --rm -T lorcana-mcp
Notes:
- No port is exposed; MCP communication is over stdio.
- Use a volume to persist the JSON cache across restarts.
Config
LORCANA_API(default:https://lorcanajson.org/files/current/en/allCards.json)LORCANA_CACHE_PATH(default:cards.json) β local file for caching fetched cardsLORCANA_HTTP_TIMEOUT_SECONDS(default:60)LORCANA_REFRESH_ON_STARTUP(falsedefault)LORCANA_SKIP_IF_DB_EXISTS(truedefault)
MCP client setup examples
Local process (Claude Desktop-style)
{
"mcpServers": {
"lorcana": {
"command": "uv",
"args": ["run", "python", "/absolute/path/to/lorcana-mcp/main.py"]
}
}
}
Published image β GHCR (Claude Desktop-style, no clone required)
{
"mcpServers": {
"lorcana": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/danielenricocahall/lorcana-mcp:latest"
]
}
}
}
Docker process (Claude Desktop-style, locally built)
{
"mcpServers": {
"lorcana": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"lorcana-mcp:latest"
]
}
}
}
Docker Compose process (Claude Desktop-style)
{
"mcpServers": {
"lorcana": {
"command": "docker",
"args": ["compose", "run", "--rm", "-T", "lorcana-mcp"]
}
}
}
Via the Claude CLI β published image (global, no clone required)
claude mcp add --scope user \
-- lorcana docker run --rm -i \
ghcr.io/danielenricocahall/lorcana-mcp:latest
Via the Claude CLI β locally built
claude mcp add --scope user \
-- lorcana docker run --rm -i lorcana-mcp:latest
Example questions
Once connected to an MCP client, you can ask natural language questions like:
Card lookup
- "Show me all cards named Moana"
- "What does the card Maui - Hero to All do?"
- "Find all legendary amber cards"
Deck building
- "What are the cheapest ruby characters with at least 3 strength?"
- "Show me inkable sapphire cards that cost 4 or less"
- "Find steel characters with 5 or more willpower"
- "What 3-lore characters exist in emerald?"
Keyword & ability search
- "How many Singer cards cost exactly 5?"
- "How many Evasive characters are there in the first set?"
- "How many ruby cards have Reckless?"
- "Find all cards with Ward in their text"
- "Show me Shift cards in amethyst"
Stats & aggregations
- "How many cards are in each set?"
- "What's the color distribution across all cards?"
- "What are the most common traits?"
- "Show me the ink curve β how many cards exist at each cost?"
- "How many legendary cards are inkable?"
Cross-filter queries
- "How many amber characters have 3 or more lore?"
- "Find cheap (cost 2-3) characters with high strength (4+) in steel"
- "How many cards in set 1 have Evasive and cost less than 4?"
Note: Keyword searches like
Evasive,Singer 5, orRecklessmatch against thefull_textfield and work reliably since keywords appear verbatim in card text.
MCP tools
search_cardsβ filter and retrieve card objectscount_cardsβ count cards matching a filter without returning full objectsget_card_by_idβ fetch a single card by its IDaggregate_cardsβ count cards grouped by any fieldink_curve_statsβ card counts by ink costtop_traitsβ most common traits across all cardscolor_distributionβ card count per colorrarity_breakdownβ card count per rarityset_distributionβ card count per setserver_statusβ startup metadata (card count, config)
