Skip to main content
Glama
untappd-mcp

untappd-mcp

by chrischall

Check if a user has had a beer (from the cache)

untappd_cache_has_had
Read-onlyIdempotent

Check whether a user has ever had a beer using cached check-ins and distinct-beers data—no API call. Match by beer ID or name substring and return count, rating, last date, sources, and favorites.

Instructions

Answer "has this user ever checked in this beer?" from the cache only — NO API call. Consults BOTH cached sources (check-ins and the distinct-beers list); a hit in either counts as had. Match by exact bid or a case-insensitive substring of the beer name. Returns whether they had it, the times-had count, best rating, last date, which sources matched, any detailed check-ins, and favorite {is_favorite, sources, reason} (rated ≥4.25 / had ≥3 times, or added with untappd_favorite_add). Reports per-source freshness so you can caveat incomplete data. Requires bid or beer_name. Run untappd_sync_user_beers first for full coverage.

Input Schema

NameRequiredDescriptionDefault
bidNoExact Untappd beer id to look for
usernameNoUntappd username. Omit to use your own configured account (UNTAPPD_USERNAME).
beer_nameNoCase-insensitive substring match on the beer name

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.0.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. Addedv1.7.1

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnly/idempotent/closed-world; the description goes well beyond them by disclosing that BOTH cached sources are consulted and a hit in either counts, that matching is exact-bid or case-insensitive substring, how the favorite flag is derived (≥4.25 rating / ≥3 times / explicit untappd_favorite_add), and that freshness is reported per source so results can be caveated.

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

Conciseness4/5

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

Front-loaded with the core question and the no-API constraint, then matching rules, then return shape, then prerequisite — a sensible ordering with no filler sentences. It is dense and the favorite-derivation parenthetical is long, but that detail is functional rather than decorative.

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

Completeness5/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 contract and does so thoroughly: had/not-had, times-had count, best rating, last date, matched sources, detailed check-ins, favorite object, and freshness metadata. Combined with the sync prerequisite and the either-or input requirement, an agent has everything needed to call and interpret it.

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 adds real meaning: matching semantics for bid vs beer_name and the cross-field constraint "Requires bid or beer_name" — a requirement not expressed in the schema, where zero parameters are marked required. The username fallback to the configured account is left to 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 question it answers ("has this user ever checked in this beer?") plus the defining constraint "from the cache only — NO API call." That scope immediately separates it from API-backed siblings like untappd_beer_info or untappd_user_checkins, and the singular "this beer" separates it from untappd_cache_has_had_many.

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 clear operating context (cache-only, no API) and an explicit prerequisite: "Run untappd_sync_user_beers first for full coverage." It also frames the caveat workflow via per-source freshness. It stops short of naming the alternative to use when the cache is stale or when you need live data, so it is clear but not fully routing.

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