vibo-mcp 2.3.0 → 2.4.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 +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +50 -1
- package/dist/auth.js +7 -3
- package/dist/bundle.js +693 -86
- package/dist/client.js +13 -1
- package/dist/gql.js +50 -0
- package/dist/index.js +2 -0
- package/dist/reorder.js +27 -0
- package/dist/tools/collaboration.js +19 -7
- package/dist/tools/lookups.js +59 -0
- package/dist/tools/section-manage.js +288 -0
- package/dist/tools/session.js +1 -1
- package/dist/tools/shared.js +8 -3
- package/dist/tools/song-management.js +70 -10
- package/dist/tools/songs.js +44 -3
- package/dist/version.js +1 -1
- package/dist/view.js +13 -0
- package/package.json +3 -3
- package/server.json +2 -2
- package/skills/vibo-mcp/SKILL.md +17 -5
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "MCP server for Vibo (vibodj.com) — plan & manage event music, song requests, ideas, guests, and playlists via natural language",
|
|
10
|
-
"version": "2.
|
|
10
|
+
"version": "2.4.0"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "Vibo",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "MCP server for Vibo — browse & manage events, timeline, songs, the DJ song ideas/questions, guests, and exports to Spotify/Apple Music",
|
|
18
|
-
"version": "2.
|
|
18
|
+
"version": "2.4.0",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibo-mcp",
|
|
3
3
|
"displayName": "Vibo",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.4.0",
|
|
5
5
|
"description": "MCP server for Vibo (vibodj.com) — plan & manage event music, song requests, ideas, guests, and playlists via natural language",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
package/README.md
CHANGED
|
@@ -33,11 +33,31 @@ Choose one method:
|
|
|
33
33
|
|--------|----------|------|
|
|
34
34
|
| Email + password (recommended) | `VIBO_EMAIL`, `VIBO_PASSWORD` | You sign in to Vibo with an email/password. |
|
|
35
35
|
| Captured token | `VIBO_ACCESS_TOKEN` (+ `VIBO_REFRESH_TOKEN`) | Your account uses Apple/Google/Facebook sign-in (no password). Capture `x-token`/`x-refresh-token` from a signed-in `web.vibodj.com` session. |
|
|
36
|
-
| Browser capture (SSO) | run `vibo_capture_session` | With the
|
|
36
|
+
| Browser capture (SSO) | run `vibo_capture_session` | With the [ContextMint Bridge](#contextmint-bridge-for-sso-capture) browser extension installed and signed into `web.vibodj.com`, capture the token automatically (saved to `~/.vibo-mcp/session.json`). |
|
|
37
37
|
|
|
38
38
|
The server boots without credentials; the config error only surfaces on the
|
|
39
39
|
first tool call.
|
|
40
40
|
|
|
41
|
+
### ContextMint Bridge (for SSO capture)
|
|
42
|
+
|
|
43
|
+
`vibo_capture_session` reads your signed-in tab through the ContextMint Bridge
|
|
44
|
+
browser extension. Install it from
|
|
45
|
+
[github.com/nullnet-app/contextmint-bridge/releases](https://github.com/nullnet-app/contextmint-bridge/releases):
|
|
46
|
+
|
|
47
|
+
- **Chrome:** download the Chrome zip, unzip it, and load it unpacked at
|
|
48
|
+
`chrome://extensions` (Developer mode → Load unpacked).
|
|
49
|
+
- **Safari:** not available yet — it will ship inside the ContextMint app,
|
|
50
|
+
which has no public download. Use Chrome for now.
|
|
51
|
+
|
|
52
|
+
Approve the pair code the extension shows on first use.
|
|
53
|
+
|
|
54
|
+
ContextMint Bridge is the fetchproxy browser extension under its new name, from
|
|
55
|
+
the same maintainer — fetchproxy's own README
|
|
56
|
+
(https://github.com/chrischall/fetchproxy#extension) points to it. Its source is
|
|
57
|
+
public at https://github.com/nullnet-app/contextmint-bridge: build it yourself,
|
|
58
|
+
or check a release zip against the `.sha256` file published beside it
|
|
59
|
+
(`shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256`).
|
|
60
|
+
|
|
41
61
|
### Uploads
|
|
42
62
|
|
|
43
63
|
`vibo_set_profile_photo` and photo/file answers to `vibo_answer_question` only
|
|
@@ -46,6 +66,35 @@ read local files from the upload directory — `VIBO_UPLOAD_DIR`, default
|
|
|
46
66
|
Hidden files, symlinks that lead outside the directory, and files over 25 MiB
|
|
47
67
|
are refused, and photo slots need an image file.
|
|
48
68
|
|
|
69
|
+
### Timeline sections and limits
|
|
70
|
+
|
|
71
|
+
- `vibo_create_section` adds a section and can place it (`afterSectionId` or a
|
|
72
|
+
0-based `position`). The web app only appends new sections to the end.
|
|
73
|
+
Visibility is `host` (default, "Me and DJ") or `public` (guests too).
|
|
74
|
+
- `vibo_delete_section` previews the section's name, its song count and its
|
|
75
|
+
answered questions before deleting. It refuses the DJ's do-not-play list
|
|
76
|
+
(`dontPlay`) and timeline dividers (`headline`) unless you pass `force: true`.
|
|
77
|
+
- `vibo_reorder_sections` moves one or more sections to directly after another
|
|
78
|
+
section, or to the start. `vibo_reorder_songs` does the same for songs within
|
|
79
|
+
a section.
|
|
80
|
+
|
|
81
|
+
Vibo's limits, checked before anything is sent:
|
|
82
|
+
|
|
83
|
+
| What | Limit |
|
|
84
|
+
|---|---|
|
|
85
|
+
| Section name | 45 characters (the web app's limit) |
|
|
86
|
+
| Song comment (`vibo_update_song`) | 90 characters (an emoji counts as 2) |
|
|
87
|
+
|
|
88
|
+
A host can only do some things when the DJ's settings allow it: adding or
|
|
89
|
+
reordering sections (event settings), or reordering one section's songs (that
|
|
90
|
+
section's "hosts can order songs"). Vibo turns "hosts can order songs" **off**
|
|
91
|
+
for every section a host creates, and only the DJ can turn it on. When a
|
|
92
|
+
setting blocks you, the tool says which one instead of returning Vibo's bare
|
|
93
|
+
"Action is not allowed for user".
|
|
94
|
+
|
|
95
|
+
Vibo doesn't store a section description set by a host, so
|
|
96
|
+
`vibo_create_section` takes a note (for the DJ) instead.
|
|
97
|
+
|
|
49
98
|
### Confirmations
|
|
50
99
|
|
|
51
100
|
Every write (adding or removing songs, comments, invites, exports, answers,
|
package/dist/auth.js
CHANGED
|
@@ -21,7 +21,7 @@ const SERVER_NAME = 'vibo-mcp';
|
|
|
21
21
|
/**
|
|
22
22
|
* Capture the signed-in user's Vibo token pair from their browser via the
|
|
23
23
|
* fetchproxy bridge and return it (the caller persists after verifying).
|
|
24
|
-
* Preconditions: the
|
|
24
|
+
* Preconditions: the ContextMint Bridge browser
|
|
25
25
|
* extension is installed and the user is signed into https://web.vibodj.com.
|
|
26
26
|
*/
|
|
27
27
|
export async function captureViboSession(deps = {}) {
|
|
@@ -52,8 +52,12 @@ export async function captureViboSession(deps = {}) {
|
|
|
52
52
|
}
|
|
53
53
|
catch (err) {
|
|
54
54
|
const msg = err instanceof Error ? err.message : String(err);
|
|
55
|
+
// @fetchproxy errors that know their own remedy (FetchproxyHintedError —
|
|
56
|
+
// e.g. capability_unavailable: this browser can't do that) carry a `hint`;
|
|
57
|
+
// keep it rather than telling the user to (re)install the extension.
|
|
58
|
+
const bridgeHint = err?.hint;
|
|
55
59
|
throw new McpToolError(`Vibo browser token capture failed: ${msg}`, {
|
|
56
|
-
hint: 'Install the
|
|
60
|
+
hint: typeof bridgeHint === 'string' && bridgeHint ? bridgeHint : 'Install the ContextMint Bridge browser extension (https://github.com/nullnet-app/contextmint-bridge/releases), sign into https://web.vibodj.com, approve the pair code, then retry.',
|
|
57
61
|
cause: err,
|
|
58
62
|
});
|
|
59
63
|
}
|
|
@@ -61,7 +65,7 @@ export async function captureViboSession(deps = {}) {
|
|
|
61
65
|
const refreshToken = session.localStorage?.['x-refresh-token'] ?? null;
|
|
62
66
|
if (!accessToken) {
|
|
63
67
|
throw new McpToolError('No Vibo token found in the signed-in browser tab.', {
|
|
64
|
-
hint: 'Make sure you are signed into https://web.vibodj.com in the browser with
|
|
68
|
+
hint: 'Make sure you are signed into https://web.vibodj.com in the browser with ContextMint Bridge, then retry.',
|
|
65
69
|
});
|
|
66
70
|
}
|
|
67
71
|
// Return the captured pair WITHOUT persisting — the caller verifies it
|