minutes-mcp 0.9.2 → 0.9.4

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
@@ -148,7 +148,7 @@ function findMinutesBinary() {
148
148
  }
149
149
  let MINUTES_BIN = findMinutesBinary();
150
150
  // ── Expected CLI version (must match this MCP server release) ──
151
- const MCP_SERVER_VERSION = "0.9.2";
151
+ const MCP_SERVER_VERSION = "0.9.4";
152
152
  const EXPECTED_CLI_VERSION = MCP_SERVER_VERSION;
153
153
  const RELEASE_TAG = `v${EXPECTED_CLI_VERSION}`;
154
154
  // ── CLI auto-install ────────────────────────────────────────
@@ -592,8 +592,12 @@ server.tool("start_recording", "Start recording audio with call-aware preflight.
592
592
  structuredContent: { preflight },
593
593
  };
594
594
  }
595
- // Spawn detached — recording is a foreground process that blocks,
596
- // so we spawn it and let it run independently
595
+ // Spawn recording as a child process (not detached).
596
+ // detached: true calls setsid() which creates a new macOS audit session,
597
+ // severing the TCC microphone grant inherited from the host app (Claude Desktop).
598
+ // CoreAudio then delivers all-zero samples — silent recordings.
599
+ // The MCP server is long-lived, and the recording process ignores SIGTERM,
600
+ // so child.unref() alone is sufficient.
597
601
  const args = ["record", "--mode", mode];
598
602
  if (title)
599
603
  args.push("--title", title);
@@ -604,7 +608,6 @@ server.tool("start_recording", "Start recording audio with call-aware preflight.
604
608
  if (language)
605
609
  args.push("--language", language);
606
610
  const child = spawn(MINUTES_BIN, args, {
607
- detached: true,
608
611
  stdio: "ignore",
609
612
  env: { ...process.env, RUST_LOG: "info" },
610
613
  });
@@ -1545,12 +1548,11 @@ server.tool("start_dictation", "Start dictation mode. Speak naturally — text a
1545
1548
  ],
1546
1549
  };
1547
1550
  }
1548
- // Spawn detached dictation process
1551
+ // Spawn dictation as child (not detached preserves macOS TCC mic grant)
1549
1552
  const dictArgs = ["dictate"];
1550
1553
  if (language)
1551
1554
  dictArgs.push("--language", language);
1552
1555
  const child = spawn(MINUTES_BIN, dictArgs, {
1553
- detached: true,
1554
1556
  stdio: "ignore",
1555
1557
  env: { ...process.env, RUST_LOG: "info" },
1556
1558
  });
@@ -1715,12 +1717,11 @@ server.tool("start_live_transcript", "Start a live transcript session. Records a
1715
1717
  }
1716
1718
  }
1717
1719
  catch { /* no active session, proceed */ }
1718
- // Spawn detached live transcript process
1720
+ // Spawn live transcript as child (not detached — preserves macOS TCC mic grant)
1719
1721
  const liveArgs = ["live"];
1720
1722
  if (language)
1721
1723
  liveArgs.push("--language", language);
1722
1724
  const child = spawn(MINUTES_BIN, liveArgs, {
1723
- detached: true,
1724
1725
  stdio: "ignore",
1725
1726
  env: { ...process.env, RUST_LOG: "info" },
1726
1727
  });
package/dist/paths.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { existsSync, realpathSync } from "fs";
2
2
  import { homedir } from "os";
3
- import { extname, join, resolve } from "path";
3
+ import { extname, join, resolve, sep } from "path";
4
4
  export function expandHomeLikePath(input) {
5
5
  const home = homedir();
6
6
  if (input === "~") {
@@ -31,7 +31,9 @@ export function canonicalizeRoot(root) {
31
31
  }
32
32
  export function isWithinDirectory(candidate, root) {
33
33
  // Ensure root ends with separator to prevent prefix attacks (e.g. ~/meetings-evil)
34
- const rootWithSep = root.endsWith("/") ? root : root + "/";
34
+ // Use path.sep for cross-platform correctness realpathSync returns OS-native
35
+ // separators, so on Windows the root will use backslashes.
36
+ const rootWithSep = root.endsWith(sep) ? root : root + sep;
35
37
  return candidate === root || candidate.startsWith(rootWithSep);
36
38
  }
37
39
  export function validatePathInDirectory(path, root, allowedExts) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minutes-mcp",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "MCP server for minutes — conversation memory for AI assistants. Works with Claude Desktop, Mistral Vibe, Cursor, Windsurf, and any MCP client.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",