analyzthis_design 2.3.0 → 2.3.1
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 +27 -6
- package/dist/README.md +27 -6
- package/dist/bin/cli.js +7 -1
- package/dist/lib/install.js +51 -0
- package/dist/lib/mcp-server.js +43 -45
- package/dist/skills/knowledge-bank/SKILL.md +26 -116768
- package/package.json +1 -1
- package/skills/knowledge-bank/SKILL.md +26 -116768
package/README.md
CHANGED
|
@@ -4,6 +4,22 @@ A set of AI design personas and a task-first evaluation framework that plugs int
|
|
|
4
4
|
|
|
5
5
|
Install once. Run structured UX critiques, multi-phase ideation, and task-grounded screen reviews — directly inside your AI chat. **No external LLM API keys required** for CLI orchestrator runs: **`/devi`** voices each persona from your host IDE (Cursor, Claude, etc.).
|
|
6
6
|
|
|
7
|
+
## v2.3.1 — independently callable personas (31 Aug 2026)
|
|
8
|
+
|
|
9
|
+
After install, type `/noor`, `/anuj`, `/arjun`, `/meera`, `/priya`, `/zara`, `/raj`, `/kavi` even if Claude’s slash menu only lists Getting Started.
|
|
10
|
+
|
|
11
|
+
- `npx analyzthis_design --target claude` is the same as `install --target claude` (leading `--target` used to print “Unknown command”).
|
|
12
|
+
- Install writes project slash commands into `.claude/commands/` and `.cursor/commands/`.
|
|
13
|
+
- `mcp --configure claude` writes Claude Desktop, Claude Code (`~/.claude.json`), and this repo’s `.mcp.json` when you are in a project.
|
|
14
|
+
- Do not `npm install` this package inside a pnpm/Yarn `workspace:*` repo — use `npx … --target` instead.
|
|
15
|
+
- Slash and MCP still use the model already in your chat. CLI `run` still picks a strong planner and cheap chunks.
|
|
16
|
+
|
|
17
|
+
Website changelog: [analyzthis-lab.vercel.app/design#whats-new](https://analyzthis-lab.vercel.app/design#whats-new)
|
|
18
|
+
|
|
19
|
+
## v2.3.0 — MCP for any IDE
|
|
20
|
+
|
|
21
|
+
19 MCP tools (`analyzthis_noor`, not `/noor`). Slash commands and MCP are different pipes. MCP never creates a slash menu entry.
|
|
22
|
+
|
|
7
23
|
## v2.2 — project-scoped knowledge bank
|
|
8
24
|
|
|
9
25
|
Knowledge sources are now scoped per project by default. `collect`, `connect`, `sync`, `disconnect`, and `status` operate on the project derived from your current working directory, and the built `knowledge-bank` skill is written into that project's local skills directory (`<project>/.claude/skills/knowledge-bank/SKILL.md`, `<project>/.cursor/skills/...`, etc.). Invoking a skill from one project never reads another project's vaults.
|
|
@@ -21,17 +37,21 @@ Pass `--global` to opt into the legacy merged behavior (read `config.sources` an
|
|
|
21
37
|
|
|
22
38
|
Use `npx analyzthis_design run-unchunked` for the legacy single-pass orchestrator.
|
|
23
39
|
|
|
24
|
-
**npm:** [analyzthis_design](https://www.npmjs.com/package/analyzthis_design) · **Current version:** 2.3.
|
|
40
|
+
**npm:** [analyzthis_design](https://www.npmjs.com/package/analyzthis_design) · **Current version:** 2.3.1 · **Step-by-step guide:** [HOW-TO-USE.md](./HOW-TO-USE.md)
|
|
25
41
|
|
|
26
42
|
---
|
|
27
43
|
|
|
28
44
|
## Quick start
|
|
29
45
|
|
|
30
46
|
```bash
|
|
31
|
-
# 1. Install the
|
|
47
|
+
# 1. Install the CLI globally (optional). Do not run npm install inside a
|
|
48
|
+
# pnpm/Yarn workspace repo — npm cannot read workspace:* and will fail.
|
|
49
|
+
# Prefer npx from any folder:
|
|
32
50
|
npm install -g analyzthis_design
|
|
33
51
|
|
|
34
|
-
# 2.
|
|
52
|
+
# 2. Copy skills + slash commands into your IDE (consent-based)
|
|
53
|
+
npx analyzthis_design install --target all
|
|
54
|
+
# Same thing: a leading --target means install
|
|
35
55
|
npx analyzthis_design --target all
|
|
36
56
|
|
|
37
57
|
# 3. Run a task in v2.0 chunked mode (free/cheap models)
|
|
@@ -41,13 +61,14 @@ npx analyzthis_design run --task "Review invoice approval screen"
|
|
|
41
61
|
npx analyzthis_design run-unchunked --task "Review invoice approval screen" --provider host
|
|
42
62
|
```
|
|
43
63
|
|
|
44
|
-
> **Security:** This package publishes **plain source** — no obfuscation, no minification, no dynamic require. Every file in `dist/` is readable and auditable. The `postinstall` script only prints a welcome message; it does **not** write to any AI-agent directories. Skill installation requires an explicit `npx analyzthis_design --target <ide>`
|
|
64
|
+
> **Security:** This package publishes **plain source** — no obfuscation, no minification, no dynamic require. Every file in `dist/` is readable and auditable. The `postinstall` script only prints a welcome message; it does **not** write to any AI-agent directories. Skill installation requires an explicit `npx analyzthis_design install --target <ide>` (or `npx analyzthis_design --target <ide>`).
|
|
45
65
|
>
|
|
46
|
-
> **MCP (universal):** `npx analyzthis_design mcp` starts a local MCP server with 19 tools (all personas + combination passes + utilities). Auto-configures for Cursor, Claude Desktop, and Windsurf during
|
|
66
|
+
> **MCP (universal):** `npx analyzthis_design mcp` starts a local MCP server with 19 tools (all personas + combination passes + utilities). Auto-configures for Cursor, Claude Desktop, **Claude Code**, and Windsurf during install. For Lovable, v0, Bolt, Replit, ChatGPT: run `npx analyzthis_design mcp --configure <tool>` for a config snippet.
|
|
47
67
|
|
|
48
68
|
### Install by target IDE
|
|
49
69
|
|
|
50
70
|
```bash
|
|
71
|
+
npx analyzthis_design install --target claude
|
|
51
72
|
npx analyzthis_design --target claude
|
|
52
73
|
npx analyzthis_design --target codex
|
|
53
74
|
npx analyzthis_design --target grok
|
|
@@ -55,7 +76,7 @@ npx analyzthis_design --target windsurf
|
|
|
55
76
|
npx analyzthis_design --target all --force
|
|
56
77
|
```
|
|
57
78
|
|
|
58
|
-
**After install:** type `/
|
|
79
|
+
**After install:** type `/noor`, `/arjun`, `/ux-ideator` (or `@` in Windsurf). Claude’s menu may only show Getting Started — type the name anyway. Also `/getting-started`. Walkthrough: [HOW-TO-USE.md](./HOW-TO-USE.md). Re-print help: `npx analyzthis_design welcome`.
|
|
59
80
|
|
|
60
81
|
| Tool | Skills installed to | Invoke |
|
|
61
82
|
|---|---|---|
|
package/dist/README.md
CHANGED
|
@@ -4,6 +4,22 @@ A set of AI design personas and a task-first evaluation framework that plugs int
|
|
|
4
4
|
|
|
5
5
|
Install once. Run structured UX critiques, multi-phase ideation, and task-grounded screen reviews — directly inside your AI chat. **No external LLM API keys required** for CLI orchestrator runs: **`/devi`** voices each persona from your host IDE (Cursor, Claude, etc.).
|
|
6
6
|
|
|
7
|
+
## v2.3.1 — independently callable personas (31 Aug 2026)
|
|
8
|
+
|
|
9
|
+
After install, type `/noor`, `/anuj`, `/arjun`, `/meera`, `/priya`, `/zara`, `/raj`, `/kavi` even if Claude’s slash menu only lists Getting Started.
|
|
10
|
+
|
|
11
|
+
- `npx analyzthis_design --target claude` is the same as `install --target claude` (leading `--target` used to print “Unknown command”).
|
|
12
|
+
- Install writes project slash commands into `.claude/commands/` and `.cursor/commands/`.
|
|
13
|
+
- `mcp --configure claude` writes Claude Desktop, Claude Code (`~/.claude.json`), and this repo’s `.mcp.json` when you are in a project.
|
|
14
|
+
- Do not `npm install` this package inside a pnpm/Yarn `workspace:*` repo — use `npx … --target` instead.
|
|
15
|
+
- Slash and MCP still use the model already in your chat. CLI `run` still picks a strong planner and cheap chunks.
|
|
16
|
+
|
|
17
|
+
Website changelog: [analyzthis-lab.vercel.app/design#whats-new](https://analyzthis-lab.vercel.app/design#whats-new)
|
|
18
|
+
|
|
19
|
+
## v2.3.0 — MCP for any IDE
|
|
20
|
+
|
|
21
|
+
19 MCP tools (`analyzthis_noor`, not `/noor`). Slash commands and MCP are different pipes. MCP never creates a slash menu entry.
|
|
22
|
+
|
|
7
23
|
## v2.2 — project-scoped knowledge bank
|
|
8
24
|
|
|
9
25
|
Knowledge sources are now scoped per project by default. `collect`, `connect`, `sync`, `disconnect`, and `status` operate on the project derived from your current working directory, and the built `knowledge-bank` skill is written into that project's local skills directory (`<project>/.claude/skills/knowledge-bank/SKILL.md`, `<project>/.cursor/skills/...`, etc.). Invoking a skill from one project never reads another project's vaults.
|
|
@@ -21,17 +37,21 @@ Pass `--global` to opt into the legacy merged behavior (read `config.sources` an
|
|
|
21
37
|
|
|
22
38
|
Use `npx analyzthis_design run-unchunked` for the legacy single-pass orchestrator.
|
|
23
39
|
|
|
24
|
-
**npm:** [analyzthis_design](https://www.npmjs.com/package/analyzthis_design) · **Current version:** 2.3.
|
|
40
|
+
**npm:** [analyzthis_design](https://www.npmjs.com/package/analyzthis_design) · **Current version:** 2.3.1 · **Step-by-step guide:** [HOW-TO-USE.md](./HOW-TO-USE.md)
|
|
25
41
|
|
|
26
42
|
---
|
|
27
43
|
|
|
28
44
|
## Quick start
|
|
29
45
|
|
|
30
46
|
```bash
|
|
31
|
-
# 1. Install the
|
|
47
|
+
# 1. Install the CLI globally (optional). Do not run npm install inside a
|
|
48
|
+
# pnpm/Yarn workspace repo — npm cannot read workspace:* and will fail.
|
|
49
|
+
# Prefer npx from any folder:
|
|
32
50
|
npm install -g analyzthis_design
|
|
33
51
|
|
|
34
|
-
# 2.
|
|
52
|
+
# 2. Copy skills + slash commands into your IDE (consent-based)
|
|
53
|
+
npx analyzthis_design install --target all
|
|
54
|
+
# Same thing: a leading --target means install
|
|
35
55
|
npx analyzthis_design --target all
|
|
36
56
|
|
|
37
57
|
# 3. Run a task in v2.0 chunked mode (free/cheap models)
|
|
@@ -41,13 +61,14 @@ npx analyzthis_design run --task "Review invoice approval screen"
|
|
|
41
61
|
npx analyzthis_design run-unchunked --task "Review invoice approval screen" --provider host
|
|
42
62
|
```
|
|
43
63
|
|
|
44
|
-
> **Security:** This package publishes **plain source** — no obfuscation, no minification, no dynamic require. Every file in `dist/` is readable and auditable. The `postinstall` script only prints a welcome message; it does **not** write to any AI-agent directories. Skill installation requires an explicit `npx analyzthis_design --target <ide>`
|
|
64
|
+
> **Security:** This package publishes **plain source** — no obfuscation, no minification, no dynamic require. Every file in `dist/` is readable and auditable. The `postinstall` script only prints a welcome message; it does **not** write to any AI-agent directories. Skill installation requires an explicit `npx analyzthis_design install --target <ide>` (or `npx analyzthis_design --target <ide>`).
|
|
45
65
|
>
|
|
46
|
-
> **MCP (universal):** `npx analyzthis_design mcp` starts a local MCP server with 19 tools (all personas + combination passes + utilities). Auto-configures for Cursor, Claude Desktop, and Windsurf during
|
|
66
|
+
> **MCP (universal):** `npx analyzthis_design mcp` starts a local MCP server with 19 tools (all personas + combination passes + utilities). Auto-configures for Cursor, Claude Desktop, **Claude Code**, and Windsurf during install. For Lovable, v0, Bolt, Replit, ChatGPT: run `npx analyzthis_design mcp --configure <tool>` for a config snippet.
|
|
47
67
|
|
|
48
68
|
### Install by target IDE
|
|
49
69
|
|
|
50
70
|
```bash
|
|
71
|
+
npx analyzthis_design install --target claude
|
|
51
72
|
npx analyzthis_design --target claude
|
|
52
73
|
npx analyzthis_design --target codex
|
|
53
74
|
npx analyzthis_design --target grok
|
|
@@ -55,7 +76,7 @@ npx analyzthis_design --target windsurf
|
|
|
55
76
|
npx analyzthis_design --target all --force
|
|
56
77
|
```
|
|
57
78
|
|
|
58
|
-
**After install:** type `/
|
|
79
|
+
**After install:** type `/noor`, `/arjun`, `/ux-ideator` (or `@` in Windsurf). Claude’s menu may only show Getting Started — type the name anyway. Also `/getting-started`. Walkthrough: [HOW-TO-USE.md](./HOW-TO-USE.md). Re-print help: `npx analyzthis_design welcome`.
|
|
59
80
|
|
|
60
81
|
| Tool | Skills installed to | Invoke |
|
|
61
82
|
|---|---|---|
|
package/dist/bin/cli.js
CHANGED
|
@@ -248,7 +248,13 @@ Docs: https://github.com/rishikeshjoshi/analyzthis_design
|
|
|
248
248
|
|
|
249
249
|
// ─── Parse args ──────────────────────────────────────────────────────────────
|
|
250
250
|
|
|
251
|
-
|
|
251
|
+
let [, , cmd, ...flags] = process.argv;
|
|
252
|
+
// Leading flags mean install: `npx analyzthis_design --target claude`
|
|
253
|
+
// Keep --help / -h as help, not install.
|
|
254
|
+
if (cmd && cmd.startsWith('-') && cmd !== '--help' && cmd !== '-h') {
|
|
255
|
+
flags = [cmd, ...flags];
|
|
256
|
+
cmd = 'install';
|
|
257
|
+
}
|
|
252
258
|
|
|
253
259
|
function getFlag(name) {
|
|
254
260
|
// Supports both --flag=value and --flag value
|
package/dist/lib/install.js
CHANGED
|
@@ -17,6 +17,24 @@ const PACKAGE_ROOT = resolvePackageRoot(__dirname);
|
|
|
17
17
|
const PACKAGE_SKILLS_DIR = path.join(PACKAGE_ROOT, 'skills');
|
|
18
18
|
const WELCOME_MARKER = path.join(os.homedir(), '.analyzthis_design', '.welcome-shown');
|
|
19
19
|
|
|
20
|
+
// Slash items written into the current project so /noor shows in the menu.
|
|
21
|
+
const PROJECT_COMMANDS = [
|
|
22
|
+
'noor',
|
|
23
|
+
'anuj',
|
|
24
|
+
'arjun',
|
|
25
|
+
'meera',
|
|
26
|
+
'priya',
|
|
27
|
+
'zara',
|
|
28
|
+
'raj',
|
|
29
|
+
'kavi',
|
|
30
|
+
'ux-ideator',
|
|
31
|
+
'design-director',
|
|
32
|
+
'persona-orchestrator',
|
|
33
|
+
'design-critic',
|
|
34
|
+
'getting-started',
|
|
35
|
+
'devi',
|
|
36
|
+
];
|
|
37
|
+
|
|
20
38
|
const SKILLS = [
|
|
21
39
|
'getting-started',
|
|
22
40
|
'arjun',
|
|
@@ -88,6 +106,13 @@ function printWelcomeBanner(targetId, log = console.log) {
|
|
|
88
106
|
log(` ${gs} ← read this first`);
|
|
89
107
|
}
|
|
90
108
|
|
|
109
|
+
log('');
|
|
110
|
+
log(' Independent personas — type the name (even if the menu only shows Getting Started):');
|
|
111
|
+
log(` ${p}noor ${p}anuj ${p}arjun ${p}meera ${p}priya ${p}zara ${p}raj ${p}kavi`);
|
|
112
|
+
if (targetId === 'claude') {
|
|
113
|
+
log(' Claude may only list Getting Started. Type /noor anyway.');
|
|
114
|
+
}
|
|
115
|
+
|
|
91
116
|
log('');
|
|
92
117
|
log(' Design — wireframes (new screens):');
|
|
93
118
|
log(` ${p}ux-ideator two competing text wireframes + deliberation`);
|
|
@@ -180,6 +205,29 @@ function installMissing(skill, destinations, force) {
|
|
|
180
205
|
return status;
|
|
181
206
|
}
|
|
182
207
|
|
|
208
|
+
function installProjectCommands({ force = false, log = console.log } = {}) {
|
|
209
|
+
const cwd = process.cwd();
|
|
210
|
+
const roots = [
|
|
211
|
+
path.join(cwd, '.claude', 'commands'),
|
|
212
|
+
path.join(cwd, '.cursor', 'commands'),
|
|
213
|
+
];
|
|
214
|
+
const installed = [];
|
|
215
|
+
const skipped = [];
|
|
216
|
+
for (const root of roots) {
|
|
217
|
+
for (const skill of PROJECT_COMMANDS) {
|
|
218
|
+
const result = installFlat(skill, root, force);
|
|
219
|
+
if (result === 'installed') installed.push(`${path.relative(cwd, root)}/${skill}.md`);
|
|
220
|
+
else if (result === 'skipped') skipped.push(skill);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (installed.length > 0) {
|
|
224
|
+
log(`\n✅ Project slash commands → ${path.join(cwd, '.claude/commands')} and .cursor/commands`);
|
|
225
|
+
log(' Type /noor /arjun /ux-ideator in this repo. Restart the IDE if the menu is stale.');
|
|
226
|
+
} else if (skipped.length > 0) {
|
|
227
|
+
log(`\n⏭ Project slash commands already present (use --force to overwrite).`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
183
231
|
function install({ silent = false, force = false, target = 'cursor', showBanner = true } = {}) {
|
|
184
232
|
const log = silent ? () => {} : console.log;
|
|
185
233
|
const warn = silent ? () => {} : console.warn;
|
|
@@ -239,6 +287,8 @@ function install({ silent = false, force = false, target = 'cursor', showBanner
|
|
|
239
287
|
}
|
|
240
288
|
}
|
|
241
289
|
}
|
|
290
|
+
|
|
291
|
+
installProjectCommands({ force, log });
|
|
242
292
|
}
|
|
243
293
|
|
|
244
294
|
function remove({ silent = false, target = 'cursor' } = {}) {
|
|
@@ -287,6 +337,7 @@ module.exports = {
|
|
|
287
337
|
install,
|
|
288
338
|
remove,
|
|
289
339
|
SKILLS,
|
|
340
|
+
PROJECT_COMMANDS,
|
|
290
341
|
TARGET_DIRS,
|
|
291
342
|
TARGETS,
|
|
292
343
|
ALL_TARGET_IDS,
|
package/dist/lib/mcp-server.js
CHANGED
|
@@ -520,70 +520,68 @@ function readSkill(id) {
|
|
|
520
520
|
|
|
521
521
|
// ── MCP config writer ──
|
|
522
522
|
|
|
523
|
+
function mergeMcpServer(configPath) {
|
|
524
|
+
var dir = path.dirname(configPath);
|
|
525
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
526
|
+
var config = {};
|
|
527
|
+
if (fs.existsSync(configPath)) {
|
|
528
|
+
try { config = JSON.parse(fs.readFileSync(configPath, 'utf8')); } catch (e) {}
|
|
529
|
+
}
|
|
530
|
+
if (typeof config !== 'object' || config === null || Array.isArray(config)) config = {};
|
|
531
|
+
config.mcpServers = config.mcpServers || {};
|
|
532
|
+
config.mcpServers['analyzthis_design'] = {
|
|
533
|
+
command: 'npx',
|
|
534
|
+
args: ['analyzthis_design', 'mcp'],
|
|
535
|
+
};
|
|
536
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
537
|
+
return configPath;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
function looksLikeProjectCwd() {
|
|
541
|
+
var cwd = process.cwd();
|
|
542
|
+
return fs.existsSync(path.join(cwd, 'package.json')) || fs.existsSync(path.join(cwd, '.git'));
|
|
543
|
+
}
|
|
544
|
+
|
|
523
545
|
function writeMcpConfig(target) {
|
|
524
|
-
var serverCmd = 'npx';
|
|
525
|
-
var serverArgs = ['analyzthis_design', 'mcp'];
|
|
526
546
|
var home = os.homedir();
|
|
527
547
|
|
|
528
548
|
if (target === 'cursor') {
|
|
529
549
|
var cursorConfigPath = path.join(home, '.cursor', 'mcp.json');
|
|
530
|
-
|
|
531
|
-
if (!fs.existsSync(cursorDir)) fs.mkdirSync(cursorDir, { recursive: true });
|
|
532
|
-
var cursorConfig = {};
|
|
533
|
-
if (fs.existsSync(cursorConfigPath)) {
|
|
534
|
-
try { cursorConfig = JSON.parse(fs.readFileSync(cursorConfigPath, 'utf8')); } catch (e) {}
|
|
535
|
-
}
|
|
536
|
-
cursorConfig.mcpServers = cursorConfig.mcpServers || {};
|
|
537
|
-
cursorConfig.mcpServers['analyzthis_design'] = {
|
|
538
|
-
command: serverCmd,
|
|
539
|
-
args: serverArgs,
|
|
540
|
-
};
|
|
541
|
-
fs.writeFileSync(cursorConfigPath, JSON.stringify(cursorConfig, null, 2));
|
|
550
|
+
mergeMcpServer(cursorConfigPath);
|
|
542
551
|
console.log('Cursor MCP config written to ' + cursorConfigPath);
|
|
543
552
|
console.log('Restart Cursor to activate.\n');
|
|
544
553
|
return true;
|
|
545
554
|
}
|
|
546
555
|
|
|
547
556
|
if (target === 'claude') {
|
|
548
|
-
var
|
|
557
|
+
var claudeDesktopPath;
|
|
549
558
|
if (process.platform === 'darwin') {
|
|
550
|
-
|
|
559
|
+
claudeDesktopPath = path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
|
|
551
560
|
} else if (process.platform === 'win32') {
|
|
552
|
-
|
|
561
|
+
claudeDesktopPath = path.join(home, 'AppData', 'Roaming', 'Claude', 'claude_desktop_config.json');
|
|
553
562
|
} else {
|
|
554
|
-
|
|
563
|
+
claudeDesktopPath = path.join(home, '.config', 'Claude', 'claude_desktop_config.json');
|
|
555
564
|
}
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
565
|
+
mergeMcpServer(claudeDesktopPath);
|
|
566
|
+
console.log('Claude Desktop MCP config written to ' + claudeDesktopPath);
|
|
567
|
+
|
|
568
|
+
var claudeCodePath = path.join(home, '.claude.json');
|
|
569
|
+
mergeMcpServer(claudeCodePath);
|
|
570
|
+
console.log('Claude Code MCP config written to ' + claudeCodePath);
|
|
571
|
+
|
|
572
|
+
if (looksLikeProjectCwd()) {
|
|
573
|
+
var projectMcp = path.join(process.cwd(), '.mcp.json');
|
|
574
|
+
mergeMcpServer(projectMcp);
|
|
575
|
+
console.log('Project MCP config written to ' + projectMcp);
|
|
561
576
|
}
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
command: serverCmd,
|
|
565
|
-
args: serverArgs,
|
|
566
|
-
};
|
|
567
|
-
fs.writeFileSync(claudeConfigPath, JSON.stringify(claudeConfig, null, 2));
|
|
568
|
-
console.log('Claude Desktop MCP config written to ' + claudeConfigPath);
|
|
569
|
-
console.log('Restart Claude Desktop to activate.\n');
|
|
577
|
+
|
|
578
|
+
console.log('Restart Claude Code and Claude Desktop to activate.\n');
|
|
570
579
|
return true;
|
|
571
580
|
}
|
|
572
581
|
|
|
573
582
|
if (target === 'windsurf') {
|
|
574
583
|
var windsurfConfigPath = path.join(home, '.codeium', 'windsurf', 'mcp_config.json');
|
|
575
|
-
|
|
576
|
-
if (!fs.existsSync(windsurfDir)) fs.mkdirSync(windsurfDir, { recursive: true });
|
|
577
|
-
var windsurfConfig = {};
|
|
578
|
-
if (fs.existsSync(windsurfConfigPath)) {
|
|
579
|
-
try { windsurfConfig = JSON.parse(fs.readFileSync(windsurfConfigPath, 'utf8')); } catch (e) {}
|
|
580
|
-
}
|
|
581
|
-
windsurfConfig.mcpServers = windsurfConfig.mcpServers || {};
|
|
582
|
-
windsurfConfig.mcpServers['analyzthis_design'] = {
|
|
583
|
-
command: serverCmd,
|
|
584
|
-
args: serverArgs,
|
|
585
|
-
};
|
|
586
|
-
fs.writeFileSync(windsurfConfigPath, JSON.stringify(windsurfConfig, null, 2));
|
|
584
|
+
mergeMcpServer(windsurfConfigPath);
|
|
587
585
|
console.log('Windsurf MCP config written to ' + windsurfConfigPath);
|
|
588
586
|
console.log('Restart Windsurf to activate.\n');
|
|
589
587
|
return true;
|
|
@@ -593,8 +591,8 @@ function writeMcpConfig(target) {
|
|
|
593
591
|
console.log(JSON.stringify({
|
|
594
592
|
mcpServers: {
|
|
595
593
|
'analyzthis_design': {
|
|
596
|
-
command:
|
|
597
|
-
args:
|
|
594
|
+
command: 'npx',
|
|
595
|
+
args: ['analyzthis_design', 'mcp'],
|
|
598
596
|
}
|
|
599
597
|
}
|
|
600
598
|
}, null, 2));
|