forgecraft-mcp 0.3.0 → 0.5.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.
package/README.md CHANGED
@@ -17,14 +17,10 @@ AI coding assistants work better with clear engineering standards. Most start wi
17
17
  **Supports:** Claude (CLAUDE.md) · Cursor (.cursor/rules/) · GitHub Copilot (.github/copilot-instructions.md) · Windsurf (.windsurfrules) · Cline (.clinerules) · Aider (CONVENTIONS.md)
18
18
 
19
19
  ```bash
20
- claude mcp add forgecraft -- npx -y forgecraft-mcp
20
+ npx forgecraft-mcp setup .
21
21
  ```
22
22
 
23
- Then tell Claude:
24
-
25
- > "Set up this project for production"
26
-
27
- Done. Your AI assistant now has tailored instruction files with SOLID principles, testing standards, architecture patterns, CI/CD guidance, and quality-gate hooks — all matched to your stack.
23
+ That's it. ForgeCraft scans your project, auto-detects your stack, and generates tailored instruction files in seconds.
28
24
 
29
25
  ## `claude init` vs ForgeCraft
30
26
 
@@ -39,54 +35,35 @@ Done. Your AI assistant now has tailored instruction files with SOLID principles
39
35
  | **Quality gates** | None | Pre-commit hooks that enforce standards |
40
36
  | **CI/CD** | None | Pipeline stages, environments, deploy guidance |
41
37
  | **Session continuity** | None | `Status.md` + `forgecraft.yaml` persist context |
42
- | **Drift detection** | None | `refresh_project` detects scope changes |
43
- | **Compliance scoring** | None | `audit_project` scores 0-100 |
38
+ | **Drift detection** | None | `refresh` detects scope changes |
39
+ | **Compliance scoring** | None | `audit` scores 0-100 |
44
40
 
45
41
  ## How It Works
46
42
 
43
+ ```bash
44
+ # First-time setup — auto-detects your stack
45
+ npx forgecraft-mcp setup .
46
+
47
+ # → scans your code → detects [API] + [WEB-REACT]
48
+ # → creates forgecraft.yaml
49
+ # → generates CLAUDE.md, .cursor/rules/, etc.
50
+ # → adds quality-gate hooks
51
+ # → done
47
52
  ```
48
- You: "Set up this project for production"
49
-
50
- Claude calls setup_project → scans your code → detects [API] + [WEB-REACT]
51
- → creates forgecraft.yaml
52
- → generates instruction files for your AI assistant(s)
53
- → adds quality-gate hooks
54
- → done
55
- ```
56
-
57
- ForgeCraft is an [MCP server](https://modelcontextprotocol.io/) — it gives Claude 14 specialized tools. Claude picks the right ones automatically. You just describe what you want in plain English.
58
-
59
- > **Already ran `claude init`?** ForgeCraft's `generate_instructions` can merge with your existing CLAUDE.md (`merge_with_existing: true`), keeping your custom sections while adding production standards.
60
53
 
61
- ## Install
54
+ ForgeCraft is a **setup-time CLI tool**. Run it once to configure your project, then remove it — it has no runtime footprint.
62
55
 
63
- **One line. Takes 10 seconds.**
56
+ optional: add the MCP sentinel to let your AI assistant diagnose and recommend commands:
64
57
 
65
58
  ```bash
66
59
  claude mcp add forgecraft -- npx -y forgecraft-mcp
67
60
  ```
68
61
 
69
- Restart Claude Code. That's it.
70
-
71
- <details>
72
- <summary>Alternative: manual config</summary>
73
-
74
- Add to `.claude/settings.json`:
75
- ```json
76
- {
77
- "mcpServers": {
78
- "forgecraft": {
79
- "command": "npx",
80
- "args": ["-y", "forgecraft-mcp"]
81
- }
82
- }
83
- }
84
- ```
85
- </details>
62
+ The sentinel is a single lightweight tool (~200 tokens) that checks your project state and tells your AI what CLI command to run next. [Remove it](#mcp-sentinel) after initial setup to save tokens.
86
63
 
87
64
  ## What You Get
88
65
 
89
- After `setup_project`, your project has:
66
+ After `npx forgecraft-mcp setup`, your project has:
90
67
 
91
68
  ```
92
69
  your-project/
@@ -164,24 +141,74 @@ tags: [UNIVERSAL, API]
164
141
  tier: recommended
165
142
  ```
166
143
 
167
- ## All 14 Tools
168
-
169
- | Tool | Purpose |
170
- |------|---------|
171
- | `setup_project` | **Start here.** Analyze → classify → configure → generate. |
172
- | `refresh_project` | Re-scan after changes. Detects new tags, updates config. |
173
- | `classify_project` | Analyze code to suggest tags |
174
- | `scaffold_project` | Generate full project structure |
175
- | `generate_instructions` | Create instruction files for any AI assistant |
176
- | `audit_project` | Score compliance (0-100). Run in CI. |
177
- | `review_project` | Structured review checklist |
178
- | `convert_existing` | Phased migration plan for legacy code |
179
- | `add_hook` | Add quality-gate hooks |
180
- | `add_module` | Scaffold a feature module |
181
- | `configure_mcp` | Discover & configure recommended MCP servers |
182
- | `get_nfr_template` | NFR sections for tech specs |
183
- | `list_tags` | Show all available tags |
184
- | `list_hooks` | Show hooks, filterable by tag |
144
+ ## CLI Commands
145
+
146
+ ```bash
147
+ npx forgecraft-mcp <command> [dir] [flags]
148
+ ```
149
+
150
+ | Command | Purpose |
151
+ |---------|--------|
152
+ | `setup <dir>` | **Start here.** Analyze → auto-detect stack → generate instruction files + hooks |
153
+ | `refresh <dir>` | Re-scan after project changes. Detects new tags, shows before/after diff. |
154
+ | `refresh <dir> --apply` | Apply the refresh (default is preview-only) |
155
+ | `audit <dir>` | Score compliance (0-100). Reads tags from `forgecraft.yaml`. |
156
+ | `scaffold <dir> --tags ...` | Generate full folder structure + instruction files |
157
+ | `review [dir] --tags ...` | Structured code review checklist (4 dimensions) |
158
+ | `list tags` | Show all 24 available tags |
159
+ | `list hooks --tags ...` | Show quality-gate hooks for given tags |
160
+ | `list skills --tags ...` | Show skill files for given tags |
161
+ | `classify [dir]` | Analyze code to suggest tags |
162
+ | `generate <dir>` | Regenerate instruction files only |
163
+ | `convert <dir>` | Phased migration plan for legacy code |
164
+ | `add-hook <name> <dir>` | Add a quality-gate hook |
165
+ | `add-module <name> <dir>` | Scaffold a feature module |
166
+
167
+ ### Common flags
168
+
169
+ ```
170
+ --tags UNIVERSAL API Project classification tags (or read from forgecraft.yaml)
171
+ --tier core|recommended Content depth (default: recommended)
172
+ --targets claude cursor AI assistant targets (default: claude)
173
+ --dry-run Preview without writing files
174
+ --apply Apply changes (for refresh)
175
+ --language typescript typescript | python (default: typescript)
176
+ --scope focused comprehensive | focused (for review)
177
+ ```
178
+
179
+ ## MCP Sentinel
180
+
181
+ Optionally add the ForgeCraft MCP sentinel to let your AI assistant diagnose your project and suggest the right CLI command:
182
+
183
+ ```bash
184
+ claude mcp add forgecraft -- npx -y forgecraft-mcp
185
+ ```
186
+
187
+ The sentinel is a **single minimal tool** (~200 tokens per request, vs ~1,500 for a full MCP tool suite). It checks whether `forgecraft.yaml`, `CLAUDE.md`, and `.claude/hooks` exist, then returns targeted CLI commands to run.
188
+
189
+ **Recommended workflow:**
190
+ 1. Add the sentinel temporarily
191
+ 2. Let Claude run `npx forgecraft-mcp setup .`
192
+ 3. Remove the sentinel: `claude mcp remove forgecraft`
193
+ 4. Re-add it when you need to refresh or audit
194
+
195
+ <details>
196
+ <summary>Manual MCP config</summary>
197
+
198
+ Add to `.claude/settings.json`:
199
+ ```json
200
+ {
201
+ "mcpServers": {
202
+ "forgecraft": {
203
+ "command": "npx",
204
+ "args": ["-y", "forgecraft-mcp"]
205
+ }
206
+ }
207
+ }
208
+ ```
209
+ </details>
210
+
211
+ > **Already ran `claude init`?** Use `npx forgecraft-mcp generate . --merge` to merge with your existing CLAUDE.md, keeping your custom sections while adding production standards.
185
212
 
186
213
  ## Configuration
187
214
 
@@ -227,7 +254,14 @@ Score: 72/100 Grade: C
227
254
 
228
255
  ### Refresh (project scope changed?)
229
256
 
230
- Tell Claude *"refresh this project"* — it re-scans, suggests new tags, shows before/after impact, and updates everything on approval.
257
+ ```bash
258
+ npx forgecraft-mcp refresh . --apply
259
+ ```
260
+
261
+ Or in preview mode first (default):
262
+ ```bash
263
+ npx forgecraft-mcp refresh . # shows before/after diff without writing
264
+ ```
231
265
 
232
266
  ## Contributing
233
267
 
@@ -247,7 +281,7 @@ PRs welcome. See [`templates/universal/`](templates/universal/) for the format.
247
281
 
248
282
  ### MCP Server Discovery
249
283
 
250
- `configure_mcp` dynamically discovers recommended MCP servers matching your project tags. Servers are curated in `mcp-servers.yaml` per tag — community-contributable via PRs.
284
+ `npx forgecraft-mcp configure-mcp` dynamically discovers recommended MCP servers matching your project tags. Servers are curated in `mcp-servers.yaml` per tag — community-contributable via PRs.
251
285
 
252
286
  Built-in recommendations include Context7 (docs), Playwright (testing), Chrome DevTools (debugging), Stripe (fintech), Docker/K8s (infra), and more across all 24 tags.
253
287
 
@@ -265,7 +299,7 @@ git clone https://github.com/jghiringhelli/forgecraft-mcp.git
265
299
  cd forgecraft-mcp
266
300
  npm install
267
301
  npm run build
268
- npm test # 128 tests, 10 suites
302
+ npm test # 229 tests, 16 suites
269
303
  ```
270
304
 
271
305
  ## License
package/dist/cli.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * CLI mode for ForgeCraft.
3
+ *
4
+ * Handles `npx forgecraft-mcp <command> [args]` invocations.
5
+ * Each subcommand maps directly to an existing handler function.
6
+ * Returns `true` when a command is handled so the caller skips MCP server startup.
7
+ */
8
+ /**
9
+ * Run CLI mode. Returns `true` when a command was handled, `false` to fall
10
+ * through to MCP server startup.
11
+ *
12
+ * @param argv - Raw process.argv (will be sliced from index 2)
13
+ */
14
+ export declare function runCli(argv: string[]): Promise<boolean>;
15
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkTH;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAuC7D"}
package/dist/cli.js ADDED
@@ -0,0 +1,345 @@
1
+ /**
2
+ * CLI mode for ForgeCraft.
3
+ *
4
+ * Handles `npx forgecraft-mcp <command> [args]` invocations.
5
+ * Each subcommand maps directly to an existing handler function.
6
+ * Returns `true` when a command is handled so the caller skips MCP server startup.
7
+ */
8
+ import { resolve } from "node:path";
9
+ import { loadUserOverrides } from "./registry/loader.js";
10
+ import { setupProjectHandler } from "./tools/setup-project.js";
11
+ import { refreshProjectHandler } from "./tools/refresh-project.js";
12
+ import { auditProjectHandler } from "./tools/audit.js";
13
+ import { scaffoldProjectHandler } from "./tools/scaffold.js";
14
+ import { reviewProjectHandler } from "./tools/review.js";
15
+ import { listTagsHandler, listHooksHandler, listSkillsHandler } from "./tools/list.js";
16
+ import { classifyProjectHandler } from "./tools/classify.js";
17
+ import { generateInstructionsHandler } from "./tools/generate-claude-md.js";
18
+ import { convertExistingHandler } from "./tools/convert.js";
19
+ import { addHookHandler } from "./tools/add-hook.js";
20
+ import { addModuleHandler } from "./tools/add-module.js";
21
+ /**
22
+ * Minimal argv parser — no external dependencies.
23
+ * `--flag val1 val2` → `flags["flag"] = ["val1", "val2"]`
24
+ * `--flag` alone → `flags["flag"] = true`
25
+ * `--no-flag` → `flags["flag"] = false`
26
+ */
27
+ function parseCliArgs(argv) {
28
+ const [command = "serve", ...rest] = argv;
29
+ const positional = [];
30
+ const flags = {};
31
+ let i = 0;
32
+ while (i < rest.length) {
33
+ const arg = rest[i];
34
+ if (arg.startsWith("--no-")) {
35
+ flags[arg.slice(5)] = false;
36
+ i++;
37
+ }
38
+ else if (arg.startsWith("--")) {
39
+ const key = arg.slice(2);
40
+ const values = [];
41
+ i++;
42
+ while (i < rest.length && !rest[i].startsWith("--")) {
43
+ values.push(rest[i]);
44
+ i++;
45
+ }
46
+ flags[key] = values.length === 0 ? true : values;
47
+ }
48
+ else {
49
+ positional.push(arg);
50
+ i++;
51
+ }
52
+ }
53
+ return { command, positional, flags };
54
+ }
55
+ /** Extract first value of an array flag, or undefined. */
56
+ function str(flags, key) {
57
+ const v = flags[key];
58
+ return Array.isArray(v) ? v[0] : undefined;
59
+ }
60
+ /** Extract array flag values, or undefined if absent/empty. */
61
+ function arr(flags, key) {
62
+ const v = flags[key];
63
+ return Array.isArray(v) && v.length > 0 ? v : undefined;
64
+ }
65
+ /** Extract boolean flag, falling back to a default. */
66
+ function bool(flags, key, defaultVal) {
67
+ const v = flags[key];
68
+ return typeof v === "boolean" ? v : defaultVal;
69
+ }
70
+ // ── Config Resolution ────────────────────────────────────────────────
71
+ /**
72
+ * Resolve tags from explicit flags or fall back to forgecraft.yaml.
73
+ *
74
+ * @param dir - Project directory to read config from
75
+ * @param flagTags - Explicitly provided tags from --tags flag
76
+ * @returns Resolved tags, or undefined if none found
77
+ */
78
+ function resolveTagsFromConfig(dir, flagTags) {
79
+ if (flagTags && flagTags.length > 0)
80
+ return flagTags;
81
+ const config = loadUserOverrides(resolve(dir));
82
+ return config?.tags ?? undefined;
83
+ }
84
+ // ── Output ───────────────────────────────────────────────────────────
85
+ /** Extract text from MCP-style handler result and print to stdout. */
86
+ function printResult(result) {
87
+ console.log(result.content[0]?.text ?? "");
88
+ }
89
+ // ── Commands ─────────────────────────────────────────────────────────
90
+ async function cmdSetup(pos, flags) {
91
+ const projectDir = resolve(pos[0] ?? ".");
92
+ const result = await setupProjectHandler({
93
+ project_dir: projectDir,
94
+ project_name: str(flags, "name"),
95
+ description: str(flags, "description"),
96
+ tier: str(flags, "tier") ?? "recommended",
97
+ tags: arr(flags, "tags"),
98
+ dry_run: bool(flags, "dry-run", false),
99
+ output_targets: arr(flags, "targets") ?? ["claude"],
100
+ });
101
+ printResult(result);
102
+ }
103
+ async function cmdRefresh(pos, flags) {
104
+ const projectDir = resolve(pos[0] ?? ".");
105
+ const result = await refreshProjectHandler({
106
+ project_dir: projectDir,
107
+ apply: bool(flags, "apply", false),
108
+ tier: str(flags, "tier"),
109
+ add_tags: arr(flags, "add-tags"),
110
+ remove_tags: arr(flags, "remove-tags"),
111
+ output_targets: arr(flags, "targets"),
112
+ });
113
+ printResult(result);
114
+ }
115
+ async function cmdAudit(pos, flags) {
116
+ const projectDir = resolve(pos[0] ?? ".");
117
+ const tags = resolveTagsFromConfig(projectDir, arr(flags, "tags"));
118
+ if (!tags || tags.length === 0) {
119
+ console.error("Error: --tags required (or add forgecraft.yaml with tags)");
120
+ process.exit(1);
121
+ }
122
+ const result = await auditProjectHandler({
123
+ tags,
124
+ project_dir: projectDir,
125
+ include_anti_patterns: bool(flags, "anti-patterns", true),
126
+ });
127
+ printResult(result);
128
+ }
129
+ async function cmdScaffold(pos, flags) {
130
+ const projectDir = resolve(pos[0] ?? ".");
131
+ const tags = resolveTagsFromConfig(projectDir, arr(flags, "tags"));
132
+ if (!tags || tags.length === 0) {
133
+ console.error("Error: --tags required (or add forgecraft.yaml with tags)");
134
+ process.exit(1);
135
+ }
136
+ const result = await scaffoldProjectHandler({
137
+ tags,
138
+ project_dir: projectDir,
139
+ project_name: str(flags, "name") ?? "My Project",
140
+ language: str(flags, "language") ?? "typescript",
141
+ dry_run: bool(flags, "dry-run", false),
142
+ force: bool(flags, "force", false),
143
+ output_targets: arr(flags, "targets") ?? ["claude"],
144
+ });
145
+ printResult(result);
146
+ }
147
+ async function cmdReview(pos, flags) {
148
+ const projectDir = pos[0] ? resolve(pos[0]) : process.cwd();
149
+ const tags = resolveTagsFromConfig(projectDir, arr(flags, "tags"));
150
+ if (!tags || tags.length === 0) {
151
+ console.error("Error: --tags required (or add forgecraft.yaml with tags)");
152
+ process.exit(1);
153
+ }
154
+ const result = await reviewProjectHandler({
155
+ tags,
156
+ scope: str(flags, "scope") ?? "comprehensive",
157
+ });
158
+ printResult(result);
159
+ }
160
+ async function cmdList(pos, flags) {
161
+ const resource = pos[0] ?? "tags";
162
+ const filterTags = arr(flags, "tags");
163
+ if (resource === "hooks") {
164
+ printResult(await listHooksHandler({ tags: filterTags }));
165
+ }
166
+ else if (resource === "skills") {
167
+ printResult(await listSkillsHandler({ tags: filterTags }));
168
+ }
169
+ else {
170
+ printResult(await listTagsHandler());
171
+ }
172
+ }
173
+ async function cmdClassify(pos, flags) {
174
+ const result = await classifyProjectHandler({
175
+ project_dir: pos[0] ? resolve(pos[0]) : undefined,
176
+ description: str(flags, "description"),
177
+ });
178
+ printResult(result);
179
+ }
180
+ async function cmdGenerate(pos, flags) {
181
+ const projectDir = resolve(pos[0] ?? ".");
182
+ const tags = resolveTagsFromConfig(projectDir, arr(flags, "tags"));
183
+ if (!tags || tags.length === 0) {
184
+ console.error("Error: --tags required (or add forgecraft.yaml with tags)");
185
+ process.exit(1);
186
+ }
187
+ const result = await generateInstructionsHandler({
188
+ tags,
189
+ project_dir: projectDir,
190
+ project_name: str(flags, "name") ?? "My Project",
191
+ output_targets: arr(flags, "targets") ?? ["claude"],
192
+ merge_with_existing: bool(flags, "merge", true),
193
+ });
194
+ printResult(result);
195
+ }
196
+ async function cmdConvert(pos, flags) {
197
+ const projectDir = resolve(pos[0] ?? ".");
198
+ const tags = resolveTagsFromConfig(projectDir, arr(flags, "tags"));
199
+ if (!tags || tags.length === 0) {
200
+ console.error("Error: --tags required (or add forgecraft.yaml with tags)");
201
+ process.exit(1);
202
+ }
203
+ const result = await convertExistingHandler({
204
+ tags,
205
+ project_dir: projectDir,
206
+ scan_depth: str(flags, "scan-depth") ?? "quick",
207
+ });
208
+ printResult(result);
209
+ }
210
+ async function cmdAddHook(pos, flags) {
211
+ const hookName = pos[0];
212
+ const projectDir = resolve(pos[1] ?? ".");
213
+ if (!hookName) {
214
+ console.error("Error: hook name required — npx forgecraft-mcp add-hook <name> <dir>");
215
+ process.exit(1);
216
+ }
217
+ const result = await addHookHandler({
218
+ hook: hookName,
219
+ project_dir: projectDir,
220
+ tag: str(flags, "tag"),
221
+ });
222
+ printResult(result);
223
+ }
224
+ async function cmdAddModule(pos, flags) {
225
+ const moduleName = pos[0];
226
+ const projectDir = resolve(pos[1] ?? ".");
227
+ if (!moduleName) {
228
+ console.error("Error: module name required — npx forgecraft-mcp add-module <name> <dir>");
229
+ process.exit(1);
230
+ }
231
+ const result = await addModuleHandler({
232
+ module_name: moduleName,
233
+ project_dir: projectDir,
234
+ tags: arr(flags, "tags") ?? ["UNIVERSAL"],
235
+ language: str(flags, "language") ?? "typescript",
236
+ });
237
+ printResult(result);
238
+ }
239
+ // ── Help ─────────────────────────────────────────────────────────────
240
+ function showHelp() {
241
+ console.log(`
242
+ ForgeCraft MCP — engineering standards for AI coding assistants
243
+
244
+ USAGE
245
+ npx forgecraft-mcp <command> [arguments] [flags]
246
+ npx forgecraft-mcp serve (default — starts MCP server)
247
+
248
+ COMMANDS
249
+ setup <dir> First-time project setup (auto-detects stack)
250
+ refresh <dir> Re-sync instruction files after project changes
251
+ audit <dir> Check project against configured standards
252
+ scaffold <dir> Generate project structure and instruction files
253
+ review [dir] Generate code review checklist
254
+ list [tags|hooks|skills] Discover available resources
255
+ classify [dir] Suggest tags for a project
256
+ generate <dir> Generate instruction files only
257
+ convert <dir> Generate migration plan
258
+ add-hook <name> <dir> Install a quality-gate hook
259
+ add-module <name> <dir> Scaffold a feature module
260
+
261
+ FLAGS (vary by command)
262
+ --tags <tags...> Project classification tags (or read from forgecraft.yaml)
263
+ --tier <tier> Content depth: core | recommended | optional
264
+ --targets <targets...> AI assistant targets: claude cursor copilot windsurf cline aider
265
+ --name <name> Project name
266
+ --description <text> Project description for tag detection
267
+ --dry-run Preview without writing files
268
+ --apply Apply changes (for refresh, default is preview)
269
+ --add-tags <tags...> Add tags during refresh
270
+ --remove-tags <tags...> Remove tags during refresh
271
+ --no-anti-patterns Skip anti-pattern scanning (for audit)
272
+ --language <lang> typescript | python (default: typescript)
273
+ --scope <scope> comprehensive | focused (for review)
274
+ --force Overwrite existing files
275
+ --tag <tag> Single tag filter (for add-hook)
276
+ `);
277
+ }
278
+ // ── Entry Point ──────────────────────────────────────────────────────
279
+ /**
280
+ * Run CLI mode. Returns `true` when a command was handled, `false` to fall
281
+ * through to MCP server startup.
282
+ *
283
+ * @param argv - Raw process.argv (will be sliced from index 2)
284
+ */
285
+ export async function runCli(argv) {
286
+ const args = argv.slice(2);
287
+ if (args.length === 0)
288
+ return false; // no args → start MCP server
289
+ // Help flag at any position
290
+ if (args.includes("--help") || args.includes("-h")) {
291
+ showHelp();
292
+ return true;
293
+ }
294
+ const { command, positional, flags } = parseCliArgs(args);
295
+ if (command === "serve")
296
+ return false; // explicit serve → MCP server
297
+ try {
298
+ switch (command) {
299
+ case "setup":
300
+ await cmdSetup(positional, flags);
301
+ break;
302
+ case "refresh":
303
+ await cmdRefresh(positional, flags);
304
+ break;
305
+ case "audit":
306
+ await cmdAudit(positional, flags);
307
+ break;
308
+ case "scaffold":
309
+ await cmdScaffold(positional, flags);
310
+ break;
311
+ case "review":
312
+ await cmdReview(positional, flags);
313
+ break;
314
+ case "list":
315
+ await cmdList(positional, flags);
316
+ break;
317
+ case "classify":
318
+ await cmdClassify(positional, flags);
319
+ break;
320
+ case "generate":
321
+ await cmdGenerate(positional, flags);
322
+ break;
323
+ case "convert":
324
+ await cmdConvert(positional, flags);
325
+ break;
326
+ case "add-hook":
327
+ await cmdAddHook(positional, flags);
328
+ break;
329
+ case "add-module":
330
+ await cmdAddModule(positional, flags);
331
+ break;
332
+ default:
333
+ console.error(`Unknown command: ${command}`);
334
+ showHelp();
335
+ process.exit(1);
336
+ }
337
+ }
338
+ catch (err) {
339
+ const message = err instanceof Error ? err.message : String(err);
340
+ console.error(`Error: ${message}`);
341
+ process.exit(1);
342
+ }
343
+ return true;
344
+ }
345
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * ForgeCraft MCP Server — Entry Point.
3
+ * ForgeCraft — Entry Point.
4
4
  *
5
- * Registers all tools and starts the MCP server over stdio transport.
6
- * This is the binary entry point run via `npx forgecraft-mcp`.
5
+ * Dual-mode binary: runs as a CLI tool when subcommands are provided,
6
+ * or starts the MCP server in stdio mode when invoked without subcommands.
7
+ *
8
+ * CLI usage: npx forgecraft-mcp setup .
9
+ * MCP usage: npx forgecraft-mcp (or: npx forgecraft-mcp serve)
7
10
  */
8
11
  export {};
9
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}