Context7
Up-to-date docs for AI agents
제작자가 쓴 설명(영어 원문)
Untappd MCP — search beers/breweries/venues, read check-ins & wishlists, post check-ins
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
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_DIR비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 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"
}
}
}
}터미널에서 이 명령어를 실행하세요
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-mcp실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.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"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"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"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
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 env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검
레지스트리 이름이 GitHub 계정 chrischall 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: UNTAPPD_ACCESS_TOKEN, UNTAPPD_PASSWORD, UNTAPPD_CLIENT_ID, UNTAPPD_CLIENT_SECRET
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(2.6.1)은 3일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.
같은 카테고리에는: Context7, Codebase Memory, Exa
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Up-to-date docs for AI agents
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.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
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
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요