Untappd MCP
Provides tools for searching beers, retrieving beer details, accessing user profile, wishlist, and beer history, and performing check-ins with ratings and messages via the Untappd API.
Click on "Install 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 MCPShow me my recent Untappd check-ins"
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
A multi-user Model Context Protocol server for Untappd. It keeps Untappd credentials on the server and exposes a small, explicit tool surface for search, profile data, wishlists, beer history, and check-ins.
Current capabilities
Streamable HTTP endpoint:
POST /mcpOAuth 2.1 authorization-code flow with mandatory PKCE S256
OAuth protected-resource and authorization-server metadata
Claude Client ID Metadata Document (CIMD) support and a pre-registered public Claude client fallback
Short-lived, audience-bound opaque access tokens and rotating refresh tokens
Firebase Auth Google sign-in and a secure server-side browser session
search_beersandget_beerget_my_profile,get_my_wishlist, andget_my_beerscheck_in, with rating and message validationUntappd authorization-code connect flow:
GET /connect/untappdAES-256-GCM encryption at rest for credentials in Firestore collection
untappd_credentialsFirebase ID-token verification on every authenticated server request
The server never returns an Untappd access token to an MCP client.
Related MCP server: colacloud-mcp
Identity and authorization
There are three separate credentials. They must never be substituted for one another:
Firebase browser sign-in ──> MCP OAuth server ── MCP access token ──> /mcp
└─ encrypted Untappd access token ──> Untappd APIFirebase Auth identifies the person in the browser and creates a secure HTTP-only session. The MCP authorization server then issues its own access token whose owner is that Firebase uid, whose audience is exactly this server’s /mcp URL, and whose scopes are untappd:read and untappd:write.
Unauthenticated MCP requests receive 401 with protected-resource metadata. A compatible client such as Claude discovers the authorization server, resolves its hosted client metadata (or uses the pre-registered public Claude client), sends the user through Firebase sign-in and the consent screen, then exchanges a PKCE-protected code for MCP tokens.
Endpoint | Purpose |
| Streamable HTTP MCP; accepts only MCP OAuth bearer tokens. |
| Unauthenticated liveness endpoint. |
| Protected-resource metadata. The |
| OAuth authorization-server metadata. |
| Dynamic Client Registration implementation; intentionally not advertised in metadata. |
| Authorization request, Firebase browser sign-in, then consent. |
| Authorization-code and refresh-token grants. |
| Starts the separate Untappd authorization flow for the signed-in Firebase user. |
The server keeps only hashes of MCP access, authorization-code, and refresh tokens in Firestore. Refresh tokens rotate; a reused refresh token revokes its whole token family. Untappd access tokens use AES-256-GCM encryption before storage.
Untappd connection flow
The user opens
/connect/untappdand signs in with Firebase if no browser session exists.The server creates a signed, ten-minute Untappd OAuth
statebound to that Firebaseuid, then redirects the user to Untappd.Untappd redirects to
/connect/untappd/callback.The server exchanges the code, fetches the profile, and stores the encrypted token under
untappd_credentials/{firebaseUid}.
Legacy field users/{uid}.untappdAccessToken is intentionally not read. Migrate it through an admin-only one-time job after Firestore rules have been closed; do not expose that field to browsers.
Claude connector setup
Use https://YOUR_CLOUD_RUN_OR_CUSTOM_DOMAIN/mcp as the connector URL. Select Always required authentication. If Claude does not use its hosted client metadata and reports that automatic client registration is unsupported, choose Use your own OAuth client and enter:
Client ID: untappd-mcp-claude
Client secret: leave blankThis is a public OAuth client restricted to Claude's exact HTTPS callback URL. PKCE S256 remains mandatory, so the client ID is not a secret.
Local development
Prerequisites: Node.js 22+, Firebase Application Default Credentials, a Firebase project with Google sign-in enabled, and a registered Untappd application.
cp .env.example .env
npm ci
npm test
npm run build
npm startConfigure the values in .env; never commit it. Generate the encryption key with:
openssl rand -base64 32For local callback testing, register the exact UNTAPPD_REDIRECT_URI with Untappd. Untappd requires HTTPS for API calls, and it expects a non-standard User-Agent for every request.
Deployment
The included Dockerfile is suitable for Cloud Run. Configure these values through Secret Manager:
UNTAPPD_CLIENT_SECRETUNTAPPD_TOKEN_ENCRYPTION_KEYCONNECT_STATE_SECRET
Grant the Cloud Run service account Firestore access for untappd_credentials, Secret Manager access for the three runtime secrets, and only firebaseauth.users.createSession plus firebaseauth.users.get for secure Firebase session handling. Keep Firebase service-account credentials and Untappd credentials out of the image and repository.
Set these non-secret runtime variables:
PUBLIC_BASE_URL=https://YOUR_CLOUD_RUN_OR_CUSTOM_DOMAIN
FIREBASE_PROJECT_ID=beer-degustation
FIREBASE_WEB_API_KEY=...
FIREBASE_AUTH_DOMAIN=beer-degustation.firebaseapp.com
FIREBASE_WEB_APP_ID=...
UNTAPPD_CLIENT_ID=...
UNTAPPD_REDIRECT_URI=https://YOUR_CLOUD_RUN_OR_CUSTOM_DOMAIN/connect/untappd/callback
UNTAPPD_USER_AGENT=untappd-mcp/0.1 (support@example.com)
MCP_ALLOWED_ORIGINS=https://claude.aiPUBLIC_BASE_URL and UNTAPPD_REDIRECT_URI must use the exact final HTTPS origin. Add that hostname to Firebase Console → Authentication → Settings → Authorized domains before using the OAuth browser login. The browser config fields are Firebase public configuration, not credentials.
Create Firestore TTL policies for expiresAt in these collection groups: mcp_oauth_transactions, mcp_oauth_authorization_codes, mcp_oauth_access_tokens, and mcp_oauth_refresh_tokens. TTL reduces retained metadata; server-side expiry checks remain mandatory.
Security notes
Close Firestore Rules before deployment. Cloud Run uses the Admin SDK, so it continues to work after browser access is denied. With open rules, an attacker could forge an OAuth token record.
Untappd tokens are encrypted before reaching Firestore, but rotate the encryption key with a planned re-encryption migration.
The OAuth callback uses a signed and expiring
statevalue to prevent CSRF.OAuth authorization codes are one-time, expire after one minute, and require PKCE S256. Redirect URIs are exact-match registered values.
MCP access tokens are short-lived and audience-bound to this server. Untappd tokens are never accepted at
/mcp.check_inis intentionally marked non-idempotent. The calling model must get user confirmation before invoking it.untappd:writeis required forcheck_in; all other current tools requireuntappd:read.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search books and authors, fetch editions, browse subjects, and resolve cover images.
X (formerly Twitter): X (formerly Twitter) public and private data API for search, posts (Tweets).
Search, document and execute authenticated API calls across 700+ apps via one MCP server
Unified social-media data across 10 networks: profiles, posts, search, comments, cross-search.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides access to the Open Brewery DB API, allowing AI assistants to search for breweries and retrieve detailed information like location, type, and contact details. It enables interactive exploration of a global database containing over 40,000 breweries.261MIT
- AlicenseAqualityNot gradedmaintenanceProvides access to over 2.5 million US alcohol label records from the TTB via the COLA Cloud API. It enables users to search for labels by brand, barcode, or permit holder and retrieve detailed product information including label images and ABV.6
- AlicenseAqualityAmaintenanceAn MCP server that interfaces with Untappd's mobile API to search beers, breweries, venues, and user data, and to post check-ins, toasts, and comments using your own account.45362MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Untappd connectivity, enabling beer search with optional limit, offset, and sorting.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tumbochka/untappd-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server