@vibescope/mcp-server 0.3.4 → 0.3.6

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/dist/cli-init.js CHANGED
@@ -173,24 +173,23 @@ function detectAgents() {
173
173
  // Agent Configurators
174
174
  // ============================================================================
175
175
  async function configureClaudeCode(apiKey) {
176
- // Try using `claude mcp add` command
177
- try {
178
- execSync('claude --version', { stdio: 'pipe', timeout: 5000 });
179
- // Use project scope for claude mcp add
180
- try {
181
- execSync(`claude mcp add vibescope -e VIBESCOPE_API_KEY=${apiKey} -- npx -y -p @vibescope/mcp-server@latest vibescope-mcp`, { stdio: 'pipe', timeout: 15000 });
182
- console.log(` ${icon.check} Claude Code configured via ${c.cyan}claude mcp add${c.reset}`);
183
- return;
184
- }
185
- catch {
186
- // claude mcp add not available (older version), fall through to manual config
187
- }
188
- }
189
- catch { /* claude CLI not available */ }
190
- // Fallback: write .mcp.json
176
+ // Write project-level .mcp.json (works reliably across all platforms)
191
177
  const configPath = join(process.cwd(), '.mcp.json');
192
178
  writeMcpJson(configPath, apiKey);
193
179
  console.log(` ${icon.check} Wrote ${c.cyan}.mcp.json${c.reset} (Claude Code project config)`);
180
+ // Also offer to write user-level config for global access
181
+ const globalConfig = platform() === 'win32'
182
+ ? join(homedir(), '.claude', 'settings.json')
183
+ : join(homedir(), '.claude', 'settings.json');
184
+ const addGlobal = await promptConfirm(` Also add Vibescope globally (all projects)?`, true);
185
+ if (addGlobal) {
186
+ const existing = readJsonFile(globalConfig);
187
+ const mcpServers = existing.mcpServers || {};
188
+ mcpServers['vibescope'] = buildMcpServerConfig(apiKey);
189
+ existing.mcpServers = mcpServers;
190
+ writeJsonFile(globalConfig, existing);
191
+ console.log(` ${icon.check} Wrote ${c.cyan}~/.claude/settings.json${c.reset} (global config)`);
192
+ }
194
193
  }
195
194
  async function configureCursor(apiKey) {
196
195
  const configPath = join(process.cwd(), '.cursor', 'mcp.json');
@@ -207,9 +206,7 @@ async function configureGemini(apiKey) {
207
206
  const existing = readJsonFile(configPath);
208
207
  const mcpServers = existing.mcpServers || {};
209
208
  mcpServers['vibescope'] = {
210
- command: 'npx',
211
- args: ['-y', '-p', '@vibescope/mcp-server@latest', 'vibescope-mcp'],
212
- env: { VIBESCOPE_API_KEY: apiKey },
209
+ ...buildMcpServerConfig(apiKey),
213
210
  timeout: 30000,
214
211
  trust: true,
215
212
  };
@@ -236,14 +233,25 @@ function writeJsonFile(path, data) {
236
233
  }
237
234
  writeFileSync(path, JSON.stringify(data, null, 2) + '\n');
238
235
  }
239
- function writeMcpJson(configPath, apiKey) {
240
- const existing = readJsonFile(configPath);
241
- const mcpServers = existing.mcpServers || {};
242
- mcpServers['vibescope'] = {
236
+ function buildMcpServerConfig(apiKey) {
237
+ const isWindows = platform() === 'win32';
238
+ if (isWindows) {
239
+ return {
240
+ command: 'cmd',
241
+ args: ['/c', 'npx', '-y', '-p', '@vibescope/mcp-server@latest', 'vibescope-mcp'],
242
+ env: { VIBESCOPE_API_KEY: apiKey },
243
+ };
244
+ }
245
+ return {
243
246
  command: 'npx',
244
247
  args: ['-y', '-p', '@vibescope/mcp-server@latest', 'vibescope-mcp'],
245
248
  env: { VIBESCOPE_API_KEY: apiKey },
246
249
  };
250
+ }
251
+ function writeMcpJson(configPath, apiKey) {
252
+ const existing = readJsonFile(configPath);
253
+ const mcpServers = existing.mcpServers || {};
254
+ mcpServers['vibescope'] = buildMcpServerConfig(apiKey);
247
255
  existing.mcpServers = mcpServers;
248
256
  writeJsonFile(configPath, existing);
249
257
  }
package/docs/TOOLS.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  > Auto-generated from tool definitions. Do not edit manually.
4
4
  >
5
- > Generated: 2026-02-06
5
+ > Generated: 2026-02-12
6
6
  >
7
- > Total tools: 154
7
+ > Total tools: 156
8
8
 
9
9
  ## Table of Contents
10
10
 
@@ -2457,3 +2457,27 @@ Use this to check the state of cloud agents before/after cleanup.
2457
2457
  | `status` | `"starting" | "running" | "stopped" | "failed" | "all"` | No | Filter by status (default: all) |
2458
2458
 
2459
2459
  ---
2460
+
2461
+ ## Uncategorized
2462
+
2463
+ *Tools not yet assigned to a category*
2464
+
2465
+ ### check_mcp_version
2466
+
2467
+ Check if the Vibescope MCP server is up to date. Compares the locally installed version against the latest published version on npm. Call this when starting a session or when the server instructions indicate an update is available.
2468
+
2469
+ **Parameters:** None
2470
+
2471
+ ---
2472
+
2473
+ ### update_mcp_server
2474
+
2475
+ Update the Vibescope MCP server to the latest version. Runs npm install to fetch the latest version. After updating, the server must be restarted (the agent should ask the user to restart their MCP client/editor). Only call this when the user agrees to update.
2476
+
2477
+ **Parameters:**
2478
+
2479
+ | Parameter | Type | Required | Description |
2480
+ |-----------|------|----------|-------------|
2481
+ | `global` | `boolean` | No | If true, update the global installation (npm install -g). If false, update locally. Default: true. |
2482
+
2483
+ ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibescope/mcp-server",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "MCP server for Vibescope - AI project tracking tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/cli-init.ts CHANGED
@@ -204,26 +204,25 @@ function detectAgents(): Agent[] {
204
204
  // ============================================================================
205
205
 
206
206
  async function configureClaudeCode(apiKey: string): Promise<void> {
207
- // Try using `claude mcp add` command
208
- try {
209
- execSync('claude --version', { stdio: 'pipe', timeout: 5000 });
210
- // Use project scope for claude mcp add
211
- try {
212
- execSync(
213
- `claude mcp add vibescope -e VIBESCOPE_API_KEY=${apiKey} -- npx -y -p @vibescope/mcp-server@latest vibescope-mcp`,
214
- { stdio: 'pipe', timeout: 15000 }
215
- );
216
- console.log(` ${icon.check} Claude Code configured via ${c.cyan}claude mcp add${c.reset}`);
217
- return;
218
- } catch {
219
- // claude mcp add not available (older version), fall through to manual config
220
- }
221
- } catch { /* claude CLI not available */ }
222
-
223
- // Fallback: write .mcp.json
207
+ // Write project-level .mcp.json (works reliably across all platforms)
224
208
  const configPath = join(process.cwd(), '.mcp.json');
225
209
  writeMcpJson(configPath, apiKey);
226
210
  console.log(` ${icon.check} Wrote ${c.cyan}.mcp.json${c.reset} (Claude Code project config)`);
211
+
212
+ // Also offer to write user-level config for global access
213
+ const globalConfig = platform() === 'win32'
214
+ ? join(homedir(), '.claude', 'settings.json')
215
+ : join(homedir(), '.claude', 'settings.json');
216
+
217
+ const addGlobal = await promptConfirm(` Also add Vibescope globally (all projects)?`, true);
218
+ if (addGlobal) {
219
+ const existing = readJsonFile(globalConfig);
220
+ const mcpServers = (existing.mcpServers as Record<string, unknown>) || {};
221
+ mcpServers['vibescope'] = buildMcpServerConfig(apiKey);
222
+ existing.mcpServers = mcpServers;
223
+ writeJsonFile(globalConfig, existing);
224
+ console.log(` ${icon.check} Wrote ${c.cyan}~/.claude/settings.json${c.reset} (global config)`);
225
+ }
227
226
  }
228
227
 
229
228
  async function configureCursor(apiKey: string): Promise<void> {
@@ -243,9 +242,7 @@ async function configureGemini(apiKey: string): Promise<void> {
243
242
  const existing = readJsonFile(configPath);
244
243
  const mcpServers = (existing.mcpServers as Record<string, unknown>) || {};
245
244
  mcpServers['vibescope'] = {
246
- command: 'npx',
247
- args: ['-y', '-p', '@vibescope/mcp-server@latest', 'vibescope-mcp'],
248
- env: { VIBESCOPE_API_KEY: apiKey },
245
+ ...buildMcpServerConfig(apiKey),
249
246
  timeout: 30000,
250
247
  trust: true,
251
248
  };
@@ -275,14 +272,26 @@ function writeJsonFile(path: string, data: Record<string, unknown>): void {
275
272
  writeFileSync(path, JSON.stringify(data, null, 2) + '\n');
276
273
  }
277
274
 
278
- function writeMcpJson(configPath: string, apiKey: string): void {
279
- const existing = readJsonFile(configPath);
280
- const mcpServers = (existing.mcpServers as Record<string, unknown>) || {};
281
- mcpServers['vibescope'] = {
275
+ function buildMcpServerConfig(apiKey: string): Record<string, unknown> {
276
+ const isWindows = platform() === 'win32';
277
+ if (isWindows) {
278
+ return {
279
+ command: 'cmd',
280
+ args: ['/c', 'npx', '-y', '-p', '@vibescope/mcp-server@latest', 'vibescope-mcp'],
281
+ env: { VIBESCOPE_API_KEY: apiKey },
282
+ };
283
+ }
284
+ return {
282
285
  command: 'npx',
283
286
  args: ['-y', '-p', '@vibescope/mcp-server@latest', 'vibescope-mcp'],
284
287
  env: { VIBESCOPE_API_KEY: apiKey },
285
288
  };
289
+ }
290
+
291
+ function writeMcpJson(configPath: string, apiKey: string): void {
292
+ const existing = readJsonFile(configPath);
293
+ const mcpServers = (existing.mcpServers as Record<string, unknown>) || {};
294
+ mcpServers['vibescope'] = buildMcpServerConfig(apiKey);
286
295
  existing.mcpServers = mcpServers;
287
296
  writeJsonFile(configPath, existing);
288
297
  }