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.
@@ -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.0"
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.0",
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.0",
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: 2
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
- if (def.type === "lazy") {
15747
- check2(inst._zod.innerType);
15748
- } else {
15749
- const shape = def.shape;
15750
- if (shape)
15751
- for (const key of Reflect.ownKeys(shape))
15752
- check2(shape[key]);
15753
- for (const key in def) {
15754
- const value = def[key];
15755
- if (!value || typeof value !== "object")
15756
- continue;
15757
- if (value._zod)
15758
- check2(value);
15759
- else if (Array.isArray(value))
15760
- for (const el of value)
15761
- check2(el);
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 regexes = [...patterns];
26419
- if (regexes.length === 1)
26420
- json2.pattern = regexes[0].source;
26421
- else if (regexes.length > 1) {
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
- ...regexes.map((regex) => ({
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.0";
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.0'; // x-release-please-version
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.0",
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.23.0",
49
+ "@chrischall/mcp-utils": "^0.26.1",
50
50
  "@fetchproxy/bootstrap": "^2.2.0",
51
- "@modelcontextprotocol/sdk": "^1.29.0",
51
+ "@modelcontextprotocol/sdk": "^1.30.0",
52
52
  "dotenv": "^17.4.0",
53
- "zod": "^4.4.2"
53
+ "zod": "^4.5.4"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/node": "^26.0.0",
57
- "@vitest/coverage-v8": "^4.1.2",
57
+ "@vitest/coverage-v8": "^5.0.0",
58
58
  "esbuild": "^0.28.0",
59
59
  "typescript": "^7.0.2",
60
- "vitest": "^4.1.2"
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.0",
9
+ "version": "1.8.1",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "vibo-mcp",
14
- "version": "1.8.0",
14
+ "version": "1.8.1",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },