local-mcp 1.44.0 → 1.44.2
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 +107 -0
- package/index.js +15 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# local-mcp
|
|
2
|
+
|
|
3
|
+
**Connect Claude Desktop, Cursor, Windsurf, VS Code and other AI agents to Mail, Calendar, Contacts, Microsoft Teams and OneDrive on Mac.**
|
|
4
|
+
|
|
5
|
+
No cloud. No tokens. No API keys. Your data never leaves your machine.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g local-mcp
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Auto-detects and configures all your AI clients. Restart your AI client once — done.
|
|
14
|
+
|
|
15
|
+
## Zero-install (Claude Desktop / Cursor / Windsurf / VS Code)
|
|
16
|
+
|
|
17
|
+
Add directly to your MCP config file and restart:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"mcpServers": {
|
|
22
|
+
"local-mcp": {
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": ["-y", "local-mcp@latest"]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Config file locations:
|
|
31
|
+
- **Claude Desktop**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
32
|
+
- **Cursor**: `~/.cursor/mcp.json`
|
|
33
|
+
- **Windsurf**: `~/.codeium/windsurf/mcp_config.json`
|
|
34
|
+
- **VS Code (Cline)**: `~/.vscode/mcp.json`
|
|
35
|
+
- **Zed**: `~/.config/zed/settings.json`
|
|
36
|
+
|
|
37
|
+
## Setup wizard
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
local-mcp setup
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Detects all installed clients and writes the config automatically.
|
|
44
|
+
|
|
45
|
+
## What it does
|
|
46
|
+
|
|
47
|
+
Local MCP runs a native MCP (Model Context Protocol) server that bridges your Mac apps directly to your AI client:
|
|
48
|
+
|
|
49
|
+
| Module | Tools |
|
|
50
|
+
|--------|-------|
|
|
51
|
+
| **Email** | list, read, search, send, reply, move (via Mail.app) |
|
|
52
|
+
| **Calendar** | list events, create events (via Calendar.app) |
|
|
53
|
+
| **Contacts** | search, list (via Contacts.app) |
|
|
54
|
+
| **Teams** | read chats, channels, messages (no tokens — reads local cache) |
|
|
55
|
+
| **OneDrive** | list, read, write, search, move, delete files |
|
|
56
|
+
| **Word** | read, create, append documents |
|
|
57
|
+
| **Excel** | read, write cells, create spreadsheets |
|
|
58
|
+
| **PowerPoint** | read, create presentations |
|
|
59
|
+
| **PDF** | extract text |
|
|
60
|
+
|
|
61
|
+
## Requirements
|
|
62
|
+
|
|
63
|
+
- macOS 12 Monterey or later (Apple Silicon and Intel)
|
|
64
|
+
- Node.js 18+
|
|
65
|
+
- The AI client you want to use (Claude Desktop, Cursor, Windsurf, etc.)
|
|
66
|
+
|
|
67
|
+
## How it works
|
|
68
|
+
|
|
69
|
+
The npm package downloads a Python runtime (~34 MB, cached in `~/.local/share/local-mcp/`) and launches the MCP server in stdio mode. The server communicates directly with your AI client — no ports, no network.
|
|
70
|
+
|
|
71
|
+
For the full experience with menu bar status icon and auto-start:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
curl -fsSL https://local-mcp.com/install | bash
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Claude.ai web connector
|
|
78
|
+
|
|
79
|
+
For Claude.ai (web), add a custom connector:
|
|
80
|
+
|
|
81
|
+
```
|
|
82
|
+
URL: https://www.local-mcp.com/mcp
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Settings → Connectors → Add custom connector → paste the URL.
|
|
86
|
+
|
|
87
|
+
## Privacy & Security
|
|
88
|
+
|
|
89
|
+
- All data stays on your Mac — no cloud processing
|
|
90
|
+
- Teams integration reads local IndexedDB cache — no Graph API, no OAuth
|
|
91
|
+
- Unique API key per installation
|
|
92
|
+
- 14-day free trial, no credit card
|
|
93
|
+
|
|
94
|
+
## Links
|
|
95
|
+
|
|
96
|
+
- **Website**: https://local-mcp.com
|
|
97
|
+
- **Pricing**: https://local-mcp.com/#pricing
|
|
98
|
+
- **Support**: support@local-mcp.com
|
|
99
|
+
|
|
100
|
+
## Commands
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
local-mcp setup # configure all detected AI clients
|
|
104
|
+
local-mcp update # force re-download of the runtime
|
|
105
|
+
local-mcp uninstall # remove cached runtime
|
|
106
|
+
local-mcp status # show server status
|
|
107
|
+
```
|
package/index.js
CHANGED
|
@@ -84,14 +84,28 @@ async function main() {
|
|
|
84
84
|
|
|
85
85
|
const { pythonBin, serverPath, runtimeDir } = runtime
|
|
86
86
|
|
|
87
|
-
//
|
|
87
|
+
// Variables de entorno para el servidor Python
|
|
88
88
|
const frameworksPath = path.join(runtimeDir, 'Frameworks')
|
|
89
|
+
const libPath = path.join(runtimeDir, 'lib', 'python3.13')
|
|
89
90
|
const env = { ...process.env }
|
|
91
|
+
|
|
92
|
+
// Frameworks bundleados (libssl, libcrypto, liblzma, etc.)
|
|
90
93
|
if (require('fs').existsSync(frameworksPath)) {
|
|
91
94
|
env.DYLD_FRAMEWORK_PATH = frameworksPath + (env.DYLD_FRAMEWORK_PATH ? ':' + env.DYLD_FRAMEWORK_PATH : '')
|
|
92
95
|
env.DYLD_LIBRARY_PATH = frameworksPath + (env.DYLD_LIBRARY_PATH ? ':' + env.DYLD_LIBRARY_PATH : '')
|
|
93
96
|
}
|
|
94
97
|
|
|
98
|
+
// PYTHONPATH: asegura que el Python del runtime encuentre sus módulos
|
|
99
|
+
const sitePkgs = path.join(libPath, 'site-packages')
|
|
100
|
+
const libDynload = path.join(libPath, 'lib-dynload')
|
|
101
|
+
const zipLib = path.join(path.dirname(libPath), 'python313.zip')
|
|
102
|
+
const pyPaths = [zipLib, libPath, sitePkgs, libDynload]
|
|
103
|
+
.filter(p => require('fs').existsSync(p))
|
|
104
|
+
if (pyPaths.length > 0) {
|
|
105
|
+
env.PYTHONPATH = pyPaths.join(':') + (env.PYTHONPATH ? ':' + env.PYTHONPATH : '')
|
|
106
|
+
env.PYTHONNOUSERSITE = '1' // no mezclar con site-packages del sistema
|
|
107
|
+
}
|
|
108
|
+
|
|
95
109
|
const extraArgs = process.argv.slice(cmd ? 2 : 3)
|
|
96
110
|
const result = spawnSync(pythonBin, [serverPath, 'stdio', ...extraArgs], {
|
|
97
111
|
stdio: 'inherit',
|
package/package.json
CHANGED