forgecraft-mcp 0.2.0 → 0.3.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 (110) hide show
  1. package/README.md +25 -5
  2. package/dist/analyzers/language-detector.d.ts +17 -0
  3. package/dist/analyzers/language-detector.d.ts.map +1 -0
  4. package/dist/analyzers/language-detector.js +89 -0
  5. package/dist/analyzers/language-detector.js.map +1 -0
  6. package/dist/analyzers/package-json.d.ts.map +1 -1
  7. package/dist/analyzers/package-json.js +5 -5
  8. package/dist/analyzers/package-json.js.map +1 -1
  9. package/dist/analyzers/project-context.d.ts +23 -0
  10. package/dist/analyzers/project-context.d.ts.map +1 -0
  11. package/dist/analyzers/project-context.js +181 -0
  12. package/dist/analyzers/project-context.js.map +1 -0
  13. package/dist/index.js +6 -3
  14. package/dist/index.js.map +1 -1
  15. package/dist/registry/composer.d.ts +3 -1
  16. package/dist/registry/composer.d.ts.map +1 -1
  17. package/dist/registry/composer.js +28 -0
  18. package/dist/registry/composer.js.map +1 -1
  19. package/dist/registry/loader.d.ts.map +1 -1
  20. package/dist/registry/loader.js +65 -1
  21. package/dist/registry/loader.js.map +1 -1
  22. package/dist/registry/mcp-discovery.d.ts +82 -0
  23. package/dist/registry/mcp-discovery.d.ts.map +1 -0
  24. package/dist/registry/mcp-discovery.js +203 -0
  25. package/dist/registry/mcp-discovery.js.map +1 -0
  26. package/dist/registry/renderer.d.ts +19 -2
  27. package/dist/registry/renderer.d.ts.map +1 -1
  28. package/dist/registry/renderer.js +64 -2
  29. package/dist/registry/renderer.js.map +1 -1
  30. package/dist/shared/errors/index.d.ts +4 -0
  31. package/dist/shared/errors/index.d.ts.map +1 -1
  32. package/dist/shared/errors/index.js +6 -0
  33. package/dist/shared/errors/index.js.map +1 -1
  34. package/dist/shared/filesystem.d.ts +45 -0
  35. package/dist/shared/filesystem.d.ts.map +1 -0
  36. package/dist/shared/filesystem.js +122 -0
  37. package/dist/shared/filesystem.js.map +1 -0
  38. package/dist/shared/types.d.ts +92 -1
  39. package/dist/shared/types.d.ts.map +1 -1
  40. package/dist/shared/types.js +6 -0
  41. package/dist/shared/types.js.map +1 -1
  42. package/dist/tools/configure-mcp.d.ts +24 -0
  43. package/dist/tools/configure-mcp.d.ts.map +1 -1
  44. package/dist/tools/configure-mcp.js +123 -24
  45. package/dist/tools/configure-mcp.js.map +1 -1
  46. package/dist/tools/generate-claude-md.d.ts +1 -0
  47. package/dist/tools/generate-claude-md.d.ts.map +1 -1
  48. package/dist/tools/generate-claude-md.js +23 -57
  49. package/dist/tools/generate-claude-md.js.map +1 -1
  50. package/dist/tools/get-reference.d.ts +28 -0
  51. package/dist/tools/get-reference.d.ts.map +1 -0
  52. package/dist/tools/get-reference.js +63 -0
  53. package/dist/tools/get-reference.js.map +1 -0
  54. package/dist/tools/list.d.ts +18 -2
  55. package/dist/tools/list.d.ts.map +1 -1
  56. package/dist/tools/list.js +74 -2
  57. package/dist/tools/list.js.map +1 -1
  58. package/dist/tools/refresh-project.d.ts.map +1 -1
  59. package/dist/tools/refresh-project.js +8 -10
  60. package/dist/tools/refresh-project.js.map +1 -1
  61. package/dist/tools/scaffold.d.ts +4 -0
  62. package/dist/tools/scaffold.d.ts.map +1 -1
  63. package/dist/tools/scaffold.js +58 -31
  64. package/dist/tools/scaffold.js.map +1 -1
  65. package/dist/tools/setup-project.d.ts.map +1 -1
  66. package/dist/tools/setup-project.js +5 -1
  67. package/dist/tools/setup-project.js.map +1 -1
  68. package/package.json +7 -3
  69. package/templates/analytics/mcp-servers.yaml +11 -0
  70. package/templates/api/mcp-servers.yaml +13 -0
  71. package/templates/api/skills.yaml +54 -0
  72. package/templates/cli/mcp-servers.yaml +11 -0
  73. package/templates/data-lineage/instructions.yaml +28 -0
  74. package/templates/data-lineage/mcp-servers.yaml +22 -0
  75. package/templates/data-pipeline/mcp-servers.yaml +13 -0
  76. package/templates/data-pipeline/skills.yaml +56 -0
  77. package/templates/fintech/mcp-servers.yaml +13 -0
  78. package/templates/fintech/skills.yaml +35 -0
  79. package/templates/game/mcp-servers.yaml +11 -0
  80. package/templates/healthcare/mcp-servers.yaml +13 -0
  81. package/templates/healthcare/skills.yaml +35 -0
  82. package/templates/hipaa/instructions.yaml +41 -0
  83. package/templates/hipaa/mcp-servers.yaml +13 -0
  84. package/templates/hipaa/skills.yaml +39 -0
  85. package/templates/infra/mcp-servers.yaml +20 -0
  86. package/templates/library/mcp-servers.yaml +20 -0
  87. package/templates/medallion-architecture/instructions.yaml +41 -0
  88. package/templates/medallion-architecture/mcp-servers.yaml +22 -0
  89. package/templates/ml/mcp-servers.yaml +11 -0
  90. package/templates/mobile/mcp-servers.yaml +11 -0
  91. package/templates/observability-xray/instructions.yaml +40 -0
  92. package/templates/observability-xray/mcp-servers.yaml +15 -0
  93. package/templates/realtime/mcp-servers.yaml +13 -0
  94. package/templates/soc2/instructions.yaml +41 -0
  95. package/templates/soc2/mcp-servers.yaml +24 -0
  96. package/templates/social/mcp-servers.yaml +24 -0
  97. package/templates/state-machine/mcp-servers.yaml +11 -0
  98. package/templates/universal/hooks.yaml +63 -0
  99. package/templates/universal/instructions.yaml +41 -118
  100. package/templates/universal/mcp-servers.yaml +38 -0
  101. package/templates/universal/nfr.yaml +1 -1
  102. package/templates/universal/reference.yaml +111 -0
  103. package/templates/universal/review.yaml +2 -2
  104. package/templates/universal/skills.yaml +106 -0
  105. package/templates/web-react/mcp-servers.yaml +20 -0
  106. package/templates/web-react/skills.yaml +56 -0
  107. package/templates/web-static/mcp-servers.yaml +20 -0
  108. package/templates/web3/mcp-servers.yaml +11 -0
  109. package/templates/zero-trust/instructions.yaml +41 -0
  110. package/templates/zero-trust/mcp-servers.yaml +15 -0
package/README.md CHANGED
@@ -116,7 +116,7 @@ This is the core value. Assembled from curated blocks covering:
116
116
 
117
117
  Every block is sourced from established engineering literature (Martin, Evans, Wiggins) and adapted for AI-assisted development.
118
118
 
119
- ## 18 Tags — Pick What Fits
119
+ ## 24 Tags — Pick What Fits
120
120
 
121
121
  Tags are domain classifiers. ForgeCraft auto-detects them from your code, or you choose manually. Combine freely — blocks merge without conflicts.
122
122
 
@@ -140,6 +140,12 @@ Tags are domain classifiers. ForgeCraft auto-detects them from your code, or you
140
140
  | `ANALYTICS` | Event tracking, dashboards, data warehousing |
141
141
  | `STATE-MACHINE` | Transitions, guards, event-driven workflows |
142
142
  | `WEB3` | Smart contracts, gas optimization, wallet security |
143
+ | `HIPAA` | PII masking, encryption checks, audit logging |
144
+ | `SOC2` | Access control, change management, incident response |
145
+ | `DATA-LINEAGE` | 100% field coverage, lineage tracking decorators |
146
+ | `OBSERVABILITY-XRAY` | Auto X-Ray instrumentation for Lambdas |
147
+ | `MEDALLION-ARCHITECTURE` | Bronze=immutable, Silver=validated, Gold=aggregated |
148
+ | `ZERO-TRUST` | Deny-by-default IAM, explicit allow rules |
143
149
 
144
150
  ## Content Tiers
145
151
 
@@ -172,14 +178,14 @@ tier: recommended
172
178
  | `convert_existing` | Phased migration plan for legacy code |
173
179
  | `add_hook` | Add quality-gate hooks |
174
180
  | `add_module` | Scaffold a feature module |
175
- | `configure_mcp` | Generate `.claude/settings.json` |
181
+ | `configure_mcp` | Discover & configure recommended MCP servers |
176
182
  | `get_nfr_template` | NFR sections for tech specs |
177
183
  | `list_tags` | Show all available tags |
178
184
  | `list_hooks` | Show hooks, filterable by tag |
179
185
 
180
186
  ## Configuration
181
187
 
182
- ### Fine-tune what Claude sees
188
+ ### Fine-tune what your AI assistant sees
183
189
 
184
190
  ```yaml
185
191
  # forgecraft.yaml
@@ -233,11 +239,25 @@ templates/your-tag/
233
239
  ├── structure.yaml # Folder structure
234
240
  ├── nfr.yaml # Non-functional requirements
235
241
  ├── hooks.yaml # Quality gate scripts
236
- └── review.yaml # Code review checklists
242
+ ├── review.yaml # Code review checklists
243
+ └── mcp-servers.yaml # Recommended MCP servers for this tag
237
244
  ```
238
245
 
239
246
  PRs welcome. See [`templates/universal/`](templates/universal/) for the format.
240
247
 
248
+ ### MCP Server Discovery
249
+
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.
251
+
252
+ Built-in recommendations include Context7 (docs), Playwright (testing), Chrome DevTools (debugging), Stripe (fintech), Docker/K8s (infra), and more across all 24 tags.
253
+
254
+ Optionally fetch from a remote registry at setup time:
255
+ ```yaml
256
+ # In forgecraft.yaml or via tool parameter
257
+ include_remote: true
258
+ remote_registry_url: https://your-org.com/mcp-registry.json
259
+ ```
260
+
241
261
  ## Development
242
262
 
243
263
  ```bash
@@ -245,7 +265,7 @@ git clone https://github.com/jghiringhelli/forgecraft-mcp.git
245
265
  cd forgecraft-mcp
246
266
  npm install
247
267
  npm run build
248
- npm test # 111 tests, 9 suites
268
+ npm test # 128 tests, 10 suites
249
269
  ```
250
270
 
251
271
  ## License
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Language detector.
3
+ *
4
+ * Detects the primary programming language of a project from filesystem
5
+ * indicators. Falls back to "typescript" when no clear signal is found.
6
+ */
7
+ /** Languages supported by ForgeCraft template rendering. */
8
+ export type SupportedLanguage = "typescript" | "python";
9
+ /**
10
+ * Detect the primary language of a project from filesystem indicators.
11
+ * Falls back to "typescript" when no clear signal is found.
12
+ *
13
+ * @param projectDir - Absolute path to project root
14
+ * @returns Detected language
15
+ */
16
+ export declare function detectLanguage(projectDir: string): SupportedLanguage;
17
+ //# sourceMappingURL=language-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../src/analyzers/language-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,4DAA4D;AAC5D,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,QAAQ,CAAC;AAgBxD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAkCpE"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Language detector.
3
+ *
4
+ * Detects the primary programming language of a project from filesystem
5
+ * indicators. Falls back to "typescript" when no clear signal is found.
6
+ */
7
+ import { existsSync, readdirSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ import { createLogger } from "../shared/logger/index.js";
10
+ const logger = createLogger("analyzers/language-detector");
11
+ /** File indicators for each language. */
12
+ const PYTHON_INDICATORS = [
13
+ "pyproject.toml",
14
+ "setup.py",
15
+ "setup.cfg",
16
+ "requirements.txt",
17
+ "Pipfile",
18
+ ];
19
+ const TYPESCRIPT_INDICATORS = [
20
+ "tsconfig.json",
21
+ "package.json",
22
+ ];
23
+ /**
24
+ * Detect the primary language of a project from filesystem indicators.
25
+ * Falls back to "typescript" when no clear signal is found.
26
+ *
27
+ * @param projectDir - Absolute path to project root
28
+ * @returns Detected language
29
+ */
30
+ export function detectLanguage(projectDir) {
31
+ const hasPython = PYTHON_INDICATORS.some((f) => existsSync(join(projectDir, f)));
32
+ const hasTypeScript = TYPESCRIPT_INDICATORS.some((f) => existsSync(join(projectDir, f)));
33
+ // Clear signal: only one language present
34
+ if (hasPython && !hasTypeScript) {
35
+ logger.info("Detected Python project", { projectDir });
36
+ return "python";
37
+ }
38
+ if (hasTypeScript && !hasPython) {
39
+ logger.info("Detected TypeScript project", { projectDir });
40
+ return "typescript";
41
+ }
42
+ // Both present (monorepo or mixed): count source files in src/
43
+ if (hasPython && hasTypeScript) {
44
+ const language = countSourceFiles(projectDir);
45
+ logger.info("Mixed project, detected by file count", {
46
+ projectDir,
47
+ language,
48
+ });
49
+ return language;
50
+ }
51
+ // No indicators found — default to TypeScript
52
+ logger.info("No language indicators found, defaulting to typescript", {
53
+ projectDir,
54
+ });
55
+ return "typescript";
56
+ }
57
+ /**
58
+ * Count source files in src/ to determine majority language.
59
+ * Shallow scan only (max 100 entries) to keep it fast.
60
+ */
61
+ function countSourceFiles(projectDir) {
62
+ const srcDir = join(projectDir, "src");
63
+ if (!existsSync(srcDir)) {
64
+ return "typescript";
65
+ }
66
+ try {
67
+ const entries = readdirSync(srcDir, { recursive: false });
68
+ const limited = entries.slice(0, 100);
69
+ let pyCount = 0;
70
+ let tsCount = 0;
71
+ for (const entry of limited) {
72
+ const name = String(entry);
73
+ if (name.endsWith(".py")) {
74
+ pyCount++;
75
+ }
76
+ else if (name.endsWith(".ts") ||
77
+ name.endsWith(".tsx") ||
78
+ name.endsWith(".js") ||
79
+ name.endsWith(".jsx")) {
80
+ tsCount++;
81
+ }
82
+ }
83
+ return pyCount > tsCount ? "python" : "typescript";
84
+ }
85
+ catch {
86
+ return "typescript";
87
+ }
88
+ }
89
+ //# sourceMappingURL=language-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language-detector.js","sourceRoot":"","sources":["../../src/analyzers/language-detector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../src/analyzers/package-json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAI9C,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAoCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAoC9D;AAgJD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,CAuCnE"}
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../src/analyzers/package-json.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAI9C,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAqCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,CAoC9D;AAgJD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,CAuCnE"}
@@ -14,7 +14,6 @@ const DEPENDENCY_PATTERNS = [
14
14
  { packages: ["next"], tag: "WEB-REACT", evidence: "next.js in dependencies" },
15
15
  { packages: ["@remix-run/react"], tag: "WEB-REACT", evidence: "remix in dependencies" },
16
16
  { packages: ["express", "fastify", "koa", "hapi", "nestjs"], tag: "API", evidence: "HTTP framework in dependencies" },
17
- { packages: ["@modelcontextprotocol/sdk"], tag: "API", evidence: "MCP SDK in dependencies" },
18
17
  { packages: ["ethers", "web3", "viem", "@solana/web3.js"], tag: "WEB3", evidence: "blockchain library in dependencies" },
19
18
  { packages: ["socket.io", "ws", "pusher"], tag: "REALTIME", evidence: "WebSocket library in dependencies" },
20
19
  { packages: ["xstate", "robot3"], tag: "STATE-MACHINE", evidence: "state machine library in dependencies" },
@@ -24,13 +23,14 @@ const DEPENDENCY_PATTERNS = [
24
23
  { packages: ["@tensorflow/tfjs", "onnxruntime-node"], tag: "ML", evidence: "ML library in dependencies" },
25
24
  { packages: ["terraform-cdk", "pulumi", "@aws-cdk"], tag: "INFRA", evidence: "IaC library in dependencies" },
26
25
  ];
27
- /** File patterns that indicate tags. */
26
+ /** File patterns that indicate tags. Optional confidence overrides the default 0.7. */
28
27
  const FILE_PATTERNS = [
29
28
  { files: ["next.config.js", "next.config.mjs", "next.config.ts"], tag: "WEB-REACT", evidence: "next.config found" },
30
29
  { files: ["tsconfig.json"], tag: "LIBRARY", evidence: "TypeScript project" },
31
- { files: ["pyproject.toml", "setup.py", "setup.cfg"], tag: "API", evidence: "Python project config found" },
32
30
  { files: [".solhint.json", "hardhat.config.ts", "foundry.toml"], tag: "WEB3", evidence: "smart contract tooling found" },
33
- { files: ["Dockerfile", "docker-compose.yml", "docker-compose.yaml"], tag: "INFRA", evidence: "Docker config found" },
31
+ // Docker alone is insufficient for INFRA set below 0.6 threshold.
32
+ // IaC deps (terraform-cdk, pulumi, @aws-cdk) in DEPENDENCY_PATTERNS correctly trigger INFRA at 0.6+.
33
+ { files: ["Dockerfile", "docker-compose.yml", "docker-compose.yaml"], tag: "INFRA", evidence: "Docker config found", confidence: 0.45 },
34
34
  ];
35
35
  /**
36
36
  * Analyze a project directory and detect likely tags from config files.
@@ -108,7 +108,7 @@ function analyzeFilePresence(projectDir) {
108
108
  if (found.length > 0) {
109
109
  detections.push({
110
110
  tag: pattern.tag,
111
- confidence: 0.7,
111
+ confidence: pattern.confidence ?? 0.7,
112
112
  evidence: [pattern.evidence, `found: ${found.join(", ")}`],
113
113
  });
114
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/analyzers/package-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../../src/analyzers/package-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Project context detector.
3
+ *
4
+ * Auto-fills RenderContext fields from the project filesystem and
5
+ * optional description. Resolves {{repo_url}}, {{framework}}, {{domain}},
6
+ * and {{sensitive_data}} placeholders that would otherwise remain unsubstituted.
7
+ */
8
+ import type { RenderContext } from "../registry/renderer.js";
9
+ import type { Tag } from "../shared/types.js";
10
+ /**
11
+ * Detect project context from filesystem and optional description.
12
+ * Auto-fills RenderContext fields for template variable substitution.
13
+ * Falls back gracefully — returns partial context, never throws.
14
+ *
15
+ * @param projectDir - Absolute path to project root
16
+ * @param projectName - Known project name
17
+ * @param language - Detected language
18
+ * @param tags - Active tags
19
+ * @param description - Optional project description for domain extraction
20
+ * @returns Populated render context
21
+ */
22
+ export declare function detectProjectContext(projectDir: string, projectName: string, language: string, tags: Tag[], description?: string): RenderContext;
23
+ //# sourceMappingURL=project-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../src/analyzers/project-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAI9C;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EAAE,EACX,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,CAuBf"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Project context detector.
3
+ *
4
+ * Auto-fills RenderContext fields from the project filesystem and
5
+ * optional description. Resolves {{repo_url}}, {{framework}}, {{domain}},
6
+ * and {{sensitive_data}} placeholders that would otherwise remain unsubstituted.
7
+ */
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { execSync } from "node:child_process";
10
+ import { join } from "node:path";
11
+ import { createLogger } from "../shared/logger/index.js";
12
+ const logger = createLogger("analyzers/project-context");
13
+ /**
14
+ * Detect project context from filesystem and optional description.
15
+ * Auto-fills RenderContext fields for template variable substitution.
16
+ * Falls back gracefully — returns partial context, never throws.
17
+ *
18
+ * @param projectDir - Absolute path to project root
19
+ * @param projectName - Known project name
20
+ * @param language - Detected language
21
+ * @param tags - Active tags
22
+ * @param description - Optional project description for domain extraction
23
+ * @returns Populated render context
24
+ */
25
+ export function detectProjectContext(projectDir, projectName, language, tags, description) {
26
+ const repoUrl = detectRepoUrl(projectDir);
27
+ const framework = detectFramework(projectDir, language);
28
+ const domain = description ?? undefined;
29
+ const sensitiveData = detectSensitiveData(tags);
30
+ logger.info("Project context detected", {
31
+ projectDir,
32
+ repoUrl: repoUrl ? "detected" : "not found",
33
+ framework: framework ?? "not detected",
34
+ hasDomain: !!domain,
35
+ sensitiveData,
36
+ });
37
+ return {
38
+ projectName,
39
+ language,
40
+ tags,
41
+ repoUrl,
42
+ framework,
43
+ domain,
44
+ sensitiveData,
45
+ };
46
+ }
47
+ /**
48
+ * Detect the git remote URL for the project.
49
+ */
50
+ function detectRepoUrl(projectDir) {
51
+ try {
52
+ const url = execSync("git remote get-url origin", {
53
+ cwd: projectDir,
54
+ timeout: 5_000,
55
+ encoding: "utf-8",
56
+ stdio: ["pipe", "pipe", "pipe"],
57
+ }).trim();
58
+ // Convert SSH URLs to HTTPS for display
59
+ if (url.startsWith("git@")) {
60
+ return url
61
+ .replace("git@", "https://")
62
+ .replace(":", "/")
63
+ .replace(/\.git$/, "");
64
+ }
65
+ return url.replace(/\.git$/, "");
66
+ }
67
+ catch {
68
+ return "";
69
+ }
70
+ }
71
+ /**
72
+ * Detect the primary framework from project config files.
73
+ */
74
+ function detectFramework(projectDir, language) {
75
+ if (language === "typescript") {
76
+ return detectTypeScriptFramework(projectDir);
77
+ }
78
+ if (language === "python") {
79
+ return detectPythonFramework(projectDir);
80
+ }
81
+ return undefined;
82
+ }
83
+ /** Framework patterns for TypeScript/JavaScript projects. */
84
+ const TS_FRAMEWORK_PATTERNS = [
85
+ { packages: ["next"], name: "Next.js" },
86
+ { packages: ["@remix-run/react"], name: "Remix" },
87
+ { packages: ["nuxt"], name: "Nuxt" },
88
+ { packages: ["@angular/core"], name: "Angular" },
89
+ { packages: ["vue"], name: "Vue" },
90
+ { packages: ["svelte"], name: "Svelte" },
91
+ { packages: ["fastify"], name: "Fastify" },
92
+ { packages: ["express"], name: "Express" },
93
+ { packages: ["nestjs", "@nestjs/core"], name: "NestJS" },
94
+ { packages: ["hono"], name: "Hono" },
95
+ { packages: ["react"], name: "React" },
96
+ ];
97
+ /**
98
+ * Detect TypeScript framework from package.json dependencies.
99
+ */
100
+ function detectTypeScriptFramework(projectDir) {
101
+ const pkgPath = join(projectDir, "package.json");
102
+ if (!existsSync(pkgPath)) {
103
+ return undefined;
104
+ }
105
+ try {
106
+ const content = readFileSync(pkgPath, "utf-8");
107
+ const pkg = JSON.parse(content);
108
+ const allDeps = {
109
+ ...pkg["dependencies"],
110
+ ...pkg["devDependencies"],
111
+ };
112
+ const depNames = Object.keys(allDeps);
113
+ for (const pattern of TS_FRAMEWORK_PATTERNS) {
114
+ if (pattern.packages.some((p) => depNames.includes(p))) {
115
+ return pattern.name;
116
+ }
117
+ }
118
+ }
119
+ catch {
120
+ // Invalid package.json — skip
121
+ }
122
+ return undefined;
123
+ }
124
+ /** Framework patterns for Python projects. */
125
+ const PY_FRAMEWORK_PATTERNS = [
126
+ { keyword: "fastapi", name: "FastAPI" },
127
+ { keyword: "django", name: "Django" },
128
+ { keyword: "flask", name: "Flask" },
129
+ { keyword: "streamlit", name: "Streamlit" },
130
+ { keyword: "gradio", name: "Gradio" },
131
+ { keyword: "pytorch", name: "PyTorch" },
132
+ { keyword: "torch", name: "PyTorch" },
133
+ { keyword: "tensorflow", name: "TensorFlow" },
134
+ { keyword: "pandas", name: "Pandas" },
135
+ { keyword: "prefect", name: "Prefect" },
136
+ { keyword: "airflow", name: "Airflow" },
137
+ ];
138
+ /**
139
+ * Detect Python framework from pyproject.toml or requirements.txt.
140
+ */
141
+ function detectPythonFramework(projectDir) {
142
+ // Try pyproject.toml first
143
+ const pyprojectPath = join(projectDir, "pyproject.toml");
144
+ if (existsSync(pyprojectPath)) {
145
+ try {
146
+ const content = readFileSync(pyprojectPath, "utf-8").toLowerCase();
147
+ for (const pattern of PY_FRAMEWORK_PATTERNS) {
148
+ if (content.includes(pattern.keyword)) {
149
+ return pattern.name;
150
+ }
151
+ }
152
+ }
153
+ catch {
154
+ // skip
155
+ }
156
+ }
157
+ // Try requirements.txt
158
+ const reqPath = join(projectDir, "requirements.txt");
159
+ if (existsSync(reqPath)) {
160
+ try {
161
+ const content = readFileSync(reqPath, "utf-8").toLowerCase();
162
+ for (const pattern of PY_FRAMEWORK_PATTERNS) {
163
+ if (content.includes(pattern.keyword)) {
164
+ return pattern.name;
165
+ }
166
+ }
167
+ }
168
+ catch {
169
+ // skip
170
+ }
171
+ }
172
+ return undefined;
173
+ }
174
+ /**
175
+ * Determine sensitive data flag from active tags.
176
+ */
177
+ function detectSensitiveData(tags) {
178
+ const sensitiveTags = ["HEALTHCARE", "HIPAA", "FINTECH", "SOC2"];
179
+ return tags.some((t) => sensitiveTags.includes(t)) ? "YES" : "NO";
180
+ }
181
+ //# sourceMappingURL=project-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../../src/analyzers/project-context.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
9
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
10
10
  import { createLogger } from "./shared/logger/index.js";
11
11
  // ── Tool imports ─────────────────────────────────────────────────────
12
- import { listTagsSchema, listTagsHandler, listHooksSchema, listHooksHandler, } from "./tools/list.js";
12
+ import { listTagsSchema, listTagsHandler, listHooksSchema, listHooksHandler, listSkillsSchema, listSkillsHandler, } from "./tools/list.js";
13
13
  import { classifyProjectSchema, classifyProjectHandler, } from "./tools/classify.js";
14
14
  import { scaffoldProjectSchema, scaffoldProjectHandler, } from "./tools/scaffold.js";
15
15
  import { generateInstructionsSchema, generateInstructionsHandler, } from "./tools/generate-claude-md.js";
@@ -18,6 +18,7 @@ import { addHookSchema, addHookHandler, } from "./tools/add-hook.js";
18
18
  import { addModuleSchema, addModuleHandler, } from "./tools/add-module.js";
19
19
  import { configureMcpSchema, configureMcpHandler, } from "./tools/configure-mcp.js";
20
20
  import { getNfrTemplateSchema, getNfrTemplateHandler, } from "./tools/get-nfr.js";
21
+ import { getDesignReferenceSchema, getDesignReferenceHandler, } from "./tools/get-reference.js";
21
22
  import { convertExistingSchema, convertExistingHandler, } from "./tools/convert.js";
22
23
  import { reviewProjectSchema, reviewProjectHandler, } from "./tools/review.js";
23
24
  import { setupProjectSchema, setupProjectHandler, } from "./tools/setup-project.js";
@@ -28,19 +29,21 @@ async function main() {
28
29
  logger.info("Starting ForgeCraft MCP server");
29
30
  const server = new McpServer({
30
31
  name: "forgecraft",
31
- version: "0.1.0",
32
+ version: "0.3.0",
32
33
  });
33
34
  // ── Register Tools ───────────────────────────────────────────────
34
35
  server.tool("list_tags", "List all available project classification tags with descriptions.", listTagsSchema.shape, listTagsHandler);
35
36
  server.tool("list_hooks", "List available hooks, optionally filtered by tags.", listHooksSchema.shape, listHooksHandler);
37
+ server.tool("list_skills", "List available skills (Claude Code custom commands), optionally filtered by tags. Skills are reusable workflow prompts installed to .claude/commands/ and invoked via /project:<name>.", listSkillsSchema.shape, listSkillsHandler);
36
38
  server.tool("classify_project", "Analyze a project directory and/or description to suggest classification tags.", classifyProjectSchema.shape, classifyProjectHandler);
37
- server.tool("scaffold_project", "Generate full project structure (instruction files, Status.md, hooks, folders) from tags. Supports multiple AI assistant targets.", scaffoldProjectSchema.shape, scaffoldProjectHandler);
39
+ server.tool("scaffold_project", "Generate full project structure (instruction files, Status.md, hooks, skills, folders) from tags. Supports multiple AI assistant targets.", scaffoldProjectSchema.shape, scaffoldProjectHandler);
38
40
  server.tool("generate_instructions", "Generate AI assistant instruction files for given tags. Supports multiple targets: Claude (CLAUDE.md), Cursor (.cursor/rules/), GitHub Copilot (.github/copilot-instructions.md), Windsurf (.windsurfrules), Cline (.clinerules), Aider (CONVENTIONS.md). Adds SOLID principles, testing pyramid, architecture patterns, CI/CD, and domain-specific standards from 112 curated blocks. Can merge with existing files to preserve custom sections.", generateInstructionsSchema.shape, generateInstructionsHandler);
39
41
  server.tool("audit_project", "Audit project against template standards and report violations with a score.", auditProjectSchema.shape, auditProjectHandler);
40
42
  server.tool("add_hook", "Add a specific quality-gate hook script to the project.", addHookSchema.shape, addHookHandler);
41
43
  server.tool("add_module", "Scaffold a new feature module following established patterns.", addModuleSchema.shape, addModuleHandler);
42
44
  server.tool("configure_mcp", "Generate .claude/settings.json with recommended MCP servers for active tags.", configureMcpSchema.shape, configureMcpHandler);
43
45
  server.tool("get_nfr_template", "Get NFR (Non-Functional Requirement) sections for specific tags.", getNfrTemplateSchema.shape, getNfrTemplateHandler);
46
+ server.tool("get_design_reference", "Get design reference patterns (DDD, CQRS, GoF) on demand. These are NOT included in instruction files to save tokens — request them when you need architectural guidance.", getDesignReferenceSchema.shape, getDesignReferenceHandler);
44
47
  server.tool("convert_existing", "Analyze an existing codebase and generate a phased migration plan.", convertExistingSchema.shape, convertExistingHandler);
45
48
  server.tool("review_project", "Generate a structured code review checklist for active tags. Covers architecture, code quality, tests, and performance with per-issue guidance format.", reviewProjectSchema.shape, reviewProjectHandler);
46
49
  server.tool("setup_project", "RECOMMENDED FIRST STEP — generates production-grade AI assistant instruction files from 112 curated template blocks. Supports Claude, Cursor, Copilot, Windsurf, Cline, and Aider. Analyzes project, auto-detects tags from code/dependencies, creates forgecraft.yaml config, and adds engineering standards (SOLID, testing pyramid, architecture patterns, CI/CD, domain rules). Works for new and existing projects. Supports tier-based content filtering (core/recommended/optional).", setupProjectSchema.shape, setupProjectHandler);
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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"}
@@ -5,14 +5,16 @@
5
5
  * hooks, and NFRs from all matching templates into unified outputs.
6
6
  * Handles merge, deduplication, ordering, and tier-based filtering.
7
7
  */
8
- import type { Tag, TagTemplateSet, InstructionBlock, StructureEntry, NfrBlock, HookTemplate, ReviewBlock, ForgeCraftConfig } from "../shared/types.js";
8
+ import type { Tag, TagTemplateSet, InstructionBlock, StructureEntry, NfrBlock, HookTemplate, SkillTemplate, ReviewBlock, ReferenceBlock, ForgeCraftConfig } from "../shared/types.js";
9
9
  /** Composed output for a set of active tags. */
10
10
  export interface ComposedTemplates {
11
11
  readonly instructionBlocks: InstructionBlock[];
12
12
  readonly structureEntries: StructureEntry[];
13
13
  readonly nfrBlocks: NfrBlock[];
14
14
  readonly hooks: HookTemplate[];
15
+ readonly skills: SkillTemplate[];
15
16
  readonly reviewBlocks: ReviewBlock[];
17
+ readonly referenceBlocks: ReferenceBlock[];
16
18
  /**
17
19
  * @deprecated Use `instructionBlocks` instead. Alias for backward compatibility.
18
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/registry/composer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,WAAW,EAEX,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAoB5B,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IACrC;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC;CAC7C;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAwCD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,GAAG,EAAE,EACjB,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,iBAAiB,CAgHnB"}
1
+ {"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../src/registry/composer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EAEd,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAoB5B,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,cAAc,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC;CAC7C;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;CACpC;AAwCD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,GAAG,EAAE,EACjB,YAAY,EAAE,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,EACtC,OAAO,CAAC,EAAE,cAAc,GACvB,iBAAiB,CAgJnB"}