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 +6 -3
- package/index.js +17 -5
- package/package.json +1 -1
- package/postinstall.js +0 -5
- package/setup.js +4 -17
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:
|
|
403
|
-
|
|
404
|
-
|
|
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
|
|
55
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
335
|
-
//
|
|
336
|
-
//
|
|
337
|
-
//
|
|
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]
|