gogcli-mcp-drive 4.6.2 → 4.7.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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/dist/index.js +44 -6
- package/manifest.json +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"metadata": {
|
|
9
9
|
"description": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
|
|
10
|
-
"version": "4.
|
|
10
|
+
"version": "4.7.0"
|
|
11
11
|
},
|
|
12
12
|
"plugins": [
|
|
13
13
|
{
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"displayName": "gogcli (Drive)",
|
|
16
16
|
"source": "./",
|
|
17
17
|
"description": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
|
|
18
|
-
"version": "4.
|
|
18
|
+
"version": "4.7.0",
|
|
19
19
|
"author": {
|
|
20
20
|
"name": "Chris Hall"
|
|
21
21
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp-drive",
|
|
3
3
|
"displayName": "gogcli (Drive)",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.7.0",
|
|
5
5
|
"description": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Chris Hall",
|
package/dist/index.js
CHANGED
|
@@ -34752,6 +34752,7 @@ function escapeKey(key) {
|
|
|
34752
34752
|
var DEFAULT_REQUEST_KEY = "confirmation";
|
|
34753
34753
|
var DEFAULT_CONFIRMATION_LABEL = "Confirm this action should proceed.";
|
|
34754
34754
|
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";
|
|
34755
|
+
var DISABLED_NOTE = "Nothing was done because confirmation prompts are turned off for this server, and this action is never taken without one";
|
|
34755
34756
|
var STATE_PREFIX = "mcpu.confirm.v1.";
|
|
34756
34757
|
function bindingKey(binding) {
|
|
34757
34758
|
if (binding.ttlSeconds !== void 0 && !(Number.isFinite(binding.ttlSeconds) && binding.ttlSeconds > 0)) {
|
|
@@ -34824,6 +34825,15 @@ ${JSON.stringify(preview, null, 2)}`,
|
|
|
34824
34825
|
};
|
|
34825
34826
|
const response = inputResponse(ctx.mcpReq.inputResponses, requestKey);
|
|
34826
34827
|
const accepted = acceptedContent(ctx.mcpReq.inputResponses, requestKey, confirmationSchema);
|
|
34828
|
+
if (options.elicitation === false) {
|
|
34829
|
+
return textResult({
|
|
34830
|
+
confirmed: false,
|
|
34831
|
+
dispatched: false,
|
|
34832
|
+
action: options.action,
|
|
34833
|
+
reason: "confirmation-unsupported",
|
|
34834
|
+
note: options.unsupportedNote ? `${DISABLED_NOTE}. ${options.unsupportedNote}` : `${DISABLED_NOTE}.`
|
|
34835
|
+
});
|
|
34836
|
+
}
|
|
34827
34837
|
if (response.kind === "missing") {
|
|
34828
34838
|
if (callerAcceptsFormElicitation(ctx) === false) {
|
|
34829
34839
|
return textResult({
|
|
@@ -35018,7 +35028,7 @@ async function tokenConfirmation(action, fb) {
|
|
|
35018
35028
|
}
|
|
35019
35029
|
async function requireConfirmationWithFallback(ctx, options) {
|
|
35020
35030
|
const { tokenFallback, ...confirmation } = options;
|
|
35021
|
-
if (tokenFallback && callerAcceptsFormElicitation(ctx) === false) {
|
|
35031
|
+
if (tokenFallback && (options.elicitation === false || callerAcceptsFormElicitation(ctx) === false)) {
|
|
35022
35032
|
return tokenConfirmation(options.action, tokenFallback);
|
|
35023
35033
|
}
|
|
35024
35034
|
return requireConfirmation(ctx, confirmation);
|
|
@@ -35164,6 +35174,20 @@ function readConfirmMode(env = process.env) {
|
|
|
35164
35174
|
}
|
|
35165
35175
|
return "refuse";
|
|
35166
35176
|
}
|
|
35177
|
+
function readConfirmElicitation(env = process.env) {
|
|
35178
|
+
const raw = readEnvVar("MCP_CONFIRM_ELICITATION", { env })?.trim().toLowerCase();
|
|
35179
|
+
if (!raw || raw === "on")
|
|
35180
|
+
return "on";
|
|
35181
|
+
if (raw === "off")
|
|
35182
|
+
return "off";
|
|
35183
|
+
const key = `elicitation:${raw}`;
|
|
35184
|
+
if (!warned.has(key)) {
|
|
35185
|
+
warned.add(key);
|
|
35186
|
+
process.stderr.write(`MCP_CONFIRM_ELICITATION="${raw}" is not one of on, off; treating it as on.
|
|
35187
|
+
`);
|
|
35188
|
+
}
|
|
35189
|
+
return "on";
|
|
35190
|
+
}
|
|
35167
35191
|
function readConfirmTtl(env) {
|
|
35168
35192
|
const raw = readEnvVar("MCP_CONFIRM_TTL_SECONDS", { env })?.trim();
|
|
35169
35193
|
if (!raw)
|
|
@@ -35208,6 +35232,7 @@ function spentTokenStoreFromEnv(env = process.env) {
|
|
|
35208
35232
|
}
|
|
35209
35233
|
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.)";
|
|
35210
35234
|
var REFUSE_HINT = "Set MCP_CONFIRM_MODE=ask-user on the server to allow two-step confirmation instead.";
|
|
35235
|
+
var ELICITATION_OFF_HINT = "MCP_CONFIRM_ELICITATION=off on the server turns confirmation prompts off.";
|
|
35211
35236
|
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.";
|
|
35212
35237
|
function boundArgs(args) {
|
|
35213
35238
|
if (args === null || typeof args !== "object" || Array.isArray(args) || !("confirmToken" in args))
|
|
@@ -35221,10 +35246,13 @@ function confirmationFromEnv(options) {
|
|
|
35221
35246
|
const spent2 = callerSpent ?? spentTokenStoreFromEnv(env);
|
|
35222
35247
|
const mode = readConfirmMode(env);
|
|
35223
35248
|
const ttlSeconds = readConfirmTtl(env);
|
|
35249
|
+
const elicitationOff = readConfirmElicitation(env) === "off";
|
|
35224
35250
|
const bound = args === void 0 ? void 0 : boundArgs(args);
|
|
35225
|
-
const
|
|
35251
|
+
const bindingAdded = bound === void 0 || rest.binding ? rest : { ...rest, binding: { key: confirmKeyFromEnv(env), args: bound, ttlSeconds: ttlSeconds ?? DEFAULT_TTL_SECONDS2 } };
|
|
35252
|
+
const confirmation = elicitationOff ? { ...bindingAdded, elicitation: false } : bindingAdded;
|
|
35226
35253
|
if (mode === "refuse" || ttlSeconds === void 0) {
|
|
35227
|
-
const
|
|
35254
|
+
const reason = mode === "refuse" ? REFUSE_HINT : BAD_TTL_HINT;
|
|
35255
|
+
const hint = elicitationOff ? `${ELICITATION_OFF_HINT} ${reason}` : reason;
|
|
35228
35256
|
return {
|
|
35229
35257
|
...confirmation,
|
|
35230
35258
|
unsupportedNote: confirmation.unsupportedNote ? `${confirmation.unsupportedNote} ${hint}` : hint
|
|
@@ -36311,7 +36339,9 @@ function formatOneAccountHealth(a, now) {
|
|
|
36311
36339
|
}
|
|
36312
36340
|
if (a.valid === true) {
|
|
36313
36341
|
let line = `\u2713 ${email3}: token valid.${ageStr}`;
|
|
36314
|
-
if (age !== null && age
|
|
36342
|
+
if (age !== null && age > REFRESH_TOKEN_TESTING_TTL_DAYS) {
|
|
36343
|
+
line += ` It has outlived the 7-day "Testing" limit, so this OAuth app is not subject to the 7-day expiry.`;
|
|
36344
|
+
} else if (age !== null && age >= HEALTH_WARN_AGE_DAYS) {
|
|
36315
36345
|
const est = new Date(Date.parse(a.created_at) + REFRESH_TOKEN_TESTING_TTL_DAYS * MS_PER_DAY).toISOString().slice(0, 10);
|
|
36316
36346
|
line += ` \u26A0 Approaching the 7-day refresh-token limit for OAuth apps in "Testing" mode (if that applies, expect expiry around ${est}). Re-authorize soon, or publish the OAuth consent screen to "In production" to stop the weekly expiry.`;
|
|
36317
36347
|
}
|
|
@@ -36396,7 +36426,15 @@ async function requireDispatchConfirmation(ctx, options) {
|
|
|
36396
36426
|
confirmationLabel: options.confirmationLabel,
|
|
36397
36427
|
...options.unsupportedNote ? { unsupportedNote: options.unsupportedNote } : {}
|
|
36398
36428
|
};
|
|
36399
|
-
if (!fallback)
|
|
36429
|
+
if (!fallback) {
|
|
36430
|
+
if (readConfirmElicitation() !== "off") return requireConfirmationWithFallback(ctx, confirmation);
|
|
36431
|
+
const offNote = "MCP_CONFIRM_ELICITATION=off on the server turns confirmation prompts off.";
|
|
36432
|
+
return requireConfirmationWithFallback(ctx, {
|
|
36433
|
+
...confirmation,
|
|
36434
|
+
elicitation: false,
|
|
36435
|
+
unsupportedNote: confirmation.unsupportedNote ? `${offNote} ${confirmation.unsupportedNote}` : offNote
|
|
36436
|
+
});
|
|
36437
|
+
}
|
|
36400
36438
|
return requireConfirmationWithFallback(ctx, confirmationFromEnv({
|
|
36401
36439
|
...confirmation,
|
|
36402
36440
|
tool: fallback.tool,
|
|
@@ -37009,7 +37047,7 @@ var failIfNotEmptyParam = external_exports.boolean().optional().describe(
|
|
|
37009
37047
|
);
|
|
37010
37048
|
|
|
37011
37049
|
// ../gogcli-mcp/src/server.ts
|
|
37012
|
-
var VERSION = true ? "4.
|
|
37050
|
+
var VERSION = true ? "4.7.0" : "0.0.0";
|
|
37013
37051
|
|
|
37014
37052
|
// ../gogcli-mcp/src/bootstrap-auth.ts
|
|
37015
37053
|
import { join as join7 } from "node:path";
|
package/manifest.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"manifest_version": "0.3",
|
|
4
4
|
"name": "gogcli-mcp-drive",
|
|
5
5
|
"display_name": "gogcli (Drive)",
|
|
6
|
-
"version": "4.
|
|
6
|
+
"version": "4.7.0",
|
|
7
7
|
"description": "Extended Google Drive for Claude via gogcli — auth + full Drive support (upload, download, permissions, comments, shared drives)",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Chris Hall",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gogcli-mcp-drive",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.0",
|
|
4
4
|
"mcpName": "io.github.chrischall/gogcli-mcp-drive",
|
|
5
5
|
"description": "Extended Google Drive MCP server via gogcli — auth + full Drive support (upload/download/permissions/comments/shared drives)",
|
|
6
6
|
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"test:coverage": "vitest run --coverage"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@chrischall/mcp-utils": "^2.
|
|
27
|
+
"@chrischall/mcp-utils": "^2.15.0",
|
|
28
28
|
"@modelcontextprotocol/server": "^2.3.0",
|
|
29
29
|
"zod": "^4.6.1"
|
|
30
30
|
},
|
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"source": "github",
|
|
8
8
|
"subfolder": "packages/gogcli-mcp-drive"
|
|
9
9
|
},
|
|
10
|
-
"version": "4.
|
|
10
|
+
"version": "4.7.0",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "gogcli-mcp-drive",
|
|
15
|
-
"version": "4.
|
|
15
|
+
"version": "4.7.0",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
},
|