@dmsdc-ai/aigentry-deliberation 0.0.36 ā 0.0.38
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/install.js +63 -21
- package/package.json +1 -1
package/install.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* What it does:
|
|
11
11
|
* 1. Copies server files to ~/.local/lib/mcp-deliberation/
|
|
12
12
|
* 2. Installs npm dependencies
|
|
13
|
-
* 3. Registers MCP server
|
|
13
|
+
* 3. Registers MCP server via `claude mcp add` (Claude Code)
|
|
14
14
|
* 4. Registers MCP server in ~/.gemini/settings.json (Gemini CLI)
|
|
15
15
|
* 5. Ready to use ā next Claude Code or Gemini CLI session will auto-load
|
|
16
16
|
* 6. Installs skill file (~/.claude/skills/deliberation-gate/SKILL.md)
|
|
@@ -61,6 +61,15 @@ function log(msg) {
|
|
|
61
61
|
console.log(` ${msg}`);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
function commandExists(cmd) {
|
|
65
|
+
try {
|
|
66
|
+
execSync(IS_WIN ? `where ${cmd}` : `command -v ${cmd}`, { stdio: "pipe" });
|
|
67
|
+
return true;
|
|
68
|
+
} catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
64
73
|
function copyFileIfExists(src, dest) {
|
|
65
74
|
if (fs.existsSync(src)) {
|
|
66
75
|
fs.copyFileSync(src, dest);
|
|
@@ -121,32 +130,55 @@ function install() {
|
|
|
121
130
|
log(" Manual fix: cd ~/.local/lib/mcp-deliberation && npm install");
|
|
122
131
|
}
|
|
123
132
|
|
|
124
|
-
// Step 4: Register MCP server
|
|
133
|
+
// Step 4: Register MCP server (Claude Code)
|
|
125
134
|
log("š§ Registering Claude Code MCP server...");
|
|
126
|
-
const
|
|
127
|
-
|
|
135
|
+
const serverEntryPoint = toForwardSlash(path.join(INSTALL_DIR, "index.js"));
|
|
136
|
+
let claudeRegistered = false;
|
|
128
137
|
|
|
129
|
-
|
|
130
|
-
if (
|
|
138
|
+
// Prefer `claude mcp add` ā this is the only method Claude Code reliably reads
|
|
139
|
+
if (commandExists("claude")) {
|
|
131
140
|
try {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
141
|
+
// Remove existing registration first (ignore errors if not registered)
|
|
142
|
+
try { execSync("claude mcp remove deliberation -s user", { stdio: "pipe" }); } catch { /* ok */ }
|
|
143
|
+
execSync(`claude mcp add deliberation -s user -- node "${serverEntryPoint}"`, {
|
|
144
|
+
stdio: "pipe",
|
|
145
|
+
});
|
|
146
|
+
log(" ā Registered via 'claude mcp add' (user scope)");
|
|
147
|
+
claudeRegistered = true;
|
|
148
|
+
} catch (err) {
|
|
149
|
+
log(` ā ļø 'claude mcp add' failed: ${err.message}`);
|
|
135
150
|
}
|
|
136
151
|
}
|
|
137
152
|
|
|
138
|
-
|
|
153
|
+
// Fallback: write ~/.claude/.mcp.json (legacy, may not be read by Claude Code)
|
|
154
|
+
if (!claudeRegistered) {
|
|
155
|
+
const claudeDir = path.join(HOME, ".claude");
|
|
156
|
+
fs.mkdirSync(claudeDir, { recursive: true });
|
|
139
157
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
158
|
+
let mcpConfig = {};
|
|
159
|
+
if (fs.existsSync(MCP_CONFIG)) {
|
|
160
|
+
try {
|
|
161
|
+
mcpConfig = JSON.parse(fs.readFileSync(MCP_CONFIG, "utf-8"));
|
|
162
|
+
} catch {
|
|
163
|
+
mcpConfig = {};
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (!mcpConfig.mcpServers) mcpConfig.mcpServers = {};
|
|
168
|
+
|
|
169
|
+
const alreadyRegistered = !!mcpConfig.mcpServers.deliberation;
|
|
170
|
+
mcpConfig.mcpServers.deliberation = {
|
|
171
|
+
command: "node",
|
|
172
|
+
args: [serverEntryPoint],
|
|
173
|
+
};
|
|
145
174
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
175
|
+
fs.writeFileSync(MCP_CONFIG, JSON.stringify(mcpConfig, null, 2));
|
|
176
|
+
log(alreadyRegistered
|
|
177
|
+
? " ā Fallback: existing registration updated in .mcp.json"
|
|
178
|
+
: " ā Fallback: registered in .mcp.json");
|
|
179
|
+
log(" ā ļø Claude CLI not found. Run manually if server isn't detected:");
|
|
180
|
+
log(` claude mcp add deliberation -s user -- node "${serverEntryPoint}"`);
|
|
181
|
+
}
|
|
150
182
|
|
|
151
183
|
// Step 5: Register Gemini CLI MCP server
|
|
152
184
|
log("š§ Registering Gemini CLI MCP server...");
|
|
@@ -283,14 +315,24 @@ Skill path: ${SKILL_DEST}
|
|
|
283
315
|
} else if (args.includes("--uninstall") || args.includes("uninstall")) {
|
|
284
316
|
console.log("\nšļø Deliberation MCP Server ā Uninstalling\n");
|
|
285
317
|
|
|
286
|
-
// Remove from Claude MCP
|
|
318
|
+
// Remove from Claude Code MCP registration
|
|
319
|
+
let claudeUnregistered = false;
|
|
320
|
+
if (commandExists("claude")) {
|
|
321
|
+
try {
|
|
322
|
+
execSync("claude mcp remove deliberation -s user", { stdio: "pipe" });
|
|
323
|
+
log("Claude Code MCP server unregistered via 'claude mcp remove'");
|
|
324
|
+
claudeUnregistered = true;
|
|
325
|
+
} catch { /* may not exist */ }
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Also clean up legacy .mcp.json fallback
|
|
287
329
|
if (fs.existsSync(MCP_CONFIG)) {
|
|
288
330
|
try {
|
|
289
331
|
const mcpConfig = JSON.parse(fs.readFileSync(MCP_CONFIG, "utf-8"));
|
|
290
332
|
if (mcpConfig.mcpServers?.deliberation) {
|
|
291
333
|
delete mcpConfig.mcpServers.deliberation;
|
|
292
334
|
fs.writeFileSync(MCP_CONFIG, JSON.stringify(mcpConfig, null, 2));
|
|
293
|
-
log("Claude Code MCP server unregistered");
|
|
335
|
+
if (!claudeUnregistered) log("Claude Code MCP server unregistered from .mcp.json");
|
|
294
336
|
}
|
|
295
337
|
} catch { /* ignore */ }
|
|
296
338
|
}
|
package/package.json
CHANGED