@edilsonfjdev/mcp-setup 0.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.
Files changed (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/bin/mcp-setup.js +3 -0
  4. package/dist/add-2HOZTV5H.js +66 -0
  5. package/dist/chunk-H3PELLAE.js +162 -0
  6. package/dist/chunk-JNVJQZTK.js +169 -0
  7. package/dist/chunk-Q36CDQK6.js +28 -0
  8. package/dist/chunk-UZ72QCYF.js +79 -0
  9. package/dist/config-loader-O23HRZIK.js +14 -0
  10. package/dist/doctor-OBFIE3JN.js +161 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +42 -0
  13. package/dist/install-DAWHBGCE.js +169 -0
  14. package/dist/list-QO4GBJHR.js +29 -0
  15. package/dist/profiles-HU3NVRTV.js +30 -0
  16. package/dist/remove-T6C2DD7O.js +39 -0
  17. package/dist/update-GOCA4IZG.js +55 -0
  18. package/dist/validate-6RKOV7JG.js +167 -0
  19. package/package.json +74 -0
  20. package/templates/mcps/clickup.json +35 -0
  21. package/templates/mcps/context7.json +19 -0
  22. package/templates/mcps/coolify.json +24 -0
  23. package/templates/mcps/figma.json +19 -0
  24. package/templates/mcps/github.json +22 -0
  25. package/templates/mcps/hetzner.json +23 -0
  26. package/templates/mcps/linear.json +33 -0
  27. package/templates/mcps/n8n-docs.json +20 -0
  28. package/templates/mcps/n8n-instance.json +22 -0
  29. package/templates/mcps/playwright.json +20 -0
  30. package/templates/mcps/postgres.json +20 -0
  31. package/templates/mcps/semgrep.json +19 -0
  32. package/templates/mcps/sentry.json +34 -0
  33. package/templates/mcps/slack.json +34 -0
  34. package/templates/mcps/stitch.json +22 -0
  35. package/templates/profiles/agents.json +7 -0
  36. package/templates/profiles/base.json +7 -0
  37. package/templates/profiles/full.json +7 -0
  38. package/templates/profiles/headless.json +20 -0
  39. package/templates/profiles/minimal.json +7 -0
  40. package/templates/profiles/saas.json +7 -0
  41. package/templates/scopes/scope-map.json +24 -0
@@ -0,0 +1,167 @@
1
+ import {
2
+ getRequiredVars,
3
+ loadEnv,
4
+ validateAllCredentials,
5
+ validatePresence
6
+ } from "./chunk-JNVJQZTK.js";
7
+ import {
8
+ logger
9
+ } from "./chunk-Q36CDQK6.js";
10
+
11
+ // src/validation/health-check.ts
12
+ async function checkMcp(mcpName, env) {
13
+ const startTime = Date.now();
14
+ try {
15
+ switch (mcpName) {
16
+ case "github": {
17
+ const token = env.GITHUB_TOKEN;
18
+ if (!token) return { mcpName, status: "skip", message: "Token n\xE3o configurado" };
19
+ const controller = new AbortController();
20
+ const timeout = setTimeout(() => controller.abort(), 5e3);
21
+ const res = await fetch("https://api.github.com/user", {
22
+ headers: { Authorization: `Bearer ${token}` },
23
+ signal: controller.signal
24
+ });
25
+ clearTimeout(timeout);
26
+ if (res.ok) return { mcpName, status: "ok", message: "Autenticado com sucesso", durationMs: Date.now() - startTime };
27
+ return { mcpName, status: "fail", message: `HTTP ${res.status}: ${res.statusText}`, durationMs: Date.now() - startTime };
28
+ }
29
+ case "hetzner": {
30
+ const token = env.HETZNER_API_TOKEN;
31
+ if (!token) return { mcpName, status: "skip", message: "Token n\xE3o configurado" };
32
+ const controller = new AbortController();
33
+ const timeout = setTimeout(() => controller.abort(), 5e3);
34
+ const res = await fetch("https://api.hetzner.cloud/v1/servers", {
35
+ headers: { Authorization: `Bearer ${token}` },
36
+ signal: controller.signal
37
+ });
38
+ clearTimeout(timeout);
39
+ if (res.ok) return { mcpName, status: "ok", message: "Autenticado com sucesso", durationMs: Date.now() - startTime };
40
+ return { mcpName, status: "fail", message: `HTTP ${res.status}: ${res.statusText}`, durationMs: Date.now() - startTime };
41
+ }
42
+ case "coolify": {
43
+ const url = env.COOLIFY_BASE_URL;
44
+ const token = env.COOLIFY_ACCESS_TOKEN;
45
+ if (!url || !token) return { mcpName, status: "skip", message: "URL ou token n\xE3o configurado" };
46
+ const controller = new AbortController();
47
+ const timeout = setTimeout(() => controller.abort(), 5e3);
48
+ const res = await fetch(`${url}/api/v1/healthcheck`, {
49
+ headers: { Authorization: `Bearer ${token}` },
50
+ signal: controller.signal
51
+ });
52
+ clearTimeout(timeout);
53
+ if (res.ok) return { mcpName, status: "ok", message: "Inst\xE2ncia acess\xEDvel", durationMs: Date.now() - startTime };
54
+ return { mcpName, status: "fail", message: `HTTP ${res.status}`, durationMs: Date.now() - startTime };
55
+ }
56
+ case "figma":
57
+ case "linear":
58
+ case "slack":
59
+ case "clickup":
60
+ case "sentry":
61
+ return { mcpName, status: "skip", message: "OAuth \u2014 configurar ap\xF3s instala\xE7\xE3o" };
62
+ case "context7":
63
+ case "n8n-docs":
64
+ case "semgrep":
65
+ case "playwright":
66
+ return { mcpName, status: "ok", message: "Sem autentica\xE7\xE3o necess\xE1ria" };
67
+ default:
68
+ return { mcpName, status: "skip", message: "Health check n\xE3o dispon\xEDvel" };
69
+ }
70
+ } catch (error) {
71
+ if (error.name === "AbortError") {
72
+ return { mcpName, status: "timeout", message: "Timeout (5s)", durationMs: Date.now() - startTime };
73
+ }
74
+ return { mcpName, status: "fail", message: error.message, durationMs: Date.now() - startTime };
75
+ }
76
+ }
77
+ async function checkAllHealth(mcpNames, env) {
78
+ const results = await Promise.allSettled(
79
+ mcpNames.map((name) => checkMcp(name, env))
80
+ );
81
+ return results.map((result, i) => {
82
+ if (result.status === "fulfilled") return result.value;
83
+ return { mcpName: mcpNames[i], status: "fail", message: result.reason?.message || "Erro desconhecido" };
84
+ });
85
+ }
86
+
87
+ // src/commands/validate.ts
88
+ import chalk from "chalk";
89
+ async function validateCommand(options) {
90
+ logger.info("Validando configura\xE7\xE3o do ambiente...\n");
91
+ const envResult = loadEnv();
92
+ if (!envResult.success) {
93
+ logger.error(envResult.error || "Falha ao carregar .env");
94
+ process.exit(1);
95
+ }
96
+ logger.success(`Arquivo .env carregado: ${envResult.path}`);
97
+ const templates = ["minimal", "base", "saas", "agents", "full"];
98
+ console.log("");
99
+ logger.info("Valida\xE7\xE3o de credenciais por template:\n");
100
+ for (const template of templates) {
101
+ const required = getRequiredVars(template);
102
+ const presence = validatePresence(envResult.vars, required);
103
+ const validations = validateAllCredentials(template, envResult.vars);
104
+ const formatFailures = validations.filter((v) => !v.valid);
105
+ const presenceIcon = presence.valid ? chalk.green("\u2713") : chalk.red("\u2717");
106
+ const formatIcon = formatFailures.length === 0 ? chalk.green("\u2713") : chalk.yellow("!");
107
+ console.log(` ${template.padEnd(10)} Presen\xE7a: ${presenceIcon} (${presence.present.length}/${required.length}) Formato: ${formatIcon}`);
108
+ if (presence.missing.length > 0) {
109
+ for (const m of presence.missing) {
110
+ console.log(chalk.red(` \u2717 ${m.name} \u2014 ${m.description} (${m.mcpName})`));
111
+ }
112
+ }
113
+ if (formatFailures.length > 0) {
114
+ for (const f of formatFailures) {
115
+ if (!presence.missing.some((m) => m.name === f.variable)) {
116
+ console.log(chalk.yellow(` ! ${f.variable} \u2014 ${f.error}`));
117
+ }
118
+ }
119
+ }
120
+ }
121
+ if (options.health) {
122
+ console.log("");
123
+ const spinner = logger.spinner("Executando health check...");
124
+ const allMcps = [
125
+ "github",
126
+ "context7",
127
+ "figma",
128
+ "stitch",
129
+ "linear",
130
+ "slack",
131
+ "clickup",
132
+ "hetzner",
133
+ "coolify",
134
+ "n8n-docs",
135
+ "semgrep",
136
+ "sentry",
137
+ "playwright"
138
+ ];
139
+ const results = await checkAllHealth(allMcps, envResult.vars);
140
+ spinner.stop();
141
+ renderHealthReport(results);
142
+ }
143
+ console.log("");
144
+ logger.success("Valida\xE7\xE3o conclu\xEDda");
145
+ }
146
+ function renderHealthReport(results) {
147
+ logger.info("Health Check:\n");
148
+ const statusIcon = {
149
+ ok: chalk.green("\u2713"),
150
+ fail: chalk.red("\u2717"),
151
+ timeout: chalk.yellow("\u23F1"),
152
+ skip: chalk.gray("\u2014")
153
+ };
154
+ for (const r of results) {
155
+ const icon = statusIcon[r.status];
156
+ const duration = r.durationMs ? chalk.gray(` (${r.durationMs}ms)`) : "";
157
+ console.log(` ${icon} ${r.mcpName.padEnd(16)} ${r.message}${duration}`);
158
+ }
159
+ const ok = results.filter((r) => r.status === "ok").length;
160
+ const fail = results.filter((r) => r.status === "fail").length;
161
+ const skip = results.filter((r) => r.status === "skip").length;
162
+ console.log("");
163
+ console.log(` ${ok} OK | ${fail} falhas | ${skip} ignorados`);
164
+ }
165
+ export {
166
+ validateCommand
167
+ };
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@edilsonfjdev/mcp-setup",
3
+ "version": "0.1.0",
4
+ "description": "Solução padronizada para instalação e configuração de MCP Servers no Claude Code",
5
+ "author": {
6
+ "name": "Edilson de Freitas Júnior",
7
+ "email": "edilson.desenvolved@gmail.com"
8
+ },
9
+ "license": "MIT",
10
+ "type": "module",
11
+ "bin": {
12
+ "mcp-setup": "./bin/mcp-setup.js"
13
+ },
14
+ "engines": {
15
+ "node": ">=18.0.0"
16
+ },
17
+ "files": [
18
+ "bin/",
19
+ "dist/",
20
+ "templates/",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "scripts": {
25
+ "dev": "tsx src/index.ts",
26
+ "build": "tsup",
27
+ "test": "vitest",
28
+ "test:unit": "vitest run tests/unit/",
29
+ "test:integration": "vitest run tests/integration/",
30
+ "test:smoke": "vitest run tests/smoke/",
31
+ "test:ci": "vitest run --coverage",
32
+ "test:watch": "vitest --watch",
33
+ "lint": "tsc --noEmit",
34
+ "prepublishOnly": "npm run lint && npm run test:ci && npm run build"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public",
38
+ "registry": "https://registry.npmjs.org/"
39
+ },
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/edilsonfj/mcp-setup.git"
43
+ },
44
+ "homepage": "https://github.com/edilsonfj/mcp-setup#readme",
45
+ "bugs": {
46
+ "url": "https://github.com/edilsonfj/mcp-setup/issues"
47
+ },
48
+ "keywords": [
49
+ "mcp",
50
+ "claude-code",
51
+ "model-context-protocol",
52
+ "cli",
53
+ "setup",
54
+ "configuration",
55
+ "anthropic",
56
+ "ai"
57
+ ],
58
+ "dependencies": {
59
+ "commander": "^12.1.0",
60
+ "chalk": "^5.3.0",
61
+ "ora": "^8.1.0",
62
+ "dotenv": "^16.4.5",
63
+ "zod": "^3.24.2",
64
+ "deepmerge-ts": "^7.1.0"
65
+ },
66
+ "devDependencies": {
67
+ "typescript": "^5.6.0",
68
+ "tsup": "^8.3.0",
69
+ "tsx": "^4.19.0",
70
+ "vitest": "^2.1.0",
71
+ "@vitest/coverage-v8": "^2.1.0",
72
+ "@types/node": "^22.0.0"
73
+ }
74
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "clickup",
3
+ "displayName": "ClickUp",
4
+ "category": "gestão",
5
+ "auth": {
6
+ "type": "oauth",
7
+ "envVar": null,
8
+ "required": false,
9
+ "headless": {
10
+ "type": "api-key",
11
+ "envVar": "CLICKUP_API_KEY",
12
+ "required": true
13
+ }
14
+ },
15
+ "config": {
16
+ "type": "http",
17
+ "url": "https://mcp.clickup.com/mcp"
18
+ },
19
+ "headlessConfig": {
20
+ "type": "stdio",
21
+ "command": "npx",
22
+ "args": ["-y", "@taazkareem/clickup-mcp-server@latest"],
23
+ "env": {
24
+ "CLICKUP_API_KEY": "${CLICKUP_API_KEY}",
25
+ "CLICKUP_TEAM_ID": "${CLICKUP_TEAM_ID}"
26
+ }
27
+ },
28
+ "metadata": {
29
+ "description": "Tarefas, time tracking e documentos",
30
+ "docsUrl": "https://developer.clickup.com",
31
+ "credentialUrl": "https://app.clickup.com/settings/apps",
32
+ "credentialInstructions": "Settings > Apps > API Token (pk_...). Team ID na URL do workspace.",
33
+ "version": "1.0.0"
34
+ }
35
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "context7",
3
+ "displayName": "Context7",
4
+ "category": "documentação",
5
+ "auth": {
6
+ "type": "none",
7
+ "envVar": null,
8
+ "required": false
9
+ },
10
+ "config": {
11
+ "type": "http",
12
+ "url": "https://mcp.context7.com/mcp"
13
+ },
14
+ "metadata": {
15
+ "description": "Documentação atualizada de bibliotecas e frameworks",
16
+ "docsUrl": "https://context7.com",
17
+ "version": "1.0.0"
18
+ }
19
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "coolify",
3
+ "displayName": "Coolify",
4
+ "category": "infraestrutura",
5
+ "auth": {
6
+ "type": "api-key",
7
+ "envVar": "COOLIFY_ACCESS_TOKEN",
8
+ "required": true
9
+ },
10
+ "config": {
11
+ "type": "stdio",
12
+ "command": "npx",
13
+ "args": ["-y", "@masonator/coolify-mcp@latest"],
14
+ "env": {
15
+ "COOLIFY_BASE_URL": "${COOLIFY_BASE_URL}",
16
+ "COOLIFY_ACCESS_TOKEN": "${COOLIFY_ACCESS_TOKEN}"
17
+ }
18
+ },
19
+ "metadata": {
20
+ "description": "Deploy, apps, bancos de dados, logs e variáveis de ambiente",
21
+ "docsUrl": "https://coolify.io/docs",
22
+ "version": "1.0.0"
23
+ }
24
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "figma",
3
+ "displayName": "Figma",
4
+ "category": "design",
5
+ "auth": {
6
+ "type": "oauth",
7
+ "envVar": null,
8
+ "required": false
9
+ },
10
+ "config": {
11
+ "type": "http",
12
+ "url": "https://mcp.figma.com/mcp"
13
+ },
14
+ "metadata": {
15
+ "description": "Design-to-code, tokens de design e captura de UI",
16
+ "docsUrl": "https://www.figma.com/developers",
17
+ "version": "1.0.0"
18
+ }
19
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "github",
3
+ "displayName": "GitHub",
4
+ "category": "desenvolvimento",
5
+ "auth": {
6
+ "type": "bearer",
7
+ "envVar": "GITHUB_TOKEN",
8
+ "required": true
9
+ },
10
+ "config": {
11
+ "type": "http",
12
+ "url": "https://api.githubcopilot.com/mcp",
13
+ "headers": {
14
+ "Authorization": "Bearer ${GITHUB_TOKEN}"
15
+ }
16
+ },
17
+ "metadata": {
18
+ "description": "Repositórios, PRs, issues e busca de código",
19
+ "docsUrl": "https://docs.github.com",
20
+ "version": "1.0.0"
21
+ }
22
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "hetzner",
3
+ "displayName": "Hetzner",
4
+ "category": "infraestrutura",
5
+ "auth": {
6
+ "type": "api-key",
7
+ "envVar": "HETZNER_API_TOKEN",
8
+ "required": true
9
+ },
10
+ "config": {
11
+ "type": "stdio",
12
+ "command": "npx",
13
+ "args": ["-y", "hetzner-mcp-server"],
14
+ "env": {
15
+ "HETZNER_API_TOKEN": "${HETZNER_API_TOKEN}"
16
+ }
17
+ },
18
+ "metadata": {
19
+ "description": "VPS, firewalls, chaves SSH e volumes",
20
+ "docsUrl": "https://docs.hetzner.com",
21
+ "version": "1.0.0"
22
+ }
23
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "linear",
3
+ "displayName": "Linear",
4
+ "category": "gestão",
5
+ "auth": {
6
+ "type": "oauth",
7
+ "envVar": null,
8
+ "required": false,
9
+ "headless": {
10
+ "type": "api-key",
11
+ "envVar": "LINEAR_API_KEY",
12
+ "required": true
13
+ }
14
+ },
15
+ "config": {
16
+ "type": "http",
17
+ "url": "https://mcp.linear.app/mcp"
18
+ },
19
+ "headlessConfig": {
20
+ "type": "http",
21
+ "url": "https://mcp.linear.app/mcp",
22
+ "headers": {
23
+ "Authorization": "${LINEAR_API_KEY}"
24
+ }
25
+ },
26
+ "metadata": {
27
+ "description": "Issues, projetos e sprints",
28
+ "docsUrl": "https://linear.app/developers",
29
+ "credentialUrl": "https://linear.app/settings/account/security",
30
+ "credentialInstructions": "Settings > Account > Security & Access > Personal API Keys",
31
+ "version": "1.0.0"
32
+ }
33
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "n8n-docs",
3
+ "displayName": "N8N Docs",
4
+ "category": "workflow",
5
+ "auth": {
6
+ "type": "none",
7
+ "envVar": null,
8
+ "required": false
9
+ },
10
+ "config": {
11
+ "type": "stdio",
12
+ "command": "npx",
13
+ "args": ["-y", "n8n-mcp"]
14
+ },
15
+ "metadata": {
16
+ "description": "Referência de 1200+ nodes do N8N",
17
+ "docsUrl": "https://docs.n8n.io",
18
+ "version": "1.0.0"
19
+ }
20
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "n8n-instance",
3
+ "displayName": "N8N Instance",
4
+ "category": "workflow",
5
+ "auth": {
6
+ "type": "bearer",
7
+ "envVar": "N8N_MCP_TOKEN",
8
+ "required": true
9
+ },
10
+ "config": {
11
+ "type": "http",
12
+ "url": "${N8N_URL}/mcp",
13
+ "headers": {
14
+ "Authorization": "Bearer ${N8N_MCP_TOKEN}"
15
+ }
16
+ },
17
+ "metadata": {
18
+ "description": "Acesso direto a workflows da instância N8N",
19
+ "docsUrl": "https://docs.n8n.io",
20
+ "version": "1.0.0"
21
+ }
22
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "playwright",
3
+ "displayName": "Playwright",
4
+ "category": "testes",
5
+ "auth": {
6
+ "type": "none",
7
+ "envVar": null,
8
+ "required": false
9
+ },
10
+ "config": {
11
+ "type": "stdio",
12
+ "command": "npx",
13
+ "args": ["-y", "@anthropic/playwright-mcp"]
14
+ },
15
+ "metadata": {
16
+ "description": "Testes E2E e automação de browser",
17
+ "docsUrl": "https://playwright.dev/docs",
18
+ "version": "1.0.0"
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "postgres",
3
+ "displayName": "PostgreSQL",
4
+ "category": "banco-de-dados",
5
+ "auth": {
6
+ "type": "dsn",
7
+ "envVar": "DATABASE_URL",
8
+ "required": true
9
+ },
10
+ "config": {
11
+ "type": "stdio",
12
+ "command": "npx",
13
+ "args": ["-y", "@bytebase/dbhub", "--dsn", "${DATABASE_URL}"]
14
+ },
15
+ "metadata": {
16
+ "description": "Consultas diretas ao banco de dados PostgreSQL",
17
+ "docsUrl": "https://www.postgresql.org/docs",
18
+ "version": "1.0.0"
19
+ }
20
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "semgrep",
3
+ "displayName": "Semgrep",
4
+ "category": "segurança",
5
+ "auth": {
6
+ "type": "none",
7
+ "envVar": null,
8
+ "required": false
9
+ },
10
+ "config": {
11
+ "type": "http",
12
+ "url": "https://mcp.semgrep.ai/mcp"
13
+ },
14
+ "metadata": {
15
+ "description": "SAST e análise estática de código",
16
+ "docsUrl": "https://semgrep.dev/docs",
17
+ "version": "1.0.0"
18
+ }
19
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "sentry",
3
+ "displayName": "Sentry",
4
+ "category": "monitoramento",
5
+ "auth": {
6
+ "type": "oauth",
7
+ "envVar": null,
8
+ "required": false,
9
+ "headless": {
10
+ "type": "api-key",
11
+ "envVar": "SENTRY_ACCESS_TOKEN",
12
+ "required": true
13
+ }
14
+ },
15
+ "config": {
16
+ "type": "http",
17
+ "url": "https://mcp.sentry.dev/mcp"
18
+ },
19
+ "headlessConfig": {
20
+ "type": "stdio",
21
+ "command": "npx",
22
+ "args": ["-y", "@sentry/mcp-server@latest"],
23
+ "env": {
24
+ "SENTRY_ACCESS_TOKEN": "${SENTRY_ACCESS_TOKEN}"
25
+ }
26
+ },
27
+ "metadata": {
28
+ "description": "Erros, stack traces e performance",
29
+ "docsUrl": "https://docs.sentry.io",
30
+ "credentialUrl": "https://sentry.io/settings/account/api/auth-tokens/",
31
+ "credentialInstructions": "sentry.io > Settings > Auth Tokens > Create New Token",
32
+ "version": "1.0.0"
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "slack",
3
+ "displayName": "Slack",
4
+ "category": "comunicação",
5
+ "auth": {
6
+ "type": "oauth",
7
+ "envVar": null,
8
+ "required": false,
9
+ "headless": {
10
+ "type": "api-key",
11
+ "envVar": "SLACK_BOT_TOKEN",
12
+ "required": true
13
+ }
14
+ },
15
+ "config": {
16
+ "type": "http",
17
+ "url": "https://mcp.slack.com/mcp"
18
+ },
19
+ "headlessConfig": {
20
+ "type": "stdio",
21
+ "command": "npx",
22
+ "args": ["-y", "slack-mcp-server@latest", "--transport", "stdio"],
23
+ "env": {
24
+ "SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}"
25
+ }
26
+ },
27
+ "metadata": {
28
+ "description": "Mensagens, busca e canais",
29
+ "docsUrl": "https://api.slack.com",
30
+ "credentialUrl": "https://api.slack.com/apps",
31
+ "credentialInstructions": "api.slack.com/apps > Create App > OAuth & Permissions > Bot Token Scopes > Install > Copy Bot Token (xoxb-...)",
32
+ "version": "1.0.0"
33
+ }
34
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "stitch",
3
+ "displayName": "Stitch",
4
+ "category": "design",
5
+ "auth": {
6
+ "type": "api-key",
7
+ "envVar": "STITCH_API_KEY",
8
+ "required": true
9
+ },
10
+ "config": {
11
+ "type": "http",
12
+ "url": "https://stitch.googleapis.com/mcp",
13
+ "headers": {
14
+ "X-Goog-Api-Key": "${STITCH_API_KEY}"
15
+ }
16
+ },
17
+ "metadata": {
18
+ "description": "Geração de UI via texto (Google)",
19
+ "docsUrl": "https://stitch.withgoogle.com",
20
+ "version": "1.0.0"
21
+ }
22
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "agents",
3
+ "displayName": "Agents",
4
+ "description": "Projetos com agentes IA, workflows N8N e automação",
5
+ "mcps": ["github", "context7", "figma", "stitch", "linear", "slack", "clickup", "coolify", "semgrep", "postgres", "sentry", "hetzner", "n8n-docs", "n8n-instance", "playwright"],
6
+ "version": "1.0.0"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "base",
3
+ "displayName": "Base",
4
+ "description": "Projetos padrão com PM, design e deploy",
5
+ "mcps": ["github", "context7", "figma", "stitch", "linear", "slack", "clickup", "coolify", "semgrep"],
6
+ "version": "1.0.0"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "full",
3
+ "displayName": "Full",
4
+ "description": "Setup global completo com todos os MCPs de escopo user",
5
+ "mcps": ["github", "context7", "figma", "stitch", "linear", "slack", "clickup", "hetzner", "coolify", "n8n-docs", "semgrep", "sentry", "playwright"],
6
+ "version": "1.0.0"
7
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "headless",
3
+ "displayName": "Headless",
4
+ "description": "Servidores e VPS sem browser — todos os MCPs via token ou API key (exceto Figma)",
5
+ "mcps": [
6
+ "github",
7
+ "context7",
8
+ "stitch",
9
+ "linear",
10
+ "slack",
11
+ "clickup",
12
+ "hetzner",
13
+ "coolify",
14
+ "n8n-docs",
15
+ "semgrep",
16
+ "sentry",
17
+ "playwright"
18
+ ],
19
+ "version": "1.0.0"
20
+ }