start-vibing 2.0.6 → 2.0.7

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.js CHANGED
@@ -416,6 +416,233 @@ function launchClaude(cwd) {
416
416
  });
417
417
  }
418
418
 
419
+ // src/mcp.ts
420
+ import { spawnSync as spawnSync2, spawn as spawn2 } from "child_process";
421
+ var CORE_MCPS = [
422
+ {
423
+ name: "context7",
424
+ description: "Real-time library documentation",
425
+ command: "npx",
426
+ args: ["-y", "@upstash/context7-mcp@latest"]
427
+ },
428
+ {
429
+ name: "sequential-thinking",
430
+ description: "Structured reasoning for complex problems",
431
+ command: "npx",
432
+ args: ["-y", "@modelcontextprotocol/server-sequential-thinking"]
433
+ },
434
+ {
435
+ name: "memory",
436
+ description: "Persistent context across sessions",
437
+ command: "npx",
438
+ args: ["-y", "@modelcontextprotocol/server-memory"]
439
+ },
440
+ {
441
+ name: "playwright",
442
+ description: "Browser automation and E2E testing",
443
+ command: "npx",
444
+ args: ["-y", "@playwright/mcp@latest"]
445
+ }
446
+ ];
447
+ var OPTIONAL_MCPS = [
448
+ {
449
+ name: "nextjs-devtools",
450
+ description: "Next.js development tools (requires Next.js project)",
451
+ command: "npx",
452
+ args: ["-y", "next-devtools-mcp@latest"],
453
+ optional: true
454
+ },
455
+ {
456
+ name: "mongodb",
457
+ description: "MongoDB database operations",
458
+ command: "npx",
459
+ args: ["-y", "@mongodb-js/mongodb-mcp-server"],
460
+ envVars: ["MONGODB_URI"],
461
+ optional: true
462
+ },
463
+ {
464
+ name: "github",
465
+ description: "GitHub repository management",
466
+ command: "claude",
467
+ args: ["mcp", "add", "--transport", "http", "-s", "user", "github", "https://api.githubcopilot.com/mcp/"],
468
+ transport: "http",
469
+ url: "https://api.githubcopilot.com/mcp/",
470
+ envVars: ["GITHUB_PERSONAL_ACCESS_TOKEN"],
471
+ optional: true
472
+ },
473
+ {
474
+ name: "sentry",
475
+ description: "Error tracking and monitoring",
476
+ command: "claude",
477
+ args: ["mcp", "add", "--transport", "http", "-s", "user", "sentry", "https://mcp.sentry.dev/mcp"],
478
+ transport: "http",
479
+ url: "https://mcp.sentry.dev/mcp",
480
+ optional: true
481
+ },
482
+ {
483
+ name: "brave-search",
484
+ description: "Web search for research",
485
+ command: "npx",
486
+ args: ["-y", "@modelcontextprotocol/server-brave-search"],
487
+ envVars: ["BRAVE_API_KEY"],
488
+ optional: true
489
+ },
490
+ {
491
+ name: "figma",
492
+ description: "Design to code workflows",
493
+ command: "claude",
494
+ args: ["mcp", "add", "--transport", "http", "-s", "user", "figma", "https://mcp.figma.com/mcp"],
495
+ transport: "http",
496
+ url: "https://mcp.figma.com/mcp",
497
+ optional: true
498
+ }
499
+ ];
500
+ var c = {
501
+ reset: "\x1B[0m",
502
+ bright: "\x1B[1m",
503
+ dim: "\x1B[2m",
504
+ green: "\x1B[32m",
505
+ yellow: "\x1B[33m",
506
+ blue: "\x1B[34m",
507
+ cyan: "\x1B[36m",
508
+ red: "\x1B[31m",
509
+ magenta: "\x1B[35m"
510
+ };
511
+ function isClaudeMcpReady() {
512
+ return commandExists("claude");
513
+ }
514
+ function isMcpInstalled(name) {
515
+ try {
516
+ const result = spawnSync2("claude", ["mcp", "get", name], {
517
+ encoding: "utf-8",
518
+ stdio: ["pipe", "pipe", "pipe"],
519
+ shell: true,
520
+ timeout: 1e4
521
+ });
522
+ return result.status === 0;
523
+ } catch {
524
+ return false;
525
+ }
526
+ }
527
+ async function installMcp(server) {
528
+ if (isMcpInstalled(server.name)) {
529
+ return {
530
+ server: server.name,
531
+ success: true,
532
+ message: "Already installed",
533
+ skipped: true
534
+ };
535
+ }
536
+ return new Promise((resolve) => {
537
+ let args;
538
+ if (server.transport === "http" && server.url) {
539
+ args = server.args;
540
+ } else {
541
+ args = ["mcp", "add", "-s", "user", server.name, "--", server.command, ...server.args];
542
+ }
543
+ const cmd = server.transport === "http" ? "claude" : "claude";
544
+ const proc = spawn2(cmd, args, {
545
+ shell: true,
546
+ stdio: ["pipe", "pipe", "pipe"]
547
+ });
548
+ let stdout = "";
549
+ let stderr = "";
550
+ proc.stdout?.on("data", (data) => {
551
+ stdout += data.toString();
552
+ });
553
+ proc.stderr?.on("data", (data) => {
554
+ stderr += data.toString();
555
+ });
556
+ proc.on("close", (code) => {
557
+ if (code === 0) {
558
+ resolve({
559
+ server: server.name,
560
+ success: true,
561
+ message: "Installed"
562
+ });
563
+ } else {
564
+ resolve({
565
+ server: server.name,
566
+ success: false,
567
+ message: stderr || stdout || `Exit code: ${code}`
568
+ });
569
+ }
570
+ });
571
+ proc.on("error", (err) => {
572
+ resolve({
573
+ server: server.name,
574
+ success: false,
575
+ message: err.message
576
+ });
577
+ });
578
+ setTimeout(() => {
579
+ proc.kill();
580
+ resolve({
581
+ server: server.name,
582
+ success: false,
583
+ message: "Installation timed out"
584
+ });
585
+ }, 60000);
586
+ });
587
+ }
588
+ async function installMcpsParallel(servers, concurrency = 3) {
589
+ const results = [];
590
+ for (let i = 0;i < servers.length; i += concurrency) {
591
+ const batch = servers.slice(i, i + concurrency);
592
+ const batchResults = await Promise.all(batch.map(async (server) => {
593
+ process.stdout.write(` ${c.dim}Installing ${server.name}...${c.reset}`);
594
+ const result = await installMcp(server);
595
+ process.stdout.clearLine?.(0);
596
+ process.stdout.cursorTo?.(0);
597
+ const icon = result.success ? `${c.green}\u2713${c.reset}` : `${c.red}\u2717${c.reset}`;
598
+ const status = result.skipped ? `${c.dim}(already installed)${c.reset}` : result.success ? `${c.green}OK${c.reset}` : `${c.red}${result.message}${c.reset}`;
599
+ console.log(` ${icon} ${c.cyan}${server.name}${c.reset}: ${server.description} ${status}`);
600
+ return result;
601
+ }));
602
+ results.push(...batchResults);
603
+ }
604
+ return results;
605
+ }
606
+ async function installMcps() {
607
+ console.log("");
608
+ console.log(` ${c.bright}${c.magenta}Installing MCP Servers...${c.reset}`);
609
+ console.log("");
610
+ if (!isClaudeMcpReady()) {
611
+ console.log(` ${c.yellow}Claude CLI not available. Skipping MCP installation.${c.reset}`);
612
+ console.log(` ${c.dim}MCPs will be installed on next run after Claude is ready.${c.reset}`);
613
+ return { installed: 0, failed: 0, skipped: CORE_MCPS.length };
614
+ }
615
+ console.log(` ${c.blue}Core MCPs (auto-installed):${c.reset}`);
616
+ console.log("");
617
+ const results = await installMcpsParallel(CORE_MCPS, 3);
618
+ const installed = results.filter((r) => r.success && !r.skipped).length;
619
+ const failed = results.filter((r) => !r.success).length;
620
+ const skipped = results.filter((r) => r.skipped).length;
621
+ console.log("");
622
+ console.log(` ${c.yellow}Optional MCPs (install manually if needed):${c.reset}`);
623
+ console.log("");
624
+ for (const mcp of OPTIONAL_MCPS) {
625
+ const envNote = mcp.envVars?.length ? `${c.dim}(requires: ${mcp.envVars.join(", ")})${c.reset}` : "";
626
+ console.log(` ${c.cyan}${mcp.name}${c.reset}: ${mcp.description} ${envNote}`);
627
+ if (mcp.transport === "http") {
628
+ console.log(` ${c.dim}claude mcp add --transport http -s user ${mcp.name} ${mcp.url}${c.reset}`);
629
+ } else {
630
+ console.log(` ${c.dim}claude mcp add -s user ${mcp.name} -- ${mcp.command} ${mcp.args.join(" ")}${c.reset}`);
631
+ }
632
+ }
633
+ console.log("");
634
+ console.log(` ${c.bright}MCP Summary:${c.reset}`);
635
+ console.log(` ${c.green}Installed: ${installed}${c.reset}`);
636
+ if (skipped > 0)
637
+ console.log(` ${c.dim}Already installed: ${skipped}${c.reset}`);
638
+ if (failed > 0)
639
+ console.log(` ${c.red}Failed: ${failed}${c.reset}`);
640
+ console.log("");
641
+ console.log(` ${c.dim}Verify with: claude mcp list${c.reset}`);
642
+ console.log(` ${c.dim}Or inside Claude Code: /mcp${c.reset}`);
643
+ return { installed, failed, skipped };
644
+ }
645
+
419
646
  // src/cli.ts
420
647
  var __filename3 = fileURLToPath2(import.meta.url);
421
648
  var __dirname3 = dirname2(__filename3);
@@ -461,6 +688,7 @@ ${BANNER}
461
688
  Options:
462
689
  --force Overwrite all files (including custom domains)
463
690
  --no-claude Skip Claude Code installation and launch
691
+ --no-mcp Skip MCP server installation
464
692
  --no-update-check Skip checking for start-vibing updates
465
693
  --help, -h Show this help message
466
694
  --version, -v Show version
@@ -469,7 +697,8 @@ ${BANNER}
469
697
  1. Checks for start-vibing updates (cached for 1 hour)
470
698
  2. Creates .claude/ folder with agents, skills, hooks, config
471
699
  3. Installs Claude Code if not found on system
472
- 4. Launches Claude Code with --dangerously-skip-permissions
700
+ 4. Installs recommended MCP servers (Context7, Playwright, etc.)
701
+ 5. Launches Claude Code with --dangerously-skip-permissions
473
702
 
474
703
  Smart Copy Behavior:
475
704
  - ALWAYS overwrites: agents/*.md, hooks/*.py, settings.json
@@ -500,6 +729,7 @@ async function main() {
500
729
  }
501
730
  const force = args.includes("--force");
502
731
  const skipClaude = args.includes("--no-claude");
732
+ const skipMcp = args.includes("--no-mcp");
503
733
  const skipUpdateCheck = args.includes("--no-update-check");
504
734
  const targetDir = process.cwd();
505
735
  if (!skipUpdateCheck) {
@@ -573,6 +803,17 @@ async function main() {
573
803
  } else {
574
804
  console.log(" Claude Code is already installed.");
575
805
  }
806
+ if (!skipMcp && isClaudeMcpReady()) {
807
+ console.log("");
808
+ console.log(" ========================================");
809
+ console.log(" MCP Servers Setup");
810
+ console.log(" ========================================");
811
+ await installMcps();
812
+ } else if (!skipMcp) {
813
+ console.log("");
814
+ console.log(" MCP installation skipped (Claude CLI not ready).");
815
+ console.log(' Run "claude mcp list" after restart to verify.');
816
+ }
576
817
  console.log("");
577
818
  launchClaude(targetDir);
578
819
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "start-vibing",
3
- "version": "2.0.6",
3
+ "version": "2.0.7",
4
4
  "description": "Setup Claude Code agents, skills, and hooks in your project. Smart copy that preserves your custom domains and configurations.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,330 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$comment": "MCP Server Configuration - Recommended servers based on project stack and security review",
4
+
5
+ "metadata": {
6
+ "version": "1.0.0",
7
+ "lastUpdated": "2025-01-04",
8
+ "researchSources": [
9
+ "https://modelcontextprotocol.io/specification/2025-11-25",
10
+ "https://registry.modelcontextprotocol.io",
11
+ "https://github.com/modelcontextprotocol/servers",
12
+ "https://github.com/punkpeye/awesome-mcp-servers",
13
+ "https://docs.docker.com/ai/mcp-catalog-and-toolkit/catalog/"
14
+ ]
15
+ },
16
+
17
+ "tiers": {
18
+ "core": {
19
+ "description": "Essential MCPs for daily development - Must install",
20
+ "servers": ["github", "nextjs-devtools", "mongodb", "playwright", "context7", "sequential-thinking"]
21
+ },
22
+ "productivity": {
23
+ "description": "Enhanced productivity and monitoring",
24
+ "servers": ["sentry", "figma", "brave-search", "memory", "time"]
25
+ },
26
+ "infrastructure": {
27
+ "description": "DevOps and infrastructure tools",
28
+ "servers": ["docker-hub", "upstash", "fetch"]
29
+ }
30
+ },
31
+
32
+ "servers": {
33
+ "github": {
34
+ "name": "GitHub MCP Server",
35
+ "description": "Official GitHub server for repository management, issues, PRs, and CI/CD",
36
+ "tier": "core",
37
+ "verified": true,
38
+ "publisher": "github",
39
+ "repository": "https://github.com/github/github-mcp-server",
40
+ "transport": "http",
41
+ "config": {
42
+ "remote": {
43
+ "url": "https://api.githubcopilot.com/mcp/"
44
+ },
45
+ "local": {
46
+ "command": "docker",
47
+ "args": ["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"]
48
+ }
49
+ },
50
+ "envVars": ["GITHUB_PERSONAL_ACCESS_TOKEN"],
51
+ "requiredPermissions": ["repo", "read:org", "read:user"],
52
+ "agentMappings": ["commit-manager", "code-reviewer", "quality-checker"],
53
+ "securityNotes": "Use fine-grained PAT with minimal scopes. Never commit tokens."
54
+ },
55
+
56
+ "nextjs-devtools": {
57
+ "name": "Next.js DevTools MCP",
58
+ "description": "Official Vercel server for Next.js 16+ development with error detection and live state",
59
+ "tier": "core",
60
+ "verified": true,
61
+ "publisher": "vercel",
62
+ "repository": "https://github.com/vercel/next-devtools-mcp",
63
+ "transport": "stdio",
64
+ "config": {
65
+ "command": "npx",
66
+ "args": ["-y", "next-devtools-mcp@latest"]
67
+ },
68
+ "envVars": [],
69
+ "requiredPermissions": [],
70
+ "agentMappings": ["debugger", "performance", "quality-checker"],
71
+ "securityNotes": "Safe - connects to local dev server only"
72
+ },
73
+
74
+ "mongodb": {
75
+ "name": "MongoDB MCP Server",
76
+ "description": "Official MongoDB server for database operations on Atlas and local MongoDB",
77
+ "tier": "core",
78
+ "verified": true,
79
+ "publisher": "mongodb-js",
80
+ "repository": "https://github.com/mongodb-js/mongodb-mcp-server",
81
+ "transport": "stdio",
82
+ "config": {
83
+ "command": "npx",
84
+ "args": ["-y", "@mongodb-js/mongodb-mcp-server"],
85
+ "options": {
86
+ "readOnly": false,
87
+ "connectionString": "${MONGODB_URI}"
88
+ }
89
+ },
90
+ "envVars": ["MONGODB_URI"],
91
+ "requiredPermissions": ["database read/write"],
92
+ "agentMappings": ["analyzer", "debugger", "performance"],
93
+ "securityNotes": "Enable readOnly mode for production. Use connection strings with minimal privileges."
94
+ },
95
+
96
+ "playwright": {
97
+ "name": "Playwright MCP Server",
98
+ "description": "Official Microsoft server for browser automation and E2E testing",
99
+ "tier": "core",
100
+ "verified": true,
101
+ "publisher": "microsoft",
102
+ "repository": "https://github.com/microsoft/playwright-mcp",
103
+ "transport": "stdio",
104
+ "config": {
105
+ "command": "npx",
106
+ "args": ["-y", "@playwright/mcp@latest"]
107
+ },
108
+ "envVars": [],
109
+ "requiredPermissions": [],
110
+ "agentMappings": ["tester", "ui-ux-reviewer", "quality-checker"],
111
+ "securityNotes": "Safe - runs in isolated browser context"
112
+ },
113
+
114
+ "context7": {
115
+ "name": "Context7 MCP",
116
+ "description": "Real-time, version-specific documentation for libraries and frameworks",
117
+ "tier": "core",
118
+ "verified": true,
119
+ "publisher": "upstash",
120
+ "repository": "https://github.com/upstash/context7",
121
+ "transport": "stdio",
122
+ "config": {
123
+ "command": "npx",
124
+ "args": ["-y", "@upstash/context7-mcp@latest"]
125
+ },
126
+ "envVars": [],
127
+ "requiredPermissions": [],
128
+ "agentMappings": ["research", "analyzer", "documenter"],
129
+ "securityNotes": "Safe - read-only documentation fetching"
130
+ },
131
+
132
+ "sequential-thinking": {
133
+ "name": "Sequential Thinking MCP",
134
+ "description": "Structured reasoning for complex problem-solving and planning",
135
+ "tier": "core",
136
+ "verified": true,
137
+ "publisher": "modelcontextprotocol",
138
+ "repository": "https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking",
139
+ "transport": "stdio",
140
+ "config": {
141
+ "command": "npx",
142
+ "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
143
+ },
144
+ "envVars": [],
145
+ "requiredPermissions": [],
146
+ "agentMappings": ["orchestrator", "analyzer", "debugger"],
147
+ "securityNotes": "Safe - no external connections"
148
+ },
149
+
150
+ "sentry": {
151
+ "name": "Sentry MCP Server",
152
+ "description": "Error tracking, monitoring, and AI-powered debugging with Seer",
153
+ "tier": "productivity",
154
+ "verified": true,
155
+ "publisher": "getsentry",
156
+ "repository": "https://github.com/getsentry/sentry-mcp-stdio",
157
+ "transport": "http",
158
+ "config": {
159
+ "url": "https://mcp.sentry.dev/mcp"
160
+ },
161
+ "envVars": [],
162
+ "requiredPermissions": ["Sentry OAuth"],
163
+ "agentMappings": ["debugger", "quality-checker", "performance"],
164
+ "securityNotes": "Requires OAuth authentication to Sentry"
165
+ },
166
+
167
+ "figma": {
168
+ "name": "Figma MCP Server",
169
+ "description": "Design-to-code workflows with direct Figma integration",
170
+ "tier": "productivity",
171
+ "verified": true,
172
+ "publisher": "figma",
173
+ "repository": "https://github.com/figma/mcp-server-guide",
174
+ "transport": "http",
175
+ "config": {
176
+ "url": "https://mcp.figma.com/mcp"
177
+ },
178
+ "envVars": [],
179
+ "requiredPermissions": ["Figma OAuth"],
180
+ "agentMappings": ["ui-ux-reviewer", "documenter"],
181
+ "securityNotes": "Requires Figma account. Rate limited based on plan."
182
+ },
183
+
184
+ "brave-search": {
185
+ "name": "Brave Search MCP",
186
+ "description": "Privacy-first web search for research and current information",
187
+ "tier": "productivity",
188
+ "verified": true,
189
+ "publisher": "modelcontextprotocol",
190
+ "repository": "https://github.com/modelcontextprotocol/servers/tree/main/src/brave-search",
191
+ "transport": "stdio",
192
+ "config": {
193
+ "command": "npx",
194
+ "args": ["-y", "@modelcontextprotocol/server-brave-search"]
195
+ },
196
+ "envVars": ["BRAVE_API_KEY"],
197
+ "requiredPermissions": [],
198
+ "agentMappings": ["research", "ui-ux-reviewer"],
199
+ "securityNotes": "Requires Brave Search API key. Free tier available."
200
+ },
201
+
202
+ "memory": {
203
+ "name": "Memory MCP Server",
204
+ "description": "Persistent context retention across sessions using knowledge graph",
205
+ "tier": "productivity",
206
+ "verified": true,
207
+ "publisher": "modelcontextprotocol",
208
+ "repository": "https://github.com/modelcontextprotocol/servers/tree/main/src/memory",
209
+ "transport": "stdio",
210
+ "config": {
211
+ "command": "npx",
212
+ "args": ["-y", "@modelcontextprotocol/server-memory"]
213
+ },
214
+ "envVars": [],
215
+ "requiredPermissions": [],
216
+ "agentMappings": ["orchestrator", "domain-updater", "commit-manager"],
217
+ "securityNotes": "Stores data locally. Review stored data periodically."
218
+ },
219
+
220
+ "time": {
221
+ "name": "Time MCP Server",
222
+ "description": "Timezone conversion and scheduling capabilities",
223
+ "tier": "productivity",
224
+ "verified": true,
225
+ "publisher": "modelcontextprotocol",
226
+ "repository": "https://github.com/modelcontextprotocol/servers/tree/main/src/time",
227
+ "transport": "stdio",
228
+ "config": {
229
+ "command": "uvx",
230
+ "args": ["mcp-server-time"]
231
+ },
232
+ "envVars": [],
233
+ "requiredPermissions": [],
234
+ "agentMappings": ["commit-manager", "documenter"],
235
+ "securityNotes": "Safe - no external connections"
236
+ },
237
+
238
+ "docker-hub": {
239
+ "name": "Docker Hub MCP Server",
240
+ "description": "Container image discovery and management from Docker Hub",
241
+ "tier": "infrastructure",
242
+ "verified": true,
243
+ "publisher": "docker",
244
+ "repository": "https://www.docker.com/blog/introducing-docker-hub-mcp-server/",
245
+ "transport": "stdio",
246
+ "config": {
247
+ "command": "docker",
248
+ "args": ["run", "-i", "--rm", "mcp/docker-hub"]
249
+ },
250
+ "envVars": ["DOCKER_HUB_PAT"],
251
+ "requiredPermissions": ["Docker Hub account"],
252
+ "agentMappings": ["quality-checker"],
253
+ "securityNotes": "Use read-only tokens when possible"
254
+ },
255
+
256
+ "upstash": {
257
+ "name": "Upstash MCP Server",
258
+ "description": "Redis and rate limiting management for serverless applications",
259
+ "tier": "infrastructure",
260
+ "verified": true,
261
+ "publisher": "upstash",
262
+ "repository": "https://github.com/upstash/mcp-server",
263
+ "transport": "stdio",
264
+ "config": {
265
+ "command": "npx",
266
+ "args": ["-y", "@upstash/mcp-server@latest"]
267
+ },
268
+ "envVars": ["UPSTASH_EMAIL", "UPSTASH_API_KEY"],
269
+ "requiredPermissions": ["Upstash account"],
270
+ "agentMappings": ["performance", "security-auditor"],
271
+ "securityNotes": "Use API keys with minimal permissions"
272
+ },
273
+
274
+ "fetch": {
275
+ "name": "Fetch MCP Server",
276
+ "description": "HTTP API requests and web content retrieval",
277
+ "tier": "infrastructure",
278
+ "verified": true,
279
+ "publisher": "modelcontextprotocol",
280
+ "repository": "https://github.com/modelcontextprotocol/servers/tree/main/src/fetch",
281
+ "transport": "stdio",
282
+ "config": {
283
+ "command": "uvx",
284
+ "args": ["mcp-server-fetch"]
285
+ },
286
+ "envVars": [],
287
+ "requiredPermissions": [],
288
+ "agentMappings": ["research", "analyzer"],
289
+ "securityNotes": "Be cautious with untrusted URLs - prompt injection risk"
290
+ }
291
+ },
292
+
293
+ "security": {
294
+ "guidelines": [
295
+ "Only install verified MCPs from official publishers",
296
+ "Use fine-grained tokens with minimal permissions",
297
+ "Never commit API keys or tokens to version control",
298
+ "Enable readOnly mode for production databases",
299
+ "Review MCP source code before installation",
300
+ "Use containerized MCPs when available for isolation",
301
+ "Monitor MCP activity logs for unusual behavior"
302
+ ],
303
+ "redFlags": [
304
+ "MCPs requesting excessive permissions",
305
+ "Unverified publishers or missing repository",
306
+ "MCPs that execute arbitrary shell commands",
307
+ "MCPs with eval() or exec() in source code",
308
+ "MCPs with recent CVEs or security advisories"
309
+ ],
310
+ "trustedPublishers": [
311
+ "modelcontextprotocol",
312
+ "anthropic",
313
+ "github",
314
+ "microsoft",
315
+ "vercel",
316
+ "mongodb-js",
317
+ "upstash",
318
+ "docker",
319
+ "figma",
320
+ "getsentry"
321
+ ]
322
+ },
323
+
324
+ "installation": {
325
+ "parallelLimit": 5,
326
+ "timeout": 60000,
327
+ "retryAttempts": 3,
328
+ "scope": "project"
329
+ }
330
+ }