gogcli-mcp-contacts 4.3.0 → 4.5.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/dist/index.js CHANGED
@@ -34468,6 +34468,67 @@ function errorResult(message) {
34468
34468
  };
34469
34469
  }
34470
34470
 
34471
+ // ../../node_modules/@chrischall/mcp-utils/dist/server/confirm-token.js
34472
+ function createSpentTokenStore() {
34473
+ const spent2 = /* @__PURE__ */ new Map();
34474
+ return {
34475
+ has: (nonce) => spent2.has(nonce),
34476
+ add: (nonce, exp) => {
34477
+ spent2.set(nonce, exp);
34478
+ },
34479
+ prune: (now) => {
34480
+ for (const [nonce, exp] of spent2)
34481
+ if (exp < now)
34482
+ spent2.delete(nonce);
34483
+ },
34484
+ clear: () => spent2.clear(),
34485
+ get size() {
34486
+ return spent2.size;
34487
+ }
34488
+ };
34489
+ }
34490
+ var PROCESS_SPENT = createSpentTokenStore();
34491
+ var confirmTokenParam = external_exports.string().optional().describe(`ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat \u2014 never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.`);
34492
+
34493
+ // ../../node_modules/@chrischall/mcp-utils/dist/config/index.js
34494
+ import { homedir } from "node:os";
34495
+ import { isAbsolute, join, resolve } from "node:path";
34496
+ var PLACEHOLDER_RE = /^\$\{[^}]*\}$/;
34497
+ function readEnvVar(key, opts = {}) {
34498
+ const env = opts.env ?? process.env;
34499
+ const raw = env[key];
34500
+ if (typeof raw === "string") {
34501
+ const trimmed = raw.trim();
34502
+ if (trimmed.length > 0 && trimmed !== "undefined" && trimmed !== "null" && !PLACEHOLDER_RE.test(trimmed)) {
34503
+ return trimmed;
34504
+ }
34505
+ }
34506
+ return opts.default;
34507
+ }
34508
+ var TRUE_TOKENS = /* @__PURE__ */ new Set(["1", "true", "yes", "on"]);
34509
+ var FALSE_TOKENS = /* @__PURE__ */ new Set(["0", "false", "no", "off"]);
34510
+ function parseBoolEnv(key, opts = {}) {
34511
+ const fallback = opts.default ?? false;
34512
+ const raw = readEnvVar(key, { env: opts.env });
34513
+ if (raw === void 0)
34514
+ return fallback;
34515
+ const token = raw.toLowerCase();
34516
+ if (TRUE_TOKENS.has(token))
34517
+ return true;
34518
+ if (FALSE_TOKENS.has(token))
34519
+ return false;
34520
+ return fallback;
34521
+ }
34522
+ function expandPath(p) {
34523
+ let expanded = p;
34524
+ if (p === "~") {
34525
+ expanded = homedir();
34526
+ } else if (p.startsWith("~/")) {
34527
+ expanded = join(homedir(), p.slice(2));
34528
+ }
34529
+ return isAbsolute(expanded) ? expanded : resolve(expanded);
34530
+ }
34531
+
34471
34532
  // ../../node_modules/@chrischall/mcp-utils/dist/server/index.js
34472
34533
  var SERVER_PROTOCOL_VERSIONS = Object.freeze([
34473
34534
  "2026-07-28",
@@ -34643,45 +34704,6 @@ function runMcp(opts) {
34643
34704
  return handle;
34644
34705
  }
34645
34706
 
34646
- // ../../node_modules/@chrischall/mcp-utils/dist/config/index.js
34647
- import { homedir } from "node:os";
34648
- import { isAbsolute, join, resolve } from "node:path";
34649
- var PLACEHOLDER_RE = /^\$\{[^}]*\}$/;
34650
- function readEnvVar(key, opts = {}) {
34651
- const env = opts.env ?? process.env;
34652
- const raw = env[key];
34653
- if (typeof raw === "string") {
34654
- const trimmed = raw.trim();
34655
- if (trimmed.length > 0 && trimmed !== "undefined" && trimmed !== "null" && !PLACEHOLDER_RE.test(trimmed)) {
34656
- return trimmed;
34657
- }
34658
- }
34659
- return opts.default;
34660
- }
34661
- var TRUE_TOKENS = /* @__PURE__ */ new Set(["1", "true", "yes", "on"]);
34662
- var FALSE_TOKENS = /* @__PURE__ */ new Set(["0", "false", "no", "off"]);
34663
- function parseBoolEnv(key, opts = {}) {
34664
- const fallback = opts.default ?? false;
34665
- const raw = readEnvVar(key, { env: opts.env });
34666
- if (raw === void 0)
34667
- return fallback;
34668
- const token = raw.toLowerCase();
34669
- if (TRUE_TOKENS.has(token))
34670
- return true;
34671
- if (FALSE_TOKENS.has(token))
34672
- return false;
34673
- return fallback;
34674
- }
34675
- function expandPath(p) {
34676
- let expanded = p;
34677
- if (p === "~") {
34678
- expanded = homedir();
34679
- } else if (p.startsWith("~/")) {
34680
- expanded = join(homedir(), p.slice(2));
34681
- }
34682
- return isAbsolute(expanded) ? expanded : resolve(expanded);
34683
- }
34684
-
34685
34707
  // ../../node_modules/@chrischall/mcp-utils/dist/fs/confine.js
34686
34708
  import { existsSync, realpathSync } from "node:fs";
34687
34709
  import { dirname, isAbsolute as isAbsolute2, relative, resolve as resolve2, sep } from "node:path";
@@ -35550,6 +35572,9 @@ function formatAuthHealth(raw, now) {
35550
35572
  return accounts.map((a) => formatOneAccountHealth(a, now)).join("\n\n");
35551
35573
  }
35552
35574
 
35575
+ // ../gogcli-mcp/src/send-confirm-token.ts
35576
+ var spent = createSpentTokenStore();
35577
+
35553
35578
  // ../gogcli-mcp/src/tools/auth.ts
35554
35579
  var AUTH_RUN_SUBCOMMANDS = ["list", "status", "services", "remove", "alias"];
35555
35580
  function registerAuthToolsWith(server, defaultServices) {
@@ -35790,7 +35815,7 @@ var replySchema = {
35790
35815
  signatureFile: external_exports.string().optional().describe("Append a local signature file (plain text or HTML), read on the gog server"),
35791
35816
  account: accountParam
35792
35817
  };
35793
- var sendReplySchema = external_exports.object(replySchema);
35818
+ var sendReplySchema = external_exports.object({ ...replySchema, confirmToken: confirmTokenParam });
35794
35819
 
35795
35820
  // ../gogcli-mcp/src/tools/sheets.ts
35796
35821
  var cellValueParam = external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean(), external_exports.null()]);
@@ -35802,7 +35827,7 @@ var failIfNotEmptyParam = external_exports.boolean().optional().describe(
35802
35827
  );
35803
35828
 
35804
35829
  // ../gogcli-mcp/src/server.ts
35805
- var VERSION = true ? "4.3.0" : "0.0.0";
35830
+ var VERSION = true ? "4.5.0" : "0.0.0";
35806
35831
 
35807
35832
  // ../gogcli-mcp/src/bootstrap-auth.ts
35808
35833
  import { join as join5 } from "node:path";
package/manifest.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "manifest_version": "0.3",
4
4
  "name": "gogcli-mcp-contacts",
5
5
  "display_name": "gogcli (Contacts)",
6
- "version": "4.3.0",
6
+ "version": "4.5.0",
7
7
  "description": "Extended Google Contacts for Claude via gogcli — auth + Contacts + Workspace directory (People API)",
8
8
  "author": {
9
9
  "name": "Chris Hall",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gogcli-mcp-contacts",
3
- "version": "4.3.0",
3
+ "version": "4.5.0",
4
4
  "mcpName": "io.github.chrischall/gogcli-mcp-contacts",
5
5
  "description": "Extended Google Contacts + People MCP server via gogcli — auth + Contacts + Workspace directory (People API)",
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.4.0",
27
+ "@chrischall/mcp-utils": "^2.6.0",
28
28
  "@modelcontextprotocol/server": "^2.0.0",
29
29
  "zod": "^4.6.1"
30
30
  },