@vespermcp/mcp-server 1.0.8 → 1.1.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 +12 -12
- package/build/config/config-manager.js +22 -62
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -31,23 +31,23 @@ Vesper is a Model Context Protocol (MCP) server that helps you find, analyze, an
|
|
|
31
31
|
|
|
32
32
|
## 📦 Installation
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
Run the setup wizard to automatically configure Vesper for Cursor, Claude Desktop, and VS Code:
|
|
34
|
+
## 🚀 Quick Start (VS Code + Copilot)
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
npx @vespermcp/mcp-server@latest --setup
|
|
39
|
-
```
|
|
36
|
+
The fastest way to install Vesper and configure it for **GitHub Copilot Chat** or **Cursor** is to run the automated setup:
|
|
40
37
|
|
|
41
|
-
### Option B: Install Globally
|
|
42
38
|
```bash
|
|
43
|
-
|
|
44
|
-
vesper --setup
|
|
39
|
+
npx -y @vespermcp/mcp-server@latest --setup
|
|
45
40
|
```
|
|
46
41
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
1. Select **Visual Studio Code (Settings.json)** from the list.
|
|
43
|
+
2. Restart VS Code.
|
|
44
|
+
3. Open Copilot Chat and look for the **MCP Servers** section.
|
|
45
|
+
|
|
46
|
+
## 🛠️ Configuration
|
|
47
|
+
Vesper supports:
|
|
48
|
+
- **GitHub Copilot Chat**: Automated setup via `settings.json`.
|
|
49
|
+
- **Cursor**: Automated setup via `mcp.json`.
|
|
50
|
+
- **Claude Desktop**: Automated setup via `claude_desktop_config.json`.
|
|
51
51
|
|
|
52
52
|
### Manual Python Setup (if needed)
|
|
53
53
|
|
|
@@ -24,20 +24,6 @@ export class ConfigManager {
|
|
|
24
24
|
: path.join(home, "Library", "Application Support", "Cursor", "User", "globalStorage", "rohit-gohri.cursor-mcp", "mcp.json"),
|
|
25
25
|
key: "mcpServers"
|
|
26
26
|
},
|
|
27
|
-
"vscode-cline": {
|
|
28
|
-
name: "VS Code (Cline)",
|
|
29
|
-
path: isWin
|
|
30
|
-
? path.join(appData, "Code", "User", "globalStorage", "saoudrizwan.claude-dev", "settings", "cline_mcp_settings.json")
|
|
31
|
-
: path.join(home, "Library", "Application Support", "Code", "User", "globalStorage", "saoudrizwan.claude-dev", "settings", "cline_mcp_settings.json"),
|
|
32
|
-
key: "mcpServers"
|
|
33
|
-
},
|
|
34
|
-
"vscode-roo-code": {
|
|
35
|
-
name: "VS Code (Roo Code)",
|
|
36
|
-
path: isWin
|
|
37
|
-
? path.join(appData, "Code", "User", "globalStorage", "RooVeterans.roo-cline", "settings", "cline_mcp_settings.json")
|
|
38
|
-
: path.join(home, "Library", "Application Support", "Code", "User", "globalStorage", "RooVeterans.roo-cline", "settings", "cline_mcp_settings.json"),
|
|
39
|
-
key: "mcpServers"
|
|
40
|
-
},
|
|
41
27
|
"cursor-project": {
|
|
42
28
|
name: "Cursor (Project-specific)",
|
|
43
29
|
path: path.join(process.cwd(), ".cursor", "mcp.json"),
|
|
@@ -45,26 +31,16 @@ export class ConfigManager {
|
|
|
45
31
|
},
|
|
46
32
|
"vscode-copilot": {
|
|
47
33
|
name: "VS Code (Copilot)",
|
|
48
|
-
path:
|
|
34
|
+
path: isWin
|
|
35
|
+
? path.join(appData, "Code", "User", "globalStorage", "github.copilot-chat", "mcp.json")
|
|
36
|
+
: path.join(home, "Library", "Application Support", "Code", "User", "globalStorage", "github.copilot-chat", "mcp.json"),
|
|
49
37
|
key: "mcpServers"
|
|
50
38
|
},
|
|
51
39
|
"vscode-global": {
|
|
52
40
|
name: "VS Code (Standard MCP)",
|
|
53
41
|
path: isWin
|
|
54
|
-
? path.join(appData, "Code", "User", "mcp.json")
|
|
55
|
-
: path.join(home, "Library", "Application Support", "Code", "User", "mcp.json"),
|
|
56
|
-
key: "mcpServers"
|
|
57
|
-
},
|
|
58
|
-
"vscode-project": {
|
|
59
|
-
name: "VS Code (Project-specific)",
|
|
60
|
-
path: path.join(process.cwd(), ".vscode", "mcp.json"),
|
|
61
|
-
key: "mcpServers"
|
|
62
|
-
},
|
|
63
|
-
"vscode-insiders": {
|
|
64
|
-
name: "VS Code Insiders",
|
|
65
|
-
path: isWin
|
|
66
|
-
? path.join(appData, "Code - Insiders", "User", "mcp.json")
|
|
67
|
-
: path.join(home, "Library", "Application Support", "Code - Insiders", "User", "mcp.json"),
|
|
42
|
+
? path.join(appData, "Code", "User", "globalStorage", "mcp-servers", "mcp.json")
|
|
43
|
+
: path.join(home, "Library", "Application Support", "Code", "User", "globalStorage", "mcp-servers", "mcp.json"),
|
|
68
44
|
key: "mcpServers"
|
|
69
45
|
},
|
|
70
46
|
"vscode-settings": {
|
|
@@ -73,11 +49,6 @@ export class ConfigManager {
|
|
|
73
49
|
? path.join(appData, "Code", "User", "settings.json")
|
|
74
50
|
: path.join(home, "Library", "Application Support", "Code", "User", "settings.json"),
|
|
75
51
|
key: "github.copilot.chat.mcp.servers"
|
|
76
|
-
},
|
|
77
|
-
"vscode-root": {
|
|
78
|
-
name: "VS Code (Workspace Root)",
|
|
79
|
-
path: path.join(process.cwd(), "mcp.json"),
|
|
80
|
-
key: "mcpServers"
|
|
81
52
|
}
|
|
82
53
|
};
|
|
83
54
|
}
|
|
@@ -89,34 +60,23 @@ export class ConfigManager {
|
|
|
89
60
|
const home = this.getHomeDir();
|
|
90
61
|
for (const [key, cp] of Object.entries(paths)) {
|
|
91
62
|
const isClaude = key === "claude-desktop";
|
|
92
|
-
const isCursor = key === "cursor";
|
|
63
|
+
const isCursor = key === "cursor" || key === "cursor-project";
|
|
93
64
|
const isVSCode = key.startsWith("vscode");
|
|
94
65
|
const isCopilot = key === "vscode-copilot";
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
const hasInsidersFolder = fs.existsSync(path.join(appData, "Code - Insiders"));
|
|
102
|
-
const hasCopilotFolder = fs.existsSync(path.join(home, ".copilot"));
|
|
103
|
-
if (process.env.VESPER_DEBUG) {
|
|
104
|
-
console.log(`[Debug] Checking ${key}:`);
|
|
105
|
-
console.log(` - Config Path: ${cp.path} (${fs.existsSync(cp.path) ? "EXISTS" : "MISSING"})`);
|
|
106
|
-
}
|
|
107
|
-
const isCurrentIDE = (isCursor && (termProgram.includes("cursor") || (termProgram === "vscode" && hasCursorFolder))) ||
|
|
66
|
+
const isMac = process.platform === "darwin";
|
|
67
|
+
const hasClaudeFolder = fs.existsSync(path.join(appData, "Claude")) || (isMac && fs.existsSync(path.join(home, "Library", "Application Support", "Claude")));
|
|
68
|
+
const hasCursorFolder = fs.existsSync(path.join(appData, "Cursor")) || fs.existsSync(path.join(home, ".cursor")) || (isMac && fs.existsSync(path.join(home, "Library", "Application Support", "Cursor")));
|
|
69
|
+
const hasCodeFolder = fs.existsSync(path.join(appData, "Code")) || fs.existsSync(path.join(home, ".vscode")) || (isMac && fs.existsSync(path.join(home, "Library", "Application Support", "Code")));
|
|
70
|
+
const hasCopilotFolder = hasCodeFolder || fs.existsSync(path.join(home, ".copilot"));
|
|
71
|
+
const isCurrentIDE = (isCursor && termProgram.includes("cursor")) ||
|
|
108
72
|
(isClaude && termProgram.includes("claude")) ||
|
|
109
|
-
(isVSCode && termProgram === "vscode" &&
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
(isSettings && termProgram === "vscode");
|
|
113
|
-
// Also check if the config file actually exists OR the root folder exists
|
|
114
|
-
const shouldDetectByFolder = (isClaude && hasClaudeFolder) ||
|
|
73
|
+
(isVSCode && termProgram === "vscode" && hasCodeFolder);
|
|
74
|
+
// Detection logic
|
|
75
|
+
if ((isClaude && hasClaudeFolder) ||
|
|
115
76
|
(isCursor && hasCursorFolder) ||
|
|
116
|
-
(isVSCode &&
|
|
117
|
-
|
|
118
|
-
(
|
|
119
|
-
if (shouldDetectByFolder || fs.existsSync(cp.path) || isCurrentIDE || key === "cursor-project" || key === "vscode-project" || key === "vscode-root") {
|
|
77
|
+
(isVSCode && hasCodeFolder) ||
|
|
78
|
+
isCurrentIDE ||
|
|
79
|
+
fs.existsSync(cp.path)) {
|
|
120
80
|
let displayName = cp.name;
|
|
121
81
|
if (isCurrentIDE) {
|
|
122
82
|
displayName += " (Current Terminal)";
|
|
@@ -131,8 +91,7 @@ export class ConfigManager {
|
|
|
131
91
|
// Try to find absolute paths for maximum reliability in VS Code/Copilot
|
|
132
92
|
try {
|
|
133
93
|
const nodeExe = process.execPath;
|
|
134
|
-
//
|
|
135
|
-
// index.js is in build/index.js
|
|
94
|
+
// index.js is in build/index.js relative to ConfigManager in build/config/config-manager.js
|
|
136
95
|
const vesperScript = path.resolve(__dirname, "../../index.js");
|
|
137
96
|
if (fs.existsSync(vesperScript)) {
|
|
138
97
|
return {
|
|
@@ -190,11 +149,12 @@ export class ConfigManager {
|
|
|
190
149
|
// Also add alias for easy upgrading
|
|
191
150
|
mcpServers["@vespermcp/mcp-server"] = serverConfig;
|
|
192
151
|
current[lastKey] = mcpServers;
|
|
193
|
-
// If we are writing to settings.json,
|
|
194
|
-
if (configPath.key.includes("copilot")) {
|
|
152
|
+
// If we are writing to settings.json or a copilot-specific file, sync to native mcp.servers key too
|
|
153
|
+
if (configPath.key.includes("copilot") || configPath.path.includes("settings.json")) {
|
|
195
154
|
if (!config["mcp.servers"])
|
|
196
155
|
config["mcp.servers"] = {};
|
|
197
156
|
config["mcp.servers"]["vesper"] = serverConfig;
|
|
157
|
+
config["mcp.servers"]["@vespermcp/mcp-server"] = serverConfig;
|
|
198
158
|
}
|
|
199
159
|
const content = JSON.stringify(config, null, 2);
|
|
200
160
|
if (process.env.VESPER_DEBUG) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vespermcp/mcp-server",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "AI-powered dataset discovery, quality analysis, and preparation MCP server with multimodal support (text, image, audio, video)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "build/index.js",
|