CellarTracker MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CellarTracker MCPWhat wines should I open this month?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CellarTracker MCP
Disclaimer: This is a community-maintained project with no affiliation to, or endorsement by, CellarTracker! LLC. It uses CellarTracker's self-serve data export on your own account's behalf.
Connect Claude to your CellarTracker wine cellar. Query your inventory, get drinking recommendations, and analyze purchases and drinking history, all through natural conversation. No need to refresh your inventory, or share your tasting notes. Claude pulls them directly from your CellarTracker account.
Install
Two install methods for different Claude interfaces. You may need one or both:
Desktop Extension (.mcpb) | Claude Code Plugin | |
Works in | Chat (Desktop), Cowork | Cowork, Code |
Tools | 11 cellar tools | All 13 tools (includes |
Skills | No | Yes |
Setup | One-click download | Marketplace or CLI |
Credentials | Prompted on install, stored in OS keychain | Run |
Which do I need?
Chat (Desktop) only → Desktop Extension
Code only → Claude Code Plugin
Cowork only → Either works (plugin adds skills)
Full coverage → Install both
Installing both is safe. The extension covers Chat (Desktop); the plugin covers Cowork and Code. In Cowork, both are accessible without conflict. Note, there is no coverage for claude.ai web chat sessions.
Desktop Extension (Chat & Cowork)
One-click install. No terminal needed.
Download
cellartracker-mcp.mcpbfrom the latest releaseDouble-click the file to install in Claude Desktop
Enter your CellarTracker username and password when prompted
Start chatting (e.g. "What wines should I open this month?")
Credentials are stored in your OS keychain (macOS Keychain / Windows Credential Manager). To update them later, go to Customize > Connectors > CellarTracker.
Claude Code Plugin (Cowork & Code)
Full experience with tools and skills.
Via Desktop app
Open the Code tab > Customize > Browse plugins > Personal > + > Add marketplace from GitHub > enter
slavins-co/cellartracker-mcpFind "CellarTracker MCP" in the plugin browser and click Install
Set up credentials immediately: In a new Code or Cowork session, say "Set up my CellarTracker credentials"
Via terminal
Step 1: Add the marketplace
/plugin marketplace add slavins-co/cellartracker-mcpStep 2: Install the plugin
/plugin install cellartracker-mcp@cellartracker-mcpStep 3: Set up credentials immediately — say:
"Set up my CellarTracker credentials"
Claude will verify and save them. No restart needed. Without credentials, tools will return errors and skills won't have data to work with.
Alternative: Set CT_USERNAME and CT_PASSWORD as environment variables in your shell profile.
Credentials are stored only on your machine. When using the setup tool, they pass through Anthropic's servers as part of the conversation. They are sent to CellarTracker's servers for authentication.
Related MCP server: Strava MCP Server
What you can do
Tool | What it does |
| Connect your CellarTracker account (Claude Code plugin only — Desktop Extension handles credentials during install) |
| Find wines by name, color, region, varietal, location, or vintage |
| Wines to open now, sorted by drinking window urgency |
| Collection overview — totals and breakdowns by any dimension |
| Spending analysis by store, date range, or wine |
| Wines actually received in a date range, by delivery date (not order date) |
| Wines ordered but not yet received — what's on the way |
| Your wishlist with notes on why each wine was added and a max price |
| Wines you've opened — by name, color, or date range |
| Your tasting notes and reviews with ratings and scores |
| Find individual bottles by name, location, bin, size, or barcode — cellar and consumed |
| Force a fresh pull (auto-refreshes every 24 hours) |
| Remove stored credentials and cached data from this machine (Claude Code plugin only) |
Every tool returns structured JSON alongside its readable text, so clients can compute over results directly. List tools support offset pagination past the 25-per-page cap.
Resources
For bulk analysis without per-tool result caps, the server also exposes the cached table exports as MCP resources: cellartracker://tables/<Table> (raw CSV, one per table — List, Notes, Purchase, Consumed, Availability, Tag, Bottles, Pending) and cellartracker://meta/cache (JSON freshness timestamps per table plus the server version, readable without credentials).
Included skills
Note: Skills are available in Cowork and Code modes via the Claude Code plugin. Chat mode (Desktop Extension) provides tools only.
cellartracker-data — Teaches Claude to interpret CellarTracker data: table relationships, score abbreviations, drinking windows, and query routing.
wine-purchase-evaluator — Framework for evaluating wine purchases. Two-score system (Quality + Personal Fit) with BUY/CONSIDER/PASS verdicts. Checks your cellar for redundancy, verifies pricing, and applies drinking window discipline.
To customize the evaluator for your preferences, copy skills/wine-purchase-evaluator/references/preferences-example.md to preferences.md in the same directory and edit it.
How it works
CellarTracker has no official API. This server uses their CSV export endpoint, which authenticates with your username and password over HTTPS. Data is cached locally and auto-refreshes every 24 hours.
The server can only access your data — inventory, purchases, notes, and wishlist. It cannot search CellarTracker's full wine database.
Security & credentials
CellarTracker API limitations
CellarTracker has no OAuth, API keys, or scoped tokens. Authentication requires your actual account username and password, sent as URL query parameters over HTTPS. While encrypted on the wire, query parameters are routinely logged in server-side access logs on CellarTracker's infrastructure. There is no way to create read-only or limited-access credentials, therefore, this MCP only performs read operations, but it authenticates with your full account.
How this server protects your credentials
Protection | Details |
File permissions | Config directory |
Error stripping | Network errors are caught and re-thrown without the URL, which contains credentials |
No logging | Credentials never appear in stdout, stderr, or error messages |
OS keychain | Desktop Extension ( |
Env var support | Set |
The Claude Code plugin stores credentials as plaintext in ~/.config/cellartracker-mcp/.env. We evaluated OS keychain integration (#22) and decided against it. The native dependency cost (node-gyp / keytar) outweighs the security benefit for wine cellar data, and the Desktop Extension path already uses the OS keychain.
Recommendations
Use a unique password for CellarTracker. Do not reuse a password from other services.
Prefer environment variables over the
setup-credentialstool if you want to avoid persisting credentials to disk.Pin to a specific version in your MCP config (e.g.,
cellartracker-mcp@0.5.0) rather than relying on@latest.
Development
For contributors or anyone who wants to run from source:
git clone https://github.com/slavins-co/cellartracker-mcp.git
cd cellartracker-mcp
npm install
npm run build
# Set credentials
cp .env.example .env
# Edit .env with your CT login
# Test as Claude Code plugin
claude --plugin-dir .npx local-resolution footgun
If you run npx -y cellartracker-mcp (e.g. via an MCP client config) with your working directory inside a local checkout of this repo, npm can resolve the bare package name to that local folder instead of downloading it from the registry — so whatever is on disk in dist/ gets served, not the published version. npm install/npm ci now runs a prepare script that rebuilds dist/ automatically, so a fresh clone is always current. But if you edit src/ directly and don't run npm install or npm run build again, dist/ will silently go stale — the server keeps running the old compiled code with no error. If output looks wrong while developing, rebuild (npm run build) before assuming the bug is in src/.
AI Disclosure
This project was developed with AI assistance.
Trademark Disclosure
This project is in no way affiliated or connected to CellarTracker! LLC. "CellarTracker" is a trademark of CellarTracker! LLC.
License
MIT
Available Tools
11 toolsbottle-detailsARead-only
Look up individual bottles from the Bottles table — the per-bottle view spanning both in-cellar and consumed bottles, with barcode, exact location/bin, and size. Filter by wine name, location, bin, size, or barcode; set state to 'cellar' (default 'all' includes consumed). If the user attaches a photo of a bottle or its barcode, read the barcode digits from the image and pass them as the barcode filter. Location and Bin are account-specific labels, not physical descriptions — if a location/bin filter finds nothing, use cellar-stats with group_by=location or group_by=bin to see the actual values in use. Returns up to max_results per page (default 25) — pass offset to page through more.
| Name | Required | Description | Default |
|---|---|---|---|
| bin | No | Specific bin/position (e.g. 'Drawer 2', '1-3') | |
| size | No | Bottle format (e.g. '750ml', '1500ml') | |
| query | No | Wine name search term | |
| state | No | Which bottles: 'cellar', 'consumed', or 'all' (default) | |
| offset | No | Result offset for pagination (default 0) | |
| barcode | No | Bottle barcode — e.g. read from a photo | |
| location | No | Storage location (e.g. 'Wine Fridge') | |
| max_results | No | Maximum results (default 25) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| offset | Yes | |
| bottles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds behavioral details: pagination (max_results, offset), account-specific labels, and default state. This adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: first sentence summarizes purpose, then details filtering, usage tips, and pagination. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 optional parameters and an output schema, the description covers filters, pagination, error handling (fallback to cellar-stats), and photo-reading hint. No gaps for intended use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 8 parameters (100%). The description adds context: barcode should be read from photo, location/bin are account-specific, state defaults to 'all' if not specified. It also explains pagination parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it looks up individual bottles from the Bottles table, covering in-cellar and consumed bottles with specific attributes like barcode, location/bin, and size. It distinguishes itself from sibling tools like 'search-cellar' or 'cellar-stats' by focusing on a per-bottle view with detailed filters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: when a user needs a per-bottle lookup with specific filters. It also tells what to do if filters find nothing (use cellar-stats with group_by) and how to handle barcode input from photos.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cellar-statsARead-only
Get cellar statistics: total bottles, value, unique wines, and optional breakdowns. Valid group_by options: color, country, region, varietal, location, bin, category.
| Name | Required | Description | Default |
|---|---|---|---|
| group_by | No | Breakdown dimension |
Output Schema
| Name | Required | Description |
|---|---|---|
| breakdown | No | |
| avgPerWine | Yes | |
| totalValue | Yes | |
| uniqueWines | Yes | |
| totalBottles | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds specific breakdown dimensions and output items, consistent with safe read operation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose and outputs, second lists valid options. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description covers all necessary aspects: core statistics and breakdown options. Simple tool with one optional parameter, fully specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'group_by' with schema description 'Breakdown dimension'. Tool description enriches it by listing valid values, adding concrete guidance beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Get cellar statistics: total bottles, value, unique wines, and optional breakdowns.' It specifies verb, resource, and specific outputs, distinguishing it from sibling tools like search-cellar or get-wishlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Lists valid group_by options, implying use for aggregate statistics with optional breakdowns. Lacks explicit when-not-to-use or alternatives, but context with siblings helps infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consumption-historyARead-only
Search your consumption history — wines you've opened and drunk. Filter by wine name, color, or date range. Returns most recent consumptions first with tasting context, up to max_results per page (default 25) — pass offset to page through more.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Filter by color (Red, White, Rosé) | |
| query | No | Wine name search term | |
| offset | No | Result offset for pagination (default 0) | |
| date_to | No | End date (YYYY-MM-DD) | |
| date_from | No | Start date (YYYY-MM-DD) | |
| max_results | No | Maximum results (default 25) |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| count | Yes | |
| total | Yes | |
| offset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, which the description does not contradict. It adds behavioral traits: sorted by most recent, pagination behavior (default 25, offset), and includes tasting context. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the purpose and filters in the first sentence, and details ordering/pagination in the second. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description covers filtering, ordering, pagination, and tasting context. It does not mention potential rate limits or authentication, but these are not critical for a read-only tool. Overall sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having a description. The description adds minimal extra meaning, e.g., explaining pagination in more detail. Baseline of 3 is appropriate as the schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Search' and the resource 'consumption history' (wines opened and drunk). It distinguishes itself from sibling tools like search-cellar or purchase-history by focusing on past consumption, with specific filtering options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use the tool and provides context like 'Returns most recent consumptions first' and pagination details. It does not explicitly list when not to use or alternatives, but the presence of siblings implies use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drinking-recommendationsARead-only
Get wine drinking recommendations sorted by urgency. Prioritizes wines that are past peak, then those with closing windows, then wines currently in their drinking window. Optionally filter by color.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Filter by color | |
| occasion | No | Occasion description | |
| max_results | No | Maximum results (default 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
| recommendations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral details beyond annotations: sorting by urgency with three priority levels. No contradictions with readOnlyHint and openWorldHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with key action and sorting logic. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description need not explain return values. Covers purpose, sorting, and basic filter. Adequate for a simple read tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but descriptions are minimal (e.g., 'Occasion description'). The tool description only adds value for 'color' filtering, not for 'occasion' or 'max_results'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets wine drinking recommendations sorted by urgency, with specific prioritization logic. Distinguishes from siblings like get-wishlist and search-cellar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes when to use (get drinking urgency order) and mentions optional color filter. Does not explicitly state when not to use or name alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-wishlistARead-only
View your CellarTracker wishlist wines. Optionally search by wine name, region, or varietal.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search term |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| wines | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds nothing about behavioral traits beyond the optional search. No contradictions, but no additional value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with core purpose. No wasted words. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values are covered. The parameter is fully described in both schema and description. Lacks explicit mention of default behavior (e.g., returns all wishlist wines when no query), but this is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description specifies that the optional 'query' can search by wine name, region, or varietal, adding semantic meaning beyond the schema's generic 'Search term'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves wishlist wines. The verb 'View' and resource 'CellarTracker wishlist wines' are specific. While it doesn't explicitly contrast with sibling tool 'search-cellar', the scope is self-evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'search-cellar'. The description only states the action without clarifying context or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
incoming-ordersARead-only
List wines ordered but not yet received, from the Pending table. Sorted oldest order first. Use this for 'what's on the way', unlike recent-deliveries which shows what has already arrived.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Store name filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description builds on this by adding that the data comes from the 'Pending table' and is 'Sorted oldest order first', providing useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with the action and resource, no wasted words, and each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description covers the source table, sorting, and usage context, making it complete and actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'store' has a description in the schema, and the tool description does not add any new semantics beyond that. With 100% schema coverage, baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List wines ordered but not yet received' with a clear verb and resource, and distinguishes from the sibling 'recent-deliveries' by specifying it shows orders not yet received, unlike deliveries that have arrived.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this for 'what's on the way', unlike recent-deliveries which shows what has already arrived,' providing clear when-to-use and when-not-to-use guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchase-historyARead-only
Search purchase history with spending summary. Filter by wine name, store, or date range (YYYY-MM-DD format). Shows total spent, average price, per-store breakdown, and recent purchases.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Wine name search | |
| store | No | Store name filter | |
| date_to | No | End date (YYYY-MM-DD) | |
| date_from | No | Start date (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| recent | Yes | |
| byStore | Yes | |
| avgPrice | Yes | |
| totalSpent | Yes | |
| bottleCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint. The description adds detail about the output (total spent, average price, per-store breakdown, recent purchases) and filter behavior, going beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, starting with the primary purpose, then filters, then output highlights. No redundant information; every sentence is essential and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 optional parameters, an output schema (though not detailed), and annotations, the description covers the key behaviors and outputs. It could mention pagination or result limits, but the combination of schema and description provides sufficient completeness for a read-only search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description restates filter options and date format, adding marginal value over schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches purchase history and provides a spending summary, with specific filters (wine name, store, date range). It distinguishes from siblings like 'consumption-history' and 'search-cellar' by focusing on purchases and financial summaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (searching purchase history with a spending summary) but does not explicitly state when not to use or compare to alternatives. The context from sibling tools hints at its niche, but direct guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent-deliveriesARead-only
List wines actually delivered (received) in a date range, keyed on DeliveryDate. Defaults to the last 30 days. Use this for 'what just landed', unlike purchase-history which keys on order date.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Store name filter | |
| date_to | No | End delivery date (YYYY-MM-DD). Defaults to today. | |
| date_from | No | Start delivery date (YYYY-MM-DD). Defaults to 30 days ago. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| total | Yes | |
| mostRecentDelivery | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by specifying keying on DeliveryDate and default date range. Annotations already indicate read-only and open-world, but description provides useful behavioral details without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with key information, and clearly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of output schema and comprehensive annotations, the description is complete: explains the data key, default behavior, and differentiates from a sibling. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. Description does not add extra parameter-level meaning beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List wines actually delivered' with specific verb and resource, and explicitly distinguishes from sibling 'purchase-history' by stating the key difference (DeliveryDate vs order date).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this for 'what just landed'' and contrasts with 'purchase-history which keys on order date', providing clear when-to-use and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh-dataARead-only
Force refresh all CellarTracker data from the server. Downloads fresh CSV exports for all 8 tables regardless of cache age.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tables | Yes | |
| refreshedAt | Yes | |
| serverVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states the tool downloads fresh CSV exports, implying a mutation, but annotations declare readOnlyHint=true, creating a contradiction. This undermines transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, clear and front-loaded, no fluff. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description fully conveys purpose and behavior; output schema handles return values. Context signals and siblings are consistent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description does not need to explain them. It adds semantic value beyond the schema by explaining the action and scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a strong verb 'Force refresh' and specifies the scope ('all CellarTracker data', 'all 8 tables'), clearly distinguishing it from query siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for obtaining fresh data regardless of cache age, but does not explicitly state when to avoid or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-cellarARead-only
Search your wine cellar by name, color, region, varietal, location, or vintage range. The region parameter searches across Country, Region, SubRegion, Appellation, and Locale fields. Returns matching wines with details, up to 25 per page — pass offset to page through more.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Filter by color (Red, White, Rosé) | |
| query | No | Wine name search term | |
| offset | No | Result offset for pagination (default 0) | |
| region | No | Region, country, or appellation | |
| location | No | Storage location | |
| varietal | No | Grape varietal | |
| vintage_max | No | Maximum vintage year | |
| vintage_min | No | Minimum vintage year |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| total | Yes | |
| wines | Yes | |
| offset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint. Description adds valuable behavioral context: returns up to 25 results per page, pagination via offset, and region searches across multiple fields. This goes beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence states purpose, second adds pagination details. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and an output schema, the description covers search scope, pagination, and region behavior. No mention of ordering or default sort, but sufficient for most users given the output schema presumably provides that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions, but the description adds specific meaning: region searches across Country, Region, SubRegion, Appellation, and Locale fields. This enriches the schema's 'Region, country, or appellation' description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Search your wine cellar' with specific verb and resource, and lists multiple searchable criteria (name, color, region, etc.). It distinguishes from siblings by focusing on search with multiple filters, unlike other tools like get-wishlist or drinking-recommendations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching with filters and pagination, but does not explicitly state when to use this tool versus alternatives like bottle-details or drinking-recommendations. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tasting-notesARead-only
Search your tasting notes and reviews. Filter by wine name, color, or minimum rating. Returns notes with ratings, scores, and tasting details, up to max_results per page (default 25) — pass offset to page through more.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Filter by color (Red, White, Rosé) | |
| query | No | Wine name search term | |
| offset | No | Result offset for pagination (default 0) | |
| min_rating | No | Minimum rating filter | |
| max_results | No | Maximum results (default 25) |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| count | Yes | |
| total | Yes | |
| offset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, openWorldHint), the description adds behavioral details: returns notes with ratings, scores, tasting details, and pagination behavior (default 25, offset). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste, front-loaded with the core purpose, and efficiently conveys all necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 optional parameters and an output schema, the description fully covers purpose, filtering, pagination, and result content. It is complete enough for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by summarizing key filters and pagination defaults, clarifying the grouping of filters and the per-page limit beyond the schema's individual descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'tasting notes and reviews.' It specifies filtering options (wine name, color, minimum rating) and differentiates from siblings like search-cellar which targets cellar items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (searching tasting notes) and includes pagination details. However, it does not explicitly state when not to use it or mention alternatives, though the context is sufficient given sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.5.0- First observed
bottle-details - First observed
cellar-stats - First observed
consumption-history - First observed
drinking-recommendations - First observed
get-wishlist - First observed
incoming-orders - First observed
purchase-history - First observed
recent-deliveries - First observed
refresh-data - First observed
search-cellar - First observed
tasting-notes
TDQS
Scored across 11 tools
Each tool targets a distinct aspect of cellar management: wishlist, cellar search, drinking recommendations, statistics, purchase history, deliveries, incoming orders, bottle details, consumption history, tasting notes, and data refresh. No two tools have overlapping purposes; even order-related tools are clearly differentiated by state (history, received, pending).
All tool names use a consistent kebab-case verb-noun pattern (e.g., get-wishlist, search-cellar, bottle-details). There is no mixing of conventions or ambiguous phrasing, making the naming predictable and clear.
With 11 tools, the set is well-scoped for a personal wine cellar management server. Each tool serves a clear purpose, covering inventory, orders, consumption, notes, statistics, and wishlist, without unnecessary bloat or missing essential queries.
The tool set is heavily query-oriented and lacks any write operations (e.g., add/update/delete bottles, manage wishlist items, modify tasting notes). While the query side is comprehensive, the absence of CRUD functionality limits its utility for full cellar management.
Maintenance
Related MCP Connectors
Your professional network in Claude — search contacts, log notes, and send warm intros.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Connect Claude to Fathom meeting recordings, transcripts, and summaries
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnects Claude to Strava data for natural language queries about rides, stats, and activities.10 npmMIT
- AlicenseAqualityDmaintenanceConnects Claude to your Strava account so you can query your activities, stats, routes, and segments using natural language.2712 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read your Whoop recovery, sleep, cycle, and workout data through natural language queries.458 npmMIT
- FlicenseAqualityDmaintenanceConnects Claude to your Strava fitness data, enabling natural language queries about your training history such as activities, stats, and routes.8-