card_versions
Find all printings and alternate art variants of One Piece TCG cards by searching with card names or numbers.
Instructions
Show all printings/versions of a One Piece TCG card, including alternate art variants. Search by card name or card number.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| card_name | No | Card name to look up (e.g., "Monkey.D.Luffy") | |
| card_number | No | Card number to look up (e.g., "OP01-001") |
Implementation Reference
- src/tools/card-versions.ts:17-89 (handler)The implementation of the 'card_versions' tool handler, which processes the input, searches for cards by name or number, and formats the response.
async ({ card_name, card_number }) => { if (!card_name && !card_number) { return { isError: true, content: [ { type: 'text' as const, text: 'Provide either card_name or card_number to look up.', }, ], }; } let cards; if (card_number) { const card = getCardByNumber(card_number); if (!card) { return { isError: true, content: [ { type: 'text' as const, text: `Card "${card_number}" not found. Check the card number format (e.g., "OP01-001").`, }, ], }; } // Find all versions with the same name cards = getCardsByName(card.card_name); } else { cards = getCardsByName(card_name!); } if (cards.length === 0) { return { isError: true, content: [ { type: 'text' as const, text: `No cards found matching "${card_name || card_number}". Try search_cards for a broader search.`, }, ], }; } const name = cards[0].card_name; const regular = cards.filter((c) => !c.is_alternate_art); const altArt = cards.filter((c) => c.is_alternate_art); const lines = [ `# ${name} — ${cards.length} version${cards.length !== 1 ? 's' : ''}`, '', ]; if (regular.length > 0) { lines.push(`## Regular (${regular.length})`); lines.push(''); lines.push(regular.map((c) => formatCard(c)).join('\n\n---\n\n')); } if (altArt.length > 0) { lines.push(''); lines.push(`## Alternate Art (${altArt.length})`); lines.push(''); lines.push(altArt.map((c) => formatCard(c)).join('\n\n---\n\n')); } return { content: [{ type: 'text' as const, text: lines.join('\n') }], }; }, ); } - src/tools/card-versions.ts:12-16 (schema)Input schema definition for the 'card_versions' tool using zod.
inputSchema: { card_name: z.string().optional().describe('Card name to look up (e.g., "Monkey.D.Luffy")'), card_number: z.string().optional().describe('Card number to look up (e.g., "OP01-001")'), }, }, - src/tools/card-versions.ts:6-89 (registration)Tool registration function for 'card_versions'.
export function registerCardVersions(server: McpServer): void { server.registerTool( 'card_versions', { description: 'Show all printings/versions of a One Piece TCG card, including alternate art variants. Search by card name or card number.', inputSchema: { card_name: z.string().optional().describe('Card name to look up (e.g., "Monkey.D.Luffy")'), card_number: z.string().optional().describe('Card number to look up (e.g., "OP01-001")'), }, }, async ({ card_name, card_number }) => { if (!card_name && !card_number) { return { isError: true, content: [ { type: 'text' as const, text: 'Provide either card_name or card_number to look up.', }, ], }; } let cards; if (card_number) { const card = getCardByNumber(card_number); if (!card) { return { isError: true, content: [ { type: 'text' as const, text: `Card "${card_number}" not found. Check the card number format (e.g., "OP01-001").`, }, ], }; } // Find all versions with the same name cards = getCardsByName(card.card_name); } else { cards = getCardsByName(card_name!); } if (cards.length === 0) { return { isError: true, content: [ { type: 'text' as const, text: `No cards found matching "${card_name || card_number}". Try search_cards for a broader search.`, }, ], }; } const name = cards[0].card_name; const regular = cards.filter((c) => !c.is_alternate_art); const altArt = cards.filter((c) => c.is_alternate_art); const lines = [ `# ${name} — ${cards.length} version${cards.length !== 1 ? 's' : ''}`, '', ]; if (regular.length > 0) { lines.push(`## Regular (${regular.length})`); lines.push(''); lines.push(regular.map((c) => formatCard(c)).join('\n\n---\n\n')); } if (altArt.length > 0) { lines.push(''); lines.push(`## Alternate Art (${altArt.length})`); lines.push(''); lines.push(altArt.map((c) => formatCard(c)).join('\n\n---\n\n')); } return { content: [{ type: 'text' as const, text: lines.join('\n') }], }; }, ); }