local-mcp 1.141.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.
- package/README.md +32 -26
- package/package.json +2 -2
- package/setup.js +36 -9
package/README.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# local-mcp
|
|
2
2
|
|
|
3
|
-
>
|
|
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
|
[](https://www.npmjs.com/package/local-mcp)
|
|
6
|
-
[](https://local-mcp.com)
|
|
6
|
+
[](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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
| **
|
|
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
|
-
##
|
|
52
|
+
## 82 MCP Tools
|
|
49
53
|
|
|
50
|
-
Email: `list_accounts
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
66
|
+
Outlook: `outlook_list_emails` `outlook_read_email` `outlook_search_emails` `outlook_send_email` `outlook_list_events` `outlook_create_event`
|
|
63
67
|
|
|
64
|
-
Reminders: `
|
|
68
|
+
Reminders & To Do: `todo_list_lists` `todo_list_tasks` `todo_create_task` `todo_complete_task`
|
|
65
69
|
|
|
66
|
-
|
|
70
|
+
OmniFocus: `list_omnifocus_tasks` `list_omnifocus_projects` `list_omnifocus_tags` `search_omnifocus_tasks` `create_omnifocus_task` `complete_omnifocus_task`
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
Notes: `list_notes` `read_note` `search_notes` `create_note`
|
|
69
73
|
|
|
70
|
-
|
|
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
|
|
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
|
|
102
|
-
local-mcp update
|
|
103
|
-
local-mcp
|
|
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
|
-
- [
|
|
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": "
|
|
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": "
|
|
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:
|
|
90
|
+
command: { path: command, args: args ?? [] },
|
|
90
91
|
}
|
|
91
92
|
} else {
|
|
92
|
-
// Formato estándar MCP: { "mcpServers": { "local-mcp": { "command": "
|
|
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
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
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',
|