Whisky Hunter MCP Server

This endpoint implements the Model Context Protocol (MCP) over Streamable HTTP, giving AI assistants read-only access to Whisky Hunter database.

Responses include only data available to the authenticated request.

Data notes

Search syntax

There are four scope-specific search tools that share the same syntax: search_past_auction_lots, search_live_auction_lots, search_retail_listings, and search_bottles.

Whisky search is full-text matching against lot, listing, or bottle titles, not a natural-language prompt. Auction houses often describe the same bottle with different spelling, punctuation, age wording, batch padding, or volume notation. Build compact queries from the tokens that identify the bottle, inspect the noise, then tighten with exclusions or one more high-confidence variant.

Practical search examples

Same bottle, different age wording
search_include: macallan 18 | macallan eighteen
Same batch, different spelling and zero padding
search_include: aberlour a'bunadh 7 | aberlour abunadh 7 | aberlour a'bunadh 07 | aberlour abunadh 07
Start broad, then exclude visible noise
search_include: scapa 16
search_exclude: 6 & 2 & 2002 & Jutland & Signatory & Douglas & Cask & Macleod
Full-size bottle, not miniatures or samples
search_exclude: mini & miniature & 5cl & 50ml & sample

For the same search habits in the website UI, see Dive into the search functionality of the Whisky Hunter database.

Endpoint

https://whiskyhunter.net/mcp/

All requests must be POST with Content-Type: application/json and a valid MCP API Bearer token in the Authorization header.

Connect with Claude Desktop / Claude Code

Add the following to your claude_desktop_config.json (or .claude/settings.json):

{
  "mcpServers": {
    "whiskyhunter": {
      "type": "http",
      "url": "https://whiskyhunter.net/mcp/",
      "headers": {
        "Authorization": "Bearer <YOUR_MCP_API_TOKEN>"
      }
    }
  }
}

Available Tools

All tools are read-only. Shared units, date granularity, authentication, pagination, and search syntax are documented once above; each tool below lists only its own accepted arguments and response shape.

list_distilleries

Return distillery names, slugs, and countries that can be used with distillery tools.

Arguments

No arguments.

Returns

Public distillery metadata visible to the authenticated request.

Field Type Description
distilleries array of objects Distilleries that can be used with distillery MCP tools.

list_auction_schedule

Return live and upcoming auction events for active auction houses, including start date, end date, and seller deadline.

Arguments

No arguments.

Returns

Live and upcoming auction events for active auction houses.

Field Type Description
live array of objects Auction events currently live.
upcoming array of objects Auction events scheduled after today.

list_active_auctions

Return active auction house metadata, including website, buyers_fee, sellers_fee, and vat_fee percentage fields plus fixed reserve and listing fees.

Arguments

No arguments.

Returns

Public metadata for active auction houses.

Field Type Description
auctions array of objects Active auction houses visible to the authenticated request.

get_monthly_distillery_stats

Return month-by-month secondary-market price, trading volume, and auction lots statistics for one distillery. Monetary values are in GBP and rows are grouped by calendar month.

Arguments

Name Type Required Description
distillery_slug string yes Distillery slug from list_distilleries.

Returns

Month-by-month secondary-market distillery statistics. Monetary values are in GBP.

Field Type Description
monthly_stats array of objects Monthly statistics grouped by calendar month.

get_distillery_summary

Return distillery metadata and aggregate secondary-market statistics calculated from visible monthly data grouped by calendar month. Monetary values are GBP and lot count fields count auction lots.

Arguments

Name Type Required Description
distillery_slug string yes Distillery slug from list_distilleries.

Returns

Distillery metadata and aggregate secondary-market statistics calculated from visible monthly data. Monetary values are GBP by default unless explicitly stated otherwise.

Field Type Description
distillery object Public distillery metadata.
stats object Aggregate statistics over visible monthly distillery data.

search_past_auction_lots

Search closed secondary-market auction lots. Use search_include with ' | ' for OR variants and search_exclude with ' & ' for exclusions. Optional filters include auction_slug, hide_nmr, price_min, price_max, date_from, date_to, and geo.

Arguments

Name Type Required Description
search_include string no Positive full-text query. Separate real title variants with ' | ', for example 'macallan 18 | macallan eighteen'. Within one variant all words must appear (AND), so keep each branch compact: brand, age or vintage, ABV, cask / batch, edition, or another distinctive identifier. Prefer bare numbers such as 18, 43, and 700 over '18 years old', '43%', or '700 ml'.
search_exclude string no Terms that must NOT appear in the listing text, separated by ' & '. Use to drop wrong volumes, miniatures, mixed lots, adjacent years / ages, other editions, unrelated bottlers, or other brands. Example: 'mini & miniature & 5cl'.
cursor string or null no Opaque pagination cursor returned by a previous call.
price_min integer or null no Lowest price in GBP, inclusive. Requires the advanced search subscription on whiskyhunter.net.
price_max integer or null no Highest price in GBP, inclusive. Requires the advanced search subscription on whiskyhunter.net.
auction_slug string or null no Only lots from this auction house; slug from list_active_auctions.
geo string or null no Only lots located in this region, for example 'UK' or 'EU'. Requires the advanced search subscription on whiskyhunter.net.
date_from date string or null no Earliest sale date, inclusive, ISO format YYYY-MM-DD. Requires the advanced search subscription on whiskyhunter.net.
date_to date string or null no Latest sale date, inclusive, ISO format YYYY-MM-DD. Requires the advanced search subscription on whiskyhunter.net.
hide_nmr boolean or null no Exclude lots that did not meet their reserve (unsold). Available to any account.

Returns

One page of search results.

Field Type Description
results array of objects Matching results for the current page.
nextCursor string or null Opaque cursor for the next page when more results exist.
search_syntax string How to use include and exclude search operators.

search_live_auction_lots

Search live secondary-market auction lots. Use search_include with ' | ' for OR variants and search_exclude with ' & ' for exclusions. Optional filters include auction_slug, price_min, price_max, and geo.

Arguments

Name Type Required Description
search_include string no Positive full-text query. Separate real title variants with ' | ', for example 'macallan 18 | macallan eighteen'. Within one variant all words must appear (AND), so keep each branch compact: brand, age or vintage, ABV, cask / batch, edition, or another distinctive identifier. Prefer bare numbers such as 18, 43, and 700 over '18 years old', '43%', or '700 ml'.
search_exclude string no Terms that must NOT appear in the listing text, separated by ' & '. Use to drop wrong volumes, miniatures, mixed lots, adjacent years / ages, other editions, unrelated bottlers, or other brands. Example: 'mini & miniature & 5cl'.
cursor string or null no Opaque pagination cursor returned by a previous call.
price_min integer or null no Lowest price in GBP, inclusive. Requires the advanced search subscription on whiskyhunter.net.
price_max integer or null no Highest price in GBP, inclusive. Requires the advanced search subscription on whiskyhunter.net.
auction_slug string or null no Only lots from this auction house; slug from list_active_auctions.
geo string or null no Only lots located in this region, for example 'UK' or 'EU'. Requires the advanced search subscription on whiskyhunter.net.

Returns

One page of search results.

Field Type Description
results array of objects Matching results for the current page.
nextCursor string or null Opaque cursor for the next page when more results exist.
search_syntax string How to use include and exclude search operators.

search_retail_listings

Search in-stock retail shop listings. Use search_include with ' | ' for OR variants and search_exclude with ' & ' for exclusions.

Arguments

Name Type Required Description
search_include string no Positive full-text query. Separate real title variants with ' | ', for example 'macallan 18 | macallan eighteen'. Within one variant all words must appear (AND), so keep each branch compact: brand, age or vintage, ABV, cask / batch, edition, or another distinctive identifier. Prefer bare numbers such as 18, 43, and 700 over '18 years old', '43%', or '700 ml'.
search_exclude string no Terms that must NOT appear in the listing text, separated by ' & '. Use to drop wrong volumes, miniatures, mixed lots, adjacent years / ages, other editions, unrelated bottlers, or other brands. Example: 'mini & miniature & 5cl'.
cursor string or null no Opaque pagination cursor returned by a previous call.

Returns

One page of search results.

Field Type Description
results array of objects Matching results for the current page.
nextCursor string or null Opaque cursor for the next page when more results exist.
search_syntax string How to use include and exclude search operators.

search_bottles

Search published Whisky Hunter bottle reference pages. Use search_include with ' | ' for OR variants and search_exclude with ' & ' for exclusions, then pass the returned slug to get_bottle_data.

Arguments

Name Type Required Description
search_include string no Positive full-text query. Separate real title variants with ' | ', for example 'macallan 18 | macallan eighteen'. Within one variant all words must appear (AND), so keep each branch compact: brand, age or vintage, ABV, cask / batch, edition, or another distinctive identifier. Prefer bare numbers such as 18, 43, and 700 over '18 years old', '43%', or '700 ml'.
search_exclude string no Terms that must NOT appear in the listing text, separated by ' & '. Use to drop wrong volumes, miniatures, mixed lots, adjacent years / ages, other editions, unrelated bottlers, or other brands. Example: 'mini & miniature & 5cl'.
cursor string or null no Opaque pagination cursor returned by a previous call.

Returns

One page of search results.

Field Type Description
results array of objects Matching results for the current page.
nextCursor string or null Opaque cursor for the next page when more results exist.
search_syntax string How to use include and exclude search operators.

get_bottle_data

Return one bottle's metadata, secondary-market auction price history, year-over-year analytics, recent past auction lots, live auction offers, and in-stock retail offers. Monetary values are GBP.

Arguments

Name Type Required Description
bottle_slug string yes Bottle slug from search_bottles.

Returns

Details for one published Whisky Hunter bottle. Monetary values are GBP. Sections may be replaced by a locked marker when the caller's subscription plan is not high enough.

Field Type Description
bottle object Public bottle metadata.
currency string Currency for all monetary values in this payload.
price_history object Secondary-market auction price statistics per period, or a locked marker.
by_years object Year-over-year auction sales analytics, or a locked marker.
past_lots object Most recent visible past auction lots for this bottle.
live_offers object Currently open auction lots for this bottle.
retail_offers object In-stock retail listings for this bottle.

Quick start - raw JSON-RPC

# 1. Initialize
curl -s -X POST https://whiskyhunter.net/mcp/ \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <wh_mcp_token>" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","clientInfo":{"name":"curl","version":"0"}}}'

# 2. Confirm initialization (server replies 202, no body)
curl -s -X POST https://whiskyhunter.net/mcp/ \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <wh_mcp_token>" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","method":"notifications/initialized"}'

# 3. List tools
curl -s -X POST https://whiskyhunter.net/mcp/ \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <wh_mcp_token>" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

# 4. Call a tool
curl -s -X POST https://whiskyhunter.net/mcp/ \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <wh_mcp_token>" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_monthly_distillery_stats","arguments":{"distillery_slug":"ardbeg"}}}'

Search example

curl -s -X POST https://whiskyhunter.net/mcp/ \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer <wh_mcp_token>" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"search_past_auction_lots","arguments":{"search_include":"macallan 18 | macallan eighteen","search_exclude":"mini & miniature & 5cl"}}}'

Authentication

Create or rotate your MCP API token on the Whisky Hunter profile page. Unauthenticated requests will receive a 401 Unauthorized JSON-RPC error.