local-mcp 3.0.95 → 3.0.97

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.
Files changed (2) hide show
  1. package/download.js +16 -3
  2. package/package.json +1 -1
package/download.js CHANGED
@@ -15,7 +15,10 @@ const { execFileSync } = require('child_process')
15
15
  const BACKEND_URL = 'https://office-mcp-production.up.railway.app'
16
16
  const CACHE_DIR = path.join(os.homedir(), '.local', 'share', 'local-mcp', 'bin')
17
17
  const TRAY_DIR = path.join(os.homedir(), '.local', 'share', 'local-mcp', 'tray') // metadata dir
18
- const TRAY_APP = '/Applications/LocalMCPTray.app'
18
+ // Install to ~/Applications (user-owned) to avoid macOS App Management TCC prompt.
19
+ // /Applications requires kTCCServiceAppManagement permission which shows "node would like
20
+ // to access data from other apps" on every tray update — confusing and unnecessary.
21
+ const TRAY_APP = path.join(os.homedir(), 'Applications', 'LocalMCPTray.app')
19
22
 
20
23
  function _getMachineId() {
21
24
  const { execSync } = require('child_process')
@@ -227,6 +230,12 @@ async function ensureTray() {
227
230
  try { execFileSync('rm', ['-rf', oldTrayApp], { stdio: 'pipe' }) } catch { /* ignorar */ }
228
231
  }
229
232
 
233
+ // Migrar instalación vieja de /Applications → ~/Applications (evita diálogo App Management)
234
+ const systemTrayApp = '/Applications/LocalMCPTray.app'
235
+ if (fs.existsSync(systemTrayApp) && trayApp !== systemTrayApp) {
236
+ try { execFileSync('rm', ['-rf', systemTrayApp], { stdio: 'pipe' }) } catch { /* ignorar */ }
237
+ }
238
+
230
239
  // Ya instalado y actualizado
231
240
  if (fs.existsSync(trayApp) && fs.existsSync(verFile)) {
232
241
  if (fs.readFileSync(verFile, 'utf8').trim() === version) return trayApp
@@ -253,8 +262,12 @@ async function ensureTray() {
253
262
  try { execFileSync('rm', ['-rf', trayApp], { stdio: 'pipe' }) } catch { /* ignorar */ }
254
263
  }
255
264
 
256
- process.stderr.write(` Instalando tray en /Applications...\n`)
257
- execFileSync('tar', ['-xzf', tarPath, '-C', '/Applications'], { stdio: 'pipe' })
265
+ // Crear ~/Applications si no existe (ubicación estándar para apps de usuario)
266
+ const userAppsDir = path.join(os.homedir(), 'Applications')
267
+ fs.mkdirSync(userAppsDir, { recursive: true })
268
+
269
+ process.stderr.write(` Instalando tray en ~/Applications...\n`)
270
+ execFileSync('tar', ['-xzf', tarPath, '-C', userAppsDir], { stdio: 'pipe' })
258
271
  fs.unlinkSync(tarPath)
259
272
 
260
273
  if (!fs.existsSync(trayApp)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "local-mcp",
3
- "version": "3.0.95",
3
+ "version": "3.0.97",
4
4
  "description": "LMCP — connect Claude Desktop, Cursor, Windsurf to Mail, Calendar, Contacts, Teams, OneDrive on macOS. Privacy-first: all data stays on your Mac.",
5
5
  "main": "index.js",
6
6
  "bin": {