untappd-mcp 2.2.1 → 2.2.2
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 +189 -61
- 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 Untappd — beers, breweries, venues, check-ins, wishlists, and your friend feed",
|
|
10
|
-
"version": "2.2.
|
|
10
|
+
"version": "2.2.2"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "Untappd",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "MCP server for Untappd — search beers/breweries/venues, read profiles/check-ins/wishlists, and post check-ins, toasts, and comments",
|
|
18
|
-
"version": "2.2.
|
|
18
|
+
"version": "2.2.2",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "untappd-mcp",
|
|
3
3
|
"displayName": "Untappd",
|
|
4
|
-
"version": "2.2.
|
|
4
|
+
"version": "2.2.2",
|
|
5
5
|
"description": "MCP server for Untappd — search beers/breweries/venues, read check-ins and wishlists, and post check-ins, toasts, and comments",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
package/dist/bundle.js
CHANGED
|
@@ -23400,7 +23400,7 @@ function declaredDialect(schema, remedy) {
|
|
|
23400
23400
|
throw new Error(`JSON Schema declares an unsupported dialect ("$schema": "${schema.$schema.slice(0, 200)}"). The default validator supports JSON Schema 2020-12, 2019-09, draft-07, and draft-06; ${remedy}`);
|
|
23401
23401
|
}
|
|
23402
23402
|
|
|
23403
|
-
// node_modules/@modelcontextprotocol/core/dist/auth-
|
|
23403
|
+
// node_modules/@modelcontextprotocol/server/node_modules/@modelcontextprotocol/core/dist/auth-CGP0BDVq.mjs
|
|
23404
23404
|
var z = __toESM(require_v4(), 1);
|
|
23405
23405
|
var LATEST_PROTOCOL_VERSION = "2025-11-25";
|
|
23406
23406
|
var SUPPORTED_PROTOCOL_VERSIONS = [
|
|
@@ -24238,7 +24238,8 @@ var OAuthMetadataSchema = z.looseObject({
|
|
|
24238
24238
|
introspection_endpoint_auth_signing_alg_values_supported: z.array(z.string()).optional(),
|
|
24239
24239
|
code_challenge_methods_supported: z.array(z.string()).optional(),
|
|
24240
24240
|
client_id_metadata_document_supported: z.boolean().optional(),
|
|
24241
|
-
authorization_response_iss_parameter_supported: z.boolean().optional().catch(void 0)
|
|
24241
|
+
authorization_response_iss_parameter_supported: z.boolean().optional().catch(void 0),
|
|
24242
|
+
dpop_signing_alg_values_supported: z.array(z.string()).optional()
|
|
24242
24243
|
});
|
|
24243
24244
|
var OpenIdProviderMetadataSchema = z.looseObject({
|
|
24244
24245
|
issuer: z.string(),
|
|
@@ -24339,7 +24340,7 @@ var OAuthTokenRevocationRequestSchema = z.object({
|
|
|
24339
24340
|
token_type_hint: z.string().optional()
|
|
24340
24341
|
}).strip();
|
|
24341
24342
|
|
|
24342
|
-
// node_modules/@modelcontextprotocol/server/dist/src-
|
|
24343
|
+
// node_modules/@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs
|
|
24343
24344
|
var z2 = __toESM(require_v4(), 1);
|
|
24344
24345
|
var BRANDS = /* @__PURE__ */ Symbol.for("mcp.sdk.errorBrands");
|
|
24345
24346
|
function stampErrorBrands(instance, ctor) {
|
|
@@ -24454,8 +24455,18 @@ var SdkError = class extends Error {
|
|
|
24454
24455
|
if (typeof this !== "function") throw new TypeError("isInstance must be called on the class (e.g. `SdkError.isInstance(value)`); for callbacks use `v => SdkError.isInstance(v)`");
|
|
24455
24456
|
return brandedHasInstance(this, value);
|
|
24456
24457
|
}
|
|
24457
|
-
|
|
24458
|
-
|
|
24458
|
+
/**
|
|
24459
|
+
* @param code - Stable string code identifying the failure ({@linkcode SdkErrorCode}).
|
|
24460
|
+
* @param message - Human-readable description.
|
|
24461
|
+
* @param data - Optional structured payload (for example the HTTP status carried by
|
|
24462
|
+
* {@linkcode SdkHttpError}). Opaque to the SDK: a `cause` key inside `data` is not
|
|
24463
|
+
* promoted to `Error.cause`.
|
|
24464
|
+
* @param options - Standard `ErrorOptions`, forwarded to `Error`. Pass the underlying
|
|
24465
|
+
* failure as `{ cause }` so it is reachable through the `Error.cause` chain that
|
|
24466
|
+
* loggers and error trackers walk.
|
|
24467
|
+
*/
|
|
24468
|
+
constructor(code, message, data, options) {
|
|
24469
|
+
super(message, options);
|
|
24459
24470
|
this.code = code;
|
|
24460
24471
|
this.data = data;
|
|
24461
24472
|
this.name = "SdkError";
|
|
@@ -24466,8 +24477,11 @@ var SdkHttpError = class extends SdkError {
|
|
|
24466
24477
|
static {
|
|
24467
24478
|
Object.defineProperty(this, "mcpBrand", { value: "mcp.SdkHttpError" });
|
|
24468
24479
|
}
|
|
24469
|
-
|
|
24470
|
-
|
|
24480
|
+
/**
|
|
24481
|
+
* @param options - Standard `ErrorOptions`, forwarded to `Error` (see {@linkcode SdkError}).
|
|
24482
|
+
*/
|
|
24483
|
+
constructor(code, message, data, options) {
|
|
24484
|
+
super(code, message, data, options);
|
|
24471
24485
|
this.name = "SdkHttpError";
|
|
24472
24486
|
}
|
|
24473
24487
|
get status() {
|
|
@@ -27418,7 +27432,7 @@ var INBOUND_VALIDATION_LADDER = [
|
|
|
27418
27432
|
evaluatedAt: "pre-dispatch",
|
|
27419
27433
|
codes: [HEADER_MISMATCH_ERROR_CODE],
|
|
27420
27434
|
conformance: ["http-header-validation"],
|
|
27421
|
-
rationale: "SEP-2243 standard `Mcp-Method` / `Mcp-Name` headers \u2014 presence, sentinel decoding, and `Mcp-Name` \u2194 body cross-check \u2014 are validated by the HTTP entry on a modern-classified request after the supported-revision gate and before dispatch. The classifier\u2019s own header-mismatch cells (protocol-version, `Mcp-Method` mismatch) stay on the edge `era-classification` rung; this rung carries the entry-layer presence/`Mcp-Name` half. Evaluated before the capability gate, the factory call, and the `Mcp-Param-*` rung so a request that fails several rungs is answered by the standard-header rung first. The documented order (after method-registry 5 and request-params 6) is NOT the observed precedence: serveModern evaluates this rung immediately after the supported-revision gate, so a request that also fails a dispatch rung is answered here before the dispatch rungs (5\u20136) are consulted."
|
|
27435
|
+
rationale: "SEP-2243 standard `MCP-Protocol-Version` / `Mcp-Method` / `Mcp-Name` headers \u2014 presence, sentinel decoding, and `Mcp-Name` \u2194 body cross-check \u2014 are validated by the HTTP entry on a modern-classified request after the supported-revision gate and before dispatch. The spec requires `MCP-Protocol-Version` and `Mcp-Method` on every modern *request* POST (`Mcp-Name` only for the methods that mirror `params.name` / `params.uri` / `params.taskId`, see `MCP_NAME_HEADER_SOURCE`) and names them in that order, so a request missing several is answered by the earliest. Notification POSTs are exempt: the presence half runs on requests only, so a modern-enveloped notification is dispatched even with no standard headers at all. The classifier\u2019s own header-mismatch cells (protocol-version, `Mcp-Method` mismatch) stay on the edge `era-classification` rung; this rung carries the entry-layer presence/`Mcp-Name` half \u2014 including the missing `MCP-Protocol-Version` cell, which cannot live on the edge rung without breaking body-primary classification. Evaluated before the capability gate, the factory call, and the `Mcp-Param-*` rung so a request that fails several rungs is answered by the standard-header rung first. The documented order (after method-registry 5 and request-params 6) is NOT the observed precedence: serveModern evaluates this rung immediately after the supported-revision gate, so a request that also fails a dispatch rung is answered here before the dispatch rungs (5\u20136) are consulted."
|
|
27422
27436
|
},
|
|
27423
27437
|
{
|
|
27424
27438
|
rung: "client-capabilities",
|
|
@@ -28219,7 +28233,7 @@ var Protocol = class {
|
|
|
28219
28233
|
return this._requestHandlers.get(method);
|
|
28220
28234
|
}
|
|
28221
28235
|
async _oncancel(notification) {
|
|
28222
|
-
if (
|
|
28236
|
+
if (notification.params.requestId === void 0) return;
|
|
28223
28237
|
this._requestHandlerAbortControllers.get(notification.params.requestId)?.abort(notification.params.reason);
|
|
28224
28238
|
}
|
|
28225
28239
|
_setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) {
|
|
@@ -28618,19 +28632,20 @@ var Protocol = class {
|
|
|
28618
28632
|
const cancel = (reason) => {
|
|
28619
28633
|
if (responseReceived) return;
|
|
28620
28634
|
this._progressHandlers.delete(messageId);
|
|
28621
|
-
if (requestAbort === void 0)
|
|
28622
|
-
|
|
28623
|
-
|
|
28624
|
-
|
|
28625
|
-
|
|
28626
|
-
|
|
28627
|
-
|
|
28628
|
-
|
|
28629
|
-
|
|
28630
|
-
|
|
28631
|
-
|
|
28632
|
-
|
|
28633
|
-
|
|
28635
|
+
if (requestAbort === void 0) {
|
|
28636
|
+
if (request.method !== "initialize") this._transport?.send(this._envelopeOutbound({
|
|
28637
|
+
jsonrpc: "2.0",
|
|
28638
|
+
method: "notifications/cancelled",
|
|
28639
|
+
params: {
|
|
28640
|
+
requestId: messageId,
|
|
28641
|
+
reason: String(reason)
|
|
28642
|
+
}
|
|
28643
|
+
}), {
|
|
28644
|
+
relatedRequestId,
|
|
28645
|
+
resumptionToken,
|
|
28646
|
+
onresumptiontoken
|
|
28647
|
+
}).catch((error62) => this._onerror(/* @__PURE__ */ new Error(`Failed to send cancellation: ${error62}`)));
|
|
28648
|
+
} else requestAbort.abort();
|
|
28634
28649
|
reject(reason instanceof SdkError ? reason : new SdkError(SdkErrorCode.RequestTimeout, String(reason)));
|
|
28635
28650
|
};
|
|
28636
28651
|
this._responseHandlers.set(messageId, (response) => {
|
|
@@ -28710,7 +28725,7 @@ var Protocol = class {
|
|
|
28710
28725
|
jsonrpc: "2.0",
|
|
28711
28726
|
...notification
|
|
28712
28727
|
});
|
|
28713
|
-
if ((this._options?.debouncedNotificationMethods ?? []).includes(notification.method) && !notification.params &&
|
|
28728
|
+
if ((this._options?.debouncedNotificationMethods ?? []).includes(notification.method) && !notification.params && options?.relatedRequestId === void 0) {
|
|
28714
28729
|
if (this._pendingDebouncedNotifications.has(notification.method)) return;
|
|
28715
28730
|
this._pendingDebouncedNotifications.add(notification.method);
|
|
28716
28731
|
Promise.resolve().then(() => {
|
|
@@ -36013,7 +36028,7 @@ var Ajv = import_ajv.Ajv;
|
|
|
36013
36028
|
// node_modules/@modelcontextprotocol/server/dist/shimsNode.mjs
|
|
36014
36029
|
import process2 from "node:process";
|
|
36015
36030
|
|
|
36016
|
-
// node_modules/@modelcontextprotocol/server/dist/mcp-
|
|
36031
|
+
// node_modules/@modelcontextprotocol/server/dist/mcp-Dw2OlZ1f.mjs
|
|
36017
36032
|
var COMPLETABLE_SYMBOL = /* @__PURE__ */ Symbol.for("mcp.completable");
|
|
36018
36033
|
function isCompletable(schema) {
|
|
36019
36034
|
return !!schema && typeof schema === "object" && COMPLETABLE_SYMBOL in schema;
|
|
@@ -36206,6 +36221,9 @@ function notificationToServerEvent(method, uri) {
|
|
|
36206
36221
|
};
|
|
36207
36222
|
}
|
|
36208
36223
|
}
|
|
36224
|
+
function supportsScopeChallengeResolver(transport) {
|
|
36225
|
+
return typeof transport === "object" && transport !== null && "setScopeChallengeResolver" in transport && typeof transport.setScopeChallengeResolver === "function";
|
|
36226
|
+
}
|
|
36209
36227
|
var DEFAULT_LEGACY_SHIM_MAX_ROUNDS = 8;
|
|
36210
36228
|
var DEFAULT_LEGACY_SHIM_ROUND_TIMEOUT_MS = 6e5;
|
|
36211
36229
|
function resolveLegacyShimOptions(options) {
|
|
@@ -37016,6 +37034,7 @@ var McpServer = class {
|
|
|
37016
37034
|
* ```
|
|
37017
37035
|
*/
|
|
37018
37036
|
async connect(transport) {
|
|
37037
|
+
if (supportsScopeChallengeResolver(transport)) transport.setScopeChallengeResolver((context) => this.resolveScopeChallenge(context));
|
|
37019
37038
|
return await this.server.connect(transport);
|
|
37020
37039
|
}
|
|
37021
37040
|
/**
|
|
@@ -37024,6 +37043,41 @@ var McpServer = class {
|
|
|
37024
37043
|
async close() {
|
|
37025
37044
|
await this.server.close();
|
|
37026
37045
|
}
|
|
37046
|
+
/** @internal */
|
|
37047
|
+
resolveScopeChallenge = (context) => {
|
|
37048
|
+
switch (context.request.method) {
|
|
37049
|
+
case "tools/call": {
|
|
37050
|
+
const toolName = context.request.params?.name;
|
|
37051
|
+
if (typeof toolName !== "string") return;
|
|
37052
|
+
const tool = this._registeredTools[toolName];
|
|
37053
|
+
if (tool === void 0 || !tool.enabled) return;
|
|
37054
|
+
return tool.scopeChallenge?.(context);
|
|
37055
|
+
}
|
|
37056
|
+
case "resources/read": {
|
|
37057
|
+
const resourceUri = context.request.params?.uri;
|
|
37058
|
+
if (typeof resourceUri !== "string") return;
|
|
37059
|
+
let uri;
|
|
37060
|
+
try {
|
|
37061
|
+
uri = new URL(resourceUri);
|
|
37062
|
+
} catch {
|
|
37063
|
+
return;
|
|
37064
|
+
}
|
|
37065
|
+
const resource = this._registeredResources[uri.toString()];
|
|
37066
|
+
if (resource !== void 0) return resource.enabled ? resource.scopeChallenge?.(context) : void 0;
|
|
37067
|
+
for (const template of Object.values(this._registeredResourceTemplates)) if (template.resourceTemplate.uriTemplate.match(uri.toString())) return template.enabled ? template.scopeChallenge?.(context) : void 0;
|
|
37068
|
+
return;
|
|
37069
|
+
}
|
|
37070
|
+
case "prompts/get": {
|
|
37071
|
+
const promptName = context.request.params?.name;
|
|
37072
|
+
if (typeof promptName !== "string") return;
|
|
37073
|
+
const prompt = this._registeredPrompts[promptName];
|
|
37074
|
+
if (prompt === void 0 || !prompt.enabled) return;
|
|
37075
|
+
return prompt.scopeChallenge?.(context);
|
|
37076
|
+
}
|
|
37077
|
+
default:
|
|
37078
|
+
return;
|
|
37079
|
+
}
|
|
37080
|
+
};
|
|
37027
37081
|
_toolHandlersInitialized = false;
|
|
37028
37082
|
setToolRequestHandlers() {
|
|
37029
37083
|
if (this._toolHandlersInitialized) return;
|
|
@@ -37190,7 +37244,10 @@ var McpServer = class {
|
|
|
37190
37244
|
}
|
|
37191
37245
|
for (const template of Object.values(this._registeredResourceTemplates)) {
|
|
37192
37246
|
const variables = template.resourceTemplate.uriTemplate.match(uri.toString());
|
|
37193
|
-
if (variables)
|
|
37247
|
+
if (variables) {
|
|
37248
|
+
if (!template.enabled) throw new ProtocolError(ProtocolErrorCode.InvalidParams, `Resource template ${template.resourceTemplate.uriTemplate} disabled`);
|
|
37249
|
+
return attachCacheHintFallback(await template.readCallback(uri, variables, ctx), template.cacheHint);
|
|
37250
|
+
}
|
|
37194
37251
|
}
|
|
37195
37252
|
throw new ResourceNotFoundError(request.params.uri);
|
|
37196
37253
|
});
|
|
@@ -37221,36 +37278,32 @@ var McpServer = class {
|
|
|
37221
37278
|
this._promptHandlersInitialized = true;
|
|
37222
37279
|
}
|
|
37223
37280
|
registerResource(name, uriOrTemplate, config2, readCallback) {
|
|
37224
|
-
const cacheHint = config2
|
|
37225
|
-
|
|
37226
|
-
if (cacheHint !== void 0) {
|
|
37227
|
-
assertValidCacheHint(cacheHint, `resource ${name}`);
|
|
37228
|
-
const rest = { ...config2 };
|
|
37229
|
-
delete rest.cacheHint;
|
|
37230
|
-
metadata = rest;
|
|
37231
|
-
}
|
|
37281
|
+
const { cacheHint, scopeChallenge, ...resourceMetadata } = config2;
|
|
37282
|
+
const metadata = resourceMetadata;
|
|
37283
|
+
if (cacheHint !== void 0) assertValidCacheHint(cacheHint, `resource ${name}`);
|
|
37232
37284
|
if (typeof uriOrTemplate === "string") {
|
|
37233
37285
|
if (this._registeredResources[uriOrTemplate]) throw new Error(`Resource ${uriOrTemplate} is already registered`);
|
|
37234
|
-
const registeredResource = this._createRegisteredResource(name, config2.title, uriOrTemplate, metadata, readCallback);
|
|
37286
|
+
const registeredResource = this._createRegisteredResource(name, config2.title, uriOrTemplate, metadata, scopeChallenge, readCallback);
|
|
37235
37287
|
if (cacheHint !== void 0) registeredResource.cacheHint = cacheHint;
|
|
37236
37288
|
this.setResourceRequestHandlers();
|
|
37237
37289
|
this.sendResourceListChanged();
|
|
37238
37290
|
return registeredResource;
|
|
37239
37291
|
} else {
|
|
37240
37292
|
if (this._registeredResourceTemplates[name]) throw new Error(`Resource template ${name} is already registered`);
|
|
37241
|
-
const registeredResourceTemplate = this._createRegisteredResourceTemplate(name, config2.title, uriOrTemplate, metadata, readCallback);
|
|
37293
|
+
const registeredResourceTemplate = this._createRegisteredResourceTemplate(name, config2.title, uriOrTemplate, metadata, scopeChallenge, readCallback);
|
|
37242
37294
|
if (cacheHint !== void 0) registeredResourceTemplate.cacheHint = cacheHint;
|
|
37243
37295
|
this.setResourceRequestHandlers();
|
|
37244
37296
|
this.sendResourceListChanged();
|
|
37245
37297
|
return registeredResourceTemplate;
|
|
37246
37298
|
}
|
|
37247
37299
|
}
|
|
37248
|
-
_createRegisteredResource(name, title, uri, metadata, readCallback) {
|
|
37300
|
+
_createRegisteredResource(name, title, uri, metadata, scopeChallenge, readCallback) {
|
|
37249
37301
|
const registeredResource = {
|
|
37250
37302
|
name,
|
|
37251
37303
|
title,
|
|
37252
37304
|
metadata,
|
|
37253
37305
|
readCallback,
|
|
37306
|
+
scopeChallenge,
|
|
37254
37307
|
enabled: true,
|
|
37255
37308
|
disable: () => registeredResource.update({ enabled: false }),
|
|
37256
37309
|
enable: () => registeredResource.update({ enabled: true }),
|
|
@@ -37264,6 +37317,7 @@ var McpServer = class {
|
|
|
37264
37317
|
if (updates.title !== void 0) registeredResource.title = updates.title;
|
|
37265
37318
|
if (updates.metadata !== void 0) registeredResource.metadata = updates.metadata;
|
|
37266
37319
|
if (updates.callback !== void 0) registeredResource.readCallback = updates.callback;
|
|
37320
|
+
if (updates.scopeChallenge !== void 0) registeredResource.scopeChallenge = updates.scopeChallenge === null ? void 0 : updates.scopeChallenge;
|
|
37267
37321
|
if (updates.enabled !== void 0) registeredResource.enabled = updates.enabled;
|
|
37268
37322
|
this.sendResourceListChanged();
|
|
37269
37323
|
}
|
|
@@ -37271,12 +37325,13 @@ var McpServer = class {
|
|
|
37271
37325
|
this._registeredResources[uri] = registeredResource;
|
|
37272
37326
|
return registeredResource;
|
|
37273
37327
|
}
|
|
37274
|
-
_createRegisteredResourceTemplate(name, title, template, metadata, readCallback) {
|
|
37328
|
+
_createRegisteredResourceTemplate(name, title, template, metadata, scopeChallenge, readCallback) {
|
|
37275
37329
|
const registeredResourceTemplate = {
|
|
37276
37330
|
resourceTemplate: template,
|
|
37277
37331
|
title,
|
|
37278
37332
|
metadata,
|
|
37279
37333
|
readCallback,
|
|
37334
|
+
scopeChallenge,
|
|
37280
37335
|
enabled: true,
|
|
37281
37336
|
disable: () => registeredResourceTemplate.update({ enabled: false }),
|
|
37282
37337
|
enable: () => registeredResourceTemplate.update({ enabled: true }),
|
|
@@ -37290,6 +37345,7 @@ var McpServer = class {
|
|
|
37290
37345
|
if (updates.template !== void 0) registeredResourceTemplate.resourceTemplate = updates.template;
|
|
37291
37346
|
if (updates.metadata !== void 0) registeredResourceTemplate.metadata = updates.metadata;
|
|
37292
37347
|
if (updates.callback !== void 0) registeredResourceTemplate.readCallback = updates.callback;
|
|
37348
|
+
if (updates.scopeChallenge !== void 0) registeredResourceTemplate.scopeChallenge = updates.scopeChallenge === null ? void 0 : updates.scopeChallenge;
|
|
37293
37349
|
if (updates.enabled !== void 0) registeredResourceTemplate.enabled = updates.enabled;
|
|
37294
37350
|
this.sendResourceListChanged();
|
|
37295
37351
|
}
|
|
@@ -37299,7 +37355,7 @@ var McpServer = class {
|
|
|
37299
37355
|
if (Array.isArray(variableNames) && variableNames.some((v) => !!template.completeCallback(v))) this.setCompletionRequestHandler();
|
|
37300
37356
|
return registeredResourceTemplate;
|
|
37301
37357
|
}
|
|
37302
|
-
_createRegisteredPrompt(name, title, description, argsSchema, callback, icons, _meta) {
|
|
37358
|
+
_createRegisteredPrompt(name, title, description, argsSchema, callback, icons, scopeChallenge, _meta) {
|
|
37303
37359
|
let currentArgsSchema = argsSchema;
|
|
37304
37360
|
let currentCallback = callback;
|
|
37305
37361
|
const registeredPrompt = {
|
|
@@ -37307,6 +37363,7 @@ var McpServer = class {
|
|
|
37307
37363
|
description,
|
|
37308
37364
|
argsSchema,
|
|
37309
37365
|
icons,
|
|
37366
|
+
scopeChallenge,
|
|
37310
37367
|
_meta,
|
|
37311
37368
|
handler: createPromptHandler(name, argsSchema, callback),
|
|
37312
37369
|
enabled: true,
|
|
@@ -37321,6 +37378,7 @@ var McpServer = class {
|
|
|
37321
37378
|
if (updates.title !== void 0) registeredPrompt.title = updates.title;
|
|
37322
37379
|
if (updates.description !== void 0) registeredPrompt.description = updates.description;
|
|
37323
37380
|
if (updates.icons !== void 0) registeredPrompt.icons = updates.icons;
|
|
37381
|
+
if (updates.scopeChallenge !== void 0) registeredPrompt.scopeChallenge = updates.scopeChallenge === null ? void 0 : updates.scopeChallenge;
|
|
37324
37382
|
if (updates._meta !== void 0) registeredPrompt._meta = updates._meta;
|
|
37325
37383
|
let needsHandlerRegen = false;
|
|
37326
37384
|
if (updates.argsSchema !== void 0) {
|
|
@@ -37348,7 +37406,7 @@ var McpServer = class {
|
|
|
37348
37406
|
}
|
|
37349
37407
|
return registeredPrompt;
|
|
37350
37408
|
}
|
|
37351
|
-
_createRegisteredTool(name, title, description, inputSchema, outputSchema, annotations, icons, execution, _meta, handler) {
|
|
37409
|
+
_createRegisteredTool(name, title, description, inputSchema, outputSchema, annotations, icons, execution, scopeChallenge, _meta, handler) {
|
|
37352
37410
|
validateAndWarnToolName(name);
|
|
37353
37411
|
if (inputSchema !== void 0) try {
|
|
37354
37412
|
const json2 = standardSchemaToJsonSchema(inputSchema, "input");
|
|
@@ -37367,6 +37425,7 @@ var McpServer = class {
|
|
|
37367
37425
|
annotations,
|
|
37368
37426
|
icons,
|
|
37369
37427
|
execution,
|
|
37428
|
+
scopeChallenge,
|
|
37370
37429
|
_meta,
|
|
37371
37430
|
handler,
|
|
37372
37431
|
executor: createToolExecutor(inputSchema, handler),
|
|
@@ -37405,6 +37464,7 @@ var McpServer = class {
|
|
|
37405
37464
|
}
|
|
37406
37465
|
if (updates.annotations !== void 0) registeredTool.annotations = updates.annotations;
|
|
37407
37466
|
if (updates.icons !== void 0) registeredTool.icons = updates.icons;
|
|
37467
|
+
if (updates.scopeChallenge !== void 0) registeredTool.scopeChallenge = updates.scopeChallenge === null ? void 0 : updates.scopeChallenge;
|
|
37408
37468
|
if (updates._meta !== void 0) registeredTool._meta = updates._meta;
|
|
37409
37469
|
if (updates.enabled !== void 0) registeredTool.enabled = updates.enabled;
|
|
37410
37470
|
this.sendToolListChanged();
|
|
@@ -37417,13 +37477,13 @@ var McpServer = class {
|
|
|
37417
37477
|
}
|
|
37418
37478
|
registerTool(name, config2, cb) {
|
|
37419
37479
|
if (this._registeredTools[name]) throw new Error(`Tool ${name} is already registered`);
|
|
37420
|
-
const { title, description, inputSchema, outputSchema, annotations, icons, _meta } = config2;
|
|
37421
|
-
return this._createRegisteredTool(name, title, description, normalizeRawShapeSchema(inputSchema), normalizeRawShapeSchema(outputSchema), annotations, icons, void 0, _meta, cb);
|
|
37480
|
+
const { title, description, inputSchema, outputSchema, annotations, icons, scopeChallenge, _meta } = config2;
|
|
37481
|
+
return this._createRegisteredTool(name, title, description, normalizeRawShapeSchema(inputSchema), normalizeRawShapeSchema(outputSchema), annotations, icons, void 0, scopeChallenge, _meta, cb);
|
|
37422
37482
|
}
|
|
37423
37483
|
registerPrompt(name, config2, cb) {
|
|
37424
37484
|
if (this._registeredPrompts[name]) throw new Error(`Prompt ${name} is already registered`);
|
|
37425
|
-
const { title, description, argsSchema, icons, _meta } = config2;
|
|
37426
|
-
const registeredPrompt = this._createRegisteredPrompt(name, title, description, normalizeRawShapeSchema(argsSchema), cb, icons, _meta);
|
|
37485
|
+
const { title, description, argsSchema, icons, scopeChallenge, _meta } = config2;
|
|
37486
|
+
const registeredPrompt = this._createRegisteredPrompt(name, title, description, normalizeRawShapeSchema(argsSchema), cb, icons, scopeChallenge, _meta);
|
|
37427
37487
|
this.setPromptRequestHandlers();
|
|
37428
37488
|
this.sendPromptListChanged();
|
|
37429
37489
|
return registeredPrompt;
|
|
@@ -37535,6 +37595,7 @@ function unwrapOptionalSchema(schema) {
|
|
|
37535
37595
|
}
|
|
37536
37596
|
|
|
37537
37597
|
// node_modules/@modelcontextprotocol/server/dist/stdio.mjs
|
|
37598
|
+
var swallowsErrorsAfterClose = /* @__PURE__ */ Symbol("swallowsErrorsAfterClose");
|
|
37538
37599
|
var StdioServerTransport = class {
|
|
37539
37600
|
_readBuffer;
|
|
37540
37601
|
_started = false;
|
|
@@ -37561,18 +37622,27 @@ var StdioServerTransport = class {
|
|
|
37561
37622
|
this.onerror?.(error62);
|
|
37562
37623
|
};
|
|
37563
37624
|
_onstdouterror = (error62) => {
|
|
37625
|
+
if (this._closed) return;
|
|
37564
37626
|
this.onerror?.(error62);
|
|
37565
37627
|
this.close().catch(() => {
|
|
37566
37628
|
});
|
|
37567
37629
|
};
|
|
37630
|
+
_onstdinclose = () => {
|
|
37631
|
+
this.close().catch(() => {
|
|
37632
|
+
});
|
|
37633
|
+
};
|
|
37568
37634
|
/**
|
|
37569
37635
|
* Starts listening for messages on `stdin`.
|
|
37570
37636
|
*/
|
|
37571
37637
|
async start() {
|
|
37572
37638
|
if (this._started) throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");
|
|
37573
37639
|
this._started = true;
|
|
37640
|
+
for (const listener of this._stdout.listeners("error")) if (listener[swallowsErrorsAfterClose]) this._stdout.off("error", listener);
|
|
37641
|
+
if (this._stdin.readableEnded || this._stdin.destroyed) setImmediate(this._onstdinclose);
|
|
37574
37642
|
this._stdin.on("data", this._ondata);
|
|
37575
37643
|
this._stdin.on("error", this._onerror);
|
|
37644
|
+
this._stdin.on("end", this._onstdinclose);
|
|
37645
|
+
this._stdin.on("close", this._onstdinclose);
|
|
37576
37646
|
this._stdout.on("error", this._onstdouterror);
|
|
37577
37647
|
}
|
|
37578
37648
|
processReadBuffer() {
|
|
@@ -37589,7 +37659,9 @@ var StdioServerTransport = class {
|
|
|
37589
37659
|
this._closed = true;
|
|
37590
37660
|
this._stdin.off("data", this._ondata);
|
|
37591
37661
|
this._stdin.off("error", this._onerror);
|
|
37592
|
-
this.
|
|
37662
|
+
this._stdin.off("end", this._onstdinclose);
|
|
37663
|
+
this._stdin.off("close", this._onstdinclose);
|
|
37664
|
+
this._onstdouterror[swallowsErrorsAfterClose] = true;
|
|
37593
37665
|
if (this._stdin.listenerCount("data") === 0) this._stdin.pause();
|
|
37594
37666
|
this._readBuffer.clear();
|
|
37595
37667
|
this.onclose?.();
|
|
@@ -37866,6 +37938,7 @@ function serveStdio(factory, options = {}) {
|
|
|
37866
37938
|
return;
|
|
37867
37939
|
}
|
|
37868
37940
|
if (state.era === "modern" && await tryServeListen(message)) return;
|
|
37941
|
+
if (isTornDown()) return;
|
|
37869
37942
|
state.instance.channel.deliver(message);
|
|
37870
37943
|
return;
|
|
37871
37944
|
}
|
|
@@ -37932,6 +38005,7 @@ function serveStdio(factory, options = {}) {
|
|
|
37932
38005
|
};
|
|
37933
38006
|
}
|
|
37934
38007
|
if (await tryServeListen(message)) return;
|
|
38008
|
+
if (isTornDown()) return;
|
|
37935
38009
|
state.instance.channel.deliver(message, { classification: opening.classification });
|
|
37936
38010
|
return;
|
|
37937
38011
|
case "legacy": {
|
|
@@ -38018,6 +38092,9 @@ function toError(value) {
|
|
|
38018
38092
|
return value instanceof Error ? value : new Error(String(value));
|
|
38019
38093
|
}
|
|
38020
38094
|
|
|
38095
|
+
// node_modules/@modelcontextprotocol/server/dist/index.mjs
|
|
38096
|
+
var DEFAULT_MAX_REQUEST_BODY_SIZE = 4 * 1024 * 1024;
|
|
38097
|
+
|
|
38021
38098
|
// node_modules/@chrischall/mcp-utils/dist/errors/index.js
|
|
38022
38099
|
var DEFAULT_ERROR_MESSAGE_MAX = 500;
|
|
38023
38100
|
var McpToolError = class extends Error {
|
|
@@ -38058,11 +38135,12 @@ var UnreachableError = class extends McpToolError {
|
|
|
38058
38135
|
function createHelpfulError(message, opts) {
|
|
38059
38136
|
return new McpToolError(message, opts);
|
|
38060
38137
|
}
|
|
38138
|
+
var HEADER_NAME_RUN = "[a-z0-9_-]{0,40}";
|
|
38061
38139
|
var BEARER_RE = /(bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi;
|
|
38062
|
-
var JWT_RE =
|
|
38140
|
+
var JWT_RE = /(?<![A-Za-z0-9_-])[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{8,}(?![A-Za-z0-9_-])/g;
|
|
38063
38141
|
var BASIC_AUTH_RE = /(authorization\s*:\s*basic\s+)[A-Za-z0-9+/=_-]{6,}/gi;
|
|
38064
|
-
var SET_COOKIE_RE = /(\bset-cookie\s*:\s*)([
|
|
38065
|
-
var COOKIE_HEADER_RE = /((?<!set-)\bcookie\s*:\s*)((?:[
|
|
38142
|
+
var SET_COOKIE_RE = /(\bset-cookie\s*:\s*)([^=;,:\s]+)=[^;,\s]*/gi;
|
|
38143
|
+
var COOKIE_HEADER_RE = /((?<!set-)\bcookie\s*:\s*)((?:[^=;,:\s]+=[^;,\s]*)(?:;\s*[^=;,:\s]+=[^;,\s]*)*)/gi;
|
|
38066
38144
|
var API_KEY_RE = new RegExp([
|
|
38067
38145
|
"sk-[A-Za-z0-9_-]{20,}(?![A-Za-z0-9_-])",
|
|
38068
38146
|
// OpenAI / Anthropic (incl. sk-ant-…)
|
|
@@ -38077,10 +38155,10 @@ var API_KEY_RE = new RegExp([
|
|
|
38077
38155
|
"whsec_[A-Za-z0-9]{16,}\\b"
|
|
38078
38156
|
// webhook signing secret (Stripe-style)
|
|
38079
38157
|
].map((p) => `\\b${p}`).join("|"), "g");
|
|
38080
|
-
var QUERY_SECRET_RE =
|
|
38158
|
+
var QUERY_SECRET_RE = new RegExp(`([?&](?:(?:access|refresh|id|auth|session|csrf|xsrf)[_-]?token|client[_-]?secret|api[_-]?secret|api[_-]?key|password|passwd|signature|token|key|sig|(?:php|j)?sess(?:ion)?[_-]?id|sid|x[-_]${HEADER_NAME_RUN}?(?:api[-_]?key|token|secret|auth)${HEADER_NAME_RUN})=)[^&#\\s"'<>\`]+`, "gi");
|
|
38081
38159
|
var OAUTH_CODE_RE = /([?&]code=)(?=[^&#\s"'<>`]{16,})[^&#\s"'<>`]+/gi;
|
|
38082
38160
|
var FORM_PASSWORD_RE = /((?:^|[\s,;:"'(\[{])(?:password|passwd)=)[^&#\s"'<>`]+/gim;
|
|
38083
|
-
var HEADER_SECRET_RE =
|
|
38161
|
+
var HEADER_SECRET_RE = new RegExp(`(\\b(?:x[-_]${HEADER_NAME_RUN}?(?:api[-_]?key|token|secret|auth)${HEADER_NAME_RUN}|api[-_]?key)\\s*:\\s*)[^\\s,;"'<>\`]+`, "gi");
|
|
38084
38162
|
var AWS_SIGV4_RE = /([?&]X-Amz-(?:Signature|Security-Token|Credential)=)[^&#\s"'<>`]+/gi;
|
|
38085
38163
|
var JSON_SECRET_KEYS = [
|
|
38086
38164
|
"(?:access|refresh|id|auth|session|bearer|csrf|xsrf)[_-]?token",
|
|
@@ -38088,7 +38166,8 @@ var JSON_SECRET_KEYS = [
|
|
|
38088
38166
|
"api[_-]?secret",
|
|
38089
38167
|
"(?:x[_-])?api[_-]?key",
|
|
38090
38168
|
"private[_-]?key",
|
|
38091
|
-
|
|
38169
|
+
`x[_-]${HEADER_NAME_RUN}?(?:api[_-]?key|token|secret|auth)${HEADER_NAME_RUN}`,
|
|
38170
|
+
// bounded like HEADER_SECRET_RE
|
|
38092
38171
|
"(?:proxy-)?authorization",
|
|
38093
38172
|
"password",
|
|
38094
38173
|
"passwd",
|
|
@@ -38097,12 +38176,30 @@ var JSON_SECRET_KEYS = [
|
|
|
38097
38176
|
].join("|");
|
|
38098
38177
|
var JSON_SECRET_DQ_RE = new RegExp(`("(?:${JSON_SECRET_KEYS})"\\s*:\\s*")(?:[^"\\\\]|\\\\.)*(")`, "gi");
|
|
38099
38178
|
var JSON_SECRET_SQ_RE = new RegExp(`('(?:${JSON_SECRET_KEYS})'\\s*:\\s*')(?:[^'\\\\]|\\\\.)*(')`, "gi");
|
|
38179
|
+
var JSON_SECRET_NUM_RE = new RegExp(`(["'](?:${JSON_SECRET_KEYS})["']\\s*:\\s*)-?\\d+(?:\\.\\d+)?(?![\\d.])`, "gi");
|
|
38180
|
+
var JSON_COOKIE_DQ_RE = /("((?:set-)?cookie)"\s*:\s*)("(?:[^"\\]|\\.)*"|\[\s*"(?:[^"\\]|\\.)*"(?:\s*,\s*"(?:[^"\\]|\\.)*")*)/gi;
|
|
38181
|
+
var JSON_COOKIE_SQ_RE = /('((?:set-)?cookie)'\s*:\s*)('(?:[^'\\]|\\.)*'|\[\s*'(?:[^'\\]|\\.)*'(?:\s*,\s*'(?:[^'\\]|\\.)*')*)/gi;
|
|
38182
|
+
var DQ_STRING_RE = /"((?:[^"\\]|\\.)*)"/g;
|
|
38183
|
+
var SQ_STRING_RE = /'((?:[^'\\]|\\.)*)'/g;
|
|
38184
|
+
function redactJsonCookie(quote) {
|
|
38185
|
+
const stringRe = quote === '"' ? DQ_STRING_RE : SQ_STRING_RE;
|
|
38186
|
+
return (_m, prefix, key, value) => {
|
|
38187
|
+
const setCookie = key.toLowerCase() === "set-cookie";
|
|
38188
|
+
const redacted = value.replace(stringRe, (_s, body) => {
|
|
38189
|
+
const out = setCookie ? body.replace(/^(\s*[^=;]+)=[^;]*/, "$1=[REDACTED]") : body.replace(/=[^;]*/g, "=[REDACTED]");
|
|
38190
|
+
return `${quote}${out}${quote}`;
|
|
38191
|
+
});
|
|
38192
|
+
return `${prefix}${redacted}`;
|
|
38193
|
+
};
|
|
38194
|
+
}
|
|
38100
38195
|
function redactSecrets(text) {
|
|
38101
|
-
return text.replace(BEARER_RE, "$1[REDACTED]").replace(BASIC_AUTH_RE, "$1[REDACTED]").replace(SET_COOKIE_RE, "$1$2=[REDACTED]").replace(COOKIE_HEADER_RE, (_m, prefix, pairs) => `${prefix}${pairs.replace(/=[^;,\s]*/g, "=[REDACTED]")}`).replace(API_KEY_RE, "[REDACTED]").replace(HEADER_SECRET_RE, "$1[REDACTED]").replace(QUERY_SECRET_RE, "$1[REDACTED]").replace(OAUTH_CODE_RE, "$1[REDACTED]").replace(FORM_PASSWORD_RE, "$1[REDACTED]").replace(AWS_SIGV4_RE, "$1[REDACTED]").replace(JSON_SECRET_DQ_RE, "$1[REDACTED]$2").replace(JSON_SECRET_SQ_RE, "$1[REDACTED]$2").replace(JWT_RE, "[REDACTED]");
|
|
38196
|
+
return text.replace(BEARER_RE, "$1[REDACTED]").replace(BASIC_AUTH_RE, "$1[REDACTED]").replace(SET_COOKIE_RE, "$1$2=[REDACTED]").replace(COOKIE_HEADER_RE, (_m, prefix, pairs) => `${prefix}${pairs.replace(/=[^;,\s]*/g, "=[REDACTED]")}`).replace(API_KEY_RE, "[REDACTED]").replace(HEADER_SECRET_RE, "$1[REDACTED]").replace(QUERY_SECRET_RE, "$1[REDACTED]").replace(OAUTH_CODE_RE, "$1[REDACTED]").replace(FORM_PASSWORD_RE, "$1[REDACTED]").replace(AWS_SIGV4_RE, "$1[REDACTED]").replace(JSON_COOKIE_DQ_RE, redactJsonCookie('"')).replace(JSON_COOKIE_SQ_RE, redactJsonCookie("'")).replace(JSON_SECRET_DQ_RE, "$1[REDACTED]$2").replace(JSON_SECRET_SQ_RE, "$1[REDACTED]$2").replace(JSON_SECRET_NUM_RE, "$1[REDACTED]").replace(JWT_RE, "[REDACTED]");
|
|
38102
38197
|
}
|
|
38198
|
+
var ERROR_REDACTION_INPUT_MAX = 64 * 1024;
|
|
38103
38199
|
function truncateErrorMessage(text, max = DEFAULT_ERROR_MESSAGE_MAX) {
|
|
38104
38200
|
const str2 = text === null || text === void 0 ? "" : String(text);
|
|
38105
|
-
const
|
|
38201
|
+
const cap = Math.max(ERROR_REDACTION_INPUT_MAX, max);
|
|
38202
|
+
const redacted = redactSecrets(str2.length > cap ? str2.slice(0, cap) : str2);
|
|
38106
38203
|
if (redacted.length <= max)
|
|
38107
38204
|
return redacted;
|
|
38108
38205
|
return `${redacted.slice(0, max)}\u2026 [truncated]`;
|
|
@@ -58099,6 +58196,9 @@ async function tokenConfirmation(action, fb) {
|
|
|
58099
58196
|
const subject = await fb.subject();
|
|
58100
58197
|
if (isToolResult(subject))
|
|
58101
58198
|
return subject;
|
|
58199
|
+
if (subject.payload === void 0) {
|
|
58200
|
+
throw new TypeError(`confirm token: ${fb.tool}'s subject() returned no payload. Bind what the call will do (the arguments or the request body), or pass \`args\` to confirmationFromEnv.`);
|
|
58201
|
+
}
|
|
58102
58202
|
const binding = {
|
|
58103
58203
|
tool: fb.tool,
|
|
58104
58204
|
...fb.account === void 0 ? {} : { account: fb.account },
|
|
@@ -58202,9 +58302,19 @@ function readConfirmMode(env = process.env) {
|
|
|
58202
58302
|
}
|
|
58203
58303
|
return "refuse";
|
|
58204
58304
|
}
|
|
58205
|
-
function
|
|
58305
|
+
function readConfirmTtl(env) {
|
|
58206
58306
|
const raw = readEnvVar("MCP_CONFIRM_TTL_SECONDS", { env })?.trim();
|
|
58207
|
-
|
|
58307
|
+
if (!raw)
|
|
58308
|
+
return DEFAULT_TTL_SECONDS2;
|
|
58309
|
+
if (/^[1-9]\d*$/.test(raw))
|
|
58310
|
+
return Number(raw);
|
|
58311
|
+
const key = `ttl:${raw}`;
|
|
58312
|
+
if (!warned.has(key)) {
|
|
58313
|
+
warned.add(key);
|
|
58314
|
+
process.stderr.write(`MCP_CONFIRM_TTL_SECONDS="${raw}" is not a positive whole number of seconds; gated writes will refuse on clients that cannot show a confirmation prompt until it is fixed.
|
|
58315
|
+
`);
|
|
58316
|
+
}
|
|
58317
|
+
return void 0;
|
|
58208
58318
|
}
|
|
58209
58319
|
var processKey;
|
|
58210
58320
|
function confirmKeyFromEnv(env = process.env) {
|
|
@@ -58216,15 +58326,33 @@ function confirmKeyFromEnv(env = process.env) {
|
|
|
58216
58326
|
}
|
|
58217
58327
|
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.)";
|
|
58218
58328
|
var REFUSE_HINT = "Set MCP_CONFIRM_MODE=ask-user on the server to allow two-step confirmation instead.";
|
|
58329
|
+
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.";
|
|
58330
|
+
function boundArgs(args) {
|
|
58331
|
+
if (args === null || typeof args !== "object" || Array.isArray(args) || !("confirmToken" in args))
|
|
58332
|
+
return args;
|
|
58333
|
+
const { confirmToken, ...rest } = args;
|
|
58334
|
+
void confirmToken;
|
|
58335
|
+
return rest;
|
|
58336
|
+
}
|
|
58219
58337
|
function confirmationFromEnv(options) {
|
|
58220
|
-
const { tool, account, confirmToken, subject, instruction, spent, env = process.env, ...
|
|
58338
|
+
const { tool, account, confirmToken, subject, instruction, spent, args, env = process.env, ...rest } = options;
|
|
58221
58339
|
const mode = readConfirmMode(env);
|
|
58222
|
-
|
|
58340
|
+
const ttlSeconds = readConfirmTtl(env);
|
|
58341
|
+
const bound = args === void 0 ? void 0 : boundArgs(args);
|
|
58342
|
+
const confirmation = bound === void 0 || rest.binding ? rest : { ...rest, binding: { key: confirmKeyFromEnv(env), args: bound, ttlSeconds: ttlSeconds ?? DEFAULT_TTL_SECONDS2 } };
|
|
58343
|
+
if (mode === "refuse" || ttlSeconds === void 0) {
|
|
58344
|
+
const hint = mode === "refuse" ? REFUSE_HINT : BAD_TTL_HINT;
|
|
58223
58345
|
return {
|
|
58224
58346
|
...confirmation,
|
|
58225
|
-
unsupportedNote: confirmation.unsupportedNote ? `${confirmation.unsupportedNote} ${
|
|
58347
|
+
unsupportedNote: confirmation.unsupportedNote ? `${confirmation.unsupportedNote} ${hint}` : hint
|
|
58226
58348
|
};
|
|
58227
58349
|
}
|
|
58350
|
+
const boundSubject = bound === void 0 ? subject : async () => {
|
|
58351
|
+
const read = await subject();
|
|
58352
|
+
if ("content" in read)
|
|
58353
|
+
return read;
|
|
58354
|
+
return { ...read, payload: { payload: read.payload, args: bound } };
|
|
58355
|
+
};
|
|
58228
58356
|
return {
|
|
58229
58357
|
...confirmation,
|
|
58230
58358
|
tokenFallback: {
|
|
@@ -58232,8 +58360,8 @@ function confirmationFromEnv(options) {
|
|
|
58232
58360
|
tool,
|
|
58233
58361
|
...account === void 0 ? {} : { account },
|
|
58234
58362
|
...confirmToken === void 0 ? {} : { confirmToken },
|
|
58235
|
-
subject,
|
|
58236
|
-
ttlSeconds
|
|
58363
|
+
subject: boundSubject,
|
|
58364
|
+
ttlSeconds,
|
|
58237
58365
|
instruction: mode === "auto" ? CONFIRM_TOKEN_AUTO_INSTRUCTION : instruction ?? CONFIRM_TOKEN_INSTRUCTION,
|
|
58238
58366
|
...spent === void 0 ? {} : { spent }
|
|
58239
58367
|
}
|
|
@@ -58560,7 +58688,7 @@ function toolAnnotations(opts = {}) {
|
|
|
58560
58688
|
}
|
|
58561
58689
|
|
|
58562
58690
|
// src/version.ts
|
|
58563
|
-
var VERSION = "2.2.
|
|
58691
|
+
var VERSION = "2.2.2";
|
|
58564
58692
|
|
|
58565
58693
|
// src/client.ts
|
|
58566
58694
|
import { dirname as dirname2, join as join2 } from "path";
|
|
@@ -61457,7 +61585,7 @@ await runMcp({
|
|
|
61457
61585
|
});
|
|
61458
61586
|
/*! Bundled license information:
|
|
61459
61587
|
|
|
61460
|
-
@modelcontextprotocol/server/dist/src-
|
|
61588
|
+
@modelcontextprotocol/server/dist/src-D-y6h4N7.mjs:
|
|
61461
61589
|
(*!
|
|
61462
61590
|
* content-type
|
|
61463
61591
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
package/dist/version.js
CHANGED
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
// json's `extra-files`), and `versionSyncTest` guards that it stays equal to
|
|
4
4
|
// package.json. Import VERSION wherever the version is needed rather than
|
|
5
5
|
// re-declaring it.
|
|
6
|
-
export const VERSION = '2.2.
|
|
6
|
+
export const VERSION = '2.2.2'; // x-release-please-version
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "untappd-mcp",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"mcpName": "io.github.chrischall/untappd-mcp",
|
|
5
5
|
"description": "Untappd MCP server for Claude — 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/untappd-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "2.2.
|
|
9
|
+
"version": "2.2.2",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "untappd-mcp",
|
|
14
|
-
"version": "2.2.
|
|
14
|
+
"version": "2.2.2",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|