vibo-mcp 1.8.0 → 1.8.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 +174 -24
- package/dist/version.js +1 -1
- package/package.json +6 -6
- 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.8.
|
|
10
|
+
"version": "1.8.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.8.
|
|
18
|
+
"version": "1.8.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.8.
|
|
4
|
+
"version": "1.8.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
|
@@ -13450,7 +13450,7 @@ ${content.join("\n")}
|
|
|
13450
13450
|
var version = {
|
|
13451
13451
|
major: 4,
|
|
13452
13452
|
minor: 5,
|
|
13453
|
-
patch:
|
|
13453
|
+
patch: 4
|
|
13454
13454
|
};
|
|
13455
13455
|
|
|
13456
13456
|
// node_modules/zod/v4/core/schemas.js
|
|
@@ -15743,22 +15743,99 @@ function isRecursive(inst, stack) {
|
|
|
15743
15743
|
result = true;
|
|
15744
15744
|
};
|
|
15745
15745
|
const def = inst._zod.def;
|
|
15746
|
-
|
|
15747
|
-
|
|
15748
|
-
|
|
15749
|
-
|
|
15750
|
-
|
|
15751
|
-
|
|
15752
|
-
|
|
15753
|
-
|
|
15754
|
-
|
|
15755
|
-
|
|
15756
|
-
|
|
15757
|
-
|
|
15758
|
-
|
|
15759
|
-
|
|
15760
|
-
|
|
15761
|
-
|
|
15746
|
+
const kind = def.type;
|
|
15747
|
+
switch (kind) {
|
|
15748
|
+
case "object": {
|
|
15749
|
+
for (const key of Reflect.ownKeys(def.shape))
|
|
15750
|
+
check2(def.shape[key]);
|
|
15751
|
+
check2(def.catchall);
|
|
15752
|
+
break;
|
|
15753
|
+
}
|
|
15754
|
+
case "array":
|
|
15755
|
+
check2(def.element);
|
|
15756
|
+
break;
|
|
15757
|
+
case "tuple":
|
|
15758
|
+
for (const el of def.items)
|
|
15759
|
+
check2(el);
|
|
15760
|
+
check2(def.rest);
|
|
15761
|
+
break;
|
|
15762
|
+
case "record":
|
|
15763
|
+
case "map":
|
|
15764
|
+
check2(def.keyType);
|
|
15765
|
+
check2(def.valueType);
|
|
15766
|
+
break;
|
|
15767
|
+
case "set":
|
|
15768
|
+
check2(def.valueType);
|
|
15769
|
+
break;
|
|
15770
|
+
case "union":
|
|
15771
|
+
for (const el of def.options)
|
|
15772
|
+
check2(el);
|
|
15773
|
+
break;
|
|
15774
|
+
case "intersection":
|
|
15775
|
+
check2(def.left);
|
|
15776
|
+
check2(def.right);
|
|
15777
|
+
break;
|
|
15778
|
+
case "optional":
|
|
15779
|
+
case "nullable":
|
|
15780
|
+
case "default":
|
|
15781
|
+
case "prefault":
|
|
15782
|
+
case "catch":
|
|
15783
|
+
case "readonly":
|
|
15784
|
+
case "nonoptional":
|
|
15785
|
+
case "promise":
|
|
15786
|
+
case "success":
|
|
15787
|
+
check2(def.innerType);
|
|
15788
|
+
break;
|
|
15789
|
+
case "pipe":
|
|
15790
|
+
check2(def.in);
|
|
15791
|
+
check2(def.out);
|
|
15792
|
+
break;
|
|
15793
|
+
case "function":
|
|
15794
|
+
check2(def.input);
|
|
15795
|
+
check2(def.output);
|
|
15796
|
+
break;
|
|
15797
|
+
// reading `_zod.innerType` resolves the getter once and caches it
|
|
15798
|
+
case "lazy":
|
|
15799
|
+
check2(inst._zod.innerType);
|
|
15800
|
+
break;
|
|
15801
|
+
// a leaf by choice: `parts` are regex fragments, not data positions
|
|
15802
|
+
case "template_literal":
|
|
15803
|
+
// leaves
|
|
15804
|
+
case "string":
|
|
15805
|
+
case "number":
|
|
15806
|
+
case "int":
|
|
15807
|
+
case "boolean":
|
|
15808
|
+
case "bigint":
|
|
15809
|
+
case "symbol":
|
|
15810
|
+
case "undefined":
|
|
15811
|
+
case "null":
|
|
15812
|
+
case "void":
|
|
15813
|
+
case "never":
|
|
15814
|
+
case "any":
|
|
15815
|
+
case "unknown":
|
|
15816
|
+
case "date":
|
|
15817
|
+
case "nan":
|
|
15818
|
+
case "enum":
|
|
15819
|
+
case "literal":
|
|
15820
|
+
case "file":
|
|
15821
|
+
case "transform":
|
|
15822
|
+
case "custom":
|
|
15823
|
+
break;
|
|
15824
|
+
default: {
|
|
15825
|
+
kind;
|
|
15826
|
+
for (const key in def) {
|
|
15827
|
+
const desc = Object.getOwnPropertyDescriptor(def, key);
|
|
15828
|
+
if (!desc || desc.get)
|
|
15829
|
+
continue;
|
|
15830
|
+
const value = desc.value;
|
|
15831
|
+
if (!value || typeof value !== "object")
|
|
15832
|
+
continue;
|
|
15833
|
+
if (value._zod)
|
|
15834
|
+
check2(value);
|
|
15835
|
+
else if (Array.isArray(value))
|
|
15836
|
+
for (const el of value)
|
|
15837
|
+
check2(el);
|
|
15838
|
+
}
|
|
15762
15839
|
}
|
|
15763
15840
|
}
|
|
15764
15841
|
stack.delete(inst);
|
|
@@ -25891,6 +25968,7 @@ function initializeContext(params) {
|
|
|
25891
25968
|
cycles: params?.cycles ?? "ref",
|
|
25892
25969
|
reused: params?.reused ?? "inline",
|
|
25893
25970
|
intersections: [],
|
|
25971
|
+
deferred: [],
|
|
25894
25972
|
external: params?.external ?? void 0
|
|
25895
25973
|
};
|
|
25896
25974
|
}
|
|
@@ -26239,6 +26317,8 @@ function finalize(ctx, schema) {
|
|
|
26239
26317
|
compactTypeUnion(entry[1].def ?? entry[1].schema);
|
|
26240
26318
|
}
|
|
26241
26319
|
}
|
|
26320
|
+
for (const rewrite of ctx.deferred)
|
|
26321
|
+
rewrite();
|
|
26242
26322
|
if (ctx.intersections.length) {
|
|
26243
26323
|
const carriers = /* @__PURE__ */ new Map();
|
|
26244
26324
|
for (const seen of ctx.seen.values()) {
|
|
@@ -26415,12 +26495,12 @@ var stringProcessor = (schema, ctx, _json, _params) => {
|
|
|
26415
26495
|
if (contentEncoding)
|
|
26416
26496
|
json2.contentEncoding = contentEncoding;
|
|
26417
26497
|
if (patterns && patterns.size > 0) {
|
|
26418
|
-
const
|
|
26419
|
-
if (
|
|
26420
|
-
json2.pattern =
|
|
26421
|
-
else if (
|
|
26498
|
+
const patternList = [...patterns];
|
|
26499
|
+
if (patternList.length === 1)
|
|
26500
|
+
json2.pattern = patternList[0].source;
|
|
26501
|
+
else if (patternList.length > 1) {
|
|
26422
26502
|
json2.allOf = [
|
|
26423
|
-
...
|
|
26503
|
+
...patternList.map((regex) => ({
|
|
26424
26504
|
...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {},
|
|
26425
26505
|
pattern: regex.source
|
|
26426
26506
|
}))
|
|
@@ -26764,6 +26844,69 @@ var tupleProcessor = (schema, ctx, _json, params) => {
|
|
|
26764
26844
|
if (typeof maximum === "number")
|
|
26765
26845
|
json2.maxItems = maximum;
|
|
26766
26846
|
};
|
|
26847
|
+
function stringifyKeyNames(bySchema, json2, visited) {
|
|
26848
|
+
if (json2.$ref) {
|
|
26849
|
+
if (visited.has(json2))
|
|
26850
|
+
return json2;
|
|
26851
|
+
visited.add(json2);
|
|
26852
|
+
const def = bySchema.get(json2)?.def;
|
|
26853
|
+
if (!def)
|
|
26854
|
+
return json2;
|
|
26855
|
+
const inlined = stringifyKeyNames(bySchema, def, visited);
|
|
26856
|
+
return inlined === def ? json2 : inlined;
|
|
26857
|
+
}
|
|
26858
|
+
for (const keyword of ["anyOf", "oneOf"]) {
|
|
26859
|
+
const branches = json2[keyword];
|
|
26860
|
+
if (!Array.isArray(branches))
|
|
26861
|
+
continue;
|
|
26862
|
+
const mapped = branches.map((branch) => stringifyKeyNames(bySchema, branch, visited));
|
|
26863
|
+
if (mapped.some((branch, i) => branch !== branches[i]))
|
|
26864
|
+
json2 = { ...json2, [keyword]: mapped };
|
|
26865
|
+
}
|
|
26866
|
+
const types = Array.isArray(json2.type) ? json2.type : [json2.type];
|
|
26867
|
+
const numericType = !types.includes("string") && types.some((t) => t === "number" || t === "integer");
|
|
26868
|
+
const values = json2.enum ?? (json2.const !== void 0 ? [json2.const] : void 0);
|
|
26869
|
+
if (!numericType && !values?.some((v) => typeof v === "number"))
|
|
26870
|
+
return json2;
|
|
26871
|
+
const { minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, format, id, ...rest } = json2;
|
|
26872
|
+
if (rest.enum)
|
|
26873
|
+
rest.enum = rest.enum.map((v) => typeof v === "number" ? String(v) : v);
|
|
26874
|
+
else if (typeof rest.const === "number")
|
|
26875
|
+
rest.const = String(rest.const);
|
|
26876
|
+
if (!numericType)
|
|
26877
|
+
return rest;
|
|
26878
|
+
rest.type = "string";
|
|
26879
|
+
if (!values)
|
|
26880
|
+
rest.pattern = (types.includes("number") ? number : integer).source;
|
|
26881
|
+
return rest;
|
|
26882
|
+
}
|
|
26883
|
+
var pendingRecords = /* @__PURE__ */ new WeakMap();
|
|
26884
|
+
function rewriteKeyNames(ctx) {
|
|
26885
|
+
const bySchema = /* @__PURE__ */ new Map();
|
|
26886
|
+
for (const entry of ctx.seen.values()) {
|
|
26887
|
+
if (entry.def && !bySchema.has(entry.schema))
|
|
26888
|
+
bySchema.set(entry.schema, entry);
|
|
26889
|
+
}
|
|
26890
|
+
const rewrites = /* @__PURE__ */ new Map();
|
|
26891
|
+
for (const record2 of pendingRecords.get(ctx) ?? []) {
|
|
26892
|
+
const seen = ctx.seen.get(record2);
|
|
26893
|
+
const names = (seen?.def ?? seen?.schema)?.propertyNames;
|
|
26894
|
+
if (!names || names === true || rewrites.has(names))
|
|
26895
|
+
continue;
|
|
26896
|
+
const rewritten = stringifyKeyNames(bySchema, names, /* @__PURE__ */ new Set());
|
|
26897
|
+
if (rewritten !== names)
|
|
26898
|
+
rewrites.set(names, rewritten);
|
|
26899
|
+
}
|
|
26900
|
+
if (!rewrites.size)
|
|
26901
|
+
return;
|
|
26902
|
+
for (const entry of ctx.seen.values()) {
|
|
26903
|
+
for (const carrier of [entry.schema, entry.def]) {
|
|
26904
|
+
const rewritten = carrier && rewrites.get(carrier.propertyNames);
|
|
26905
|
+
if (rewritten)
|
|
26906
|
+
carrier.propertyNames = rewritten;
|
|
26907
|
+
}
|
|
26908
|
+
}
|
|
26909
|
+
}
|
|
26767
26910
|
var recordProcessor = (schema, ctx, _json, params) => {
|
|
26768
26911
|
const json2 = _json;
|
|
26769
26912
|
const def = schema._zod.def;
|
|
@@ -26786,6 +26929,13 @@ var recordProcessor = (schema, ctx, _json, params) => {
|
|
|
26786
26929
|
...params,
|
|
26787
26930
|
path: [...params.path, "propertyNames"]
|
|
26788
26931
|
});
|
|
26932
|
+
let pending = pendingRecords.get(ctx);
|
|
26933
|
+
if (!pending) {
|
|
26934
|
+
pending = [];
|
|
26935
|
+
pendingRecords.set(ctx, pending);
|
|
26936
|
+
ctx.deferred.push(() => rewriteKeyNames(ctx));
|
|
26937
|
+
}
|
|
26938
|
+
pending.push(schema);
|
|
26789
26939
|
}
|
|
26790
26940
|
json2.additionalProperties = process2(def.valueType, ctx, {
|
|
26791
26941
|
...params,
|
|
@@ -26797,7 +26947,7 @@ var recordProcessor = (schema, ctx, _json, params) => {
|
|
|
26797
26947
|
if (keyValues && !def.partial && !omittableOnInput) {
|
|
26798
26948
|
const validKeyValues = [...keyValues].filter((v) => typeof v === "string" || typeof v === "number");
|
|
26799
26949
|
if (validKeyValues.length > 0) {
|
|
26800
|
-
json2.required = validKeyValues;
|
|
26950
|
+
json2.required = validKeyValues.map(String);
|
|
26801
26951
|
}
|
|
26802
26952
|
}
|
|
26803
26953
|
};
|
|
@@ -35790,7 +35940,7 @@ function toolAnnotations(opts = {}) {
|
|
|
35790
35940
|
}
|
|
35791
35941
|
|
|
35792
35942
|
// src/version.ts
|
|
35793
|
-
var VERSION = "1.8.
|
|
35943
|
+
var VERSION = "1.8.1";
|
|
35794
35944
|
|
|
35795
35945
|
// src/client.ts
|
|
35796
35946
|
import { dirname as dirname2, join as join3 } from "path";
|
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.8.
|
|
5
|
+
export const VERSION = '1.8.1'; // x-release-please-version
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibo-mcp",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.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>",
|
|
@@ -46,17 +46,17 @@
|
|
|
46
46
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@chrischall/mcp-utils": "^0.
|
|
49
|
+
"@chrischall/mcp-utils": "^0.26.1",
|
|
50
50
|
"@fetchproxy/bootstrap": "^2.2.0",
|
|
51
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
51
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
52
52
|
"dotenv": "^17.4.0",
|
|
53
|
-
"zod": "^4.4
|
|
53
|
+
"zod": "^4.5.4"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/node": "^26.0.0",
|
|
57
|
-
"@vitest/coverage-v8": "^
|
|
57
|
+
"@vitest/coverage-v8": "^5.0.0",
|
|
58
58
|
"esbuild": "^0.28.0",
|
|
59
59
|
"typescript": "^7.0.2",
|
|
60
|
-
"vitest": "^
|
|
60
|
+
"vitest": "^5.0.0"
|
|
61
61
|
}
|
|
62
62
|
}
|
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.8.
|
|
9
|
+
"version": "1.8.1",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "vibo-mcp",
|
|
14
|
-
"version": "1.8.
|
|
14
|
+
"version": "1.8.1",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|