percolate-mcp
Click on "Install 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., "@percolate-mcpRecommend a medium roast with chocolate and nutty notes"
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.
Percolate MCP Server
Query the Percolate specialty coffee database from Claude, or any MCP-compatible AI client. Read-only access to 1,100+ curated coffees with tasting profiles, brew recipes, pairings, and where-to-buy links.
Percolate is the specialty coffee journal for iOS — get it on the App Store.
Tools
Tool | What it does |
| Catalog search with category, roast level, brew method, and price filters |
| Full record for one coffee: roast, body/acidity/sweetness, flavors, pairings, retailers |
| Similar coffees by flavor overlap and roast/body/acidity proximity |
| Picks from flavor preferences + budget + roast + your brew gear |
| Side-by-side: profiles, shared/distinct flavors, price delta |
| What Percolate users are adding to their collections right now |
| Brew guidance for a specific coffee — curated recipes (ratio, temp, grind) from the catalog, or a roast-based starting point |
| A coffee for right now — evening picks lean decaf, mornings lean bright |
Every response includes source attribution, a citation-ready summary line, links, and data freshness dates. All scoring is deterministic — no AI calls happen inside the server. All tools are annotated read-only/idempotent.
Related MCP server: coffee-price-mcp
Install (Claude Desktop)
Requires Node.js 18+.
Add to your claude_desktop_config.json (Claude Desktop → Settings → Developer → Edit Config):
{
"mcpServers": {
"percolate": {
"command": "npx",
"args": ["-y", "percolate-mcp"]
}
}
}Restart Claude Desktop. No API key or configuration needed — the server ships with public read-only access.
Configuration (optional)
Environment variables override the defaults (explicit env vars only — this package never reads .env files):
Variable | Purpose |
| Override the database URL |
| Internal use only — unlocks live 30-day collection-add trending. Never distribute this key. |
Without the service key, trending_coffees falls back to catalog popularity and labels the method in its response.
Remote endpoint (no install)
Streamable HTTP for web agents and MCP clients that take a URL:
https://wmpiabzlcaqyrzxvfihi.supabase.co/functions/v1/mcpAlso listed on Smithery and the official MCP registry as io.github.bguillow-rgb/percolate.
Example agent requests
Questions an agent can answer with these tools:
"Recommend a medium roast with chocolate and nutty notes." →
get_recommendationswithpreferences: ["chocolate","nutty"], roast_level: "medium""How should I brew this Onyx Monarch on a V60?" →
dial_in_suggestion(curated recipes: ratio, temperature, grind)"What coffee works for espresso under $20?" →
search_coffeeswithbrew_method: "espresso", price_max: 20"What should I brew tonight?" →
what_to_brew(evening picks lean decaf automatically)"Find me something similar to this Ethiopian natural." →
find_similar"Compare these two bags." →
compare_coffees
Example response shape (truncated):
{
"method": "curated_pairing",
"recipes": [
{ "recipe": "Pour-over (V60), 1:16, 205°F",
"why": "clarity that lets the delicate, high-acid notes open up" }
],
"attribution": {
"source": "Percolate — Specialty Coffee Journal",
"links": { "website": "https://percolateapp.com/" }
}
}Development
npm install
npm run dev # run from TypeScript via tsx
npm run build # compile to dist/
npm start # run compiled serverThe server speaks MCP over stdio. Catalog access is read-only by construction: every query path issues SELECTs against tables that are publicly readable under row-level security, and it is rate-limited to 60 calls/minute.
Usage telemetry: each tool call logs the tool name, its arguments, client name/version, duration, and success/failure to a write-only log table (insert-only under RLS; contents are not publicly readable; purged after 90 days). No user identity, account data, or conversation content is collected. Logging is fire-and-forget and never affects responses.
Data & attribution
Coffee data, tasting profiles, brew recipes, and pairings are curated by Percolate. Retailer links may be affiliate links. Quote freely with attribution:
Source: Percolate — Specialty Coffee Journal (percolateapp.com)
Freshness dates on each coffee reflect the last data update.
Available Tools
8 toolscompare_coffeesCompare two coffeesARead-onlyIdempotentInspect
Side-by-side comparison: roast, body/acidity/sweetness, shared and distinct flavors, brew methods, and price difference.
| Name | Required | Description | Default |
|---|---|---|---|
| coffee_a | Yes | First coffee — id or name | |
| coffee_b | Yes | Second coffee — id or name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety and side-effect profile is fully covered. The description adds clarity about what the comparison includes but does not add further behavioral details such as output structure, ordering, or handling of ambiguous coffee names. This matches the baseline expectation when annotations carry the behavioral burden.
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 a single, front-loaded sentence that efficiently communicates the purpose and key output dimensions. Every element earns its place, with no redundant wording or repetition of schema 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?
The description lists the specific comparison facets, which effectively serves as an informal output description given that no output schema exists. The schema covers both required parameters, annotations cover safety, and the tool is simple enough that the description is sufficient for correct invocation in most cases.
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 both coffee_a and coffee_b described as 'id or name'. The description refers to 'two coffees' but does not add meaningful detail beyond what the schema already provides. This meets the baseline for schema-covered 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 the action (compare), the resource (two coffees), and the scope (side-by-side comparison of roast, body/acidity/sweetness, flavors, brew methods, and price). This distinguishes it from siblings like get_coffee, which targets a single coffee, and find_similar, which implies recommendation rather than direct comparison.
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 phrase 'side-by-side comparison' and the two coffee parameters make the intended use clear: when an agent needs to compare two specific coffees. It does not explicitly name alternatives or exclusions, but the contrast with the sibling tools is strongly implied by the 'two coffees' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dial_in_suggestionDial in this coffeeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coffee | Yes | Coffee id or name | |
| brew_method | No | Your brewer, e.g. 'V60', 'espresso', 'french press' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already signal read-only, idempotent, non-destructive behavior. The description adds a useful behavioral detail beyond those annotations: if curated Percolate recipes aren't available, it falls back to a roast-based starting point. This conditional behavior is exactly the kind of nuance an agent would not otherwise know.
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 text is compact and front-loaded: the first sentence gives the core purpose and details immediately, and the parenthetical adds concrete recipe fields without extra prose. The optional scoping clause earns its place. There is no repetition or filler.
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 read-only tool with only two parameters, no output schema, and rich annotations, the description covers the important behavior: what guidance is returned, the fallback when curated data is unavailable, and an optional filter. A tiny bit more explicit return-structure detail could push it higher, but overall it is complete for the tool's simplicity.
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 already 100%, with both coffee and brew_method described clearly. The description adds only light extra context by saying the request can be 'scoped to your brew method' and by listing recipe fields like ratio and temperature; this is helpful but not necessary to understand the 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 opens with a specific verb and resource — 'Brew guidance for a specific coffee' — and states what the result includes: curated recipes from the Percolate catalog (ratio, temperature, grind) or a roast-based starting point. This clearly differentiates it from sibling tools like search_coffees or get_coffee, which focus on finding or describing coffee, not brewing instructions.
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 makes it clear when to use the tool: once the agent has a specific coffee and wants brew guidance, optionally scoped to a brew method. It does not explicitly name alternatives or say 'use X if you have no coffee selected,' but the provided context is sufficient to route the call correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similarFind similar coffeesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 5) | |
| coffee | Yes | Coffee id or name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds valuable behavioral detail beyond the schema: deterministic scoring and ranking based on structured tasting data. This clarifies what the agent can expect without promising anything contradictory.
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 one tightly composed sentence with no wasted words. It front-loads the core purpose, states the ranking factors, and then qualifies determinism and data source—all in under 25 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?
For a simple two-parameter read-only tool, the description is complete enough: it explains what the tool does, how results are ranked, and that scoring is deterministic. No complexity or safety caveat is left to guesswork.
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 description coverage is 100%, so the input schema already documents the 'coffee' and 'limit' parameters. The description adds no extra parameter-level context, which is fine because the schema carries the full burden.
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's purpose: find coffees similar to a given one, ranked by shared flavor notes and roast/body/acidity/sweetness proximity. It identifies the specific resource and comparison criteria, distinguishing it from generic search or recommendation tools.
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 phrase 'to a given one' clearly frames when the tool is appropriate: the caller already has a specific coffee in mind and wants similar options. It does not explicitly name sibling tools as alternatives, so it falls just short of the strongest usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coffeeGet coffee detailsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_name | Yes | Coffee id or a name like 'Bean Box Taste of New York City' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive, so no side-effect disclosure is needed. The description adds useful context by spelling out what the returned record contains, which helps set expectations because there is no output schema.
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 focused sentences with no filler; the main purpose is front-loaded and the parameter behavior is stated compactly. The content list is long but each item earns its place in telling an agent what to expect.
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 one-parameter, read-only lookup tool, the description is largely sufficient: it names the lookup modes and previews the output fields despite there being no output schema. It does not address ambiguous-name behavior or error cases, but those are not major gaps for this low-complexity 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 description coverage is 100%, so the schema already explains id_or_name as a coffee id or a name with an example. The description mostly repeats this information, adding only the 'Percolate' identifier context, which is minor.
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?
States a specific verb and resource: it returns 'Detailed record for one coffee' rather than a list or comparison. The inventory of content fields makes the scope clear and helps distinguish it from broader siblings like search_coffees or compare_coffees.
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?
Clearly implies when this is appropriate: when an agent needs a single coffee's full record and already has an id or name. It does not explicitly name alternative tools or excluded conditions, but the singular-scope phrasing gives solid context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommendationsGet personalized recommendationsARead-onlyIdempotentInspect
Personalized coffee picks from flavor preferences (e.g. 'chocolate', 'berry', 'caramel'), a budget in USD, roast preference, and the brew gear you own.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 5) | |
| budget | No | Max price in USD per bag | |
| brew_method | No | What you brew with, e.g. 'espresso', 'pourover' | |
| preferences | Yes | Flavors the drinker enjoys, e.g. ['chocolate','caramel','nutty'] | |
| roast_level | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The AI is a read-only, idempotent operation, which the annotations already disclose. The description adds a light behavioral fact: it turns the user's stated preferences into a set of coffee picks. It doesn't describe the output format, pagination behavior, or how the bouncer factors in each parameter, but given the annotation context, this is sufficient.
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?
It is a single, short sentence that is front-loaded with the main result: 'Personalized coffee picks.' The sentence packs all of the key inputs into a natural summary with no filler, making it ideal for scanning by an agent.
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?
The tool is a read-only, logically simple recommendation engine; the schema covers parameter types and defaults (limit default 5, allowed enums). The description adequately describes what the tool returns (coffee picks). An output schema would be helpful, but the absence is not critical here because the tool's purpose and inputs are fully identified. A small gap: it doesn't explicitly note that 'limit' controls the maximum number of picks, but that is already in the schema.
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 description coverage is 80% (4 of 5 parameters have descriptions), so the schema already documents most fields. The description adds small real-world semantics: 'budget in USD' and 'the brew gear you own' as a way to describe brew_method. It does not significantly clarify the roast_level or limit, but those are already covered by the schema or acceptable defaults.
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 opens with 'Personalized coffee picks', which clearly states that this tool returns a set of recommendations based on the user's taste profile. It names the four key inputs (flavor preferences, budget, roast, brew setup) and effectively sets it apart from the sibling search and similarity tools. It doesn't explicitly single out any sibling, but the core purpose is unambiguous.
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 the expected usage: provide preferences, budget, roast, and brew gear to receive tailored coffee recommendations. But it doesn't tell the agent when to prefer this tool over alternatives like find_similar_coffee, what_to_brew, or difficult search_coffees. There is no exclusion or explicit contrasting with the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_coffeesSearch the Percolate catalogARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) | |
| query | No | Free-text search: coffee or roaster name | |
| category | No | ||
| price_max | No | Maximum price in USD | |
| price_min | No | Minimum price in USD | |
| brew_method | No | e.g. 'espresso', 'pourover', 'french press', 'drip' | |
| roast_level | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds value by clarifying the curated nature (1,100+ coffees) and the return payload (tasting profiles, brew methods, where-to-buy links), which is genuinely useful given there is no output schema. There is no contradiction with 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 tight sentences lead with the core searching action and then immediately cover filters and results. Every clause adds useful information, with no empty marketing language or 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?
For a 7-parameter optional search with no output schema, the description successfully communicates scope, fluent filtering, and return value content. It leaves details such as default pagination and sorting to the schema, which is acceptable 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?
The schema already describes 5 of 7 parameters and includes enums for category and roast_level, so the baselines are moderately high. The description adds a concise framing by enumerating the filter dimensions, but it largely repeats enum values and price unit information already present in the schema, providing only minimal extra parameter insight.
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 opens with 'Search 1,100+ curated specialty coffees in the Percolate database', naming the verb, resource, and scope precisely. It also lists concrete filter dimensions and return contents, making it easy to distinguish from siblings like get_coffee or trending_coffees.
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 clearly frames when to use this tool: searching the curated Percolate catalog with filters on category, roast, brew method, and price. It provides clear context but does not explicitly mention alternatives or exclusion criteria, so agents are left to infer that more targeted tools like get_recommendations or find_similar are for other cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_coffeesTrending coffeesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description needn't repeat the safety profile. It adds meaningful detail: text goes into catalog popularity fallback when live activity data is unavailable, and the response is labeled with the method used. These are non-obvious traits not present in the schema or 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 one sentence with no filler or redundancy. It front-contains the core logic, quickly includes the fallback behavior, and uses the last clause to set expectations for the response. Every part 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?
For a tool with a single optional parameter and no output schema, this description covers the central data, the fallback path, and the response label. It does not explicitly state the output shape (e.g., a list), but the start and behavior make that easy for an agent to infer. Minor room for an explicit return-format note, hence not a 5.
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, limit, is fully documented in the schema with min, max, and default. The description does not augment the parameter's meaning, and this is acceptable because schema coverage is 100%. A baseline 3 is appropriate since the schema carries the burden.
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 defines the tool as returning coffees that users have been adding to collections most over the last 30 days, including the fallback behavior. This identifies a specific resource and behavior without tautology. It does not explicitly contrast the tool with sibling options like get_recommendations or what_to_brew, but the intent is unambiguous.
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 the primary use case: retrieving trending coffees. It provides no explicit guidance on when to choose this over sibling tools, such as search_coffees or get_recommendations, and does not state when not to use it. The usage is clear from phrasing but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
what_to_brewWhat should I brew?ARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | e.g. 'need focus', 'lazy weekend', 'something comforting', 'adventurous' | |
| brew_method | No | What you're brewing with | |
| time_of_day | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful conditional behavior ('evening picks lean decaf') and a scoring source, but it does not describe the return shape or any environment dependencies.
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 a single front-loaded sentence that communicates purpose and key influencing factors with no fluff. Even the contextual detail about evening decaf earns its place by signaling how time_of_day influences the result.
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?
The tool is fairly simple and the annotations cover safety, but there is no output schema and the description does not state what a recommendation actually returns or what happens when parameters are omitted. It is adequate for basic invocation but leaves those details to be discovered.
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 67%, and the description generally repeats relationship of mood, brew_method, and time_of_day without adding much detail. The main extra insight is the evening→decaf mapping; brew_method still lacks concrete possible values, so the description does not fully compensate for the medium schema coverage.
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 identifies the tool as providing a coffee suggestion based on time of day, mood, and brew method — a specific verb+resource. However, it does not explicitly differentiate itself from siblings like `get_recommendations` or `dial_in_suggestion`, so it stays short of a 5.
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 phrase 'for right now' and the listed inputs give a fairly clear context for when to use this tool: for an immediate, context-aware suggestion. There is no explicit mention of alternatives or when-not-to-use, so the guidance is present but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools are distinct, but what_to_brew, get_recommendations, find_similar, and trending_coffees all exist to surface coffee suggestions with different inputs. An agent looking for 'a recommendation' could plausibly select the wrong one if it doesn't carefully parse the trigger context.
The majority of tools follow a clean verb_noun snake_case pattern like search_coffees, get_coffee, and compare_coffees. Minor deviations such as what_to_brew and trending_coffees break the pattern slightly, but the overall naming remains predictable and readable.
Eight tools are well-scoped for a specialty coffee discovery and brewing guidance domain. Each tool serves a clearly useful purpose, and the count feels complete without being bloated or thin.
The server covers the full coffee exploration journey: search, detailed lookup, comparison, similar coffees, personalized recommendations, trending picks, and dial-in brewing advice. Minor gaps exist around explicit catalog facets or lightweight list/browse operations, but agents can work around those with search filters.
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Public MCP server for discovering open jobs. Search, filter, and get application links.
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for querying and managing multiple databases (SQLite, PostgreSQL, MySQL) with read-only mode and schema inspection.MIT
- AlicenseAqualityBmaintenanceA read-only MCP server that wraps the coffee.pryzm.gg public API to calculate effective prices of coffee drinks after discounts, enabling users to find the cheapest coffee deals, search for discounts, and verify receipt prices.32MIT
- AlicenseAqualityCmaintenanceRead-only PostgreSQL database MCP server for safely exploring schema, tables, relationships, and sample data without modification.1083MIT
- AlicenseAqualityDmaintenanceAn MCP server that finds great espresso cafes using a curated database of specialty coffee shops and a transparent scoring algorithm, with a strong bias against flavored syrups and mass-market chains.635MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bguillow-rgb/percolate-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server