untappd-mcp-server
This server exposes the Untappd v4 read API as MCP tools for AI agents, covering search, venues, beers, breweries, users, feeds, and aggregated stats — plus built-in OAuth authentication.
Search & lookup: venues (
venue_search), breweries (search_brewery), and beers (search_beer), with optional location awareness and pagination/sorting.Venue insights: venue info, recent check-ins (a live proxy for "what's on tap"), and Foursquare venue ID resolution.
Beer insights: beer details, public check-in feeds, and globally trending beers.
Brewery insights: brewery details and global check-in feeds for all its beers.
User data: profile/stats, activity feed, distinct checked-in beers, wishlist, badges, and friends.
Activity feeds: global pub feed (requires elevated key), local feed by geolocation, and authenticated friend feed.
Check-in details: extended check-in info including badges, toasts, and comments.
Composite/aggregation tools: user stats at a venue, venue-search-then-stats, user beer/style/brewery/rating breakdowns, and badge summaries — with rate-limit awareness and truncation.
Authentication: interactive OAuth (
authenticate_untappd) and auth status/validation (get_auth_status), unlocking token-gated tools and user-scoped rate limits.Operational notes: rate limit status is returned with every call; the server is read-only and requires Untappd API credentials.
Allows searching for venues, breweries, and beers, retrieving venue and brewery info and recent check-in feeds, and looking up user activity on Untappd.
Click on "Deploy 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., "@untappd-mcp-serverwhat's on tap at Supreme Brewing?"
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.
untappd-mcp-server
A Model Context Protocol (MCP) server that exposes the Untappd API as tools for AI agents — 27 tools covering the full Untappd v4 read API, plus built-in interactive OAuth authentication. Search venues, breweries, and beers; check what's on tap via check-in feeds; explore user badges, friends, wish lists, and drinking history; and aggregate stats — all from any MCP-compatible client.
Prerequisites
Node.js 20+
Untappd API credentials (
client_idandclient_secret) from untappd.com/apiOptional: an Untappd OAuth access token to unlock authenticated tools — obtainable in-chat via the
authenticate_untappdtool ornpx untappd-mcp-server auth(see Interactive Authentication)
Related MCP server: MCP API Server
Quick Start
Via npx (zero install)
UNTAPPD_CLIENT_ID=xxx UNTAPPD_CLIENT_SECRET=yyy npx untappd-mcp-serverPowerShell
$env:UNTAPPD_CLIENT_ID = "your_client_id"
$env:UNTAPPD_CLIENT_SECRET = "your_client_secret"
npx untappd-mcp-serverClaude Desktop
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"untappd": {
"command": "npx",
"args": ["untappd-mcp-server"],
"env": {
"UNTAPPD_CLIENT_ID": "your_client_id",
"UNTAPPD_CLIENT_SECRET": "your_client_secret",
"UNTAPPD_ACCESS_TOKEN": "optional_oauth_token",
"UNTAPPD_USERNAME": "optional_default_username"
}
}
}
}Tools
Tools marked 🔑 token require an access token (UNTAPPD_ACCESS_TOKEN env var or interactive authentication).
Authentication Tools
authenticate_untappd
Interactively authenticate with Untappd via OAuth: opens your browser to Untappd's approve page, captures the redirect on a temporary localhost listener, and saves the access token — the 🔑 tools work immediately, no restart. Prerequisite: your Untappd app's Callback URL must be set to exactly http://localhost:8737/callback (or your UNTAPPD_REDIRECT_URL).
Parameter | Type | Required | Description |
| integer | No | How long to wait for browser approval (default 180, max 600) |
get_auth_status
Report authentication status: token presence, source (env var or token file), file path, and whether the 🔑 tools are unlocked. Free by default; validate: true verifies the token with one API call.
Parameter | Type | Required | Description |
| boolean | No | Verify the token against the API with one call (default false) |
Search & Lookup
venue_search
Search for venues (breweries, bars, restaurants) by name with optional location awareness.
Parameter | Type | Required | Description |
| string | Yes | Search query (venue name) |
| number | No | Latitude for location-aware results |
| number | No | Longitude for location-aware results |
search_brewery
Search for breweries by name.
Parameter | Type | Required | Description |
| string | Yes | Brewery name search query |
| integer | No | Offset for pagination |
search_beer
Search for beers by name.
Parameter | Type | Required | Description |
| string | Yes | Beer name search query |
| integer | No | Pagination offset |
| string | No | Sort order: |
Venue
get_venue_info
Retrieve detailed information and recent check-ins for a venue.
Parameter | Type | Required | Description |
| integer | Yes | Untappd venue ID |
| boolean | No | If true, returns venue info only (no checkins, media, top beers) |
get_venue_checkins
Retrieve the recent check-in feed for a venue. This is the primary tool for determining what's currently on tap — recent check-ins act as a live signal for available beers.
Parameter | Type | Required | Description |
| integer | Yes | Untappd venue ID |
| integer | No | Number of results (max 25, default 25) |
| integer | No | Return results older than this checkin ID |
| integer | No | Return only checkins newer than this ID |
get_venue_foursquare_lookup
Resolve a Foursquare venue ID to its Untappd venue — the bridge between Foursquare/location data and Untappd venue tools.
Parameter | Type | Required | Description |
| string | Yes | Foursquare venue ID in v2 MD5-hash format (v3 numeric IDs will not work) |
Beer
get_beer_info
Retrieve detailed information for a specific beer.
Parameter | Type | Required | Description |
| integer | Yes | Untappd beer ID |
| boolean | No | If true, returns beer info only |
get_beer_checkins
Retrieve the recent public check-in feed for a specific beer — what people are saying about it right now, and where they're drinking it.
Parameter | Type | Required | Description |
| integer | Yes | Untappd beer ID |
| integer | No | Results per page (max 50, default 25) |
| integer | No | Return results older than this checkin ID |
| integer | No | Return only checkins newer than this ID |
get_trending_beers
Retrieve globally trending beers (macro and micro brew lists, by recent check-in velocity). No parameters.
Brewery
get_brewery_info
Retrieve detailed information, beer list, and recent check-ins for a brewery.
Parameter | Type | Required | Description |
| integer | Yes | Untappd brewery ID |
| boolean | No | If true, returns brewery info only |
get_brewery_checkins
Retrieve the recent public check-in feed for a brewery — all its beers being checked in globally.
Parameter | Type | Required | Description |
| integer | Yes | Untappd brewery ID |
| integer | No | Results per page (max 50, default 25) |
| integer | No | Return results older than this checkin ID |
| integer | No | Return only checkins newer than this ID |
User
get_user_info
Retrieve profile and stats for an Untappd user.
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| boolean | No | If true, returns user info only (no checkins, media, recent brews) |
get_user_activity
Retrieve the recent check-in activity feed for a user.
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| integer | No | Number of results (max 25, default 25) |
| integer | No | Return results older than this checkin ID |
| integer | No | Return only checkins newer than this ID |
get_user_distinct_beers
Retrieve the unique beers a user has checked in, with flexible sort ordering. sort=checkin with limit=1 is the single-call pattern for "most-checked-in beer".
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| integer | No | Pagination offset |
| integer | No | Results per page (max 50, default 25) |
| string | No |
|
get_user_wishlist
Retrieve beers on a user's wish list.
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| integer | No | Pagination offset |
| integer | No | Results per page (max 50, default 25) |
| string | No |
|
get_user_badges
Retrieve a user's earned badges (pages of 50, most recent first).
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| integer | No | Pagination offset (pages of 50) |
get_user_friends
Retrieve a user's friend list (public accounts only).
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| integer | No | Pagination offset |
| integer | No | Results per page (max 50, default 25) |
Activity Feeds
get_global_feed
Retrieve the global public check-in feed (The Pub). High rate-limit cost for the data returned — prefer min_id polling to fetch only new check-ins. Note: standard API keys are typically not authorized for /thepub — Untappd returns "You are not authorized to call this method from this key" unless your key has elevated access (get_local_feed is not restricted).
Parameter | Type | Required | Description |
| integer | No | Results per page (max 50, default 25) |
| integer | No | Return results older than this checkin ID |
| integer | No | Return only checkins newer than this ID |
get_local_feed
Retrieve the public check-in feed near a geographic point.
Parameter | Type | Required | Description |
| number | Yes | Latitude |
| number | Yes | Longitude |
| integer | No | Radius in miles (default 25, max 50) |
| integer | No | Results per page (max 50, default 25) |
| integer | No | Return results older than this checkin ID |
| integer | No | Return only checkins newer than this ID |
get_friend_feed 🔑 token
Retrieve the friend check-in feed for the authenticated user.
Parameter | Type | Required | Description |
| integer | No | Results per page (max 50, default 25) |
| integer | No | Return results older than this checkin ID |
| integer | No | Return only checkins newer than this ID |
Checkin
get_checkin_info
Retrieve extended details for a specific check-in, including badges earned, toasts, and comments.
Parameter | Type | Required | Description |
| integer | Yes | Untappd check-in ID |
Composite / Aggregation
These tools make multiple API calls (1 per page scanned — 50 beers/badges, 25 check-ins). They pre-check the remaining rate limit before starting and stop early — setting truncated: true in the response — if the budget runs low.
get_user_stats_at_venue
Get a user's check-in stats at a specific venue — visit count, last visit, average rating, top beers — by scanning their recent check-in feed. Untappd's API has no venue-history endpoint, so the stats cover the scanned window (max_pages × 25 check-ins), not all time.
Parameter | Type | Required | Description |
| integer | Yes | Untappd venue ID |
| string | No | Untappd username (defaults to |
| integer | No | Max feed pages to scan at 25 check-ins/page (default 5 = 125 check-ins) |
search_venue_then_get_user_stats
Search for a venue by name, then get the user's check-in stats at the top match.
Parameter | Type | Required | Description |
| string | Yes | Venue search query |
| string | No | Untappd username (defaults to |
| number | No | Latitude for location-aware search |
| number | No | Longitude for location-aware search |
| integer | No | Max feed pages to scan at 25 check-ins/page (default 5 = 125 check-ins) |
get_user_beer_stats
Aggregate a user's distinct beer history into style, brewery, and rating breakdowns — top styles, top breweries, average personal vs global ratings, highest-rated, and most-checked-in.
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| integer | No | Max pages to scan at 50 beers/page (default 10 = 500 beers) |
get_user_badge_summary
Retrieve all badges for a user (paginating to completion) with a structured summary.
Parameter | Type | Required | Description |
| string | Yes | Untappd username |
| integer | No | Max pages to scan at 50 badges/page (default 10 = 500 badges) |
Rate Limiting
The Untappd API allows 100 calls per hour per API key (per access token when authenticated). Every tool response includes the current rate limit status:
{
"rateLimit": {
"limit": 100,
"remaining": 97
}
}Composite tools call assertRateLimitSufficient before starting pagination and stop early with truncated: true rather than exhausting the budget. If the limit is exceeded, the Untappd API returns a 429 error which is surfaced as: Rate limit exceeded. Limit: 100, Remaining: 0. Resets hourly.
Authentication
Mode | Env Vars | Unlocks |
Public |
| All public tools |
Authenticated | + |
|
When an access token is configured (env var or saved token file), the server prefers it for all calls — rate limits become user-scoped and /user endpoints return richer data. UNTAPPD_USERNAME provides a default username for authenticated user tools.
The server exits on startup if neither a client id/secret pair nor an access token is configured.
Interactive Authentication
You don't need to obtain an access token manually — the server can run Untappd's OAuth flow for you.
One-time prerequisite: in your Untappd app settings at untappd.com/api, set the Callback URL to exactly:
http://localhost:8737/callback(or the value of UNTAPPD_REDIRECT_URL if you override it — it must be a localhost http URL, and the two must match exactly or Untappd rejects the flow).
In chat: ask your agent to run the authenticate_untappd tool. Your browser opens to Untappd's approve page; once you approve, the token is saved and the 🔑 tools work immediately — no restart needed.
In a terminal:
npx untappd-mcp-server auth # run the interactive flow
npx untappd-mcp-server auth --status # show current auth status
npx untappd-mcp-server auth --clear # delete the saved token(In the repo: npm run auth.)
Storage & precedence: the token is saved to ~/.untappd-mcp-server/token.json (override with UNTAPPD_TOKEN_PATH). If UNTAPPD_ACCESS_TOKEN is set it always wins over the file. Untappd tokens do not expire.
Security note: the token is stored in plaintext with 0600 permissions on macOS/Linux; on Windows protection relies on your user-profile ACLs. Delete it any time with auth --clear. Tool outputs only ever include a masked form of the token.
Development
npm install
npm run build
npm test # unit tests (mocked API — no rate limit cost)
npm run smoke # live smoke test against the real API (~25 calls, ~26 with a token)The smoke test uses your UNTAPPD_* env vars, skips authenticated tools when no access token is set, and aborts if the remaining rate limit drops below 5. Filter to a single tool with npm run smoke -- --only=tool_name.
Testing with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsKnown Limitations
No tap list data — actual tap lists require an Untappd for Business subscription. Venue check-in feeds serve as a real-time proxy.
No venue events — Untappd's public API has no events endpoint, and the Eventbrite search API that could have bridged the gap was discontinued; deferred to v3.
No venue-history endpoint — the v4 API has no per-user venue history;
get_user_stats_at_venuescans the recent check-in feed instead, so its stats cover a window (max_pages× 25 check-ins), not all time.Rate limit: 100/hour — minimise redundant calls; every response surfaces
rateLimit.remaining.Feed limit caps — tools accept
limitup to 50, but the API caps some feeds at 25 server-side.Global feed requires an elevated key —
/thepub(get_global_feed) is not authorized for standard API keys; the local feed works with any key.Foursquare lookup requires v2 IDs — the MD5-hash format; Foursquare v3 numeric IDs will not work.
Venue IDs required — use
venue_searchfirst to resolve a venue name to an ID.Public check-ins only — private user accounts are not visible.
Read-only — write operations (check-in, toast, comment, wish-list management) are deferred to v3.
MCP client timeouts — some MCP clients cap tool-call duration below the
authenticate_untappddefault of 180s; pass a smallertimeout_secondsif your client times out first, or usenpx untappd-mcp-server authin a terminal instead.
License
MIT
Available Tools
27 toolsauthenticate_untappdA
Interactively authenticate the user with Untappd via OAuth to unlock get_friend_feed, user-scoped rate limits, and richer /user data. Opens the user's browser to Untappd's login/approve page and blocks until they approve (up to timeout_seconds). PREREQUISITE: the user's Untappd API app (untappd.com/api) must have its Callback URL set to exactly http://localhost:8737/callback (or the UNTAPPD_REDIRECT_URL value). Requires UNTAPPD_CLIENT_ID + UNTAPPD_CLIENT_SECRET. The token is saved to disk and used immediately — no server restart needed.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_seconds | No | How long to wait for the user to approve in the browser (default 180) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It details the interactive process: opens browser, blocks until approval (up to timeout_seconds), saves token to disk, and applies immediately without server restart. This provides strong behavioral transparency for an authentication tool.
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 moderately concise with a clear front-loaded purpose. All sentences add value, including prerequisites and behavioral details. It could be slightly more concise but structure is good.
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?
Given no output schema and no annotations, the description covers all essential aspects: prerequisites, interactive behavior, effect (token saved, immediate use). It is sufficiently complete for an agent to understand when and how to invoke this 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 single parameter timeout_seconds is fully described in the schema (100% coverage). The description adds minimal value beyond the schema by stating 'blocks until they approve (up to timeout_seconds)'. Per guidelines, baseline 3 is appropriate.
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 interactively authenticates the user with Untappd via OAuth to unlock specific features like get_friend_feed, user-scoped rate limits, and richer /user data. It distinguishes itself from sibling tools, none of which are authentication-related.
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 explicitly states when to use this tool: to unlock get_friend_feed, user-scoped rate limits, and richer /user data. It also lists prerequisites (callback URL, client ID/secret). However, it does not explicitly state when not to use it or provide alternatives for authentication (though siblings don't offer auth).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_auth_statusA
Report Untappd authentication status: whether an access token is configured, its source (UNTAPPD_ACCESS_TOKEN env var or the saved token file), the token file path, and whether the authenticated tools are unlocked. Free (no API call) by default; set validate:true to verify the token with one authenticated API call (costs 1 rate-limit call).
| Name | Required | Description | Default |
|---|---|---|---|
| validate | No | Verify the token against the Untappd API with one call (default false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical behavior: by default no API call, and if validate:true costs 1 rate-limit call. Describes what information is reported. No annotations exist, so description fully carries the transparency 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?
Two sentences, no filler. First sentence states purpose and outputs, second sentence explains modes and cost. Efficient and front-loaded.
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?
Covers core status information and optional validation. Lacks mention of error handling or token expiration, but for a simple status check this is adequate. No output schema, but description lists return fields.
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 single parameter 'validate' has schema description (100% coverage). Description adds context: what setting it does (verify token) and cost implication, going beyond the schema.
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?
Clearly states the tool reports Untappd authentication status, listing specific outputs (token configuration, source, file path, unlocked status). Distinct from sibling tools which are about beer/venue/user data.
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?
Explains when to use (checking auth status) and mentions two modes (free vs validated). Implies this is a diagnostic tool. Doesn't explicitly state when not to use, but context is clear among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_beer_checkinsB
Retrieve the recent public check-in feed for a specific beer
| Name | Required | Description | Default |
|---|---|---|---|
| bid | Yes | Untappd beer ID | |
| limit | No | Results per page (max 50, default 25 — the API may cap some feeds at 25) | |
| max_id | No | Return results older than this checkin ID | |
| min_id | No | Return only checkins newer than this ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must stand alone but only mentions 'recent public check-in feed' without disclosing authentication needs, rate limits, or pagination behavior beyond schema defaults.
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?
Single sentence, no filler, front-loaded with key action and resource.
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?
With 4 parameters and no output schema or annotations, the description is too sparse. It omits details like pagination, sorting, or what constitutes 'recent'. Schema partially compensates but description does not.
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 baseline is 3. The description adds no parameter-specific meaning beyond what the schema provides.
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 verb 'Retrieve' and resource 'recent public check-in feed for a specific beer', distinguishing it from sibling tools like get_beer_info or get_global_feed.
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?
No guidance on when to use this tool versus alternatives such as get_beer_info or other feed tools. Does not specify prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_beer_infoC
Retrieve detailed information for a specific beer
| Name | Required | Description | Default |
|---|---|---|---|
| bid | Yes | Untappd beer ID | |
| compact | No | If true, returns beer info only. Default: false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not mention whether the tool is read-only, what side effects exist, or any authorization needs. The phrase 'detailed information' is vague and fails to specify the scope or nature of the response.
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 sentence with no extraneous words, making it concise. However, it could be more structured by breaking into multiple sentences or bullets for readability, but it earns a 4 for efficiency.
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?
Given the tool has 2 parameters, no output schema, and no annotations, the description is too sparse. It does not explain what 'detailed information' includes, nor does it provide any context about the response format or error handling. A more complete description is warranted.
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 baseline is 3. The description adds no additional meaning beyond the schema; it does not clarify the behavior of the 'compact' parameter or explain how 'bid' is used. The description is neutral but insufficient for deeper understanding.
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 verb 'Retrieve' and the resource 'detailed information for a specific beer', making the purpose unambiguous. However, it does not differentiate from siblings like 'get_beer_checkins' or 'search_beer', which could lead to confusion about which tool to use for similar purposes.
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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brewery_checkinsB
Retrieve the recent public check-in feed for a brewery (all its beers, globally)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page (max 50, default 25 — the API may cap some feeds at 25) | |
| max_id | No | Return results older than this checkin ID | |
| min_id | No | Return only checkins newer than this ID | |
| brewery_id | Yes | Untappd brewery ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states 'retrieve' (suggesting read-only) but lacks detail on auth requirements, rate limits, pagination behavior, or any side effects. Schema descriptions cover pagination params, but the description itself adds minimal behavioral context.
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?
A single, well-structured sentence that is front-loaded with the key verb and resource, containing no extraneous 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?
Despite the simplicity, the description lacks information about the return format or content of the feed (e.g., checkin details, user info). With no output schema, the agent needs more context to understand what the tool returns.
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%, so baseline is 3. The description adds the context of 'all its beers, globally' but does not elaborate on parameter meanings beyond what the schema already provides. Adequate but not enhanced.
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 verb 'Retrieve', the resource 'recent public check-in feed for a brewery', and the scope 'all its beers, globally'. It effectively distinguishes from siblings like get_brewery_info and get_beer_checkins.
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 implicitly suggests when to use (to get recent public check-ins for a specific brewery), but it does not provide explicit guidance on when not to use or compare to alternatives like get_beer_checkins or get_venue_checkins.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brewery_infoC
Retrieve detailed information and recent check-ins for a specific brewery
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | If true, returns brewery info only. Default: false | |
| brewery_id | Yes | Untappd brewery ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states high-level purpose but omits details like authentication requirements, rate limits, the scope of 'recent' check-ins, or that this is a read-only operation. Minimal transparency beyond basic function.
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, clear sentence with no unnecessary words. It efficiently communicates the core function. However, it could be slightly restructured to include key behavioral notes without adding length.
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 mentions 'detailed information and recent check-ins' but lacks specifics about what fields are included or any details on pagination or size limits. Given the absence of an output schema and annotations, more completeness would help the agent anticipate the return format.
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 input schema has 100% coverage with descriptions for both 'brewery_id' and 'compact'. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate. It does not elaborate on the behavior or expected values of 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 clearly states the action ('Retrieve') and the resource ('detailed information and recent check-ins for a specific brewery'), effectively conveying the tool's primary function. However, it does not differentiate from sibling tools like 'get_brewery_checkins' which might be a more specific alternative.
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?
No guidance is provided on when to use this tool versus its siblings, such as when to use 'get_brewery_info' over 'get_brewery_checkins' (which only returns check-ins) or when the compact parameter is beneficial. Missing explicit alternatives and context for parameter usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_checkin_infoA
Retrieve extended details for a specific check-in, including badges earned, toasts, and comments
| Name | Required | Description | Default |
|---|---|---|---|
| checkin_id | Yes | Untappd check-in ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It indicates a read operation but omits details on authentication, rate limits, or side effects. For a tool lacking annotations, this is insufficient.
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 conveys essential information without any extraneous text.
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 lookup tool with one parameter and no output schema, the description adequately covers what the tool returns (extended details, badges, toasts, comments). It is comprehensive enough for an agent to understand the tool's function.
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% (the single parameter is described as 'Untappd check-in ID'). The description adds no further parameter semantics beyond the schema, so baseline score of 3 is appropriate.
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 uses a clear verb 'Retrieve' and specifies the resource 'extended details for a specific check-in'. It lists included elements (badges, toasts, comments), distinguishing it from sibling tools like 'get_beer_checkins' that return lists of check-ins.
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 use when details of a single check-in are needed, but provides no explicit guidance on when to use this tool vs alternatives, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_friend_feedC
Retrieve the friend check-in feed for the authenticated user (requires UNTAPPD_ACCESS_TOKEN)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page (max 50, default 25 — the API may cap some feeds at 25) | |
| max_id | No | Return results older than this checkin ID | |
| min_id | No | Return only checkins newer than this ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral transparency. It only states the authentication requirement but does not disclose pagination behavior, rate limits, or what the response contains. For a tool retrieving a feed, this is insufficient.
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 sentence that is front-loaded with the primary action. Every word is essential with no extraneous content. It is appropriately concise.
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?
Given that there are three optional parameters and no output schema, the description should explain the feed's content and pagination. It does not mention that results are paginated, how min_id/max_id work, or what each checkin object looks like. The description is incomplete for a feed retrieval 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 input schema has 100% description coverage for all three parameters, so the schema already documents them well. The description adds no extra semantic value beyond the schema. Baseline score of 3 is appropriate.
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 it retrieves the 'friend check-in feed' for the authenticated user. The verb 'Retrieve' and resource 'friend check-in feed' are specific and differentiate from sibling tools like get_global_feed or get_local_feed. However, it could be more explicit about the feed containing check-ins from friends.
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 mentions the authentication requirement (UNTAPPD_ACCESS_TOKEN) but provides no guidance on when to use this tool versus alternatives such as get_global_feed or get_local_feed. There is no mention of applicable scenarios or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_global_feedA
Retrieve the global public check-in feed (The Pub). High rate-limit cost for the data returned — prefer min_id polling to fetch only new check-ins. Note: standard API keys may not be authorized for this endpoint (Untappd returns 'not authorized to call this method from this key')
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page (max 50, default 25 — the API may cap some feeds at 25) | |
| max_id | No | Return results older than this checkin ID | |
| min_id | No | Return only checkins newer than this ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds behavioral context: high rate-limit cost, authorization limitations, and a specific error message. It implies read-only behavior and polling strategy, though it could mention response format.
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 sentences, no filler. Front-loaded with purpose, then critical usage notes. Every word 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 feed tool with no output schema, the description covers rate limits, authorization, and polling strategy. It lacks description of returned data structure, but the purpose is common enough to infer. Score 4 reflects minor incompleteness.
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%, so descriptions already document limit, max_id, min_id. The description adds contextual value (rate limit, min_id polling) but does not elaborate param syntax beyond schema. Baseline 3 is appropriate.
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 'Retrieve the global public check-in feed (The Pub).' It uses a specific verb and resource, and the parenthetical alias disambiguates it from sibling tools like get_local_feed and get_friend_feed.
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?
Provides explicit guidance: 'High rate-limit cost' and 'prefer min_id polling to fetch only new check-ins,' plus a warning about authorization. Stops short of naming alternative tools explicitly but gives actionable advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_feedB
Retrieve the public check-in feed near a geographic point (The Pub — Local)
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude | |
| lng | Yes | Longitude | |
| limit | No | Results per page (max 50, default 25 — the API may cap some feeds at 25) | |
| max_id | No | Return results older than this checkin ID | |
| min_id | No | Return only checkins newer than this ID | |
| radius | No | Radius in miles (default 25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for disclosing behavioral traits. It only states 'public' implying no auth, but fails to mention pagination, rate limits, or what happens with no results.
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 sentence, front-loaded with the purpose, and contains no redundant 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?
With 6 parameters, no output schema, and no annotations, the description should be more thorough. It does not explain return format, pagination behavior, or limitations of the API.
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%, so the baseline is 3. The description adds no extra meaning beyond what the schema already provides via parameter descriptions.
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 retrieves the public check-in feed near a geographic point, with a specific verb and resource. It distinguishes from siblings like get_global_feed (no location) and get_friend_feed (friends).
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?
No guidance is provided on when to use this tool versus alternatives such as get_global_feed or get_friend_feed. The description does not mention exclusions or preferred scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trending_beersA
Retrieve globally trending beers on Untappd (macro and micro brew lists, by recent check-in velocity)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It mentions the data source and sorting (check-in velocity), but lacks details on rate limits, pagination, or output structure. For a read tool, basic safety is implied but not explicitly stated.
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?
Single sentence, front-loaded with key information, no redundancy. Every word contributes to understanding.
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?
Given no output schema, the description should hint at the return structure. It describes what is retrieved but not the format (e.g., list of beers with rank, name, brewery). Enough for basic understanding but lacks full context.
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?
There are no parameters, so the description adds minimal value beyond the schema. Baseline for zero parameters is 4, and the description correctly implies no configuration is needed.
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 verb (retrieve), resource (globally trending beers on Untappd), and scope (macro and micro brew lists by check-in velocity). It distinguishes from sibling tools like get_global_feed and get_beer_info.
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 usage for trending data but provides no explicit guidance on when to use this tool over alternatives like get_global_feed or get_local_feed. No exclusions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_activityB
Retrieve the recent check-in activity feed for a specific Untappd user
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (max 25, default 25) | |
| max_id | No | Return results older than this checkin ID | |
| min_id | No | Return only checkins newer than this ID | |
| username | Yes | Untappd username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It does not mention pagination behavior, order of results, authorization requirements, or what constitutes 'recent'. The parameter descriptions imply pagination, but the description itself lacks such details.
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 sentence that efficiently conveys the tool's core function without any superfluous 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?
Given the absence of an output schema and annotations, the description provides enough to understand the tool's purpose but lacks context about the response format, default behavior, and how to handle pagination. It is minimally complete but could be more informative.
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 provides descriptions for all 4 parameters (100% coverage). The description does not add additional meaning beyond what the schema already says, thus meeting the baseline of 3.
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 verb 'Retrieve' and the resource 'recent check-in activity feed for a specific Untappd user'. It distinguishes this tool from sibling tools like get_user_info or get_user_distinct_beers by specifying 'check-in activity feed'.
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 provides no guidance on when to use this tool versus alternatives such as get_checkin_info, get_user_beer_stats, or get_global_feed. There is no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_badgesA
Retrieve a user's earned badges (returned in pages of 50, most recent first)
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Pagination offset (badges are returned in pages of 50) | |
| username | Yes | Untappd username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses pagination (pages of 50) and ordering (most recent first), but does not mention read-only nature or authentication requirements. Partial behavioral coverage.
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?
Single sentence, front-loaded with the action, no wasted words. Efficient and clear.
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?
No output schema, but for a simple list retrieval tool, the description covers pagination and ordering adequately. Could briefly mention return structure, but sufficient for use.
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 descriptions for both parameters. Description adds ordering context but does not significantly enhance parameter meaning beyond schema.
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?
Description clearly states 'Retrieve a user's earned badges' with specific verb and resource. Distinguishes from sibling 'get_user_badge_summary' by implying this returns the full list, not a summary.
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?
Implies pagination usage but does not explicitly state when to use or not use alternatives like get_user_badge_summary. No contextual guidance beyond the pagination details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_badge_summaryB
Retrieve all badges for a user (paginating to completion) with a structured summary (costs 1 API call per 50 badges)
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Untappd username | |
| max_pages | No | Max pages to scan at 50 badges/page (default 10 = 500 badges) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses pagination behavior and API call cost, which is helpful. However, it lacks details on authentication requirements, error handling, or the structure of the summary output.
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 sentence that front-loads the primary action and includes critical details (pagination, cost). Every word adds value, making it efficient and well-structured.
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?
Given no output schema, the description should explain what the 'structured summary' contains, such as badge names, categories, or counts. The description omits this, leaving the agent uncertain about the return format. Also, no mention of error scenarios or constraints on the username.
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%, so baseline is 3. The description adds semantic value by explaining 'max_pages' in terms of badge count ('50 badges/page' and 'default 10 = 500 badges'), which clarifies the parameter's effect beyond the schema's description.
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 retrieves all badges for a user with pagination and a structured summary. The verb 'retrieve' and resource 'badges' are specific. However, it does not explicitly differentiate from the sibling 'get_user_badges', so clarity is good but not perfect.
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?
No guidance provided on when to use this tool vs alternatives (e.g., 'get_user_badges' or other user-specific tools). The description does not mention prerequisites, default behavior, or when to adjust 'max_pages'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_beer_statsA
Aggregate a user's distinct beer history into style, brewery, and rating breakdowns (paginates the API — costs 1 call per 50 beers scanned)
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Untappd username | |
| max_pages | No | Max pages to scan at 50 beers/page (default 10 = 500 beers) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses pagination behavior (cost per 50 beers scanned) and that it aggregate data. With no annotations provided, the description adequately covers the read-only nature and cost implications. However, it doesn't mention auth requirements or error handling.
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?
Single sentence with 20 words, no fluff. Front-loaded with the core action ('Aggregate a user's distinct beer history'), followed by relevant details in parentheses.
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?
Given no output schema, the description hints at return fields (style, brewery, rating breakdowns). It covers pagination and cost. Missing details like error responses or username validation, but sufficient for a tool with only two simple parameters.
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 covers 100% of parameters with descriptions. The description adds value by explaining the pagination cost (1 call per 50 beers), which clarifies the 'max_pages' parameter's impact. It also hints at output structure (breakdowns by style, brewery, rating).
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?
Clearly states the tool aggregates a user's distinct beer history into style, brewery, and rating breakdowns. The verb 'aggregate' and resource 'beer history' are specific, and the description distinguishes from sibling tools like get_user_info or get_user_distinct_beers by focusing on aggregation rather than raw lists.
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?
No explicit when-to-use or when-not-to-use guidance compared to siblings. The description implies usage for aggregated breakdowns, but does not state alternatives or exclusions (e.g., if raw list is needed, use get_user_distinct_beers).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_distinct_beersA
Retrieve the unique beers a user has checked in, with flexible sort ordering
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order (default: date). 'checkin' = most checked-in first; '_you' variants use the user's personal rating | |
| limit | No | Results per page (max 50, default 25) | |
| offset | No | Pagination offset | |
| username | Yes | Untappd username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source of behavioral info. It only states it retrieves data, but does not disclose read-only nature, authentication requirements, rate limits, or pagination behavior. For a tool with no annotation safety net, this is insufficient.
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?
Single sentence with no filler, front-loaded with key action and resource. Every word 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?
Given the tool has 4 parameters, no output schema, and no annotations, the description is minimal. It doesn't describe return format, error conditions, or usage limits. Adequate but not complete for an AI agent to fully understand implications.
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%, so the schema already describes parameters well. The description adds 'flexible sort ordering' which loosely relates to the sort parameter but adds no structural or semantic detail beyond the enum list. Baseline 3 is appropriate.
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?
Description clearly states the action (retrieve), resource (unique beers of a user), and a distinguishing feature (flexible sort ordering), differentiating it from sibling tools like get_user_activity or get_user_wishlist.
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?
No explicit when-to-use or alternatives provided. The purpose is implied by the name but the description lacks guidance on when to choose this tool over other user-focused tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_friendsB
Retrieve a user's friend list (public accounts only)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per page (max 50, default 25) | |
| offset | No | Pagination offset | |
| username | Yes | Untappd username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description has full responsibility for behavioral disclosure. It only says 'retrieve', implying read-only, but provides no details on authentication requirements, rate limits, data freshness, or what happens if the user is private. This is insufficient for a tool with no other safety metadata.
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?
Single sentence with no filler words. Front-loads the core purpose and constraint. Highly efficient.
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 straightforward list tool, the description covers basic functionality. However, it omits mention of pagination behavior (even though parameters are in schema) and does not clarify that the list is from the perspective of the authenticated user. With no output schema, a brief note on return format would improve completeness.
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%, so parameters are fully documented in the schema. The description adds no extra meaning beyond what the schema already provides. Baseline 3 is appropriate.
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 (retrieve), resource (user's friend list), and a key constraint (public accounts only). It distinguishes from siblings like get_user_info or get_user_badges by specifying the exact data returned.
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?
No guidance on when to use this tool versus alternatives. The sibling list exists but the description does not mention contexts where this tool is preferred, nor does it give any when-not-to-use advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_infoC
Retrieve profile and stats for a specific Untappd user by username
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | If true, returns user info only (no checkins, media, recent brews). Default: false | |
| username | Yes | Untappd username to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It only says 'Retrieve', implying a read-only operation, but it does not mention authentication requirements, rate limits, or the effect of the 'compact' parameter on output.
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?
A single, direct sentence with no wasted words. It is front-loaded and easy to scan, though it omits important details.
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?
Given no output schema and no annotations, the description lacks detail about what 'profile and stats' includes or how the optional 'compact' parameter affects results. This is insufficient for an agent to fully understand the tool's output and behavior.
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%, so baseline is 3. The description adds no extra meaning beyond 'by username'; the 'compact' parameter is not mentioned, so no value added beyond schema.
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 verb 'Retrieve' and the resource 'profile and stats for a specific Untappd user by username'. It distinguishes this general user info tool from more specific sibling tools like get_user_badge_summary or get_user_activity.
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?
No guidance is provided on when to use this tool versus alternatives like get_user_badge_summary or get_user_activity. There are no conditions or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_stats_at_venueA
Get a user's check-in stats at a specific venue — visit count, last visit, average rating, top beers — by scanning their recent check-in feed (1 API call per 25 check-ins scanned; the stats cover the scanned window, not all time)
| Name | Required | Description | Default |
|---|---|---|---|
| username | No | Untappd username (defaults to UNTAPPD_USERNAME env var) | |
| venue_id | Yes | Untappd venue ID | |
| max_pages | No | Max feed pages to scan at 25 check-ins/page (default 5 = 125 check-ins) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses API cost ('1 API call per 25 check-ins scanned') and the limitation that stats are window-based. This provides valuable behavioral context beyond the input 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?
A single, well-structured sentence with a dash for listing and a parenthetical for caveats. Every part adds value without 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?
No output schema, but description explains what is returned (stats list) and the scanning method. It addresses a key limitation. For a stats tool among many siblings, this is sufficient context.
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%, but the description adds context: username defaults to an env var, max_pages default 5 = 125 check-ins, and the scanning process. This enhances understanding of how parameters affect behavior.
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 verb 'Get' and the resource 'user's check-in stats at a specific venue', listing specific data points (visit count, last visit, average rating, top beers). It distinguishes from siblings like get_user_beer_stats and get_venue_checkins by focusing on aggregated stats at a venue.
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 explains the scanning mechanism and that stats cover only the scanned window, not all time. This implies a trade-off between speed and completeness, giving usage context. However, it does not explicitly compare to alternatives or state when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_wishlistC
Retrieve beers on a user's wish list
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order (default: date) | |
| limit | No | Results per page (max 50, default 25) | |
| offset | No | Pagination offset | |
| username | Yes | Untappd username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It only states 'Retrieve', implying a read operation, but lacks details on authentication needs, pagination behavior, or any side effects. The minimal verb provides some transparency but insufficient for full behavioral disclosure.
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, concise sentence that immediately conveys the tool's purpose. It is front-loaded and efficient, though it could include more detail without becoming verbose.
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 4 parameters (including pagination and sorting) and no output schema, the description is too sparse. It does not explain the pagination mechanism, sort options, or what the response contains, leaving agents reliant solely on 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 coverage is 100%, so the description adds no extra meaning beyond the schema's parameter descriptions. Baseline score of 3 is appropriate as the description does not compensate further.
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 specifies the action (Retrieve) and resource (beers on a user's wish list). It distinguishes from sibling user tools like get_user_info or get_user_activity by focusing on the wish list, though it does not explicitly differentiate from similar ones.
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?
No guidance is provided on when to use this tool versus alternatives. Sibling tools like get_user_distinct_beers or get_user_badge_summary might be confused, but no comparison or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_venue_checkinsA
Retrieve the recent check-in feed for a specific venue. Primary tool for 'what's on tap right now' use case.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (max 25, default 25) | |
| max_id | No | Return results older than this checkin ID | |
| min_id | No | Return only checkins newer than this ID | |
| venue_id | Yes | Untappd venue ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must convey behavioral traits. It fails to mention any limits, pagination behavior, rate limits, authentication needs, or response characteristics beyond the basic action.
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 concise sentences with no fluff: first states the function, second gives a clear use case. Every word 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?
With no output schema and four parameters including pagination controls, the description should explain the response structure and how parameters like min_id/max_id work. The use case hint is helpful but insufficient for complete agent guidance.
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%, meaning the input schema already documents all parameters adequately. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
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 ('Retrieve') and resource ('recent check-in feed for a specific venue'), and uniquely identifies the tool's use case as 'what's on tap right now', distinguishing it from siblings like get_venue_info or get_beer_checkins.
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 gives a specific use case ('Primary tool for...'), which implies when to use it, but does not explicitly mention when not to use it or provide alternatives, though the context of sibling tools is available.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_venue_foursquare_lookupA
Resolve a Foursquare venue ID to its Untappd venue (bridge between Foursquare data and Untappd venue tools)
| Name | Required | Description | Default |
|---|---|---|---|
| foursquare_id | Yes | Foursquare venue ID in v2 MD5-hash format (v3 numeric IDs will not work) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only states the basic mapping behavior, omitting important details such as error handling (e.g., if the ID is invalid or not found), return shape, or any destructive actions. The description is too sparse for complete transparency.
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, concise sentence that effectively communicates the tool's purpose. It is front-loaded and contains no unnecessary 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 one-parameter tool, the description is adequate but incomplete: it does not mention what the output is (presumably an Untappd venue), and there is no output schema. Given the lack of annotations, adding a brief note about the return value would improve completeness.
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 covers 100% of parameters, but the description adds a crucial constraint: the foursquare_id must be in v2 MD5-hash format, specifically noting that v3 numeric IDs will not work. This goes beyond the schema description and guides correct input.
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 resolves a Foursquare venue ID to its Untappd venue, positioning it as a unique bridge between platforms. This distinguishes it from sibling tools like venue_search or get_venue_info, which operate entirely within Untappd.
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 usage when a Foursquare venue ID is known and an Untappd venue is desired, but it lacks explicit guidance on when to use this versus alternatives like venue_search. No exclusion criteria or examples are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_venue_infoB
Retrieve detailed information and recent check-ins for a known venue
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | If true, returns venue info only (no checkins, media, top_beers). Default: false | |
| venue_id | Yes | Untappd venue ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It mentions 'recent check-ins' but does not specify the recency limit, number of check-ins, or any behavioral traits like rate limits, authentication needs, or data scope beyond the mention. The compact parameter is not described in the tool description, leaving agents to infer from 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?
The description is a single, clear sentence that is efficient and to the point. It could benefit from slightly more structure but has no unnecessary 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?
Given there is no output schema, the description should explain what 'detailed information' and 'recent check-ins' entail. It does not mention available fields, structure, or pagination. However, for a tool with only two parameters and a clear purpose, it is adequately complete for basic understanding.
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% for both parameters, so the description does not need to add much. It provides no additional meaning beyond what the schema already states about 'venue_id' and 'compact'.
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 verb 'retrieve' and the resource 'detailed information and recent check-ins for a known venue'. It effectively distinguishes itself from sibling tools like 'venue_search' (which finds venues) and 'get_venue_checkins' (which focuses only on check-ins).
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 that the tool is for a venue already known (via venue_id), but it does not explicitly state when to use it versus alternatives, nor does it mention prerequisites or conditions. It lacks explicit guidance on when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_beerC
Search for beers by name
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Beer name search query | |
| sort | No | Sort order: checkin (default), name, count | |
| offset | No | Pagination offset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the search action without mentioning pagination, output format, authentication needs, or any side effects.
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, clear sentence with no fluff. It is appropriately concise for a simple search tool, though it could benefit from slight expansion.
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?
Given the tool's three parameters and lack of annotations or output schema, the description is insufficient. It does not explain pagination, sorting details, or what the response contains, which is needed for effective use.
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% (all three parameters have descriptions in the schema), so the baseline is 3. The description does not add any extra meaning beyond what the schema provides.
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 verb 'Search' and resource 'beers', and the qualifier 'by name' gives specificity. It is not a tautology and distinguishes from sibling tools like 'search_brewery' or 'venue_search'.
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?
No guidance is provided on when to use this tool versus alternatives. There is no mention of scenarios, prerequisites, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_breweryC
Search for breweries by name
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Brewery name search query | |
| offset | No | Offset for pagination |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are missing, so the description must carry the full burden. It discloses no behavioral traits beyond the basic action; for example, it does not mention pagination behavior, result limits, or response structure.
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 extremely concise (one phrase) but lacks any structured detail. It is not verbose, but the minimalism sacrifices clarity and completeness.
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?
Given the lack of annotations, output schema, and the presence of pagination, the description is insufficient. It does not explain how offset works, what the result set looks like, or any constraints, leaving the agent underinformed.
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%, providing clear definitions for both parameters. The description adds no extra meaning beyond the schema, maintaining the baseline score of 3.
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 (search) and the resource (breweries by name), which is specific and non-tautological. However, it does not differentiate from sibling tools like search_beer or venue_search, which have similar structures.
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?
No usage guidelines are provided. There is no indication of when to use this tool versus alternatives like search_beer or venue_search, nor any prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_venue_then_get_user_statsA
Search for a venue by name, then get the user's check-in stats at the top match (1 search call + a scan of the user's recent check-in feed at 25/page)
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Venue search query (venue name) | |
| lat | No | Latitude for location-aware search | |
| lng | No | Longitude for location-aware search | |
| username | No | Untappd username (defaults to UNTAPPD_USERNAME env var) | |
| max_pages | No | Max feed pages to scan at 25 check-ins/page (default 5 = 125 check-ins) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses the number of calls (1 search + scan) and feed page size (25/page), giving agents cost and pagination insight. Missing edge cases like no match or errors.
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?
Single sentence front-loads the action and includes key details (call count, page size). Efficient, no 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?
Complex compound tool with no output schema. Description explains flow and scan strategy but omits output details and error handling. Adequate for basic use but missing completeness.
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%, so baseline 3. Description adds context that max_pages controls scan depth and defaults to 5. Does not elaborate on other parameters beyond schema, which is adequate but not exceptional.
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 compound action: search for a venue by name then get user stats at the top match. It distinguishes from siblings like venue_search (pure search) and get_user_stats_at_venue (requires venue ID).
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 explains when to use the tool (to both search and get stats) and implies the context (scanning feed). However, it does not explicitly state when not to use or mention alternatives like separate calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
venue_searchA
Search for venues (breweries, bars, restaurants) by name, with optional location awareness
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query (venue name) | |
| lat | No | Latitude for location-aware results | |
| lng | No | Longitude for location-aware results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It only states the basic action (search) and does not disclose behavioral traits such as rate limits, authentication requirements, result ordering, pagination, or error handling. The description is too minimal for a tool with no annotation backing.
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 sentence of 14 words, highly concise and front-loaded. It communicates the core purpose and key feature (location awareness) without any extraneous information. Every word 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 simple search tool with 3 parameters and no output schema, the description covers the essential purpose. However, it omits details such as result format, pagination, or behavior when no results are found. Given the tool's low complexity, it is nearly complete but could be slightly more informative.
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 input schema covers 100% of parameters with clear descriptions. The description adds 'by name' and 'optional location awareness', but these only reinforce what the schema already provides. No additional syntax, validation rules, or examples are given, so the description adds only marginal value beyond the schema.
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 'Search for venues (breweries, bars, restaurants) by name, with optional location awareness'. It provides a specific verb ('search') and resource ('venues'), enumerates types, and distinguishes from sibling tools like search_brewery and search_beer. The mention of location awareness adds differentiation.
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 usage for searching venues by name with optional location, but it does not explicitly state when to use this tool over alternatives like search_brewery or search_beer. No guidance on when not to use or prerequisites is provided, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
27 tool updates
v2.0.0- First observed
authenticate_untappd - First observed
get_auth_status - First observed
get_beer_checkins - First observed
get_beer_info - First observed
get_brewery_checkins - First observed
get_brewery_info - First observed
get_checkin_info - First observed
get_friend_feed - First observed
get_global_feed - First observed
get_local_feed - First observed
get_trending_beers - First observed
get_user_activity - First observed
get_user_badge_summary - First observed
get_user_badges - First observed
get_user_beer_stats - First observed
get_user_distinct_beers - First observed
get_user_friends - First observed
get_user_info - First observed
get_user_stats_at_venue - First observed
get_user_wishlist - First observed
get_venue_checkins - First observed
get_venue_foursquare_lookup - First observed
get_venue_info - First observed
search_beer - First observed
search_brewery - First observed
search_venue_then_get_user_stats - First observed
venue_search
TDQS
Scored across 27 tools
Most tools have distinct purposes, but there is some overlap, e.g., get_user_badge_summary vs get_user_badges, and venue_search combined with search_venue_then_get_user_stats may cause confusion. Descriptions help, but a few boundaries are fuzzy.
Tool names predominantly follow a 'verb_noun' pattern (get_*, search_*), with only 'authenticate_untappd' being a slight deviation. Overall consistent and predictable.
27 tools is on the high side, approaching the upper limit of what feels manageable. The domain is broad, but some tools could be merged (e.g., get_user_badge_summary and get_user_badges).
Covers most read-only operations for users, venues, beers, breweries, and check-ins. Missing interactive features like toasting or commenting, but those may be out of scope. Light dead end: get_global_feed warns it may not work for standard keys.
Maintenance
Related MCP Connectors
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
The official Model Context Protocol server for Ambee. It gives any MCP-compatible AI assistant — Claude, ChatGPT, Cursor, VS Code, Ollama, and more direct access to live air quality, pollen, and weather data. To get started, including information on signing up and obtaining your Ambee key, check out the Ambee documentation on https://docs.ambeedata.com
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol (MCP) server that creates a bridge between AI language models and the Trakt.tv API, allowing LLMs to access real-time entertainment data and personal Trakt viewing history.46MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI assistants to make HTTP requests (GET, POST, PUT, DELETE) to external APIs through standardized MCP tools.42MIT
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol server that standardizes tool discovery, execution, and context management for AI applications.MIT
- FlicenseAqualityFmaintenanceA Model Context Protocol server that exposes the Scryfall Magic: The Gathering API as tools for LLM clients, enabling card search, images, prices, sets, rulings, symbology, catalogs, and bulk data access.18-