untappd-mcp 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +29 -0
- package/.claude-plugin/plugin.json +16 -0
- package/.mcp.json +14 -0
- package/README.md +75 -0
- package/SKILL.md +47 -0
- package/dist/bundle.js +31806 -0
- package/dist/client.js +252 -0
- package/dist/index.js +29 -0
- package/dist/tools/beer.js +41 -0
- package/dist/tools/brewery.js +32 -0
- package/dist/tools/checkin.js +110 -0
- package/dist/tools/feed.js +30 -0
- package/dist/tools/user.js +108 -0
- package/dist/tools/utilities.js +27 -0
- package/dist/tools/venue.js +31 -0
- package/dist/version.js +6 -0
- package/package.json +55 -0
- package/server.json +50 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
3
|
+
"name": "untappd-mcp",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "Chris Hall",
|
|
6
|
+
"email": "chris.c.hall@gmail.com"
|
|
7
|
+
},
|
|
8
|
+
"metadata": {
|
|
9
|
+
"description": "MCP server for Untappd — beers, breweries, venues, check-ins, wishlists, and your friend feed",
|
|
10
|
+
"version": "0.0.0"
|
|
11
|
+
},
|
|
12
|
+
"plugins": [
|
|
13
|
+
{
|
|
14
|
+
"name": "untappd-mcp",
|
|
15
|
+
"displayName": "Untappd",
|
|
16
|
+
"source": "./",
|
|
17
|
+
"description": "MCP server for Untappd — search beers/breweries/venues, read profiles/check-ins/wishlists, and post check-ins, toasts, and comments",
|
|
18
|
+
"version": "0.0.0",
|
|
19
|
+
"author": {
|
|
20
|
+
"name": "Chris Hall"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://github.com/chrischall/untappd-mcp",
|
|
23
|
+
"repository": "https://github.com/chrischall/untappd-mcp",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"keywords": ["untappd", "beer", "breweries", "checkins", "mcp"],
|
|
26
|
+
"category": "lifestyle"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "untappd-mcp",
|
|
3
|
+
"displayName": "Untappd",
|
|
4
|
+
"version": "0.0.0",
|
|
5
|
+
"description": "MCP server for Untappd — search beers/breweries/venues, read check-ins and wishlists, and post check-ins, toasts, and comments",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Chris Hall",
|
|
8
|
+
"email": "chris.c.hall@gmail.com"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/chrischall/untappd-mcp",
|
|
11
|
+
"repository": "https://github.com/chrischall/untappd-mcp",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"keywords": ["untappd", "beer", "breweries", "checkins", "mcp"],
|
|
14
|
+
"skills": "./SKILL.md",
|
|
15
|
+
"mcp": "./.mcp.json"
|
|
16
|
+
}
|
package/.mcp.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"untappd": {
|
|
4
|
+
"command": "node",
|
|
5
|
+
"args": ["${CLAUDE_PLUGIN_ROOT}/dist/index.js"],
|
|
6
|
+
"env": {
|
|
7
|
+
"UNTAPPD_USERNAME": "${UNTAPPD_USERNAME}",
|
|
8
|
+
"UNTAPPD_PASSWORD": "${UNTAPPD_PASSWORD}",
|
|
9
|
+
"UNTAPPD_CLIENT_ID": "${UNTAPPD_CLIENT_ID}",
|
|
10
|
+
"UNTAPPD_CLIENT_SECRET": "${UNTAPPD_CLIENT_SECRET}"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
package/README.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# untappd-mcp
|
|
2
|
+
|
|
3
|
+
An MCP server for [Untappd](https://untappd.com). It talks to Untappd's mobile
|
|
4
|
+
(v4) API using your own account — search beers, breweries, and venues; read
|
|
5
|
+
profiles, check-ins, wishlists, distinct beers, badges, friends, and your friend
|
|
6
|
+
activity feed; and post check-ins, toasts, and comments.
|
|
7
|
+
|
|
8
|
+
> Developed and maintained by AI (Claude Code). Use at your own discretion. This
|
|
9
|
+
> is an unofficial client that uses Untappd's private mobile API; it is not
|
|
10
|
+
> affiliated with or endorsed by Untappd.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
Untappd's iPad/iPhone app authenticates with a username/password **xauth** login
|
|
15
|
+
(`POST https://api.untappd.com/v4/xauth`) that returns an access token, then
|
|
16
|
+
calls the v4 API. This server reproduces that exactly:
|
|
17
|
+
|
|
18
|
+
- Reads carry the token as an `access_token` query param.
|
|
19
|
+
- Writes carry it as an `Authorization: Bearer` header (with the app's client
|
|
20
|
+
credentials in the query), matching the app's real requests.
|
|
21
|
+
|
|
22
|
+
The token is fetched on demand, cached in memory, and refreshed automatically if
|
|
23
|
+
it goes stale.
|
|
24
|
+
|
|
25
|
+
## Configuration
|
|
26
|
+
|
|
27
|
+
| Variable | Required | Description |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| `UNTAPPD_USERNAME` | yes | Your Untappd username or login email. |
|
|
30
|
+
| `UNTAPPD_PASSWORD` | yes | Your Untappd password (used only for the xauth login). |
|
|
31
|
+
| `UNTAPPD_CLIENT_ID` | yes | The Untappd mobile app client id (see below). |
|
|
32
|
+
| `UNTAPPD_CLIENT_SECRET` | yes | The Untappd mobile app client secret. |
|
|
33
|
+
| `UNTAPPD_DEVICE_ID` | no | Stable device UUID the token is keyed to (a default is provided). |
|
|
34
|
+
| `UNTAPPD_UTV` | no | API version param (default `4.0.0`). |
|
|
35
|
+
| `UNTAPPD_USER_AGENT` | no | Override the User-Agent (default mimics the app). |
|
|
36
|
+
|
|
37
|
+
Copy `.env.example` to `.env` and fill it in for local use.
|
|
38
|
+
|
|
39
|
+
### Obtaining the client id / secret
|
|
40
|
+
|
|
41
|
+
Untappd does not publish these; they live in the mobile app. Capture them from
|
|
42
|
+
your own app's traffic with an HTTPS proxy:
|
|
43
|
+
|
|
44
|
+
1. Install a proxy such as [mitmproxy](https://mitmproxy.org) and trust its CA
|
|
45
|
+
certificate on the device running the Untappd app.
|
|
46
|
+
2. Point the device (or, on an Apple-silicon Mac running the iPad app, the Mac's
|
|
47
|
+
system HTTP/HTTPS proxy) at the proxy.
|
|
48
|
+
3. Open Untappd and sign in. Find the `POST https://api.untappd.com/v4/xauth`
|
|
49
|
+
request — its **query string** contains `client_id` and `client_secret`.
|
|
50
|
+
4. Put those into `UNTAPPD_CLIENT_ID` / `UNTAPPD_CLIENT_SECRET`.
|
|
51
|
+
|
|
52
|
+
Keep these values private; do not commit them.
|
|
53
|
+
|
|
54
|
+
## Tools
|
|
55
|
+
|
|
56
|
+
Reads: `untappd_search_beer`, `untappd_beer_info`, `untappd_search_brewery`,
|
|
57
|
+
`untappd_brewery_info`, `untappd_search_venue`, `untappd_venue_info`,
|
|
58
|
+
`untappd_user_info`, `untappd_user_checkins`, `untappd_user_wishlist`,
|
|
59
|
+
`untappd_user_beers`, `untappd_user_badges`, `untappd_user_friends`,
|
|
60
|
+
`untappd_activity_feed`, `untappd_checkin_info`, `untappd_healthcheck`.
|
|
61
|
+
|
|
62
|
+
Writes (confirm-gated — return a dry-run preview unless called with
|
|
63
|
+
`confirm: true`): `untappd_toast`, `untappd_add_comment`, `untappd_checkin`.
|
|
64
|
+
|
|
65
|
+
## Development
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
npm install
|
|
69
|
+
npm run build
|
|
70
|
+
npm test
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## License
|
|
74
|
+
|
|
75
|
+
MIT
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: untappd-mcp
|
|
3
|
+
description: Search Untappd beers, breweries, and venues; read user profiles, check-ins, wishlists, distinct beers, badges, friends, and your friend activity feed; and post check-ins, toasts, and comments to your own Untappd account. Use when the user asks about beer ratings, what a beer or brewery is like on Untappd, someone's Untappd check-ins or wishlist, or wants to log/toast/comment on a beer.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Untappd MCP
|
|
7
|
+
|
|
8
|
+
Talks to Untappd's mobile (v4) API using your own account. Logs in via the app's
|
|
9
|
+
`xauth` endpoint (username + password → access token) and calls the same
|
|
10
|
+
endpoints the iPad app uses.
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
Set four environment variables (see the README for details):
|
|
15
|
+
|
|
16
|
+
- `UNTAPPD_USERNAME`, `UNTAPPD_PASSWORD` — your Untappd login.
|
|
17
|
+
- `UNTAPPD_CLIENT_ID`, `UNTAPPD_CLIENT_SECRET` — the Untappd mobile app client
|
|
18
|
+
credentials (obtained by intercepting the app's traffic; see README).
|
|
19
|
+
|
|
20
|
+
Run `untappd_healthcheck` to confirm login works.
|
|
21
|
+
|
|
22
|
+
## Read tools
|
|
23
|
+
|
|
24
|
+
- `untappd_search_beer` / `untappd_beer_info` — find beers, then get full detail by bid.
|
|
25
|
+
- `untappd_search_brewery` / `untappd_brewery_info` — breweries.
|
|
26
|
+
- `untappd_search_venue` / `untappd_venue_info` — bars, breweries, restaurants.
|
|
27
|
+
- `untappd_user_info` — a user's profile (omit `username` for your own).
|
|
28
|
+
- `untappd_user_checkins` — recent check-ins (page with `max_id`).
|
|
29
|
+
- `untappd_user_wishlist` — wishlist beers.
|
|
30
|
+
- `untappd_user_beers` — distinct beers ever checked in.
|
|
31
|
+
- `untappd_user_badges` / `untappd_user_friends`.
|
|
32
|
+
- `untappd_activity_feed` — your friend feed (page with `max_id`).
|
|
33
|
+
- `untappd_checkin_info` — full detail of one check-in.
|
|
34
|
+
|
|
35
|
+
Most user tools default `username` to your configured account when omitted.
|
|
36
|
+
|
|
37
|
+
## Write tools (confirm-gated — these post to your public account)
|
|
38
|
+
|
|
39
|
+
Each returns a dry-run preview and makes NO network call unless called with
|
|
40
|
+
`confirm: true`:
|
|
41
|
+
|
|
42
|
+
- `untappd_toast` — toast/like a check-in (this endpoint is a toggle).
|
|
43
|
+
- `untappd_add_comment` — comment on a check-in.
|
|
44
|
+
- `untappd_checkin` — post a new beer check-in to your feed (needs a `bid` from
|
|
45
|
+
`untappd_search_beer`; optional `rating` 0–5 in 0.25 steps, `shout`, venue).
|
|
46
|
+
|
|
47
|
+
Photo attachment and wishlist add/remove are not yet supported.
|