local-mcp 1.142.0 → 2.0.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.
Files changed (3) hide show
  1. package/README.md +32 -26
  2. package/package.json +2 -2
  3. package/setup.js +36 -9
package/README.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # local-mcp
2
2
 
3
- > MCP server for macOS connect Claude Desktop, Cursor, Windsurf to Mail, Calendar, Contacts, Teams & OneDrive
3
+ > Give your AI agent full control of your desktop apps. 80+ tools for Mail, Calendar, Notes, Reminders, Files, and more. Currently available for macOS, Windows coming soon.
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/local-mcp)](https://www.npmjs.com/package/local-mcp)
6
- [![platform](https://img.shields.io/badge/platform-macOS-blue)](https://local-mcp.com)
6
+ [![platform](https://img.shields.io/badge/platform-macOS-blue)](https://local-mcp.com?utm_source=npm)
7
7
 
8
8
  **All data stays on your Mac.** No cloud. No tokens. No API keys.
9
9
 
10
10
  ## Install
11
11
 
12
12
  ```bash
13
- npm install -g local-mcp
13
+ npx -y local-mcp@latest setup
14
14
  ```
15
15
 
16
16
  Auto-detects and configures Claude Desktop, Cursor, Windsurf, VS Code, and Zed. Restart your AI client once.
@@ -30,7 +30,7 @@ Auto-detects and configures Claude Desktop, Cursor, Windsurf, VS Code, and Zed.
30
30
 
31
31
  ## What it does
32
32
 
33
- Local MCP runs a native MCP server that bridges your Mac apps to any AI client:
33
+ Pilot MCP runs a native MCP server that bridges your Mac apps to any AI client:
34
34
 
35
35
  | Service | Capabilities |
36
36
  |---------|-------------|
@@ -41,37 +41,45 @@ Local MCP runs a native MCP server that bridges your Mac apps to any AI client:
41
41
  | **OneDrive** | List, read, write, search, move, delete files |
42
42
  | **Documents** | Word, Excel, PowerPoint, PDF |
43
43
  | **Outlook** | Read, search, send emails, list/create calendar events (direct Outlook.app access) |
44
- | **Reminders** | List, create, complete reminders |
44
+ | **Reminders & To Do** | List, create, complete includes Microsoft To Do via sync |
45
+ | **OmniFocus** | List tasks, projects, tags — create and complete tasks |
45
46
  | **Notes** | List, read, search, create notes |
46
- | **More** | Messages, Finder, Safari Bookmarks |
47
+ | **Messages** | List chats, read and search iMessages |
48
+ | **Stocks** | Real-time quotes, historical charts, symbol search |
49
+ | **Finder** | Search and list files |
50
+ | **Safari** | List bookmarks |
47
51
 
48
- ## 62 MCP Tools
52
+ ## 82 MCP Tools
49
53
 
50
- Email: `list_accounts`, `list_emails`, `read_email`, `send_email`, `reply_email`, `search_emails`, `move_email`, `save_attachment`, `create_email_folder`
54
+ Email: `list_accounts` `list_emails` `read_email` `send_email` `reply_email` `search_emails` `move_email` `save_attachment` `create_email_folder`
51
55
 
52
- Calendar: `list_calendar_names`, `list_calendar_events`, `create_calendar_event`, `delete_calendar_event`
56
+ Calendar: `list_calendar_names` `list_calendar_events` `create_calendar_event` `delete_calendar_event`
53
57
 
54
58
  Contacts: `list_contacts`
55
59
 
56
- Teams: `teams_list_teams`, `teams_list_channels`, `teams_list_chats`, `teams_read_channel_messages`, `teams_read_chat_messages`
60
+ Teams: `teams_list_teams` `teams_list_channels` `teams_list_chats` `teams_read_channel_messages` `teams_read_chat_messages`
57
61
 
58
- OneDrive: `onedrive_root`, `onedrive_list_files`, `onedrive_read_file`, `onedrive_write_file`, `onedrive_move_file`, `onedrive_delete_file`, `onedrive_search_files`
62
+ OneDrive: `onedrive_root` `onedrive_list_files` `onedrive_read_file` `onedrive_write_file` `onedrive_move_file` `onedrive_delete_file` `onedrive_search_files`
59
63
 
60
- Documents: `word_create`, `word_read`, `word_append`, `excel_create`, `excel_read`, `excel_write_cell`, `ppt_create`, `ppt_read`, `pdf_read`
64
+ Documents: `word_create` `word_read` `word_append` `excel_create` `excel_read` `excel_write_cell` `ppt_create` `ppt_read` `pdf_read`
61
65
 
62
- Outlook: `outlook_list_emails`, `outlook_read_email`, `outlook_search_emails`, `outlook_send_email`, `outlook_list_events`, `outlook_create_event`
66
+ Outlook: `outlook_list_emails` `outlook_read_email` `outlook_search_emails` `outlook_send_email` `outlook_list_events` `outlook_create_event`
63
67
 
64
- Reminders: `list_reminder_lists`, `list_reminders`, `create_reminder`, `complete_reminder`
68
+ Reminders & To Do: `todo_list_lists` `todo_list_tasks` `todo_create_task` `todo_complete_task`
65
69
 
66
- Notes: `list_notes`, `read_note`, `search_notes`, `create_note`
70
+ OmniFocus: `list_omnifocus_tasks` `list_omnifocus_projects` `list_omnifocus_tags` `search_omnifocus_tasks` `create_omnifocus_task` `complete_omnifocus_task`
67
71
 
68
- Messages: `list_message_chats`, `read_messages`, `search_messages`
72
+ Notes: `list_notes` `read_note` `search_notes` `create_note`
69
73
 
70
- Finder: `finder_search`, `finder_list`
74
+ Messages: `list_message_chats` `read_messages` `search_messages`
75
+
76
+ Stocks: `stocks_get_quote` `stocks_get_chart` `stocks_search_symbol`
77
+
78
+ Finder: `finder_search` `finder_list`
71
79
 
72
80
  Safari: `list_safari_bookmarks`
73
81
 
74
- Utilities: `diagnose`, `report_bug`, `request_feature`, `send_logs`, `lmcp_help`, `list_my_feedback`, `close_feedback`
82
+ Utilities: `diagnose` `version_info` `report_bug` `request_feature` `send_logs` `lmcp_help` `list_my_feedback` `close_feedback`
75
83
 
76
84
  ## Safety
77
85
 
@@ -98,15 +106,14 @@ Utilities: `diagnose`, `report_bug`, `request_feature`, `send_logs`, `lmcp_help`
98
106
  ## Commands
99
107
 
100
108
  ```bash
101
- local-mcp setup # configure all detected AI clients
102
- local-mcp update # force re-download of the runtime
103
- local-mcp uninstall # remove cached runtime
104
- local-mcp status # show server status
109
+ npx -y local-mcp@latest setup # configure all detected AI clients
110
+ npx -y local-mcp@latest update # force re-download of the runtime
111
+ npx -y local-mcp@latest status # show server status
105
112
  ```
106
113
 
107
114
  ## Full app (optional)
108
115
 
109
- For the menu bar status icon, auto-start, and Cloud Relay:
116
+ For the menu bar status icon, auto-start on login, and Cloud Relay:
110
117
 
111
118
  ```bash
112
119
  curl -fsSL https://local-mcp.com/install | bash
@@ -114,7 +121,6 @@ curl -fsSL https://local-mcp.com/install | bash
114
121
 
115
122
  ## Links
116
123
 
117
- - [Website](https://local-mcp.com)
118
- - [npm](https://www.npmjs.com/package/local-mcp)
119
- - [Pricing](https://local-mcp.com/#pricing)
124
+ - [Website](https://local-mcp.com?utm_source=npm)
125
+ - [Pricing](https://local-mcp.com/#pricing?utm_source=npm)
120
126
  - Support: support@local-mcp.com
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "local-mcp",
3
- "version": "1.142.0",
3
+ "version": "2.0.0",
4
4
  "description": "MCP server for macOS — connect Claude Desktop, Cursor, Windsurf to Mail, Calendar, Contacts, Teams, OneDrive. Privacy-first: all data stays on your Mac.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -70,5 +70,5 @@
70
70
  "bugs": {
71
71
  "url": "https://github.com/lanchuske/local-mcp/issues"
72
72
  },
73
- "mcpName": "io.github.lanchuske/local-mcp"
73
+ "mcpName": "com.local-mcp/local-mcp"
74
74
  }
package/setup.js CHANGED
@@ -16,6 +16,7 @@ const { execSync, execFileSync } = require('child_process')
16
16
  const HOME = os.homedir()
17
17
  const NPX_COMMAND = 'npx'
18
18
  const NPX_ARGS = ['-y', 'local-mcp@latest']
19
+ const STABLE_LINK = path.join(os.homedir(), '.local', 'share', 'local-mcp', 'bin', 'local-mcp-server')
19
20
 
20
21
  // ── Rutas de config de cada cliente ──────────────────────────────────────────
21
22
 
@@ -79,24 +80,23 @@ function _writeJson(filePath, data) {
79
80
 
80
81
  // ── Inyectar config MCP en un cliente estándar ────────────────────────────────
81
82
 
82
- function injectMcpConfig(client) {
83
+ function injectMcpConfig(client, command = NPX_COMMAND, args = NPX_ARGS) {
83
84
  const cfg = _readJson(client.cfgPath)
84
85
 
85
86
  if (client.zed) {
86
87
  // Zed usa { "context_servers": { "local-mcp": { "command": {...} } } }
87
88
  cfg.context_servers = cfg.context_servers || {}
88
89
  cfg.context_servers['local-mcp'] = {
89
- command: { path: NPX_COMMAND, args: NPX_ARGS },
90
+ command: { path: command, args: args ?? [] },
90
91
  }
91
92
  } else {
92
- // Formato estándar MCP: { "mcpServers": { "local-mcp": { "command": "npx", "args": [...] } } }
93
+ // Formato estándar MCP: { "mcpServers": { "local-mcp": { "command": "...", "args": [...] } } }
93
94
  cfg.mcpServers = cfg.mcpServers || {}
94
95
  // Limpiar entradas legacy
95
96
  delete cfg.mcpServers['office-mcp']
96
- cfg.mcpServers['local-mcp'] = {
97
- command: NPX_COMMAND,
98
- args: NPX_ARGS,
99
- }
97
+ const entry = { command }
98
+ if (args !== undefined) entry.args = args
99
+ cfg.mcpServers['local-mcp'] = entry
100
100
  }
101
101
 
102
102
  _writeJson(client.cfgPath, cfg)
@@ -112,6 +112,29 @@ async function runSetup(opts = {}) {
112
112
  console.log('║ Local MCP — Setup Wizard ║')
113
113
  console.log('╚══════════════════════════════════════╝\n')
114
114
 
115
+ // Descargar el binario ahora para poder escribir el stable link en la config
116
+ // Esto elimina el 2do reinicio que de otro modo sería necesario para migrar npx → binario
117
+ let stableCommand = NPX_COMMAND
118
+ let stableArgs = NPX_ARGS
119
+ try {
120
+ const { ensureBinary, CACHE_DIR } = require('./download')
121
+ process.stderr.write('Downloading Local MCP runtime...\n')
122
+ const { binPath } = await ensureBinary()
123
+ // Crear stable symlink
124
+ const stableLink = path.join(CACHE_DIR, 'local-mcp-server')
125
+ try {
126
+ if (fs.existsSync(stableLink)) fs.unlinkSync(stableLink)
127
+ fs.symlinkSync(binPath, stableLink)
128
+ } catch { /* no crítico — fallback a npx */ }
129
+ if (fs.existsSync(stableLink)) {
130
+ stableCommand = stableLink
131
+ stableArgs = undefined
132
+ process.stderr.write('✓ Runtime ready\n\n')
133
+ }
134
+ } catch (err) {
135
+ process.stderr.write(` (Runtime download failed, will download on first run: ${err.message})\n\n`)
136
+ }
137
+
115
138
  // Detectar clientes
116
139
  const detected = CLIENTS.filter(c => c.detect())
117
140
 
@@ -119,7 +142,10 @@ async function runSetup(opts = {}) {
119
142
  console.log('No AI clients detected.')
120
143
  console.log('Install Claude Desktop, Cursor, Windsurf, or VS Code and run this command again.\n')
121
144
  console.log('Or add this manually to your AI client config:')
122
- console.log(JSON.stringify({ mcpServers: { 'local-mcp': { command: NPX_COMMAND, args: NPX_ARGS } } }, null, 2))
145
+ const manualEntry = stableArgs !== undefined
146
+ ? { command: stableCommand, args: stableArgs }
147
+ : { command: stableCommand }
148
+ console.log(JSON.stringify({ mcpServers: { 'local-mcp': manualEntry } }, null, 2))
123
149
  return
124
150
  }
125
151
 
@@ -130,7 +156,7 @@ async function runSetup(opts = {}) {
130
156
 
131
157
  for (const client of detected) {
132
158
  try {
133
- injectMcpConfig(client)
159
+ injectMcpConfig(client, stableCommand, stableArgs)
134
160
  configured.push(client.name)
135
161
  console.log(`✓ ${client.name} configured`)
136
162
  } catch (err) {
@@ -234,6 +260,7 @@ function _pingInstall(clients, method) {
234
260
  method: method,
235
261
  clients_configured: clients,
236
262
  machine_id: _getMachineId(),
263
+ source: process.env.LMCP_SOURCE || '',
237
264
  })
238
265
  const req = https.request({
239
266
  hostname: 'office-mcp-production.up.railway.app',