CellarTracker Data Parser
This skill enables Claude to parse, query, and cross-reference CellarTracker data for cellar management, purchase decisions, and drinking window guidance.
Data Source
When MCP tools are available (Claude Code or Claude Desktop), use the following tools for live data:
search-cellar— query current inventory by wine name, region, varietal, producer, etc.drinking-recommendations— get maturity-aware suggestions for what to drinkcellar-stats— overview of cellar composition (counts, categories, regions)purchase-history— full buy history with pricing and retailer inforecent-deliveries— wines actually received in a date range, by delivery dateincoming-orders— wines ordered but not yet received, from the Pending tableget-wishlist— current wishlist with notes on why each wine was addedconsumption-history— wines you've opened, with tasting contexttasting-notes— your tasting notes and reviews with ratings and scoresbottle-details— individual bottles (cellar + consumed) by wine name, location, bin, size, or barcoderefresh-data— force a fresh pull from CellarTracker
For bulk or SQL-style analysis (Claude Code), MCP resources expose the same cached CSVs directly — no per-tool result caps, and no need to hunt for the cache path:
cellartracker://tables/<Table>— the full raw CSV for one of the 8 tables (e.g.cellartracker://tables/List),text/csv, refreshed via the same cache the tools usecellartracker://meta/cache— JSON with per-table freshness timestamps and server version, useful to check before treating a resource read as current
When MCP is not available (Claude.ai Projects), look for uploaded CSV files:
- Individual
*_latest.csvfiles (most common) - Timestamped files like
List_20260313_015000.csv - Or attached directly in conversation
Table Overview
Eight tables are exported from CellarTracker. Not all will always be available — work with what's present.
| Table | Primary Use | Key Columns |
|---|---|---|
| List | Current cellar inventory | Location, Bin, Price, Valuation, pro scores, drinking window |
| Notes | Tasting notes | Rating, TastingNotes, TastingDate, CScore |
| Purchase | Full buy history | StoreName, Price, PurchaseDate, Quantity, Remaining |
| Consumed | Drinking log | Consumed date, ConsumptionNote, context (who, food, occasion) |
| Availability | Maturity & pro scores | Drinking windows (multiple sources), all professional scores, maturity curves |
| Tag | Wishlists & custom lists | ListName, WinesNotes (why it's on the list) |
| Bottles | Individual bottle records | BottleState, Barcode, per-bottle notes, combines cellar + consumed; use bottle-details |
| Pending | In-transit orders | Same as Purchase but undelivered; use incoming-orders |
Table Priority for Common Tasks
- "What should I drink tonight?" — List (inventory + location) + Availability (maturity) + Notes (past impressions)
- "Evaluate this purchase" — List (redundancy check) + Tag (is it on wishlist?) + Purchase (have I bought this before?)
- "What have I been drinking?" — Consumed (patterns, frequency, notes)
- "Cellar overview / audit" — List (full inventory) + Availability (maturity and consumption pace)
- "How much have I spent?" — Purchase (complete spend history)
- "What's on the way / still coming?" — Pending (in-transit orders not yet received)
- "Where's this bottle? / What's in my wine fridge?" — Bottles via
bottle-details(per-bottle location, bin, barcode, state)
Finding a Specific Bottle (bottle-details)
The bottle-details tool queries the Bottles table — individual bottle records spanning both in-cellar and consumed bottles. Use it for barcode lookups, exact bin location, and per-bottle state, which the wine-level List/Availability tables can't reach.
- Barcode from a photo: if the user attaches a photo of a bottle or a barcode, read the barcode digits directly from the image (your own vision — no OCR tooling) and pass them as the
barcodefilter. - Natural-language location/bin ("what's in my wine fridge", "the bottom shelf of my cabinet"): CellarTracker
LocationandBinvalues are account-specific labels (e.g.Wine Fridge,Bar Cabinet,Drawer 2, or row-slot codes like1-3), not physical descriptions. Two-step it: callcellar-statswithgroup_by=locationorgroup_by=binfirst to learn the account's actual vocabulary, then callbottle-detailswith the exact value.bottle-detailsreturns this same pointer if a location/bin filter finds nothing. - Bin position is not derivable from the label. A code like
1-3means row 1, slot 3, but which row is physically "top" vs "bottom" depends on the user's actual setup — if position is ambiguous after discovery, ask rather than guessing.
Parsing Instructions
All CT export CSVs share these characteristics:
- UTF-8 encoded (charset detected from CellarTracker's response headers, falling back to windows-1252)
- Quoted fields, comma-delimited
- First row is always headers
iWineis the universal join key across all tables- NV (non-vintage) wines use vintage
1001
Reading CSVs
import csv
with open('List_latest.csv') as f:
reader = csv.DictReader(f)
rows = list(reader)
Key Join Pattern
Cross-reference tables using iWine:
# Example: Match inventory to availability/maturity data
list_by_wine = {row['iWine']: row for row in list_rows}
for avail_row in availability_rows:
cellar_row = list_by_wine.get(avail_row['iWine'])
if cellar_row:
# Now have both inventory location AND maturity data
Column Reference
For full column schemas for all 8 tables, see the schema reference file in references/schema.md.
Load the schema reference when you need to:
- Look up specific column names or meanings
- Decode professional reviewer abbreviations (WA, WS, AG, etc.)
- Understand maturity curve fields (Available, Bell, Linear, etc.)
- Parse drinking window source hierarchy
Professional Score Abbreviations
The most commonly relevant scores (full list in schema reference):
| Code | Reviewer | |---|---| | WA | Wine Advocate (Robert Parker / successors) | | WS | Wine Spectator | | AG | Antonio Galloni (Vinous) | | JR | Jancis Robinson | | WE | Wine Enthusiast | | BH | Burghound (Allen Meadows) | | JS | James Suckling | | CT | CellarTracker community average | | MY | User's personal score |
Score display rules:
- CT community scores are often decimals (e.g.,
88.7777...) — round to 1 decimal MYis the user's personal rating — always flag when present- Empty string = no score available, not zero
- In Availability table, scores also have
Web(link) andSort(numeric) variants
Drinking Window Logic
The Availability table provides the richest maturity data. Key fields:
BeginConsume/EndConsume: Consensus or personal drinking window (date format:M/D/YYYYorYYYY)Source: Where the window comes from —Personal,Community, or a professional reviewer nameAvailable: Bottle-count pacing index showing consumption progress within the listed window. Formula:(days into window / total window days) * (on hand + pending + consumed) - actual consumed. Measured in bottles; scales with inventory size. Negative = drinking faster than pace, or window not yet open; 0 = on pace; positive up to remaining bottles = roughly bottles left at window close. Above remaining bottles = window ended with bottles left (CT adds a growing +100 penalty). The same index computed on different aging curves appears inBell,Linear,Early,Late,Fast,TwinPeak,Simplecolumns, withAvailableshowing the type-assigned curve. See https://support.cellartracker.com/article/28-ready-to-drink-report for full details.Bell/Linear/Early/Late/Fast/TwinPeak/Simple: The same drinkability index computed on different aging curves;Availablealways equals the curve assigned by wine type.
Window source priority: Personal > Professional reviewer > Community. Maturity judgments must come from the BeginConsume/EndConsume dates and Source alone - never use Available thresholds (0.3/0.7/1.0 are meaningless for this data) to claim a wine is past peak or ready to drink. The listed window is already a weak signal; bottle-count pacing is all Available measures.
The List table also has BeginConsume/EndConsume as year integers — use these as quick reference, Availability for detail.
Location & Storage Mapping
The List table's Location and Bin fields map to physical storage. These are example locations — your CellarTracker locations will vary based on your setup:
| Location value | Physical space | Notes |
|---|---|---|
| Wine Fridge | Dual-zone fridge | Bin format: row-position (e.g., 1-3 = row 1, slot 3) |
| Bar Cabinet | Dark cabinet storage | Bin: Drawer 1, Drawer 2, Shelf Rack |
| Rack | Floor racks | Usually no bin specified |
| Boxed | Still in shipping box | Overflow / recently arrived |
| Cellar | Generic / unspecified | May need location update |
Common Query Patterns
Bottle Count & Capacity
# Active cellar size (exclude pending)
cellar_count = sum(int(row['Quantity']) for row in list_rows)
Report against your cellar capacity targets when known.
Category Breakdown
# Group by color, region, varietal, etc.
from collections import Counter
by_color = Counter(row['Color'] for row in list_rows)
by_region = Counter(row['Region'] for row in list_rows)
by_varietal = Counter(row['MasterVarietal'] for row in list_rows)
Redundancy Check (for purchase evaluator)
When checking if a new wine would be redundant:
- Same producer? — Flag
- Same varietal + region? — Count existing
- Same broad style (e.g., "California Chardonnay")? — Count existing
- On wishlist? — Note as positive signal
Drinking Priority
Combine List + Availability to find what should be opened soon:
EndConsumeyear <= current year - Window closing or closedBeginConsumeyear > current year - Window not yet open- Location =
Rack— Already in drink-soon storage - Check
Availableto see consumption pace within window only; never use it to decide if a wine is "ready" or "past peak"
Spend Analysis
Purchase table tracks all historical buys:
Price= cost per bottle in USDRemainingvsQuantityshows consumption rateStoreNametracks where bottles were sourcedOrderNumbersometimes has context (e.g., "Gift from Liz")
Wishlist Cross-Reference
Tag table with ListName = *Wishlist:
WinesNotesoften has context on why it was added (e.g., "Reddit QPR white burgundy", "Konstantin Baum best wines of 2025")- Use during purchase evaluation: if a wine is on the wishlist, it's a positive signal
Integration with Other Skills
wine-purchase-evaluator
When evaluating purchases, this skill provides:
- Redundancy data from inventory (same producer, varietal, region) — use
search-cellarMCP tool or List CSV - Wishlist match from wishlists — use
get-wishlistMCP tool or Tag CSV - Historical pricing from purchase history — use
purchase-historyMCP tool or Purchase CSV - Consumption velocity from consumption log — use Consumed CSV
General wine advisory
- "What should I drink with X?" — Query inventory for available bottles matching the pairing need, check maturity
- "Tell me about my cellar" — Full inventory analysis with category breakdown, maturity overview, valuation summary
- "What's past its peak?" — Find wines where Available > 1.0
Output Style
When presenting cellar data:
- Round CT community scores to 1 decimal place
- Format valuations as USD with 2 decimal places
- Use drinking window as year range (e.g., "2025-2030"), not full dates
- Always show the drinking window (BeginConsume/EndConsume) when available; never infer maturity from Available thresholds
- When listing inventory, include Location for actionability
- Keep tables tight — don't dump all columns, select what's relevant to the query
微信扫一扫