untappd-mcp 2.2.4 → 2.3.1
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 +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/.mcp.json +1 -0
- package/README.md +9 -7
- package/dist/bundle.js +188 -76
- package/dist/cache/store.js +13 -11
- package/dist/cache/sync.js +6 -0
- package/dist/client.js +68 -25
- package/dist/tools/cache.js +22 -4
- package/dist/tools/checkin.js +53 -30
- package/dist/tools/confirm.js +3 -0
- package/dist/tools/friends.js +3 -1
- package/dist/tools/utilities.js +8 -2
- package/dist/tools/wishlist.js +6 -2
- package/dist/version.js +1 -1
- package/package.json +2 -3
- package/server.json +59 -10
- package/skills/untappd-mcp/SKILL.md +1 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "MCP server for Untappd — beers, breweries, venues, check-ins, wishlists, and your friend feed",
|
|
10
|
-
"version": "2.
|
|
10
|
+
"version": "2.3.1"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "Untappd",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "MCP server for Untappd — search beers/breweries/venues, read profiles/check-ins/wishlists, and post check-ins, toasts, and comments",
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.3.1",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "untappd-mcp",
|
|
3
3
|
"displayName": "Untappd",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.3.1",
|
|
5
5
|
"description": "MCP server for Untappd — search beers/breweries/venues, read check-ins and wishlists, and post check-ins, toasts, and comments",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
"mcp"
|
|
19
19
|
],
|
|
20
20
|
"skills": "./skills/",
|
|
21
|
-
"
|
|
21
|
+
"mcpServers": "./.mcp.json"
|
|
22
22
|
}
|
package/.mcp.json
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"command": "node",
|
|
5
5
|
"args": ["${CLAUDE_PLUGIN_ROOT}/dist/index.js"],
|
|
6
6
|
"env": {
|
|
7
|
+
"UNTAPPD_ACCESS_TOKEN": "${UNTAPPD_ACCESS_TOKEN}",
|
|
7
8
|
"UNTAPPD_USERNAME": "${UNTAPPD_USERNAME}",
|
|
8
9
|
"UNTAPPD_PASSWORD": "${UNTAPPD_PASSWORD}",
|
|
9
10
|
"UNTAPPD_CLIENT_ID": "${UNTAPPD_CLIENT_ID}",
|
package/README.md
CHANGED
|
@@ -13,9 +13,10 @@ activity feed; and post check-ins, toasts, and comments.
|
|
|
13
13
|
|
|
14
14
|
Untappd's iPad/iPhone app authenticates with a username/password **xauth** login
|
|
15
15
|
(`POST https://api.untappd.com/v4/xauth`) that returns an access token, then
|
|
16
|
-
calls the v4 API. This server reproduces that
|
|
16
|
+
calls the v4 API. This server reproduces that, except where the token goes:
|
|
17
17
|
|
|
18
|
-
- Reads carry the token as an `
|
|
18
|
+
- Reads carry the token as an `Authorization: Bearer` header, never in the URL
|
|
19
|
+
(the app uses an `access_token` query param; the API accepts both).
|
|
19
20
|
- Writes carry it as an `Authorization: Bearer` header (with the app's client
|
|
20
21
|
credentials in the query), matching the app's real requests.
|
|
21
22
|
|
|
@@ -29,13 +30,13 @@ it goes stale.
|
|
|
29
30
|
| `UNTAPPD_ACCESS_TOKEN` | no | An access token you already hold. Supply this and **no password is needed** — the xauth login is skipped entirely. |
|
|
30
31
|
| `UNTAPPD_USERNAME` | if no token | Your Untappd username or login email. |
|
|
31
32
|
| `UNTAPPD_PASSWORD` | if no token | Your Untappd password (used only for the xauth login that mints a token). |
|
|
32
|
-
| `UNTAPPD_CLIENT_ID` |
|
|
33
|
-
| `UNTAPPD_CLIENT_SECRET` |
|
|
33
|
+
| `UNTAPPD_CLIENT_ID` | for login & writes | The Untappd mobile app client id (see below). A pre-seeded access token can read without it. |
|
|
34
|
+
| `UNTAPPD_CLIENT_SECRET` | for login & writes | The Untappd mobile app client secret. |
|
|
34
35
|
| `UNTAPPD_DEVICE_ID` | no | Stable device UUID the token is keyed to (a default is provided). |
|
|
35
36
|
| `UNTAPPD_UTV` | no | API version param (default `4.0.0`). |
|
|
36
37
|
| `UNTAPPD_USER_AGENT` | no | Override the User-Agent (default mimics the app). |
|
|
37
38
|
| `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. |
|
|
38
|
-
| `UNTAPPD_PHOTO_DIR` | no |
|
|
39
|
+
| `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. |
|
|
39
40
|
| `UNTAPPD_CACHE_DB` | no | Path to the local check-in cache SQLite file (default `~/.untappd-mcp/checkins.db`; created owner-only — dir `0700`, file `0600`). Local/stdio only. |
|
|
40
41
|
|
|
41
42
|
Copy `.env.example` to `.env` and fill it in for local use.
|
|
@@ -43,7 +44,7 @@ Copy `.env.example` to `.env` and fill it in for local use.
|
|
|
43
44
|
### Confirmations
|
|
44
45
|
|
|
45
46
|
Every write asks you to confirm it first. A client that can show a confirmation
|
|
46
|
-
prompt (Claude Code) shows one. Elsewhere the write takes two calls: the first
|
|
47
|
+
prompt (Claude Code) shows one (unless `MCP_CONFIRM_ELICITATION=off`). Elsewhere the write takes two calls: the first
|
|
47
48
|
does nothing and returns a preview of the exact request plus a `confirmToken`,
|
|
48
49
|
and only a repeat call with the same arguments and that token performs it. A
|
|
49
50
|
token works once, for that tool and those arguments only; change anything and
|
|
@@ -51,7 +52,8 @@ the call is refused with a fresh preview.
|
|
|
51
52
|
|
|
52
53
|
| variable | default | |
|
|
53
54
|
|---|---|---|
|
|
54
|
-
| `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
|
|
55
|
+
| `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`. |
|
|
56
|
+
| `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. |
|
|
55
57
|
| `MCP_CONFIRM_TTL_SECONDS` | `600` | How long a token stays valid. |
|
|
56
58
|
| `MCP_CONFIRM_SECRET` | random per process | Signing key; set it only if tokens must survive a server restart. |
|
|
57
59
|
|