Context7
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Description from the maker (original English)
Untappd MCP — search beers/breweries/venues, read check-ins & wishlists, post check-ins
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
UNTAPPD_ACCESS_TOKEN, UNTAPPD_USERNAME, UNTAPPD_PASSWORD, UNTAPPD_CLIENT_ID, UNTAPPD_CLIENT_SECRET, UNTAPPD_DEVICE_ID, UNTAPPD_UTV, UNTAPPD_USER_AGENT, UNTAPPD_TIMEZONE, UNTAPPD_RATE_LIMIT_PER_HOUR, UNTAPPD_PHOTO_DIR, UNTAPPD_CACHE_DB, UNTAPPD_CACHE_DIRValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"untappd": {
"command": "npx",
"args": [
"-y",
"untappd-mcp"
],
"env": {
"UNTAPPD_ACCESS_TOKEN": "your-value",
"UNTAPPD_USERNAME": "your-value",
"UNTAPPD_PASSWORD": "your-value",
"UNTAPPD_CLIENT_ID": "your-value",
"UNTAPPD_CLIENT_SECRET": "your-value",
"UNTAPPD_DEVICE_ID": "your-value",
"UNTAPPD_UTV": "your-value",
"UNTAPPD_USER_AGENT": "your-value",
"UNTAPPD_TIMEZONE": "your-value",
"UNTAPPD_RATE_LIMIT_PER_HOUR": "your-value",
"UNTAPPD_PHOTO_DIR": "your-value",
"UNTAPPD_CACHE_DB": "your-value",
"UNTAPPD_CACHE_DIR": "your-value"
}
}
}
}Run this in your terminal
claude mcp add untappd --env UNTAPPD_ACCESS_TOKEN=your-value --env UNTAPPD_USERNAME=your-value --env UNTAPPD_PASSWORD=your-value --env UNTAPPD_CLIENT_ID=your-value --env UNTAPPD_CLIENT_SECRET=your-value --env UNTAPPD_DEVICE_ID=your-value --env UNTAPPD_UTV=your-value --env UNTAPPD_USER_AGENT=your-value --env UNTAPPD_TIMEZONE=your-value --env UNTAPPD_RATE_LIMIT_PER_HOUR=your-value --env UNTAPPD_PHOTO_DIR=your-value --env UNTAPPD_CACHE_DB=your-value --env UNTAPPD_CACHE_DIR=your-value -- npx -y untappd-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"untappd": {
"command": "npx",
"args": [
"-y",
"untappd-mcp"
],
"env": {
"UNTAPPD_ACCESS_TOKEN": "your-value",
"UNTAPPD_USERNAME": "your-value",
"UNTAPPD_PASSWORD": "your-value",
"UNTAPPD_CLIENT_ID": "your-value",
"UNTAPPD_CLIENT_SECRET": "your-value",
"UNTAPPD_DEVICE_ID": "your-value",
"UNTAPPD_UTV": "your-value",
"UNTAPPD_USER_AGENT": "your-value",
"UNTAPPD_TIMEZONE": "your-value",
"UNTAPPD_RATE_LIMIT_PER_HOUR": "your-value",
"UNTAPPD_PHOTO_DIR": "your-value",
"UNTAPPD_CACHE_DB": "your-value",
"UNTAPPD_CACHE_DIR": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"untappd": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"untappd-mcp"
],
"env": {
"UNTAPPD_ACCESS_TOKEN": "your-value",
"UNTAPPD_USERNAME": "your-value",
"UNTAPPD_PASSWORD": "your-value",
"UNTAPPD_CLIENT_ID": "your-value",
"UNTAPPD_CLIENT_SECRET": "your-value",
"UNTAPPD_DEVICE_ID": "your-value",
"UNTAPPD_UTV": "your-value",
"UNTAPPD_USER_AGENT": "your-value",
"UNTAPPD_TIMEZONE": "your-value",
"UNTAPPD_RATE_LIMIT_PER_HOUR": "your-value",
"UNTAPPD_PHOTO_DIR": "your-value",
"UNTAPPD_CACHE_DB": "your-value",
"UNTAPPD_CACHE_DIR": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
UNTAPPD_USERNAME envUNTAPPD_DEVICE_ID envUNTAPPD_UTV envUNTAPPD_USER_AGENT envUNTAPPD_TIMEZONE envUNTAPPD_RATE_LIMIT_PER_HOUR envUNTAPPD_PHOTO_DIR envUNTAPPD_CACHE_DB envUNTAPPD_CACHE_DIR envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account chrischall, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: UNTAPPD_ACCESS_TOKEN, UNTAPPD_PASSWORD, UNTAPPD_CLIENT_ID, UNTAPPD_CLIENT_SECRET
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (2.7.0) reached the registry today.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Context7, Codebase Memory, Exa
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Feeds AI the latest docs for libraries and frameworks before it answers, so code it writes does not use outdated, removed functions.
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
An MCP server for Untappd. It talks to Untappd's mobile (v4) API using your own account — search beers, breweries, and venues; read profiles, check-ins, wishlists, distinct beers, badges, friends, and your friend activity feed; and post check-ins, toasts, and comments.
Developed and maintained by AI (Claude Code). Use at your own discretion. This
is an unofficial client that uses Untappd's private mobile API; it is not
affiliated with or endorsed by Untappd.
Untappd's iPad/iPhone app authenticates with a username/password xauth login (POST https://api.untappd.com/v4/xauth) that returns an access token, then calls the v4 API. This server reproduces that, except where the token goes:
Authorization: Bearer header, never in the URL (the app uses an access_token query param; the API accepts both).Authorization: Bearer header (with the app's client credentials in the query), matching the app's real requests.The token is fetched on demand, cached in memory, and refreshed automatically if it goes stale.
| Variable | Required | Description |
|---|---|---|
UNTAPPD_ACCESS_TOKEN | no | An access token you already hold. Supply this and no password is needed — the xauth login is skipped entirely. |
UNTAPPD_USERNAME | if no token | Your Untappd username or login email. |
UNTAPPD_PASSWORD | if no token | Your Untappd password (used only for the xauth login that mints a token). |
UNTAPPD_CLIENT_ID | for login & writes | The Untappd mobile app client id (see below). A pre-seeded access token can read without it. |
UNTAPPD_CLIENT_SECRET | for login & writes | The Untappd mobile app client secret. |
UNTAPPD_DEVICE_ID | no | Stable device UUID the token is keyed to (a default is provided). |
UNTAPPD_UTV | no | API version param (default 4.0.0). |
UNTAPPD_USER_AGENT | no | Override the User-Agent (default mimics the app). |
UNTAPPD_TIMEZONE | no | IANA timezone (e.g. America/New_York) that check-ins are stamped with when the call doesn't pass timezone. Set it when the server runs somewhere other than the drinker's zone (e.g. a hosted connector, usually UTC). Defaults to the server process's zone. |
UNTAPPD_PHOTO_DIR | no | The directory untappd_checkin's photo_path must be inside (several allowed, separated by :). Defaults to ~/Downloads/untappd-mcp — put a photo there to attach it. Any other file is refused, so a prompt-injected shout or comment can't publish an arbitrary image from your disk. |
UNTAPPD_CACHE_DB | no | Path to the local check-in cache SQLite file (default ~/.untappd-mcp/checkins.db). A relative path or leading ~ resolves against your home directory, never the working directory, so every host (Claude Desktop, Claude Code, …) finds the same file; the resolved path is logged to stderr at startup. The db file is always made owner-only (0600), and so are any directories the server creates plus the default ~/.untappd-mcp; a directory you point this into that already exists keeps its permissions. Local/stdio only. |
UNTAPPD_CACHE_DIR | no | Directory for the cache instead of ~/.untappd-mcp (the file is checkins.db inside it). UNTAPPD_CACHE_DB wins if both are set. |
UNTAPPD_RATE_LIMIT_PER_HOUR | no | The hourly call limit the syncs' stop-before-429 guard enforces (default 100, Untappd's documented per-token limit). Only change it if Untappd gives your token a different limit. |
Copy .env.example to .env and fill it in for local use.
Every write asks you to confirm it first. A client that can show a confirmation prompt (Claude Code) shows one (unless MCP_CONFIRM_ELICITATION=off). Elsewhere the write takes two calls: the first does nothing and returns a preview of the exact request plus a confirmToken, and only a repeat call with the same arguments and that token performs it. A token works once, for that tool and those arguments only; change anything and the call is refused with a fresh preview.
| variable | default | |
|---|---|---|
MCP_CONFIRM_MODE | ask-user | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse. |
MCP_CONFIRM_ELICITATION | on | off never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE behaviour. Set it for a client that says it can show prompts but never does (the write hangs — opencode 2.0.x). Any other value is treated as on, with a warning on stderr. |
MCP_CONFIRM_TTL_SECONDS | 600 | How long a token stays valid. |
MCP_CONFIRM_SECRET | random per process | Signing key; set it only if tokens must survive a server restart. |
Untappd does not publish these; they live in the mobile app. Capture them from your own app's traffic with an HTTPS proxy:
POST https://api.untappd.com/v4/xauth request — its query string contains client_id and client_secret.UNTAPPD_CLIENT_ID / UNTAPPD_CLIENT_SECRET.Keep these values private; do not commit them.
Reads: untappd_search_beer, untappd_beer_info, untappd_beer_activity, untappd_search_brewery, untappd_brewery_info, untappd_brewery_beers, untappd_search_venue, untappd_venue_info, untappd_venue_activity, untappd_user_info, untappd_user_checkins, untappd_user_wishlist, untappd_user_beers, untappd_user_badges, untappd_user_friends, untappd_pending_friends, untappd_activity_feed, untappd_checkin_info, untappd_resolve, untappd_open_url, untappd_user_venues, untappd_venue_by_foursquare, untappd_trending, untappd_notifications, untappd_local_checkins, untappd_upload_slots, untappd_healthcheck.
Writes (each asks you to confirm first — see Confirmations): untappd_toast, untappd_add_comment, untappd_delete_comment, untappd_checkin, untappd_wishlist_add, untappd_wishlist_remove, untappd_delete_checkin, untappd_add_friend, untappd_accept_friend, untappd_reject_friend, untappd_remove_friend.
untappd_checkin takes one photo (JPEG or PNG, max 15 MB) through exactly one of:
UNTAPPD_PHOTO_DIR. Local installs only: on the hosted connector the server can't see your files, so a path is refused with directions to the slot flow below.{filename, contentBase64, mimeType?}. Works anywhere; fine for a small photo, but every byte rides inside the tool call.untappd_upload_slots (slots: [{filename}]) returns a signed upload URL and a ready curl per photo; PUT the photo with it, then pass the slot's blobKey. It refuses on a deployment with no blob store.Every route is checked the same way (image type, size cap, bytes that really are a JPEG/PNG), and the confirmation preview names the photo and its SHA-256 — a blob that changes between the preview and the confirmed call is refused (DRAFT_CHANGED). An uploaded blob is deleted only after the check-in and its photo succeed (photo_blob: {deleted: true}); otherwise it is kept (kept: true) so you can retry.
Check-in cache: untappd_sync_checkins, untappd_sync_user_beers, untappd_cache_has_had, untappd_cache_has_had_many, untappd_cache_not_had, untappd_cache_query, untappd_top_not_had, untappd_cache_status, untappd_cache_forget, untappd_sync_wishlist (mirrors a user's wishlist locally so picks can boost wishlisted beers), untappd_sync_brewery_likes (mirrors the breweries a user likes/follows on Untappd, as "untappd" favorites), untappd_sync_user_venues + untappd_cache_has_visited (a user's full venue history — "has this person been here?" — which pages fully for any public/friend account, unlike their check-ins).
Trip planning: untappd_trip_check takes a user (or usernames + mode) and up to 25 stops — each a venue_id, a name (+ city/state), a lat/lng, and/or a brewery_id — and returns per stop: whether they've been there (first/recent visit, total visits, the matched venues incl. Untappd's "(duplicate of …)" copies; a brewery stop is matched by the brewery's name), how many of the brewery's beers they've had, and the top N (default 4) not-had beers by Untappd global rating, with an optional style filter (out-of-production beers skipped unless asked). Visits and has-had are answered from the cache only; the one API call it may make is brewery/beer_list for a brewery whose list isn't cached or is past its 7-day TTL — at most api_budget (default 5; 0 = strictly cache-only, using a stale list flagged stale), under the rate-limit guard. Favorite venues and breweries are flagged, prefer_favorites (default true) boosts wishlisted and favorite-brewery beers (liked on Untappd, derived or manual), and a stop within near_favorite_radius_m (default 2 km) of a favorite venue gets near_favorites and a "Near a favorite: …" hint.
Group checks: untappd_cache_has_had_many and untappd_top_not_had accept usernames (up to 10) with mode: "none_had" (default — beers new to everyone) or "any_not_had" (beers at least one of them still needs); each beer says who has and hasn't had it.
What they drank at a venue (opt-in, costs calls): untappd_sync_venue_drinks fetches the beer from each cached venue's first and most-recent visit check-in (checkin/view, budgeted by max_calls, stops before the rate limit). It's a partial picture — two check-ins per venue at most — shown in untappd_cache_has_visited as drinks.
Favorites (cache only, never written to Untappd): untappd_favorites_list lists a user's favorite beers, breweries and venues, each once with its sources and a reason. Derived favorites come from the synced history — venues with ≥5 check-ins or visits spanning ≥3 distinct months; breweries with ≥5 beers had and an average rating ≥3.75, or ≥15 beers; beers rated ≥4.25 or had ≥3 times — and every threshold can be overridden per call. Manual favorites are added and removed with untappd_favorite_add / untappd_favorite_remove (local table, optional note). Results from untappd_cache_has_had, untappd_cache_has_had_many, untappd_cache_has_visited, untappd_brewery_beers, untappd_venue_menu and untappd_top_not_had carry a favorite field {is_favorite, sources, reason}, and untappd_top_not_had ranks wishlisted beers and beers from favorite breweries higher by default (prefer_favorites: false turns that off); untappd_trip_check carries the same flags and boost.
Untappd favorites (breweries only): untappd_sync_brewery_likes mirrors the breweries a user "likes" on Untappd (user/brewerylikes — the app calls them "followings"; works for another user's public/friend account, ~50 per call). Like the wishlist sync it's a full pass from the top, resumable (cursor saved every page, another_run_needed, percent), stops before the rate limit with stopped_for_rate_limit + resume info, and only drops unliked breweries once a
Only the beginning is shown; read the rest in the repo