local-mcp 3.0.371 → 3.0.372

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/download.js CHANGED
@@ -399,9 +399,12 @@ async function ensureTeamsProxy() {
399
399
  * @returns {Promise<string|null>} Ruta al .app instalado, o null si falla
400
400
  */
401
401
  async function ensureTray() {
402
- // Windows: download lmcp-tray.exe
403
- if (process.platform === 'win32') {
404
- return _ensureTrayWindows()
402
+ // Windows/Linux: the tray + background daemon are installed by the native
403
+ // installer (LMCP-Setup.exe on Windows; the systemd unit on Linux), NOT by npm.
404
+ // The npm package is a stdio proxy for MCP hosts, so there is no tray to fetch
405
+ // here — no-op instead of downloading a lmcp-tray binary.
406
+ if (process.platform !== 'darwin') {
407
+ return null
405
408
  }
406
409
 
407
410
  // Respect explicit uninstall — don't resurrect tray if user ran `uninstall`.
package/index.js CHANGED
@@ -51,10 +51,12 @@ function clearUninstallSentinels() {
51
51
  for (const p of uninstallSentinelPaths()) { try { fs.unlinkSync(p) } catch {} }
52
52
  }
53
53
 
54
- // Platform support: macOS only (Windows/Linux on waitlist at local-mcp.com)
55
- const SUPPORTED_PLATFORMS = ['darwin']
54
+ // Platform support: macOS (Swift tray + embedded server), Windows & Linux
55
+ // (go-server standalone binary downloaded from R2). Re-enabled for the
56
+ // Windows/Linux public re-launch — the waitlist gate is retired.
57
+ const SUPPORTED_PLATFORMS = ['darwin', 'win32', 'linux']
56
58
  if (!SUPPORTED_PLATFORMS.includes(process.platform)) {
57
- console.error(`LMCP is currently macOS-only. Join the Windows/Linux waitlist at https://local-mcp.com`)
59
+ console.error(`LMCP supports macOS, Windows and Linux. Your platform (${process.platform}) is not supported yet — see https://local-mcp.com`)
58
60
  process.exit(1)
59
61
  }
60
62
 
@@ -222,7 +224,12 @@ async function main() {
222
224
 
223
225
  // ── Modo default: stdio MCP server ──────────────────────────────────────────
224
226
  const { CACHE_DIR } = require('./download')
225
- const binName = process.platform === 'win32' ? 'local-mcp-server.exe' : 'local-mcp-server'
227
+ // macOS ships the Swift `local-mcp-server` (standalone fallback to the embedded
228
+ // tray server); Windows/Linux ship the go-server `lmcp-server` binary that
229
+ // download.js writes to CACHE_DIR. Keep this name in sync with download.js.
230
+ const binName = process.platform === 'darwin'
231
+ ? 'local-mcp-server'
232
+ : (process.platform === 'win32' ? 'lmcp-server.exe' : 'lmcp-server')
226
233
  const stableBin = path.join(CACHE_DIR, binName)
227
234
  const versionFile = path.join(CACHE_DIR, '.server-version')
228
235
  const pkg = require('./package.json')
@@ -365,7 +372,12 @@ async function main() {
365
372
  // because stale npx cache had old pkg.version and triggered the slow path unnecessarily.
366
373
  try {
367
374
  const stat = fs.lstatSync(stableBin)
368
- if (stat.isFile() && (stat.mode & 0o111)) {
375
+ // Windows .exe files carry no Unix exec bit — Node's fs reports mode 0o666
376
+ // so the `& 0o111` gate is always false there, which forced EVERY spawn onto
377
+ // the slow path (a /runtime/latest network round-trip before launch, and a
378
+ // hard failure when offline despite a valid cached binary). Only require the
379
+ // exec bit off-Windows, where it's meaningful.
380
+ if (stat.isFile() && (process.platform === 'win32' || (stat.mode & 0o111))) {
369
381
  const cachedVersion = fs.existsSync(versionFile)
370
382
  ? fs.readFileSync(versionFile, 'utf8').trim()
371
383
  : ''
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "local-mcp",
3
- "version": "3.0.371",
3
+ "version": "3.0.372",
4
4
  "description": "Let ChatGPT, Claude, Cursor & any MCP client actually use your Mac — read & reply to email, manage your calendar, text over iMessage, find files, work with Teams, Slack & Office. On your Mac, no API keys, free.",
5
5
  "main": "index.js",
6
6
  "bin": {
package/postinstall.js CHANGED
@@ -9,11 +9,6 @@ if (!process.env.npm_config_global || process.env.CI || process.env.SKIP_SETUP)
9
9
  process.exit(0)
10
10
  }
11
11
 
12
- // Solo macOS
13
- if (process.platform !== 'darwin') {
14
- process.exit(0)
15
- }
16
-
17
12
  const { runSetup } = require('./setup')
18
13
 
19
14
  runSetup({ all: true }).catch(err => {
package/setup.js CHANGED
@@ -331,23 +331,10 @@ function injectMcpConfig(client, command = NPX_COMMAND, args = NPX_ARGS) {
331
331
  // ── Main ──────────────────────────────────────────────────────────────────────
332
332
 
333
333
  async function runSetup(opts = {}) {
334
- // macOS only. `npx local-mcp setup` on Windows/Linux used to silently download +
335
- // configure the (still-present) Go server, bypassing the Mac-only waitlist that the
336
- // landing page and cloud connector enforce. Gate it here so new non-mac installs get
337
- // the waitlist message instead of a working-but-unsupported install. (The legacy
338
- // Windows R2 binaries stay so the existing fleet keeps auto-updating.)
339
- if (process.platform !== 'darwin') {
340
- const osName = process.platform === 'win32' ? 'Windows' : process.platform === 'linux' ? 'Linux' : process.platform
341
- console.log(`\n LMCP is macOS-only right now — ${osName} isn't supported yet.`)
342
- console.log(' Join the waitlist to be notified when it ships: https://local-mcp.com\n')
343
- try { // best-effort: record the gated attempt so we can size non-mac demand
344
- const https = require('https')
345
- const req = https.request({ hostname: BACKEND_HOST, path: '/install/started/npm-gated-' + process.platform, method: 'POST', timeout: 2500 })
346
- req.on('error', () => {}); req.end()
347
- } catch {}
348
- return
349
- }
350
-
334
+ // Cross-platform: macOS configures the Swift tray + embedded server; Windows/Linux
335
+ // download the go-server standalone binary (download.js) and write the MCP client
336
+ // config (the config writer already handles Windows paths). The Mac-only waitlist
337
+ // gate was retired for the Windows/Linux public re-launch.
351
338
  const forceAll = opts.all || process.argv.includes('--all')
352
339
  const refArg = process.argv.find(a => a.startsWith('--ref='))
353
340
  if (refArg) process.env.LMCP_REF = refArg.split('=')[1]