Copy-and-paste examples for integrating CardMind into Python scripts, JavaScript applications, and AI tools via MCP. Replace cm_live_YOUR_KEY with your actual API key throughout.
These examples use the requests library. Install it with pip install requests.
python
import requests
API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(
f"{BASE_URL}/api/cards/search",
headers=headers,
params={"q": "lightning bolt", "limit": 5},
)
response.raise_for_status()
data = response.json()["data"]
for card in data:
print(f"{card['name']} ({card['set'].upper()}) — ${card.get('price_usd', 'N/A')}")python
import requests
API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"
# Lightning Bolt (Magic 2010)
CARD_ID = "e3285e6b-3e79-4d7c-bf96-d920f973b122"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(
f"{BASE_URL}/api/cards/{CARD_ID}",
headers=headers,
)
response.raise_for_status()
result = response.json()["data"]
card = result["card"]
history = result["price_history"]
print(f"Card: {card['name']}")
print(f"Current price: ${card.get('price_usd', 'N/A')}")
print(f"Price history entries: {len(history)}")python
import requests
API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(
f"{BASE_URL}/api/prices/movers",
headers=headers,
params={"period": "7d", "limit": 5},
)
response.raise_for_status()
movers = response.json()["data"]
print("Top gainers this week:")
for card in movers["gainers"]:
pct = card.get("change_pct", 0)
print(f" {card['name']} +{pct:.1f}%")
print("\nTop losers this week:")
for card in movers["losers"]:
pct = card.get("change_pct", 0)
print(f" {card['name']} {pct:.1f}%")python
import requests
API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
card_names = ["Black Lotus", "Lightning Bolt", "Brainstorm", "Force of Will"]
response = requests.post(
f"{BASE_URL}/api/cards/bulk-lookup",
headers=headers,
json={"names": card_names},
)
response.raise_for_status()
cards = response.json()["data"]
print(f"Found {len(cards)} of {len(card_names)} cards:")
for card in cards:
print(f" {card['name']} — ${card.get('price_usd', 'N/A')}")python
import requests
API_KEY = "cm_live_YOUR_KEY"
BASE_URL = "https://api.cardmind.app"
headers = {"Authorization": f"Bearer {API_KEY}"}
response = requests.get(
f"{BASE_URL}/api/signals/recent",
headers=headers,
params={"type": "BUY", "limit": 10},
)
response.raise_for_status()
signals = response.json()["data"]
for signal in signals:
print(
f"[{signal['signal_type']}] {signal['card_name']} — "
f"{signal['reason'][:60]}..."
)These examples use the native fetch API — available in Node.js 18+, browsers, and edge runtimes with no dependencies.
javascript
const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'
const params = new URLSearchParams({ q: 'lightning bolt', limit: '5' })
const response = await fetch(`${BASE_URL}/api/cards/search?${params}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
})
if (!response.ok) {
throw new Error(`CardMind API error: ${response.status}`)
}
const { data } = await response.json()
for (const card of data) {
console.log(`${card.name} (${card.set.toUpperCase()}) — $${card.price_usd ?? 'N/A'}`)
}javascript
const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'
// Lightning Bolt (Magic 2010)
const CARD_ID = 'e3285e6b-3e79-4d7c-bf96-d920f973b122'
const response = await fetch(`${BASE_URL}/api/cards/${CARD_ID}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
})
if (!response.ok) throw new Error(`API error ${response.status}`)
const { data } = await response.json()
console.log('Card:', data.card.name)
console.log('Price:', data.card.price_usd)
console.log('History entries:', data.price_history.length)javascript
const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'
const params = new URLSearchParams({ period: '7d', limit: '5' })
const response = await fetch(`${BASE_URL}/api/prices/movers?${params}`, {
headers: { Authorization: `Bearer ${API_KEY}` },
})
if (!response.ok) throw new Error(`API error ${response.status}`)
const { data } = await response.json()
console.log('Top gainers:')
data.gainers.forEach(card => {
console.log(` ${card.name} +${card.change_pct.toFixed(1)}%`)
})
console.log('Top losers:')
data.losers.forEach(card => {
console.log(` ${card.name} ${card.change_pct.toFixed(1)}%`)
})javascript
const API_KEY = 'cm_live_YOUR_KEY'
const BASE_URL = 'https://api.cardmind.app'
const cardNames = ['Black Lotus', 'Lightning Bolt', 'Brainstorm', 'Force of Will']
const response = await fetch(`${BASE_URL}/api/cards/bulk-lookup`, {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ names: cardNames }),
})
if (!response.ok) throw new Error(`API error ${response.status}`)
const { data } = await response.json()
console.log(`Found ${data.length} of ${cardNames.length} cards`)
data.forEach(card => {
console.log(` ${card.name} — $${card.price_usd ?? 'N/A'}`)
})typescript
interface ApiResponse<T> {
data: T
error: { message: string; code: string } | null
}
interface Card {
id: string
name: string
set: string
price_usd: string | null
price_usd_foil: string | null
image_uri: string
}
async function searchCards(
query: string,
options: { set?: string; format?: string; limit?: number } = {}
): Promise<Card[]> {
const API_KEY = process.env.CARDMIND_API_KEY
if (!API_KEY) throw new Error('CARDMIND_API_KEY env var not set')
const params = new URLSearchParams({ q: query })
if (options.set) params.set('set', options.set)
if (options.format) params.set('format', options.format)
if (options.limit) params.set('limit', String(options.limit))
const response = await fetch(
`https://api.cardmind.app/api/cards/search?${params}`,
{ headers: { Authorization: `Bearer ${API_KEY}` } }
)
const json: ApiResponse<Card[]> = await response.json()
if (!response.ok || json.error) {
throw new Error(json.error?.message ?? `HTTP ${response.status}`)
}
return json.data
}
// Usage
const bolts = await searchCards('lightning bolt', { format: 'modern', limit: 10 })
console.log(`Found ${bolts.length} Lightning Bolt printings legal in Modern`)Get natural-language access to CardMind directly inside Claude Desktop. Once configured, you can ask Claude to search cards, analyze card market data, and track market signals without writing any code.
Open your claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json) and add the cardmind entry:
json
{
"mcpServers": {
"cardmind": {
"url": "https://api.cardmind.app/mcp",
"headers": {
"Authorization": "Bearer cm_live_YOUR_KEY"
}
}
}
}Quit and reopen Claude Desktop to load the updated config. You should see CardMind listed under connected tools.
“What are the top price gainers this week in Magic: The Gathering?”
“Search CardMind for Jace, the Mind Sculptor and show me its price history.”
“Are there any BUY signals on the market right now?”
“Analyze Black Lotus for market potential.”
MCP access requires a Premium API key. See MCP Protocol → for the full tool reference and additional MCP client setup instructions.