builder-doctor 1.0.19 → 1.0.21

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 CHANGED
@@ -154,6 +154,36 @@ npx builder-doctor install-plugin my-plugin
154
154
 
155
155
  Plugin contents are extracted into the `.builder` root (for example: `skills`, `agents`, `rules`, etc).
156
156
 
157
+ ### mcp
158
+
159
+ Add or remove the Builder MCP server entry in an agent's MCP configuration file.
160
+
161
+ ```bash
162
+ npx builder-doctor mcp add <agent>
163
+ npx builder-doctor mcp remove <agent>
164
+ ```
165
+
166
+ Supported agents and the file each one writes to:
167
+
168
+ | Agent | File |
169
+ | ------------ | ------------------------------------- |
170
+ | `claude` | `~/.claude/settings.local.json` |
171
+ | `cursor` | `~/.cursor/mcp.json` |
172
+ | `copilot` | `.vscode/mcp.json` (project-local) |
173
+ | `code_puppy` | `~/.code_puppy/mcp_servers.json` |
174
+ | _(omitted)_ | `mcp.json` (project-local) |
175
+
176
+ `add` creates the file (and any missing parent directories) if it doesn't exist, and merges the `builder-mcp` entry into it without disturbing other settings. `remove` deletes only the `builder-mcp` entry.
177
+
178
+ ```bash
179
+ npx builder-doctor mcp add claude # ~/.claude/settings.local.json
180
+ npx builder-doctor mcp add cursor # ~/.cursor/mcp.json
181
+ npx builder-doctor mcp add copilot # .vscode/mcp.json
182
+ npx builder-doctor mcp add code_puppy # ~/.code_puppy/mcp_servers.json
183
+ npx builder-doctor mcp add # ./mcp.json
184
+ npx builder-doctor mcp remove claude # remove from Claude
185
+ ```
186
+
157
187
  ## Examples
158
188
 
159
189
  ```bash
@@ -171,5 +201,11 @@ builder-doctor skills --source myorg/myrepo # List availabl
171
201
  BUILDER_SKILLS_SOURCE=myorg/myrepo builder-doctor skills # Use env var as the default source
172
202
  builder-doctor install-plugin my-plugin # Install a plugin into .builder
173
203
  builder-doctor install-plugin my-plugin --source myorg/myrepo # Install a plugin from a custom source
204
+ builder-doctor mcp add claude # Add Builder MCP entry to ~/.claude/settings.local.json
205
+ builder-doctor mcp add cursor # Add Builder MCP entry to ~/.cursor/mcp.json
206
+ builder-doctor mcp add copilot # Add Builder MCP entry to .vscode/mcp.json
207
+ builder-doctor mcp add code_puppy # Add Builder MCP entry to ~/.code_puppy/mcp_servers.json
208
+ builder-doctor mcp add # Create or update a local mcp.json
209
+ builder-doctor mcp remove claude # Remove the Builder MCP entry for Claude
174
210
  builder-doctor --verbose # Run all checks with detailed output
175
211
  ```
package/dist/fetch.d.ts CHANGED
@@ -10,6 +10,8 @@ declare function getAgent(_url?: string): Promise<Dispatcher>;
10
10
  * Uses undici; respects NODE_TLS_REJECT_UNAUTHORIZED for TLS verification.
11
11
  */
12
12
  export declare const safeFetch: (input: string | URL, init?: RequestInit) => ReturnType<typeof globalThis.fetch>;
13
+ export declare function getTlsCertErrorCode(error: unknown): string | undefined;
14
+ export declare function formatTlsCertErrorMessage(code: string): string;
13
15
  export declare const __testing__: {
14
16
  getAgent: typeof getAgent;
15
17
  resetCache: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAGhB,UAAU,EACX,MAAM,QAAQ,CAAC;AAMhB;;;;GAIG;AACH,iBAAe,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiC1D;AAoBD;;;GAGG;AACH,eAAO,MAAM,SAAS,GACpB,OAAO,MAAM,GAAG,GAAG,EACnB,OAAO,WAAW,KACjB,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,CAWpC,CAAC;AAEF,eAAO,MAAM,WAAW;;;CAKvB,CAAC"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAGhB,UAAU,EACX,MAAM,QAAQ,CAAC;AA4ChB;;;;GAIG;AACH,iBAAe,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmC1D;AAoBD;;;GAGG;AACH,eAAO,MAAM,SAAS,GACpB,OAAO,MAAM,GAAG,GAAG,EACnB,OAAO,WAAW,KACjB,UAAU,CAAC,OAAO,UAAU,CAAC,KAAK,CAWpC,CAAC;AAWF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAUtE;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB9D;AAED,eAAO,MAAM,WAAW;;;CAKvB,CAAC"}
package/dist/fetch.js CHANGED
@@ -4,16 +4,50 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.__testing__ = exports.safeFetch = void 0;
7
+ exports.getTlsCertErrorCode = getTlsCertErrorCode;
8
+ exports.formatTlsCertErrorMessage = formatTlsCertErrorMessage;
7
9
  const undici_1 = require("undici");
8
10
  const node_process_1 = __importDefault(require("node:process"));
11
+ const node_tls_1 = __importDefault(require("node:tls"));
9
12
  const package_json_1 = require("../package.json");
10
13
  let _agent;
14
+ let _systemCAsLoaded = false;
15
+ /**
16
+ * Merge the OS trust store into Node's default CA list so that requests trust
17
+ * certificates added at the system level (e.g. corporate root CAs deployed via
18
+ * MDM, Keychain, the Windows cert store, or /etc/ssl/certs).
19
+ *
20
+ * No-op on Node versions that lack tls.getCACertificates / setDefaultCACertificates
21
+ * (added in Node 22.15). Best-effort; failures are swallowed so an unusual
22
+ * system trust store cannot break fetches that would otherwise have worked.
23
+ */
24
+ function ensureSystemCAsLoaded() {
25
+ if (_systemCAsLoaded)
26
+ return;
27
+ _systemCAsLoaded = true;
28
+ const t = node_tls_1.default;
29
+ if (typeof t.getCACertificates !== "function" ||
30
+ typeof t.setDefaultCACertificates !== "function") {
31
+ return;
32
+ }
33
+ try {
34
+ const system = t.getCACertificates("system");
35
+ if (!system || system.length === 0)
36
+ return;
37
+ const defaults = t.getCACertificates("default");
38
+ t.setDefaultCACertificates([...defaults, ...system]);
39
+ }
40
+ catch {
41
+ // best-effort — fall through to whatever default trust Node had
42
+ }
43
+ }
11
44
  /**
12
45
  * Get a dispatcher (Agent or ProxyAgent) for fetch requests.
13
46
  * Respects HTTPS_PROXY, https_proxy, HTTP_PROXY, http_proxy.
14
47
  * When no proxy is set, uses a plain Agent with optional TLS verification control.
15
48
  */
16
49
  async function getAgent(_url) {
50
+ ensureSystemCAsLoaded();
17
51
  const rejectUnauthorized = node_process_1.default.env.NODE_TLS_REJECT_UNAUTHORIZED !== "0";
18
52
  const envProxyUrl = node_process_1.default.env.HTTPS_PROXY ||
19
53
  node_process_1.default.env.https_proxy ||
@@ -74,6 +108,47 @@ const safeFetch = async (input, init) => {
74
108
  });
75
109
  };
76
110
  exports.safeFetch = safeFetch;
111
+ const TLS_CERT_ERROR_CODES = new Set([
112
+ "SELF_SIGNED_CERT_IN_CHAIN",
113
+ "DEPTH_ZERO_SELF_SIGNED_CERT",
114
+ "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
115
+ "UNABLE_TO_VERIFY_LEAF_SIGNATURE",
116
+ "CERT_UNTRUSTED",
117
+ "ERR_TLS_CERT_ALTNAME_INVALID",
118
+ ]);
119
+ function getTlsCertErrorCode(error) {
120
+ let current = error;
121
+ for (let i = 0; i < 8 && current; i += 1) {
122
+ const code = current.code;
123
+ if (typeof code === "string" && TLS_CERT_ERROR_CODES.has(code)) {
124
+ return code;
125
+ }
126
+ current = current.cause;
127
+ }
128
+ return undefined;
129
+ }
130
+ function formatTlsCertErrorMessage(code) {
131
+ return [
132
+ `Network request failed with TLS certificate error: ${code}.`,
133
+ "",
134
+ "This usually means your network is behind a corporate proxy or firewall that",
135
+ "intercepts HTTPS traffic with a custom certificate authority that Node.js does",
136
+ "not trust by default.",
137
+ "",
138
+ "To fix this, try one of the following (in order of preference):",
139
+ " 1. Point Node at your organization's root CA bundle (recommended):",
140
+ " export NODE_EXTRA_CA_CERTS=/path/to/your-org-ca.pem",
141
+ " Ask your IT team for the certificate file if you do not have it.",
142
+ "",
143
+ " 2. If you are behind an HTTP(S) proxy, make sure it is set:",
144
+ " export HTTPS_PROXY=http://your-proxy:port",
145
+ " export HTTP_PROXY=http://your-proxy:port",
146
+ "",
147
+ " 3. As a last resort (insecure, disables TLS verification), re-run with",
148
+ " the --acceptSelfSigned flag, or set:",
149
+ " export NODE_TLS_REJECT_UNAUTHORIZED=0",
150
+ ].join("\n");
151
+ }
77
152
  exports.__testing__ = {
78
153
  getAgent,
79
154
  resetCache: () => {
package/dist/fetch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":";;;;;;AAAA,mCAMgB;AAChB,gEAAmC;AACnC,kDAAwD;AAExD,IAAI,MAA8B,CAAC;AAEnC;;;;GAIG;AACH,KAAK,UAAU,QAAQ,CAAC,IAAa;IACnC,MAAM,kBAAkB,GAAG,sBAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,GAAG,CAAC;IAE5E,MAAM,WAAW,GACf,sBAAO,CAAC,GAAG,CAAC,WAAW;QACvB,sBAAO,CAAC,GAAG,CAAC,WAAW;QACvB,sBAAO,CAAC,GAAG,CAAC,UAAU;QACtB,sBAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAEzB,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,mBAAU,CAAC;gBACtB,GAAG,EAAE,WAAW;gBAChB,OAAO,EAAE;oBACP,kBAAkB;iBACnB;gBACD,UAAU,EAAE;oBACV,kBAAkB;iBACnB;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,cAAK,CAAC;YACjB,OAAO,EAAE;gBACP,kBAAkB;aACnB;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,WAAW,GAA2B;QAC1C,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,YAAY;QACnB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,SAAS;QAClB,GAAG,EAAE,QAAQ;KACd,CAAC;IACF,MAAM,QAAQ,GAAG,WAAW,CAAC,sBAAO,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IAC5D,MAAM,SAAS,GAAG,sBAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,OAAO;QACL,YAAY,EAAE,gBAAgB,QAAQ,GACpC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,EACjC,oBAAoB,sBAAU,EAAE;QAChC,oBAAoB,EAAE,QAAQ;KAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACI,MAAM,SAAS,GAAG,KAAK,EAC5B,KAAmB,EACnB,IAAkB,EACmB,EAAE;IACvC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,IAAA,cAAa,EAAC,KAAK,EAAE;QAC1B,GAAG,IAAI;QACP,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE;YACP,GAAG,IAAI,EAAE,OAAO;YAChB,GAAG,YAAY,EAAE;SAClB;KACF,CAAwC,CAAC;AAC5C,CAAC,CAAC;AAdW,QAAA,SAAS,aAcpB;AAEW,QAAA,WAAW,GAAG;IACzB,QAAQ;IACR,UAAU,EAAE,GAAG,EAAE;QACf,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,8 +6,15 @@ const setup_1 = require("./setup");
6
6
  const env_1 = require("./env");
7
7
  const network_1 = require("./network");
8
8
  const install_1 = require("./install");
9
+ const mcp_1 = require("./mcp");
10
+ const fetch_1 = require("./fetch");
9
11
  const args = process.argv.slice(2);
10
12
  const verbose = args.includes("--verbose");
13
+ const acceptSelfSigned = args.includes("--acceptSelfSigned");
14
+ if (acceptSelfSigned) {
15
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
16
+ console.warn("Warning: --acceptSelfSigned is set. TLS certificate verification is disabled for this run; only use on trusted networks.");
17
+ }
11
18
  const rules = args.includes("rules");
12
19
  const network = args.includes("network");
13
20
  const setup = args.includes("setup");
@@ -25,6 +32,9 @@ if (installSkill) {
25
32
  const installPlugin = args[0] === "install-plugin";
26
33
  const installPluginName = installPlugin ? args[1] : undefined;
27
34
  const skills = args[0] === "skills";
35
+ const mcp = args[0] === "mcp";
36
+ const mcpActionRaw = mcp ? args[1] : undefined;
37
+ const mcpAgent = mcp && args[2] && !args[2].startsWith("--") ? args[2] : undefined;
28
38
  const source = getOptionValue("--source");
29
39
  const agent = getOptionValue("--agent");
30
40
  const all = !rules &&
@@ -34,7 +44,8 @@ const all = !rules &&
34
44
  !showHelp &&
35
45
  !installSkill &&
36
46
  !installPlugin &&
37
- !skills;
47
+ !skills &&
48
+ !mcp;
38
49
  const help = `
39
50
  builder-doctor - A CLI tool for Builder.io diagnostics
40
51
 
@@ -49,12 +60,15 @@ Commands:
49
60
  Use --agent <name> to change the install folder (e.g. github, claude, cursor)
50
61
  skills List available skills
51
62
  install-plugin <plugin-name> Install a plugin from BuilderIO/builder-agent-plugins
63
+ mcp <add|remove> [agent] Add or remove the Builder MCP server entry
64
+ Agents: claude, cursor, copilot, code_puppy. Omit agent to write a local mcp.json.
52
65
  help Show this help message
53
66
 
54
67
  Options:
55
68
  --verbose Show detailed output for each check
56
69
  --source <owner/repo> Override source repository (GitHub owner/repository). Overrides BUILDER_SKILLS_SOURCE
57
70
  --agent <name> Set the target agent folder (e.g. github -> .github, claude -> .claude). Default: .builder
71
+ --acceptSelfSigned Trust self-signed / untrusted TLS certificates for this run (insecure; only use on trusted networks)
58
72
  --help, -h Show this help message
59
73
 
60
74
  Examples:
@@ -72,6 +86,12 @@ Examples:
72
86
  builder-doctor install-skill skill-creator --source myorg/myrepo Install a skill from a custom source
73
87
  builder-doctor install-plugin my-plugin Install a plugin into .builder
74
88
  builder-doctor install-plugin my-plugin --source myorg/myrepo Install a plugin from a custom source
89
+ builder-doctor mcp add claude Add Builder MCP entry to ~/.claude/settings.local.json
90
+ builder-doctor mcp add cursor Add Builder MCP entry to ~/.cursor/mcp.json
91
+ builder-doctor mcp add copilot Add Builder MCP entry to .vscode/mcp.json
92
+ builder-doctor mcp add code_puppy Add Builder MCP entry to ~/.code_puppy/mcp_servers.json
93
+ builder-doctor mcp add Create or update a local mcp.json
94
+ builder-doctor mcp remove claude Remove the Builder MCP entry for Claude
75
95
  builder-doctor --verbose Run rules and network checks with detailed output
76
96
  `;
77
97
  const nonInteractive = !process.stdin.isTTY || !process.stdout.isTTY;
@@ -139,9 +159,29 @@ async function main() {
139
159
  verbose,
140
160
  });
141
161
  }
162
+ if (mcp) {
163
+ if (mcpActionRaw !== "add" && mcpActionRaw !== "remove") {
164
+ console.error("Invalid MCP action. Usage: builder-doctor mcp <add|remove> [agent]");
165
+ process.exit(1);
166
+ }
167
+ await (0, mcp_1.runMcp)({
168
+ action: mcpActionRaw,
169
+ agent: mcpAgent,
170
+ verbose,
171
+ });
172
+ }
142
173
  }
143
174
  catch (error) {
144
- console.error("An error occurred:", error);
175
+ const tlsErrorCode = (0, fetch_1.getTlsCertErrorCode)(error);
176
+ if (tlsErrorCode) {
177
+ console.error((0, fetch_1.formatTlsCertErrorMessage)(tlsErrorCode));
178
+ if (verbose) {
179
+ console.error("\nOriginal error:", error);
180
+ }
181
+ }
182
+ else {
183
+ console.error("An error occurred:", error);
184
+ }
145
185
  process.exit(1);
146
186
  }
147
187
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export type McpAction = "add" | "remove";
2
+ export interface McpOptions {
3
+ action: McpAction;
4
+ agent?: string;
5
+ verbose?: boolean;
6
+ }
7
+ export declare function runMcp(options: McpOptions): Promise<void>;
8
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAaD,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/D"}
package/dist/mcp.js ADDED
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runMcp = runMcp;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_os_1 = require("node:os");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const SERVER_KEY = "builder-mcp";
11
+ const SERVER_COMMAND = "npx";
12
+ const SERVER_ARGS = ["@builder.io/dev-tools@latest", "mcp"];
13
+ async function runMcp(options) {
14
+ const { action, agent, verbose = false } = options;
15
+ const target = resolveTarget(agent);
16
+ if (verbose) {
17
+ console.log(`${action === "add" ? "Adding" : "Removing"} ${SERVER_KEY} ${action === "add" ? "to" : "from"} ${target.filePath}`);
18
+ }
19
+ if (action === "add") {
20
+ addServer(target);
21
+ }
22
+ else {
23
+ removeServer(target);
24
+ }
25
+ }
26
+ function resolveTarget(agent) {
27
+ const standardEntry = {
28
+ command: SERVER_COMMAND,
29
+ args: [...SERVER_ARGS],
30
+ };
31
+ if (!agent) {
32
+ return {
33
+ agentLabel: "local",
34
+ filePath: node_path_1.default.join(process.cwd(), "mcp.json"),
35
+ containerKey: "mcpServers",
36
+ serverEntry: standardEntry,
37
+ };
38
+ }
39
+ switch (agent) {
40
+ case "claude":
41
+ return {
42
+ agentLabel: "Claude",
43
+ filePath: node_path_1.default.join((0, node_os_1.homedir)(), ".claude", "settings.local.json"),
44
+ containerKey: "mcpServers",
45
+ serverEntry: standardEntry,
46
+ };
47
+ case "cursor":
48
+ return {
49
+ agentLabel: "Cursor",
50
+ filePath: node_path_1.default.join((0, node_os_1.homedir)(), ".cursor", "mcp.json"),
51
+ containerKey: "mcpServers",
52
+ serverEntry: standardEntry,
53
+ };
54
+ case "copilot":
55
+ return {
56
+ agentLabel: "Copilot",
57
+ filePath: node_path_1.default.join(process.cwd(), ".vscode", "mcp.json"),
58
+ containerKey: "servers",
59
+ serverEntry: {
60
+ type: "stdio",
61
+ command: SERVER_COMMAND,
62
+ args: [...SERVER_ARGS],
63
+ },
64
+ };
65
+ case "code_puppy":
66
+ return {
67
+ agentLabel: "Code Puppy",
68
+ filePath: node_path_1.default.join((0, node_os_1.homedir)(), ".code_puppy", "mcp_servers.json"),
69
+ containerKey: "mcp_servers",
70
+ serverEntry: {
71
+ type: "stdio",
72
+ command: SERVER_COMMAND,
73
+ args: [...SERVER_ARGS],
74
+ enabled: true,
75
+ },
76
+ };
77
+ default:
78
+ throw new Error(`Unknown MCP agent "${agent}". Supported: claude, cursor, copilot, code_puppy, or omit for a local mcp.json.`);
79
+ }
80
+ }
81
+ function addServer(target) {
82
+ const config = readJsonFile(target.filePath);
83
+ const existingContainer = config[target.containerKey];
84
+ const container = existingContainer && typeof existingContainer === "object" && !Array.isArray(existingContainer)
85
+ ? existingContainer
86
+ : {};
87
+ container[SERVER_KEY] = target.serverEntry;
88
+ config[target.containerKey] = container;
89
+ writeJsonFile(target.filePath, config);
90
+ console.log(`MCP support added for Builder to ${target.agentLabel} in ${target.filePath}`);
91
+ }
92
+ function removeServer(target) {
93
+ if (!(0, node_fs_1.existsSync)(target.filePath)) {
94
+ console.log(`No MCP configuration found for ${target.agentLabel} at ${target.filePath}`);
95
+ return;
96
+ }
97
+ const config = readJsonFile(target.filePath);
98
+ const container = config[target.containerKey];
99
+ if (!container ||
100
+ typeof container !== "object" ||
101
+ Array.isArray(container) ||
102
+ !(SERVER_KEY in container)) {
103
+ console.log(`MCP support for Builder was not present in ${target.filePath}`);
104
+ return;
105
+ }
106
+ delete container[SERVER_KEY];
107
+ writeJsonFile(target.filePath, config);
108
+ console.log(`MCP support removed for Builder from ${target.agentLabel} in ${target.filePath}`);
109
+ }
110
+ function readJsonFile(filePath) {
111
+ if (!(0, node_fs_1.existsSync)(filePath)) {
112
+ return {};
113
+ }
114
+ const raw = (0, node_fs_1.readFileSync)(filePath, "utf8").trim();
115
+ if (!raw) {
116
+ return {};
117
+ }
118
+ try {
119
+ const parsed = JSON.parse(raw);
120
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
121
+ return parsed;
122
+ }
123
+ throw new Error(`Expected a JSON object in ${filePath}`);
124
+ }
125
+ catch (error) {
126
+ const message = error instanceof Error ? error.message : String(error);
127
+ throw new Error(`Failed to parse JSON in ${filePath}: ${message}`);
128
+ }
129
+ }
130
+ function writeJsonFile(filePath, data) {
131
+ (0, node_fs_1.mkdirSync)(node_path_1.default.dirname(filePath), { recursive: true });
132
+ (0, node_fs_1.writeFileSync)(filePath, JSON.stringify(data, null, 2) + "\n", "utf8");
133
+ }
134
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "builder-doctor",
3
- "version": "1.0.19",
4
- "description": "A CLI tool for Builder.io diagnostics",
3
+ "version": "1.0.21",
4
+ "description": "A CLI tool for Builder.io utilities",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
7
  "builder-doctor": "dist/index.js"