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
- Monetary auction and distillery statistics are in GBP unless a tool explicitly states otherwise.
- Auction fee fields
buyers_fee, sellers_fee, and vat_fee
are percentage values; reserve_fee and listing_fee are fixed amounts
in the auction house's base_currency.
- Lot count fields count auction lots.
- Monthly statistics are grouped by calendar month.
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.
search_include is the positive query. Separate real title variants with
| , for example macallan 18 | macallan eighteen. Within one variant,
every word must match.
search_exclude removes known false positives. Separate exclusions with
& , for example mini & miniature & 5cl.
- Use spaces around operators:
mini & miniature is correct;
mini&miniature is not.
- Prefer meaningful bare tokens:
18 instead of 18 years old,
43 instead of 43%, 700 instead of 700 ml.
Keep distinctive vintage, age, ABV, cask, batch, chapter, or edition details when they separate
otherwise similar bottles.
- Use
cursor with the returned nextCursor to continue paginated results.
A cursor is only valid for the same tool and search terms that produced it.
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.