vibo-mcp 1.5.0 → 1.5.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 +1 -1
- package/dist/bundle.js +4 -5
- package/dist/song-search.js +13 -10
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
|
@@ -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": "1.5.
|
|
10
|
+
"version": "1.5.1"
|
|
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": "1.5.
|
|
18
|
+
"version": "1.5.1",
|
|
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": "1.5.
|
|
4
|
+
"version": "1.5.1",
|
|
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/dist/bundle.js
CHANGED
|
@@ -31126,7 +31126,7 @@ function toolAnnotations(opts = {}) {
|
|
|
31126
31126
|
}
|
|
31127
31127
|
|
|
31128
31128
|
// src/version.ts
|
|
31129
|
-
var VERSION = "1.5.
|
|
31129
|
+
var VERSION = "1.5.1";
|
|
31130
31130
|
|
|
31131
31131
|
// src/client.ts
|
|
31132
31132
|
import { dirname as dirname2, join as join2 } from "path";
|
|
@@ -32136,12 +32136,11 @@ function streamingLinkCount(links) {
|
|
|
32136
32136
|
(l) => typeof l === "string" && l.length > 0
|
|
32137
32137
|
).length;
|
|
32138
32138
|
}
|
|
32139
|
-
function
|
|
32139
|
+
function soundcloudHandleIsConsistentWith(url2, artist) {
|
|
32140
32140
|
const path = url2.replace(/^https?:\/\/(www\.)?soundcloud\.com\//i, "").split("/")[0] ?? "";
|
|
32141
32141
|
const handle = normalizeName(path).split(" ").join("");
|
|
32142
|
-
if (!handle) return false;
|
|
32143
32142
|
const tokens = normalizeName(artist).split(" ").filter((t) => t.length >= 4);
|
|
32144
|
-
if (!tokens.length) return
|
|
32143
|
+
if (!handle || !tokens.length) return true;
|
|
32145
32144
|
return tokens.some((t) => handle.includes(t));
|
|
32146
32145
|
}
|
|
32147
32146
|
function assessSong(song, intended) {
|
|
@@ -32187,7 +32186,7 @@ function assessSong(song, intended) {
|
|
|
32187
32186
|
}
|
|
32188
32187
|
const soundcloud = song.links?.soundcloud;
|
|
32189
32188
|
const artistForHandle = isJunkArtist ? intended?.artist : artist || intended?.artist;
|
|
32190
|
-
if (soundcloud && artistForHandle && !
|
|
32189
|
+
if (soundcloud && artistForHandle && !soundcloudHandleIsConsistentWith(soundcloud, artistForHandle)) {
|
|
32191
32190
|
warnings.push(`SoundCloud handle does not obviously belong to "${artistForHandle}".`);
|
|
32192
32191
|
}
|
|
32193
32192
|
const confidence = hard ? "likely-not-original" : warnings.length ? "uncertain" : "likely-original";
|
package/dist/song-search.js
CHANGED
|
@@ -127,21 +127,24 @@ function streamingLinkCount(links) {
|
|
|
127
127
|
return [links.spotify, links.appleMusic, links.tidal, links.deezer, links.soundcloud].filter((l) => typeof l === 'string' && l.length > 0).length;
|
|
128
128
|
}
|
|
129
129
|
/**
|
|
130
|
-
* True when a SoundCloud URL's handle
|
|
131
|
-
* handle contains one of the artist's substantial name tokens
|
|
132
|
-
* loose: `soundcloud.com/elvissonymusic/...`
|
|
133
|
-
* account), while
|
|
130
|
+
* True when a SoundCloud URL's handle is consistent with `artist` — i.e. the
|
|
131
|
+
* handle contains one of the artist's substantial name tokens, *or* the check
|
|
132
|
+
* cannot be run at all. Deliberately loose: `soundcloud.com/elvissonymusic/...`
|
|
133
|
+
* counts for Elvis Presley (a label account), while
|
|
134
|
+
* `soundcloud.com/jen-prince-602192391/...` does not.
|
|
134
135
|
*/
|
|
135
|
-
function
|
|
136
|
+
function soundcloudHandleIsConsistentWith(url, artist) {
|
|
136
137
|
const path = url.replace(/^https?:\/\/(www\.)?soundcloud\.com\//i, '').split('/')[0] ?? '';
|
|
137
138
|
const handle = normalizeName(path).split(' ').join('');
|
|
138
|
-
if (!handle)
|
|
139
|
-
return false;
|
|
140
139
|
const tokens = normalizeName(artist)
|
|
141
140
|
.split(' ')
|
|
142
141
|
.filter((t) => t.length >= 4);
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
// Nothing to compare — an unparseable handle, or an artist whose every name
|
|
143
|
+
// token is too short to match on without hitting noise ("Sia", "SZA", "U2",
|
|
144
|
+
// "Nas"). Abstain rather than accuse: this is a soft signal, and a check that
|
|
145
|
+
// cannot run is not evidence against the result.
|
|
146
|
+
if (!handle || !tokens.length)
|
|
147
|
+
return true;
|
|
145
148
|
return tokens.some((t) => handle.includes(t));
|
|
146
149
|
}
|
|
147
150
|
/**
|
|
@@ -197,7 +200,7 @@ export function assessSong(song, intended) {
|
|
|
197
200
|
// Soft signal: only checkable when a SoundCloud link is present.
|
|
198
201
|
const soundcloud = song.links?.soundcloud;
|
|
199
202
|
const artistForHandle = isJunkArtist ? intended?.artist : artist || intended?.artist;
|
|
200
|
-
if (soundcloud && artistForHandle && !
|
|
203
|
+
if (soundcloud && artistForHandle && !soundcloudHandleIsConsistentWith(soundcloud, artistForHandle)) {
|
|
201
204
|
warnings.push(`SoundCloud handle does not obviously belong to "${artistForHandle}".`);
|
|
202
205
|
}
|
|
203
206
|
const confidence = hard
|
package/dist/version.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
// literal on the line carrying the release marker; every manifest and the MCP
|
|
3
3
|
// server banner import VERSION from here, so there is exactly one place to keep
|
|
4
4
|
// in sync (and one release-please extra-files entry).
|
|
5
|
-
export const VERSION = '1.5.
|
|
5
|
+
export const VERSION = '1.5.1'; // x-release-please-version
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibo-mcp",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"mcpName": "io.github.chrischall/vibo-mcp",
|
|
5
5
|
"description": "Vibo (vibodj.com) MCP server for Claude — host/couple event music planning & management. Developed and maintained by AI (Claude Code).",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/chrischall/vibo-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "1.5.
|
|
9
|
+
"version": "1.5.1",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "vibo-mcp",
|
|
14
|
-
"version": "1.5.
|
|
14
|
+
"version": "1.5.1",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|