vibo-mcp 1.5.4 → 1.6.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.
@@ -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.4"
10
+ "version": "1.6.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": "1.5.4",
18
+ "version": "1.6.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": "1.5.4",
4
+ "version": "1.6.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/dist/bundle.js CHANGED
@@ -31000,53 +31000,6 @@ var StdioServerTransport = class {
31000
31000
  }
31001
31001
  };
31002
31002
 
31003
- // node_modules/@chrischall/mcp-utils/dist/server/index.js
31004
- async function createMcpServer(opts) {
31005
- const server = new McpServer({ name: opts.name, version: opts.version });
31006
- if (opts.banner !== void 0) {
31007
- console.error(opts.banner);
31008
- }
31009
- const deps = opts.deps;
31010
- for (const register of opts.tools) {
31011
- await register(server, deps);
31012
- }
31013
- return server;
31014
- }
31015
- function withGracefulShutdown(server, opts = {}) {
31016
- const shouldExit = opts.exit ?? true;
31017
- let shuttingDown = false;
31018
- const handler = (signal) => {
31019
- if (shuttingDown)
31020
- return;
31021
- shuttingDown = true;
31022
- void (async () => {
31023
- try {
31024
- if (opts.onSignal)
31025
- await opts.onSignal(signal);
31026
- await server.close();
31027
- } catch (err) {
31028
- console.error(`[mcp-utils] error during graceful shutdown on ${signal}: ${err instanceof Error ? err.message : String(err)}`);
31029
- } finally {
31030
- if (shouldExit)
31031
- process.exit(0);
31032
- }
31033
- })();
31034
- };
31035
- process.on("SIGINT", () => handler("SIGINT"));
31036
- process.on("SIGTERM", () => handler("SIGTERM"));
31037
- }
31038
- async function runMcp(opts) {
31039
- const server = await createMcpServer(opts);
31040
- const shutdown = opts.shutdown ?? true;
31041
- if (shutdown !== false) {
31042
- withGracefulShutdown(server, shutdown === true ? {} : shutdown);
31043
- }
31044
- const spec = opts.transport ?? "stdio";
31045
- const transport = spec === "stdio" ? new StdioServerTransport() : spec;
31046
- await server.connect(transport);
31047
- return server;
31048
- }
31049
-
31050
31003
  // node_modules/@chrischall/mcp-utils/dist/errors/index.js
31051
31004
  var DEFAULT_ERROR_MESSAGE_MAX = 500;
31052
31005
  var McpToolError = class extends Error {
@@ -31109,6 +31062,81 @@ function textResult(data) {
31109
31062
  content: [{ type: "text", text: JSON.stringify(data, null, 2) }]
31110
31063
  };
31111
31064
  }
31065
+ function errorResult(message) {
31066
+ return {
31067
+ content: [{ type: "text", text: redactSecrets(message) }],
31068
+ isError: true
31069
+ };
31070
+ }
31071
+
31072
+ // node_modules/@chrischall/mcp-utils/dist/server/index.js
31073
+ function hintResultOrRethrow(err) {
31074
+ if (err instanceof McpToolError && err.hint) {
31075
+ return errorResult(`${err.message}
31076
+
31077
+ Hint: ${err.hint}`);
31078
+ }
31079
+ throw err;
31080
+ }
31081
+ function surfaceToolHints(server) {
31082
+ const register = server.registerTool.bind(server);
31083
+ server.registerTool = (name, config2, cb) => register(name, config2, (...args) => {
31084
+ let result;
31085
+ try {
31086
+ result = cb(...args);
31087
+ } catch (err) {
31088
+ return hintResultOrRethrow(err);
31089
+ }
31090
+ return result instanceof Promise ? result.catch(hintResultOrRethrow) : result;
31091
+ });
31092
+ }
31093
+ async function createMcpServer(opts) {
31094
+ const server = new McpServer({ name: opts.name, version: opts.version });
31095
+ if (opts.surfaceHints !== false)
31096
+ surfaceToolHints(server);
31097
+ if (opts.banner !== void 0) {
31098
+ console.error(opts.banner);
31099
+ }
31100
+ const deps = opts.deps;
31101
+ for (const register of opts.tools) {
31102
+ await register(server, deps);
31103
+ }
31104
+ return server;
31105
+ }
31106
+ function withGracefulShutdown(server, opts = {}) {
31107
+ const shouldExit = opts.exit ?? true;
31108
+ let shuttingDown = false;
31109
+ const handler = (signal) => {
31110
+ if (shuttingDown)
31111
+ return;
31112
+ shuttingDown = true;
31113
+ void (async () => {
31114
+ try {
31115
+ if (opts.onSignal)
31116
+ await opts.onSignal(signal);
31117
+ await server.close();
31118
+ } catch (err) {
31119
+ console.error(`[mcp-utils] error during graceful shutdown on ${signal}: ${err instanceof Error ? err.message : String(err)}`);
31120
+ } finally {
31121
+ if (shouldExit)
31122
+ process.exit(0);
31123
+ }
31124
+ })();
31125
+ };
31126
+ process.on("SIGINT", () => handler("SIGINT"));
31127
+ process.on("SIGTERM", () => handler("SIGTERM"));
31128
+ }
31129
+ async function runMcp(opts) {
31130
+ const server = await createMcpServer(opts);
31131
+ const shutdown = opts.shutdown ?? true;
31132
+ if (shutdown !== false) {
31133
+ withGracefulShutdown(server, shutdown === true ? {} : shutdown);
31134
+ }
31135
+ const spec = opts.transport ?? "stdio";
31136
+ const transport = spec === "stdio" ? new StdioServerTransport() : spec;
31137
+ await server.connect(transport);
31138
+ return server;
31139
+ }
31112
31140
 
31113
31141
  // node_modules/@chrischall/mcp-utils/dist/config/index.js
31114
31142
  var PLACEHOLDER_RE = /^\$\{[^}]*\}$/;
@@ -31168,7 +31196,7 @@ function toolAnnotations(opts = {}) {
31168
31196
  }
31169
31197
 
31170
31198
  // src/version.ts
31171
- var VERSION = "1.5.4";
31199
+ var VERSION = "1.6.0";
31172
31200
 
31173
31201
  // src/client.ts
31174
31202
  import { dirname as dirname2, join as join2 } 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.5.4'; // x-release-please-version
5
+ export const VERSION = '1.6.0'; // x-release-please-version
package/mint.yaml ADDED
@@ -0,0 +1,65 @@
1
+ version: 1
2
+ name: Vibo
3
+ slug: vibo
4
+ summary: >-
5
+ Plan and manage your event music in Vibo (vibodj.com) — events, timeline,
6
+ song requests, the DJ's song ideas and planning questions,
7
+ must-play/do-not-play, comments, guests, and exports to Spotify/Apple
8
+ Music, via natural language.
9
+ #
10
+ # Hosting note (a comment, not user-facing summary text): this is a
11
+ # BROWSER-BRIDGE MCP — it reaches its site through the user's signed-in
12
+ # tab via the fetchproxy bridge. A bridged registration also needs runtime
13
+ # `fly-shared`, `bridge: true` and a `bridgePortEnv`, which are registration
14
+ # fields this manifest has no schema for (set them over the control API).
15
+ # `state.dataDir` below is required for `bridge`.
16
+ env:
17
+ - name: VIBO_EMAIL
18
+ required: false
19
+ help: >-
20
+ Vibo account email (or use VIBO_ACCESS_TOKEN for SSO accounts)
21
+ - name: VIBO_PASSWORD
22
+ secret: true
23
+ required: false
24
+ help: >-
25
+ Vibo account password
26
+ - name: VIBO_ACCESS_TOKEN
27
+ secret: true
28
+ required: false
29
+ help: >-
30
+ Captured x-token from a signed-in web.vibodj.com session (SSO alternative)
31
+ - name: VIBO_REFRESH_TOKEN
32
+ secret: true
33
+ required: false
34
+ help: >-
35
+ Matching x-refresh-token so the session can renew
36
+ - name: VIBO_API_URL
37
+ required: false
38
+ help: >-
39
+ Overrides the upstream API base URL. Leave unset for the default; if you
40
+ change it, update egress.allow to match.
41
+ - name: VIBO_SESSION_FILE
42
+ required: false
43
+ help: >-
44
+ Filesystem path/flag for saved state or output. Relates to state.dataDir;
45
+ leave unset for the default.
46
+ state:
47
+ dataDir: true
48
+ reason: >-
49
+ The fetchproxy identity lives at $HOME/.fetchproxy/identity/<name>.json
50
+ and the pair code derives from it. Without a persistent $HOME every cold
51
+ start mints a fresh identity and re-prompts pairing in the browser; the
52
+ API refuses bridge without it.
53
+ egress:
54
+ allow:
55
+ # Only hosts the SERVER process actually fetches. Hosts that appear
56
+ # solely in a URL this server BUILDS and returns are excluded.
57
+ #
58
+ # Every mode (email/password signIn, captured token, refresh, uploads)
59
+ # POSTs to the GraphQL endpoint from the process itself
60
+ # (src/client.ts DEFAULT_API_URL); no redirect hop. `vibo_capture_session`
61
+ # lifts x-token/x-refresh-token from the signed-in web.vibodj.com tab over
62
+ # the fetchproxy bridge — that is the browser's dial, not the process's, so
63
+ # web.vibodj.com and vibodj.com are NOT listed. A VIBO_API_URL override
64
+ # names a host this list cannot know; add it here if you set one.
65
+ - api.vibodj.com
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibo-mcp",
3
- "version": "1.5.4",
3
+ "version": "1.6.0",
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>",
@@ -33,19 +33,21 @@
33
33
  ".claude-plugin",
34
34
  "skills",
35
35
  ".mcp.json",
36
- "server.json"
36
+ "server.json",
37
+ "mint.yaml"
37
38
  ],
38
39
  "scripts": {
39
40
  "build": "tsc && npm run bundle",
40
41
  "bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --external:dotenv --external:@fetchproxy/bootstrap --outfile=dist/bundle.js",
41
42
  "dev": "node dist/index.js",
42
- "test": "vitest run",
43
+ "test": "npm run typecheck && vitest run",
43
44
  "test:watch": "vitest",
44
- "test:coverage": "vitest run --coverage"
45
+ "test:coverage": "npm run typecheck && vitest run --coverage",
46
+ "typecheck": "tsc -p tsconfig.json --noEmit"
45
47
  },
46
48
  "dependencies": {
47
- "@chrischall/mcp-utils": "^0.14.0",
48
- "@fetchproxy/bootstrap": "^2.0.0",
49
+ "@chrischall/mcp-utils": "^0.15.0",
50
+ "@fetchproxy/bootstrap": "^2.2.0",
49
51
  "@modelcontextprotocol/sdk": "^1.29.0",
50
52
  "dotenv": "^17.4.0",
51
53
  "zod": "^4.4.2"
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.4",
9
+ "version": "1.6.0",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "identifier": "vibo-mcp",
14
- "version": "1.5.4",
14
+ "version": "1.6.0",
15
15
  "transport": {
16
16
  "type": "stdio"
17
17
  },