vibo-mcp 2.4.1 → 2.4.3
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 +2 -1
- package/dist/bundle.js +116 -30
- package/dist/version.js +1 -1
- package/package.json +5 -5
- 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": "2.4.
|
|
10
|
+
"version": "2.4.3"
|
|
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.4.
|
|
18
|
+
"version": "2.4.3",
|
|
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.
|
|
4
|
+
"version": "2.4.3",
|
|
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
|
@@ -105,7 +105,8 @@ uploads, …) is confirmed before anything is sent to Vibo.
|
|
|
105
105
|
|
|
106
106
|
| variable | default | |
|
|
107
107
|
|---|---|---|
|
|
108
|
-
| `MCP_CONFIRM_MODE` | `ask-user` | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). `ask-user`: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. `auto`: the same two steps, but the model may use the token after reviewing the preview itself. `refuse`: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt
|
|
108
|
+
| `MCP_CONFIRM_MODE` | `ask-user` | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). `ask-user`: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. `auto`: the same two steps, but the model may use the token after reviewing the preview itself. `refuse`: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless `MCP_CONFIRM_ELICITATION=off`. An unrecognised value is treated as `refuse`. |
|
|
109
|
+
| `MCP_CONFIRM_ELICITATION` | `on` | `off` never shows a confirmation prompt, so every client gets the `MCP_CONFIRM_MODE` behaviour. Set it for a client that says it can show prompts but never does (the write hangs — opencode 2.0.x). Any other value is treated as `on`, with a warning on stderr. |
|
|
109
110
|
| `MCP_CONFIRM_TTL_SECONDS` | `600` | How long a token stays valid. |
|
|
110
111
|
| `MCP_CONFIRM_SECRET` | random per process | Signing key; set it only if tokens must survive a server restart. |
|
|
111
112
|
|
package/dist/bundle.js
CHANGED
|
@@ -20723,7 +20723,7 @@ var OAuthTokenRevocationRequestSchema = object({
|
|
|
20723
20723
|
token_type_hint: string2().optional()
|
|
20724
20724
|
}).strip();
|
|
20725
20725
|
|
|
20726
|
-
// node_modules/@modelcontextprotocol/server/dist/src-
|
|
20726
|
+
// node_modules/@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs
|
|
20727
20727
|
var BRANDS = /* @__PURE__ */ Symbol.for("mcp.sdk.errorBrands");
|
|
20728
20728
|
function stampErrorBrands(instance, ctor) {
|
|
20729
20729
|
const brands = /* @__PURE__ */ new Set();
|
|
@@ -22966,7 +22966,8 @@ function build() {
|
|
|
22966
22966
|
ListResourceTemplatesResultResponseSchema: wireResultResponse(ListResourceTemplatesResultSchema$1),
|
|
22967
22967
|
ReadResourceResultResponseSchema: wireResultResponse(union([ReadResourceResultSchema$1, InputRequiredResultSchema])),
|
|
22968
22968
|
CompleteResultResponseSchema: wireResultResponse(CompleteResultSchema$1),
|
|
22969
|
-
DiscoverResultResponseSchema: wireResultResponse(DiscoverResultSchema$1)
|
|
22969
|
+
DiscoverResultResponseSchema: wireResultResponse(DiscoverResultSchema$1),
|
|
22970
|
+
SubscriptionsListenResultResponseSchema: wireResultResponse(SubscriptionsListenResultSchema$1)
|
|
22970
22971
|
};
|
|
22971
22972
|
}
|
|
22972
22973
|
var memo2;
|
|
@@ -23474,6 +23475,9 @@ function isSpecRequestMethod(method) {
|
|
|
23474
23475
|
function isSpecNotificationMethod(method) {
|
|
23475
23476
|
return ALL_CODECS.some((codec2) => codec2.hasNotificationMethod(method));
|
|
23476
23477
|
}
|
|
23478
|
+
function isExtensionReusedRequestMethod(method) {
|
|
23479
|
+
return method === "tasks/get" || method === "tasks/cancel";
|
|
23480
|
+
}
|
|
23477
23481
|
var ALL_CODECS = [rev2025Codec, rev2026Codec];
|
|
23478
23482
|
function isPlainObject$3(value) {
|
|
23479
23483
|
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
@@ -24482,6 +24486,8 @@ var Protocol = class {
|
|
|
24482
24486
|
_transport;
|
|
24483
24487
|
_requestMessageId = 0;
|
|
24484
24488
|
_requestHandlers = /* @__PURE__ */ new Map();
|
|
24489
|
+
/** Methods registered with an explicit schema; the era gate in `_onrequest` reads it for the Tasks extension names. */
|
|
24490
|
+
_customSchemaRequestMethods = /* @__PURE__ */ new Set();
|
|
24485
24491
|
_requestHandlerAbortControllers = /* @__PURE__ */ new Map();
|
|
24486
24492
|
_notificationHandlers = /* @__PURE__ */ new Map();
|
|
24487
24493
|
_responseHandlers = /* @__PURE__ */ new Map();
|
|
@@ -24765,7 +24771,7 @@ var Protocol = class {
|
|
|
24765
24771
|
return;
|
|
24766
24772
|
}
|
|
24767
24773
|
}
|
|
24768
|
-
if (isSpecRequestMethod(request.method) && !codec2.hasRequestMethod(request.method)) {
|
|
24774
|
+
if (isSpecRequestMethod(request.method) && !codec2.hasRequestMethod(request.method) && !(isExtensionReusedRequestMethod(request.method) && this._customSchemaRequestMethods.has(request.method))) {
|
|
24769
24775
|
sendErrorResponse(ProtocolErrorCode.MethodNotFound, "Method not found");
|
|
24770
24776
|
return;
|
|
24771
24777
|
}
|
|
@@ -24898,8 +24904,11 @@ var Protocol = class {
|
|
|
24898
24904
|
}
|
|
24899
24905
|
request(request, schemaOrOptions, maybeOptions) {
|
|
24900
24906
|
const codec2 = this._resolveOutboundCodec(request.method);
|
|
24907
|
+
if (isStandardSchema(schemaOrOptions)) {
|
|
24908
|
+
if (!isExtensionReusedRequestMethod(request.method)) this._assertOutboundRequestInEra(codec2, request.method);
|
|
24909
|
+
return this._requestWithSchemaViaCodec(codec2, request, schemaOrOptions, maybeOptions);
|
|
24910
|
+
}
|
|
24901
24911
|
this._assertOutboundRequestInEra(codec2, request.method);
|
|
24902
|
-
if (isStandardSchema(schemaOrOptions)) return this._requestWithSchemaViaCodec(codec2, request, schemaOrOptions, maybeOptions);
|
|
24903
24912
|
const validate2 = codecResultValidator(codec2, request.method);
|
|
24904
24913
|
if (validate2 === void 0) throw new TypeError(`'${request.method}' is not a spec method; pass a result schema as the second argument to request().`);
|
|
24905
24914
|
return this._requestWithSchemaViaCodec(codec2, request, validate2, schemaOrOptions);
|
|
@@ -25143,6 +25152,8 @@ var Protocol = class {
|
|
|
25143
25152
|
return maybeHandler(parsed.data, ctx);
|
|
25144
25153
|
};
|
|
25145
25154
|
else throw new TypeError("setRequestHandler: handler is required");
|
|
25155
|
+
if (typeof schemasOrHandler === "function") this._customSchemaRequestMethods.delete(method);
|
|
25156
|
+
else this._customSchemaRequestMethods.add(method);
|
|
25146
25157
|
this._requestHandlers.set(method, this._wrapHandler(method, stored));
|
|
25147
25158
|
}
|
|
25148
25159
|
/**
|
|
@@ -25172,6 +25183,7 @@ var Protocol = class {
|
|
|
25172
25183
|
*/
|
|
25173
25184
|
removeRequestHandler(method) {
|
|
25174
25185
|
this._requestHandlers.delete(method);
|
|
25186
|
+
this._customSchemaRequestMethods.delete(method);
|
|
25175
25187
|
}
|
|
25176
25188
|
/**
|
|
25177
25189
|
* Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.
|
|
@@ -32414,7 +32426,7 @@ var Ajv = import_ajv.Ajv;
|
|
|
32414
32426
|
// node_modules/@modelcontextprotocol/server/dist/shimsNode.mjs
|
|
32415
32427
|
import process2 from "node:process";
|
|
32416
32428
|
|
|
32417
|
-
// node_modules/@modelcontextprotocol/server/dist/mcp-
|
|
32429
|
+
// node_modules/@modelcontextprotocol/server/dist/mcp-DIH4cS6P.mjs
|
|
32418
32430
|
var COMPLETABLE_SYMBOL = /* @__PURE__ */ Symbol.for("mcp.completable");
|
|
32419
32431
|
function isCompletable(schema) {
|
|
32420
32432
|
return !!schema && typeof schema === "object" && COMPLETABLE_SYMBOL in schema;
|
|
@@ -32479,7 +32491,7 @@ var StdioListenRouter = class {
|
|
|
32479
32491
|
_serverCapabilities;
|
|
32480
32492
|
/**
|
|
32481
32493
|
* The serving instance's identity, stamped onto the graceful-close
|
|
32482
|
-
* results' `_meta` (the spec's `
|
|
32494
|
+
* results' `_meta` (the spec's `SubscriptionsListenResultMetaObject` extends
|
|
32483
32495
|
* `ResultMetaObject`). Handed over together with the capabilities.
|
|
32484
32496
|
*/
|
|
32485
32497
|
_serverInfo;
|
|
@@ -32811,6 +32823,11 @@ var Server = class extends Protocol {
|
|
|
32811
32823
|
if (modernProtocolVersions(this._supportedProtocolVersions).length > 0) this.setRequestHandler("server/discover", () => this._ondiscover());
|
|
32812
32824
|
if (this._capabilities.logging) this._registerLoggingHandler();
|
|
32813
32825
|
}
|
|
32826
|
+
/** Attaches to the given transport; rejects while this instance is connected to another one. */
|
|
32827
|
+
async connect(transport) {
|
|
32828
|
+
if (this.transport !== void 0) throw new SdkError(SdkErrorCode.AlreadyConnected, "Use a separate Server instance per connection: this instance is already connected to a transport. To connect it to a new transport, call close() first.");
|
|
32829
|
+
await super.connect(transport);
|
|
32830
|
+
}
|
|
32814
32831
|
/**
|
|
32815
32832
|
* Registers the built-in `logging/setLevel` request handler.
|
|
32816
32833
|
*
|
|
@@ -33364,21 +33381,41 @@ var Server = class extends Protocol {
|
|
|
33364
33381
|
function discoverAdvertisedCapabilities(capabilities) {
|
|
33365
33382
|
return { ...capabilities };
|
|
33366
33383
|
}
|
|
33384
|
+
function toolInputElementCount(value, max) {
|
|
33385
|
+
let count = 0;
|
|
33386
|
+
const stack = [value];
|
|
33387
|
+
while (stack.length > 0) {
|
|
33388
|
+
const node2 = stack.pop();
|
|
33389
|
+
if (node2 === null || typeof node2 !== "object") continue;
|
|
33390
|
+
if (Array.isArray(node2)) for (const child of node2) {
|
|
33391
|
+
if (++count > max) return count;
|
|
33392
|
+
if (child !== null && typeof child === "object") stack.push(child);
|
|
33393
|
+
}
|
|
33394
|
+
else for (const key in node2) {
|
|
33395
|
+
if (!Object.prototype.hasOwnProperty.call(node2, key)) continue;
|
|
33396
|
+
if (++count > max) return count;
|
|
33397
|
+
const child = node2[key];
|
|
33398
|
+
if (child !== null && typeof child === "object") stack.push(child);
|
|
33399
|
+
}
|
|
33400
|
+
}
|
|
33401
|
+
return count;
|
|
33402
|
+
}
|
|
33403
|
+
function resolveMaxToolInputElements(value) {
|
|
33404
|
+
if (value === void 0 || value === Infinity) return void 0;
|
|
33405
|
+
if (typeof value !== "number" || Number.isNaN(value) || value < 1) throw new RangeError(`maxToolInputElements must be a number of at least 1, or Infinity, got ${String(value)}`);
|
|
33406
|
+
return value;
|
|
33407
|
+
}
|
|
33367
33408
|
var McpServer = class {
|
|
33368
33409
|
/**
|
|
33369
33410
|
* The underlying {@linkcode Server} instance, useful for advanced operations like sending notifications.
|
|
33370
33411
|
*/
|
|
33371
33412
|
server;
|
|
33413
|
+
_maxToolInputElements;
|
|
33372
33414
|
_registeredResources = {};
|
|
33373
33415
|
_registeredResourceTemplates = {};
|
|
33374
33416
|
_registeredTools = {};
|
|
33375
33417
|
_registeredPrompts = {};
|
|
33376
|
-
/**
|
|
33377
|
-
* Per-tool JSON-converted `inputSchema`, memoized so the SEP-2243
|
|
33378
|
-
* registration-time scan and the pre-dispatch validation step share one
|
|
33379
|
-
* conversion instead of paying it twice per request under the
|
|
33380
|
-
* per-request-factory `createMcpHandler` model.
|
|
33381
|
-
*/
|
|
33418
|
+
/** Per-tool JSON-converted `inputSchema`, filled on first use by `toolInputSchemaJson()`. */
|
|
33382
33419
|
_toolInputSchemaJson = {};
|
|
33383
33420
|
/**
|
|
33384
33421
|
* The JSON-serialized `inputSchema` of a registered tool, or `undefined`
|
|
@@ -33403,6 +33440,7 @@ var McpServer = class {
|
|
|
33403
33440
|
}
|
|
33404
33441
|
constructor(serverInfo, options) {
|
|
33405
33442
|
this.server = new Server(serverInfo, options);
|
|
33443
|
+
this._maxToolInputElements = resolveMaxToolInputElements(options?.maxToolInputElements);
|
|
33406
33444
|
if (options?.capabilities?.tools) this.setToolRequestHandlers();
|
|
33407
33445
|
if (options?.capabilities?.resources) this.setResourceRequestHandlers();
|
|
33408
33446
|
if (options?.capabilities?.prompts) this.setPromptRequestHandlers();
|
|
@@ -33475,7 +33513,7 @@ var McpServer = class {
|
|
|
33475
33513
|
name,
|
|
33476
33514
|
title: tool.title,
|
|
33477
33515
|
description: tool.description,
|
|
33478
|
-
inputSchema: tool.inputSchema ?
|
|
33516
|
+
inputSchema: tool.inputSchema ? convertListedInputSchema(name, tool.inputSchema) : EMPTY_OBJECT_JSON_SCHEMA,
|
|
33479
33517
|
annotations: tool.annotations,
|
|
33480
33518
|
icons: tool.icons,
|
|
33481
33519
|
execution: tool.execution,
|
|
@@ -33520,6 +33558,7 @@ var McpServer = class {
|
|
|
33520
33558
|
* Validates tool input arguments against the tool's input schema.
|
|
33521
33559
|
*/
|
|
33522
33560
|
async validateToolInput(tool, args, toolName) {
|
|
33561
|
+
if (this._maxToolInputElements !== void 0 && toolInputElementCount(args, this._maxToolInputElements) > this._maxToolInputElements) throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Invalid arguments for tool ${toolName}: arguments contain more than the maximum of ${this._maxToolInputElements} elements`);
|
|
33523
33562
|
if (!tool.inputSchema) return;
|
|
33524
33563
|
const parseResult = await validateStandardSchema(tool.inputSchema, args ?? {});
|
|
33525
33564
|
if (!parseResult.success) throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Input validation error: Invalid arguments for tool ${toolName}: ${parseResult.error}`);
|
|
@@ -33794,20 +33833,19 @@ var McpServer = class {
|
|
|
33794
33833
|
}
|
|
33795
33834
|
_createRegisteredTool(name, title, description, inputSchema, outputSchema, annotations, icons, execution, scopeChallenge, _meta, handler) {
|
|
33796
33835
|
validateAndWarnToolName(name);
|
|
33797
|
-
if (inputSchema !== void 0) try {
|
|
33798
|
-
const json2 = standardSchemaToJsonSchema(inputSchema, "input");
|
|
33799
|
-
this._toolInputSchemaJson[name] = json2;
|
|
33800
|
-
const scan = scanXMcpHeaderDeclarations(json2);
|
|
33801
|
-
if (!scan.valid) console.warn(`[mcp-sdk] tool '${name}' carries an invalid x-mcp-header declaration and will be excluded by conforming Streamable HTTP clients: ${scan.reason}`);
|
|
33802
|
-
} catch {
|
|
33803
|
-
}
|
|
33804
33836
|
let currentHandler = handler;
|
|
33837
|
+
let outputSchemaJson;
|
|
33805
33838
|
const registeredTool = {
|
|
33806
33839
|
title,
|
|
33807
33840
|
description,
|
|
33808
33841
|
inputSchema,
|
|
33809
33842
|
outputSchema,
|
|
33810
|
-
outputSchemaJson
|
|
33843
|
+
get outputSchemaJson() {
|
|
33844
|
+
return outputSchemaJson ??= convertOutputSchemaJson(registeredTool.outputSchema);
|
|
33845
|
+
},
|
|
33846
|
+
set outputSchemaJson(value) {
|
|
33847
|
+
outputSchemaJson = value;
|
|
33848
|
+
},
|
|
33811
33849
|
annotations,
|
|
33812
33850
|
icons,
|
|
33813
33851
|
execution,
|
|
@@ -33934,6 +33972,12 @@ var EMPTY_OBJECT_JSON_SCHEMA = {
|
|
|
33934
33972
|
type: "object",
|
|
33935
33973
|
properties: {}
|
|
33936
33974
|
};
|
|
33975
|
+
function convertListedInputSchema(name, inputSchema) {
|
|
33976
|
+
const json2 = standardSchemaToJsonSchema(inputSchema, "input");
|
|
33977
|
+
const scan = scanXMcpHeaderDeclarations(json2);
|
|
33978
|
+
if (!scan.valid) console.warn(`[mcp-sdk] tool '${name}' carries an invalid x-mcp-header declaration and will be excluded by conforming Streamable HTTP clients: ${scan.reason}`);
|
|
33979
|
+
return json2;
|
|
33980
|
+
}
|
|
33937
33981
|
function convertOutputSchemaJson(outputSchema) {
|
|
33938
33982
|
if (outputSchema === void 0) return void 0;
|
|
33939
33983
|
try {
|
|
@@ -33946,7 +33990,7 @@ function createPromptHandler(name, argsSchema, callback) {
|
|
|
33946
33990
|
if (argsSchema) {
|
|
33947
33991
|
const typedCallback = callback;
|
|
33948
33992
|
return async (args, ctx) => {
|
|
33949
|
-
const parseResult = await validateStandardSchema(argsSchema, args);
|
|
33993
|
+
const parseResult = await validateStandardSchema(argsSchema, args ?? {});
|
|
33950
33994
|
if (!parseResult.success) throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Invalid arguments for prompt ${name}: ${parseResult.error}`);
|
|
33951
33995
|
return typedCallback(parseResult.data, ctx);
|
|
33952
33996
|
};
|
|
@@ -34719,6 +34763,7 @@ function escapeKey(key) {
|
|
|
34719
34763
|
var DEFAULT_REQUEST_KEY = "confirmation";
|
|
34720
34764
|
var DEFAULT_CONFIRMATION_LABEL = "Confirm this action should proceed.";
|
|
34721
34765
|
var UNSUPPORTED_NOTE = "Nothing was done because this client cannot show a confirmation prompt (it declares no MCP elicitation capability), and this action is never taken without one";
|
|
34766
|
+
var DISABLED_NOTE = "Nothing was done because confirmation prompts are turned off for this server, and this action is never taken without one";
|
|
34722
34767
|
var STATE_PREFIX = "mcpu.confirm.v1.";
|
|
34723
34768
|
function bindingKey(binding) {
|
|
34724
34769
|
if (binding.ttlSeconds !== void 0 && !(Number.isFinite(binding.ttlSeconds) && binding.ttlSeconds > 0)) {
|
|
@@ -34791,6 +34836,15 @@ ${JSON.stringify(preview, null, 2)}`,
|
|
|
34791
34836
|
};
|
|
34792
34837
|
const response = inputResponse(ctx.mcpReq.inputResponses, requestKey);
|
|
34793
34838
|
const accepted = acceptedContent(ctx.mcpReq.inputResponses, requestKey, confirmationSchema);
|
|
34839
|
+
if (options.elicitation === false) {
|
|
34840
|
+
return textResult({
|
|
34841
|
+
confirmed: false,
|
|
34842
|
+
dispatched: false,
|
|
34843
|
+
action: options.action,
|
|
34844
|
+
reason: "confirmation-unsupported",
|
|
34845
|
+
note: options.unsupportedNote ? `${DISABLED_NOTE}. ${options.unsupportedNote}` : `${DISABLED_NOTE}.`
|
|
34846
|
+
});
|
|
34847
|
+
}
|
|
34794
34848
|
if (response.kind === "missing") {
|
|
34795
34849
|
if (callerAcceptsFormElicitation(ctx) === false) {
|
|
34796
34850
|
return textResult({
|
|
@@ -34985,7 +35039,7 @@ async function tokenConfirmation(action, fb) {
|
|
|
34985
35039
|
}
|
|
34986
35040
|
async function requireConfirmationWithFallback(ctx, options) {
|
|
34987
35041
|
const { tokenFallback, ...confirmation } = options;
|
|
34988
|
-
if (tokenFallback && callerAcceptsFormElicitation(ctx) === false) {
|
|
35042
|
+
if (tokenFallback && (options.elicitation === false || callerAcceptsFormElicitation(ctx) === false)) {
|
|
34989
35043
|
return tokenConfirmation(options.action, tokenFallback);
|
|
34990
35044
|
}
|
|
34991
35045
|
return requireConfirmation(ctx, confirmation);
|
|
@@ -35133,6 +35187,20 @@ function readConfirmMode(env = process.env) {
|
|
|
35133
35187
|
}
|
|
35134
35188
|
return "refuse";
|
|
35135
35189
|
}
|
|
35190
|
+
function readConfirmElicitation(env = process.env) {
|
|
35191
|
+
const raw = readEnvVar("MCP_CONFIRM_ELICITATION", { env })?.trim().toLowerCase();
|
|
35192
|
+
if (!raw || raw === "on")
|
|
35193
|
+
return "on";
|
|
35194
|
+
if (raw === "off")
|
|
35195
|
+
return "off";
|
|
35196
|
+
const key = `elicitation:${raw}`;
|
|
35197
|
+
if (!warned.has(key)) {
|
|
35198
|
+
warned.add(key);
|
|
35199
|
+
process.stderr.write(`MCP_CONFIRM_ELICITATION="${raw}" is not one of on, off; treating it as on.
|
|
35200
|
+
`);
|
|
35201
|
+
}
|
|
35202
|
+
return "on";
|
|
35203
|
+
}
|
|
35136
35204
|
function readConfirmTtl(env) {
|
|
35137
35205
|
const raw = readEnvVar("MCP_CONFIRM_TTL_SECONDS", { env })?.trim();
|
|
35138
35206
|
if (!raw)
|
|
@@ -35177,6 +35245,7 @@ function spentTokenStoreFromEnv(env = process.env) {
|
|
|
35177
35245
|
}
|
|
35178
35246
|
var CONFIRM_TOKEN_AUTO_INSTRUCTION = "Nothing has been done yet. Review this preview; if it is what was intended, call again with the same arguments plus confirmToken. (This server runs with MCP_CONFIRM_MODE=auto, so the user's approval in chat is not required.)";
|
|
35179
35247
|
var REFUSE_HINT = "Set MCP_CONFIRM_MODE=ask-user on the server to allow two-step confirmation instead.";
|
|
35248
|
+
var ELICITATION_OFF_HINT = "MCP_CONFIRM_ELICITATION=off on the server turns confirmation prompts off.";
|
|
35180
35249
|
var BAD_TTL_HINT = "MCP_CONFIRM_TTL_SECONDS on the server is not a positive whole number of seconds; fix it to allow two-step confirmation.";
|
|
35181
35250
|
function boundArgs(args) {
|
|
35182
35251
|
if (args === null || typeof args !== "object" || Array.isArray(args) || !("confirmToken" in args))
|
|
@@ -35190,10 +35259,13 @@ function confirmationFromEnv(options) {
|
|
|
35190
35259
|
const spent = callerSpent ?? spentTokenStoreFromEnv(env);
|
|
35191
35260
|
const mode = readConfirmMode(env);
|
|
35192
35261
|
const ttlSeconds = readConfirmTtl(env);
|
|
35262
|
+
const elicitationOff = readConfirmElicitation(env) === "off";
|
|
35193
35263
|
const bound = args === void 0 ? void 0 : boundArgs(args);
|
|
35194
|
-
const
|
|
35264
|
+
const bindingAdded = bound === void 0 || rest.binding ? rest : { ...rest, binding: { key: confirmKeyFromEnv(env), args: bound, ttlSeconds: ttlSeconds ?? DEFAULT_TTL_SECONDS2 } };
|
|
35265
|
+
const confirmation = elicitationOff ? { ...bindingAdded, elicitation: false } : bindingAdded;
|
|
35195
35266
|
if (mode === "refuse" || ttlSeconds === void 0) {
|
|
35196
|
-
const
|
|
35267
|
+
const reason = mode === "refuse" ? REFUSE_HINT : BAD_TTL_HINT;
|
|
35268
|
+
const hint = elicitationOff ? `${ELICITATION_OFF_HINT} ${reason}` : reason;
|
|
35197
35269
|
return {
|
|
35198
35270
|
...confirmation,
|
|
35199
35271
|
unsupportedNote: confirmation.unsupportedNote ? `${confirmation.unsupportedNote} ${hint}` : hint
|
|
@@ -35302,7 +35374,10 @@ function surfaceToolHints(server) {
|
|
|
35302
35374
|
));
|
|
35303
35375
|
}
|
|
35304
35376
|
async function createMcpServer(opts) {
|
|
35305
|
-
const server = new McpServer({ name: opts.name, version: opts.version }, {
|
|
35377
|
+
const server = new McpServer({ name: opts.name, version: opts.version }, {
|
|
35378
|
+
supportedProtocolVersions: [...SERVER_PROTOCOL_VERSIONS],
|
|
35379
|
+
...opts.maxToolInputElements !== void 0 ? { maxToolInputElements: opts.maxToolInputElements } : {}
|
|
35380
|
+
});
|
|
35306
35381
|
if (opts.surfaceHints !== false)
|
|
35307
35382
|
surfaceToolHints(server);
|
|
35308
35383
|
if (opts.banner !== void 0) {
|
|
@@ -35639,6 +35714,17 @@ async function fileBlob(path, opts = {}) {
|
|
|
35639
35714
|
return blob;
|
|
35640
35715
|
}
|
|
35641
35716
|
|
|
35717
|
+
// node_modules/@chrischall/mcp-utils/dist/internal/headers.js
|
|
35718
|
+
function responseHeader(res, name) {
|
|
35719
|
+
return getHeader(res?.headers, name);
|
|
35720
|
+
}
|
|
35721
|
+
function getHeader(headers, name) {
|
|
35722
|
+
if (!headers || typeof headers.get !== "function")
|
|
35723
|
+
return null;
|
|
35724
|
+
const value = headers.get.call(headers, name);
|
|
35725
|
+
return typeof value === "string" ? value : null;
|
|
35726
|
+
}
|
|
35727
|
+
|
|
35642
35728
|
// node_modules/@chrischall/mcp-utils/dist/scrape/index.js
|
|
35643
35729
|
var NEXT_DATA_MAX_CHARS = 16 * 1024 * 1024;
|
|
35644
35730
|
function isCloudflareChallenge(html) {
|
|
@@ -35810,7 +35896,7 @@ function toolAnnotations(opts = {}) {
|
|
|
35810
35896
|
}
|
|
35811
35897
|
|
|
35812
35898
|
// src/version.ts
|
|
35813
|
-
var VERSION = "2.4.
|
|
35899
|
+
var VERSION = "2.4.3";
|
|
35814
35900
|
|
|
35815
35901
|
// src/client.ts
|
|
35816
35902
|
import { createHash as createHash4 } from "crypto";
|
|
@@ -36140,7 +36226,7 @@ function createGraphqlClient(opts) {
|
|
|
36140
36226
|
const status = sent.res.status;
|
|
36141
36227
|
const retryable = retryStatuses.includes(status) && (status === 429 || !write);
|
|
36142
36228
|
if (retryable && tries < retry.count) {
|
|
36143
|
-
const delay = retry.honorRetryAfter ? parseRetryAfterMs(sent.res
|
|
36229
|
+
const delay = retry.honorRetryAfter ? parseRetryAfterMs(responseHeader(sent.res, "retry-after"), {
|
|
36144
36230
|
defaultMs: retry.delayMs,
|
|
36145
36231
|
capMs: retry.maxRetryAfterMs ?? 3e4
|
|
36146
36232
|
}) : retry.delayMs;
|
|
@@ -36161,7 +36247,7 @@ function createGraphqlClient(opts) {
|
|
|
36161
36247
|
throw new EdgeBlockedError(status, edge.vendor, { service, method: "POST", path });
|
|
36162
36248
|
}
|
|
36163
36249
|
if (status === 429) {
|
|
36164
|
-
const retryAfter = res
|
|
36250
|
+
const retryAfter = responseHeader(res, "retry-after");
|
|
36165
36251
|
const retryAfterMs = retryAfterToMs(retryAfter);
|
|
36166
36252
|
throw opts.onRateLimited ? opts.onRateLimited({ status, retryAfter, retryAfterMs, edgeBlock: null, method: "POST", path }) : new RateLimitedError(service, retryAfterMs);
|
|
36167
36253
|
}
|
|
@@ -39244,7 +39330,7 @@ await runMcp({
|
|
|
39244
39330
|
});
|
|
39245
39331
|
/*! Bundled license information:
|
|
39246
39332
|
|
|
39247
|
-
@modelcontextprotocol/server/dist/src-
|
|
39333
|
+
@modelcontextprotocol/server/dist/src-Cqbh3MYc.mjs:
|
|
39248
39334
|
(*!
|
|
39249
39335
|
* content-type
|
|
39250
39336
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
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 = '2.4.
|
|
5
|
+
export const VERSION = '2.4.3'; // x-release-please-version
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vibo-mcp",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.3",
|
|
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,14 +46,14 @@
|
|
|
46
46
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@chrischall/mcp-utils": "^2.
|
|
50
|
-
"@fetchproxy/bootstrap": "^3.
|
|
51
|
-
"@modelcontextprotocol/server": "^2.
|
|
49
|
+
"@chrischall/mcp-utils": "^2.15.0",
|
|
50
|
+
"@fetchproxy/bootstrap": "^3.6.0",
|
|
51
|
+
"@modelcontextprotocol/server": "^2.3.0",
|
|
52
52
|
"dotenv": "^18.0.1",
|
|
53
53
|
"zod": "^4.6.5"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@modelcontextprotocol/client": "^2.
|
|
56
|
+
"@modelcontextprotocol/client": "^2.3.0",
|
|
57
57
|
"@types/node": "^26.0.0",
|
|
58
58
|
"@vitest/coverage-v8": "^5.0.0",
|
|
59
59
|
"esbuild": "^0.28.0",
|
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": "2.4.
|
|
9
|
+
"version": "2.4.3",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "vibo-mcp",
|
|
14
|
-
"version": "2.4.
|
|
14
|
+
"version": "2.4.3",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|