Skip to main content
Glama
untappd-mcp

untappd-mcp

by chrischall

List a user's favorite beers, breweries and venues

untappd_favorites_list
Read-onlyIdempotent

List cached favorite beers, breweries, and venues with their sources and reasons — no API call needed. Filter by kind or source to see which items qualify from history, manual adds, or Untappd follows.

Instructions

List a user's favorites from the cache only — NO API call. Each item appears ONCE with every source that names it (sources: "derived" = qualifies from their cached history, "manual" = added with untappd_favorite_add, "untappd" = a brewery the user likes/follows on Untappd, mirrored by untappd_sync_brewery_likes — breweries only: Untappd has no followed/favorite venue list) and a reason ("liked on Untappd (since 2021-03)", "12 check-ins since 2015", "avg 4.1 across 9 beers", "manual: "). Derived rules, each overridable via thresholds: venue = ≥5 check-ins OR visits spanning ≥3 distinct months (ranked by check-ins); brewery = ≥5 beers had AND avg rating ≥3.75, OR ≥15 beers (ranked by count blended with rating); beer = rated ≥4.25 OR had ≥3 times. Derived favorites are only as complete as the syncs behind them (untappd_sync_user_venues, untappd_sync_user_beers); "untappd" ones as the last untappd_sync_brewery_likes (freshness.brewery_likes). Filter by kind and source. Omit username for your own account.

Input Schema

NameRequiredDescriptionDefault
kindNoOnly this kind (default all three)
limitNoMost items per kind (default 50)
sourceNoOnly favorites carrying this source
usernameNoUntappd username. Omit to use your own configured account (UNTAPPD_USERNAME).
thresholdsNoOverride the derived-favorite thresholds (each optional; omitted ones keep their defaults).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv2.6.1

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the readOnly/idempotent annotations: cache-only with no network call, de-duplication guarantee ('each item appears ONCE with every source that names it'), the full meaning of each source value, sample reason strings, and an explicit freshness caveat tied to specific sync tools. This is exactly the behavioral context the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical constraint ('cache only — NO API call') is front-loaded, which is good. But the remainder is one very long paragraph of nested parentheses mixing source definitions, threshold algebra and freshness caveats, with no line breaks or bullet structure — hard to scan and easy to misparse mid-sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-shape burden and does so reasonably: it explains per-item dedup across sources, the reason string and its formats, and ranking rules per kind. It stops short of describing the remaining per-item fields (identity, name, counts) or how the per-kind limit interacts with ordering after filtering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description earns more by defining what 'derived', 'manual' and 'untappd' actually mean, noting the brewery-only limitation for 'untappd', and spelling out how threshold values combine (OR/AND rules per kind) — logic the schema's flat defaults cannot convey. The combination semantics are the main added value; individual defaults are already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List a user's favorites') scoped to three kinds (beer, brewery, venue) and pins the execution model with 'from the cache only — NO API call'. That immediately separates it from live-fetch siblings like untappd_user_checkins or untappd_brewery_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use conditions: filter by kind and source, omit username for your own account, and warns that derived results depend on prior untappd_sync_user_venues/untappd_sync_user_beers runs and that 'untappd' brewery likes depend on the last untappd_sync_brewery_likes. It never explicitly contrasts against neighbor tools like untappd_favorite_add or untappd_user_wishlist, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.