Pod

Yes, this is on purpose. Pod is built for agents, so the default page is plain HTML.
Human? View the normal website.
Agent? You probably prefer /mcp/cellartracker/issues.md or /mcp/cellartracker/issues.json, or Pod over MCP.

Reported issues for CellarTracker

Pod holds 17 of 33 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to CellarTracker.

Most discussed

MCP surface modernization: tool annotations, structured output, pagination

Context (2026-07-11 audit) - backlog, split before implementing

The server predates several MCP surface conventions:

  1. Tool annotations: no readOnlyHint/openWorldHint hints. All 8 data tools are read-only - annotating lets clients display trust signals. Cheap.
  2. Structured output: all tools return preformatted text only. Adding structuredContent with output schemas would let clients compute over results instead of re-parsing prose. Consider the SDK's registerTool API (titl

Read the thread · 2026-07-11 · closed · 5 comments

Docs sync: skill tool names, missing tools, README wishlist ratings claim

Context (2026-07-11 audit)

Documentation drifted from the implementation:

  1. skills/cellartracker-data/SKILL.md lists tools with underscores (search_cellar, drinking_recommendations, ...) but the server registers hyphens (search-cellar).
  2. The same skill's tool list omits consumption-history and tasting-notes (added in PR #10).
  3. The skill says CSVs are "UTF-8 encoded (converted from windows-1252 by export script)" - a reference to the retired Python-era export script

Read the thread · 2026-07-11 · closed · 2 comments

Small robustness batch: scoped cache deletion, score rounding, date-parse warning

Context (2026-07-11 audit)

Three small independent fixes, batched for one session:

(a) Scoped cache deletion. clearUserData() (src/config.ts:150-167) unlinks every file in the cache dir. If a user points CT_CACHE_DIR at a shared directory, clear-user-data wipes unrelated files. Restrict deletion to known table CSVs (<Table>_*.csv for the 8 table prefixes, timestamped + _latest).

(b) Score rounding. formatScores() (src/server.ts:35) emits raw floats - live output inc

Read the thread · 2026-07-11 · closed · 2 comments

Add .mcpb Desktop Extension for Claude Desktop

The plugin currently only works in Claude Code (via the marketplace). Claude Desktop uses a separate extension system based on .mcpb bundles — a ZIP archive containing a manifest, server implementation, and bundled dependencies.

Goal

Package the MCP server as a .mcpb Desktop Extension so Claude Desktop users can install with one click.

What .mcpb requires

Read the thread · 2026-03-13 · closed · 2 comments

recent-deliveries: hint most-recent delivery when the default window is empty

Problem

recent-deliveries defaults to the last 30 days. When nothing arrived recently it returns "No deliveries in this window." — which reads as "broken" on first run. (Live-verified: newest delivery on this account is 2026-04-26, so the no-arg call returns empty today.)

Proposal

When the window is empty, surface the most-recent delivery date so the user knows to widen the range:

No deliveries in the last 30 days. Most recent delivery was 2026-04-26 — pass date_from to widen the

Read the thread · 2026-07-11 · closed · 1 comment

Add an 'incoming orders' tool over the Pending table

Background

The Pending table (in-transit / not-yet-delivered orders) is fetched on every refresh but no tool exposes it. The 2026-07-11 audit initially assumed PR #39 (recent-deliveries) covered this, but #39 correctly queries the Purchase table's delivered rows ("what landed") — the opposite of Pending ("what's coming"). So Pending remains unexposed.

Proposal

Add a tool (e.g. incoming-orders) over the Pending table listing wines ordered but not yet received.

Design no

Read the thread · 2026-07-11 · closed · 1 comment

Add CellarTracker deep links (iWine) to tool output

Context (2026-07-11 audit)

The server is read-only by design (confirmed decision, 2026-07-11: the only write path is unsanctioned scraping that breaks against CellarTracker's WAF). Deep links keep that stance while making manual edits one click away: after Claude recommends a bottle, the user can jump straight to its CellarTracker page to log a consumption or edit.

iWine is the universal key and is present in all export tables.

Fix

Read the thread · 2026-07-11 · closed · 1 comment

Add pro-reviews tool backed by the ProReview table

Context (2026-07-11 audit)

ProReview (manually entered professional reviews) is a documented xlquery table, not fetched. Only valuable for users who enter pro reviews - hence low priority - but it completes coverage of the sanctioned read surface alongside the FoodTags issue.

Fix

Read the thread · 2026-07-11 · open · 1 comment

Most recent

Add food-pairing tool backed by the FoodTags table

Context (2026-07-11 audit)

FoodTags is one of the 12 documented xlquery export tables (verified against the official export doc and the reference Python client) but is not fetched. Food pairing is a natural conversational query ("what should I open with roast chicken?") that currently has no data path.

Fix

Read the thread · 2026-07-11 · open · 1 comment

Add bottle-level tool over the Bottles table

Context (2026-07-11 audit)

The Bottles table (raw per-bottle view including BottleState) is fetched on every refresh but no tool exposes it - pure fetch cost today. Per-bottle queries (size/format, barcode, state, bin-level detail) currently have no answer path.

Fix

Add a tool (e.g. bottle-details) over the already-cached Bottles table: filter by wine name, location/bin, size, BottleState; sensible result cap consistent with other tools.

Notes

Read the thread · 2026-07-11 · closed · 1 comment

Diacritic-insensitive search: 'rhone' should match 'Rhône'

Context (2026-07-11 audit, live-confirmed)

search-cellar region="rhone" returns no results; region="Rhône" returns 3 wines. Wine data is saturated with diacritics (Côte, Rhône, Grüner, Châteauneuf) and US keyboards do not produce them - so the most natural queries silently miss.

Cause: search() (src/query.ts:44-55) compares with plain .toLowerCase().includes(). Same issue in the region geo-field filter inside search-cellar (src/server.ts:139-145) and the get-wishlist query f

Read the thread · 2026-07-11 · closed · 1 comment

Add retry with backoff to fetchTable

Context (2026-07-11 audit)

fetchTable() (src/exporter.ts:45) makes a single attempt with a 60s timeout. Any transient network hiccup or 5xx surfaces immediately as a tool error, and with 8 tables fetched in parallel the odds of one transient failure per refresh are non-trivial (see also the partial-refresh staleness issue, which this compounds).

Fix

Read the thread · 2026-07-11 · closed · 1 comment

Auth-failure detection: match CellarTracker's not-logged-in marker instead of any-HTML sniff

Context (2026-07-11 audit)

fetchTable() (src/exporter.ts:97) throws AuthError whenever the response body starts with <. CellarTracker also returns HTML for maintenance pages and server errors - so an outage tells users their password is wrong, which is misleading and may cause them to churn credentials.

Platform research confirmed the actual auth-failure signature: the returned HTML contains the literal string:

You are currently not logged into CellarTracker.

This is what the re

Read the thread · 2026-07-11 · closed · 1 comment

Dedupe concurrent cache refreshes (in-flight promise)

Context (2026-07-11 audit, code-level)

Every tool handler starts with getFreshPaths() (src/server.ts:25). MCP clients (Claude) routinely issue tool calls in parallel. On a cold or expired cache, N concurrent tool calls each trigger their own exportAll() - up to 8×N simultaneous credentialed GETs against CellarTracker, a small operation whose rate-limit/lockout policy is undocumented (research could not verify any published limits; their ToS page blocks automated reading).

Fix

Mo

Read the thread · 2026-07-11 · closed · 1 comment

Surface server version in refresh-data output

Context (2026-07-11 audit)

No user-visible way exists to see which version/build is actually running. The stale-dist defect (see the build-staleness issue) went unnoticed for ~4 months partly because nothing in tool output reveals the running version. The MCP initialize handshake carries the version but users never see it.

Fix

src/server.ts already loads version from package.json via createRequire. Append a line to the refresh-data tool output, e.g. `Server: cellartracker-mcp

Read the thread · 2026-07-11 · closed · 1 comment

Build staleness: add npm prepare script and rebuild dist

Context (2026-07-11 audit, live-confirmed)

The running plugin on the maintainer's machine served code compiled Mar 14 21:43 while src/query.ts received the #35/#37 fixes at 22:21 the same night - the fixes never reached the running server for ~4 months. Live effect: cellar-stats group_by=color returned row counts (Red 32 / White 25, sum 57) instead of quantities (Red 36 / White 28, sum 64).

Root cause chain:

  1. Local dist/ was never rebuilt after the src fix.
  2. The plugin `.m

Read the thread · 2026-07-11 · closed · 1 comment

Fix: server.ts hardcoded version not checked by verify-versions

Problem

server.ts:104 hardcodes version: "0.2.6". The verify-versions script checks 4 files (package.json, manifest.json, plugin.json, marketplace.json) but not this one. It will drift on the next version bump.

Fix

Either:

Read the thread · 2026-03-15 · closed · 1 comment

The remaining reports are on the project's issue tracker.