Percolate
Search the Percolate specialty coffee database: 1,100+ coffees with brew recipes and pairings.
Should I use this
Quality & Safety
Findings (2)
- LOWin compare_coffees
- LOWin what_to_brew
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"percolate": {
"command": "npx",
"args": [
"percolate-mcp"
]
}
}
}Runnable packages
1.0.2stdioRemote endpoints
https://wmpiabzlcaqyrzxvfihi.supabase.co/functions/v1/mcpstreamable-httphttps://mcp.percolateapp.com/?src=registrystreamable-httpWhat it can do
Tool inventory
Tools (8)
🟢search_coffees(query, category, roast_level, brew_method, price_min, ...)
Search 1,100+ curated specialty coffees in the Percolate database. Filter by category (espresso, single_origin, blend, decaf, dark), roast level, brew method, and price (USD). Returns tasting profiles, brew methods, and where-to-buy links.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 120,
"description": "Free-text search: coffee or roaster name"
},
"category": {
"type": "string",
"enum": [
"espresso",
"single_origin",
"blend",
"decaf",
"dark"
],
"description": "Coffee category to filter by; omit to search all"
},
"roast_level": {
"type": "string",
"enum": [
"light",
"medium-light",
"medium",
"medium-dark",
"dark"
],
"description": "Roast level to filter by; omit to include all roasts"
},
"brew_method": {
"type": "string",
"maxLength": 120,
"description": "e.g. 'espresso', 'pourover', 'french press', 'drip'"
},
"price_min": {
"type": "number",
"minimum": 0,
"description": "Minimum price in USD"
},
"price_max": {
"type": "number",
"minimum": 0,
"description": "Maximum price in USD"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Max results (default 10, max 10)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_coffee(id_or_name)
Detailed record for one coffee: roast level, body/acidity/sweetness profile, flavor notes, suited brew methods, food and brew pairings, price, and retailer links. Accepts a Percolate id or a name.
Input Schema
{
"type": "object",
"properties": {
"id_or_name": {
"type": "string",
"maxLength": 120,
"description": "Coffee id or a name like 'Bean Box Taste of New York City'"
}
},
"required": [
"id_or_name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢find_similar(coffee, limit)
Coffees with a similar profile to a given one, ranked by shared flavor notes and roast/body/acidity/sweetness proximity. Deterministic scoring over Percolate's structured tasting data.
Input Schema
{
"type": "object",
"properties": {
"coffee": {
"type": "string",
"maxLength": 200,
"description": "Coffee id or name"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Max results (default 5)"
}
},
"required": [
"coffee"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_recommendations(preferences, budget, roast_level, brew_method, limit)
Personalized coffee picks from flavor preferences (e.g. 'chocolate', 'berry', 'caramel'), a budget in USD, roast preference, and the brew gear you own.
Input Schema
{
"type": "object",
"properties": {
"preferences": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"minItems": 1,
"maxItems": 20,
"description": "Flavors the drinker enjoys, e.g. ['chocolate','caramel','nutty']"
},
"budget": {
"type": "number",
"minimum": 0,
"description": "Max price in USD per bag"
},
"roast_level": {
"type": "string",
"enum": [
"light",
"medium-light",
"medium",
"medium-dark",
"dark"
],
"description": "Roast level to filter by; omit to include all roasts"
},
"brew_method": {
"type": "string",
"maxLength": 120,
"description": "What you brew with, e.g. 'espresso', 'pourover'"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Max results (default 5)"
}
},
"required": [
"preferences"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢compare_coffees(coffee_a, coffee_b)
Side-by-side comparison: roast, body/acidity/sweetness, shared and distinct flavors, brew methods, and price difference.
Input Schema
{
"type": "object",
"properties": {
"coffee_a": {
"type": "string",
"maxLength": 200,
"description": "First coffee — id or name"
},
"coffee_b": {
"type": "string",
"maxLength": 200,
"description": "Second coffee — id or name"
}
},
"required": [
"coffee_a",
"coffee_b"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢trending_coffees(limit)
Coffees Percolate users are adding to their collections most over the last 30 days (falls back to catalog popularity when live activity data is unavailable). The method used is labeled in the response.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Max results (default 10, max 10)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢dial_in_suggestion(coffee, brew_method)
Brew guidance for a specific coffee: curated recipes from the Percolate catalog (ratio, temperature, grind) when available, or a roast-based starting point. Optionally scoped to your brew method.
Input Schema
{
"type": "object",
"properties": {
"coffee": {
"type": "string",
"maxLength": 200,
"description": "Coffee id or name"
},
"brew_method": {
"type": "string",
"maxLength": 120,
"description": "Your brewer, e.g. 'V60', 'espresso', 'french press'"
}
},
"required": [
"coffee"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢what_to_brew(time_of_day, mood, brew_method)
A coffee suggestion for right now, based on time of day (evening picks lean decaf), mood, and the brew method you're using — scored over Percolate's tasting profiles.
Input Schema
{
"type": "object",
"properties": {
"time_of_day": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
],
"description": "When the coffee will be drunk — shifts the pick toward lighter or lower-caffeine options later in the day"
},
"mood": {
"type": "string",
"maxLength": 120,
"description": "e.g. 'need focus', 'lazy weekend', 'something comforting', 'adventurous'"
},
"brew_method": {
"type": "string",
"maxLength": 120,
"description": "What you're brewing with"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence