forgecraft-mcp 0.2.0 → 0.2.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 +25 -5
- package/dist/index.js +1 -1
- package/dist/registry/loader.d.ts.map +1 -1
- package/dist/registry/loader.js +26 -1
- package/dist/registry/loader.js.map +1 -1
- package/dist/registry/mcp-discovery.d.ts +82 -0
- package/dist/registry/mcp-discovery.d.ts.map +1 -0
- package/dist/registry/mcp-discovery.js +202 -0
- package/dist/registry/mcp-discovery.js.map +1 -0
- package/dist/shared/errors/index.d.ts +4 -0
- package/dist/shared/errors/index.d.ts.map +1 -1
- package/dist/shared/errors/index.js +6 -0
- package/dist/shared/errors/index.js.map +1 -1
- package/dist/shared/types.d.ts +44 -1
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +6 -0
- package/dist/shared/types.js.map +1 -1
- package/dist/tools/configure-mcp.d.ts +21 -0
- package/dist/tools/configure-mcp.d.ts.map +1 -1
- package/dist/tools/configure-mcp.js +86 -24
- package/dist/tools/configure-mcp.js.map +1 -1
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +24 -0
- package/dist/tools/list.js.map +1 -1
- package/package.json +7 -3
- package/templates/analytics/mcp-servers.yaml +10 -0
- package/templates/api/mcp-servers.yaml +12 -0
- package/templates/cli/mcp-servers.yaml +10 -0
- package/templates/data-lineage/instructions.yaml +28 -0
- package/templates/data-lineage/mcp-servers.yaml +20 -0
- package/templates/data-pipeline/mcp-servers.yaml +12 -0
- package/templates/fintech/mcp-servers.yaml +12 -0
- package/templates/game/mcp-servers.yaml +10 -0
- package/templates/healthcare/mcp-servers.yaml +12 -0
- package/templates/hipaa/instructions.yaml +41 -0
- package/templates/hipaa/mcp-servers.yaml +12 -0
- package/templates/infra/mcp-servers.yaml +18 -0
- package/templates/library/mcp-servers.yaml +18 -0
- package/templates/medallion-architecture/instructions.yaml +41 -0
- package/templates/medallion-architecture/mcp-servers.yaml +20 -0
- package/templates/ml/mcp-servers.yaml +10 -0
- package/templates/mobile/mcp-servers.yaml +10 -0
- package/templates/observability-xray/instructions.yaml +40 -0
- package/templates/observability-xray/mcp-servers.yaml +14 -0
- package/templates/realtime/mcp-servers.yaml +12 -0
- package/templates/soc2/instructions.yaml +41 -0
- package/templates/soc2/mcp-servers.yaml +22 -0
- package/templates/social/mcp-servers.yaml +22 -0
- package/templates/state-machine/mcp-servers.yaml +10 -0
- package/templates/universal/mcp-servers.yaml +26 -0
- package/templates/web-react/mcp-servers.yaml +18 -0
- package/templates/web-static/mcp-servers.yaml +18 -0
- package/templates/web3/mcp-servers.yaml +10 -0
- package/templates/zero-trust/instructions.yaml +41 -0
- package/templates/zero-trust/mcp-servers.yaml +14 -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
|
-
##
|
|
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` |
|
|
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
|
|
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
|
-
|
|
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 #
|
|
268
|
+
npm test # 128 tests, 10 suites
|
|
249
269
|
```
|
|
250
270
|
|
|
251
271
|
## License
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ async function main() {
|
|
|
28
28
|
logger.info("Starting ForgeCraft MCP server");
|
|
29
29
|
const server = new McpServer({
|
|
30
30
|
name: "forgecraft",
|
|
31
|
-
version: "0.
|
|
31
|
+
version: "0.2.0",
|
|
32
32
|
});
|
|
33
33
|
// ── Register Tools ───────────────────────────────────────────────
|
|
34
34
|
server.tool("list_tags", "List all available project classification tags with descriptions.", listTagsSchema.shape, listTagsHandler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,GAAG,EACH,cAAc,EAOd,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAW5B;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAuB5C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,CAAC,EAAE,MAAM,GACpB,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CA0B1B;AAmHD;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GACjB,gBAAgB,GAAG,IAAI,CA4BzB;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAwC1B"}
|
package/dist/registry/loader.js
CHANGED
|
@@ -70,6 +70,7 @@ function loadTagTemplateSet(tag, tagDir) {
|
|
|
70
70
|
let structure;
|
|
71
71
|
let hooks;
|
|
72
72
|
let review;
|
|
73
|
+
let mcpServers;
|
|
73
74
|
// Load instructions.yaml (formerly claude-md.yaml)
|
|
74
75
|
const instructionsPath = join(tagDir, "instructions.yaml");
|
|
75
76
|
if (existsSync(instructionsPath)) {
|
|
@@ -103,7 +104,12 @@ function loadTagTemplateSet(tag, tagDir) {
|
|
|
103
104
|
if (existsSync(reviewPath)) {
|
|
104
105
|
review = loadYamlFile(reviewPath);
|
|
105
106
|
}
|
|
106
|
-
|
|
107
|
+
// Load mcp-servers.yaml
|
|
108
|
+
const mcpServersPath = join(tagDir, "mcp-servers.yaml");
|
|
109
|
+
if (existsSync(mcpServersPath)) {
|
|
110
|
+
mcpServers = loadYamlFile(mcpServersPath);
|
|
111
|
+
}
|
|
112
|
+
return { tag, instructions, nfr, structure, hooks, review, mcpServers };
|
|
107
113
|
}
|
|
108
114
|
/**
|
|
109
115
|
* Load and parse a single YAML template file.
|
|
@@ -149,6 +155,12 @@ function tagDirNameToTag(dirName) {
|
|
|
149
155
|
infra: "INFRA",
|
|
150
156
|
mobile: "MOBILE",
|
|
151
157
|
analytics: "ANALYTICS",
|
|
158
|
+
hipaa: "HIPAA",
|
|
159
|
+
soc2: "SOC2",
|
|
160
|
+
"data-lineage": "DATA-LINEAGE",
|
|
161
|
+
"observability-xray": "OBSERVABILITY-XRAY",
|
|
162
|
+
"medallion-architecture": "MEDALLION-ARCHITECTURE",
|
|
163
|
+
"zero-trust": "ZERO-TRUST",
|
|
152
164
|
};
|
|
153
165
|
return mapping[dirName] ?? null;
|
|
154
166
|
}
|
|
@@ -228,6 +240,7 @@ export function loadAllTemplatesWithExtras(builtInDir, extraDirs) {
|
|
|
228
240
|
structure: extraSet.structure ?? baseSet.structure,
|
|
229
241
|
hooks: mergeHookTemplates(baseSet.hooks, extraSet.hooks),
|
|
230
242
|
review: mergeReviewTemplates(baseSet.review, extraSet.review),
|
|
243
|
+
mcpServers: mergeMcpServersTemplates(baseSet.mcpServers, extraSet.mcpServers),
|
|
231
244
|
};
|
|
232
245
|
base.set(tag, merged);
|
|
233
246
|
}
|
|
@@ -282,4 +295,16 @@ function mergeReviewTemplates(base, extra) {
|
|
|
282
295
|
const newBlocks = extra.blocks.filter((b) => !seenIds.has(b.id));
|
|
283
296
|
return { ...base, blocks: [...base.blocks, ...newBlocks] };
|
|
284
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Merge two McpServersTemplates, appending non-duplicate servers by name.
|
|
300
|
+
*/
|
|
301
|
+
function mergeMcpServersTemplates(base, extra) {
|
|
302
|
+
if (!extra)
|
|
303
|
+
return base;
|
|
304
|
+
if (!base)
|
|
305
|
+
return extra;
|
|
306
|
+
const seenNames = new Set(base.servers.map((s) => s.name));
|
|
307
|
+
const newServers = extra.servers.filter((s) => !seenNames.has(s.name));
|
|
308
|
+
return { ...base, servers: [...base.servers, ...newServers] };
|
|
309
|
+
}
|
|
285
310
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/registry/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Discovery Service.
|
|
3
|
+
*
|
|
4
|
+
* Discovers recommended MCP servers for a set of project tags by:
|
|
5
|
+
* 1. Loading curated entries from mcp-servers.yaml template files (built-in + community).
|
|
6
|
+
* 2. Optionally fetching from a remote registry URL for dynamic recommendations.
|
|
7
|
+
*
|
|
8
|
+
* Results are deduplicated by server name, with local (built-in/community)
|
|
9
|
+
* entries taking priority over remote ones.
|
|
10
|
+
*/
|
|
11
|
+
import type { Tag, McpServerRecommendation, McpDiscoveryOptions } from "../shared/types.js";
|
|
12
|
+
/**
|
|
13
|
+
* Contract for MCP server discovery.
|
|
14
|
+
* Implementations resolve a set of tags into recommended MCP servers.
|
|
15
|
+
*/
|
|
16
|
+
export interface McpDiscoveryService {
|
|
17
|
+
/**
|
|
18
|
+
* Discover recommended MCP servers for the given tags.
|
|
19
|
+
*
|
|
20
|
+
* @param tags - Active project classification tags
|
|
21
|
+
* @param options - Optional discovery configuration
|
|
22
|
+
* @returns Deduplicated list of server recommendations
|
|
23
|
+
*/
|
|
24
|
+
discoverServers(tags: Tag[], options?: McpDiscoveryOptions): Promise<McpServerRecommendation[]>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Default MCP discovery service.
|
|
28
|
+
*
|
|
29
|
+
* Loads curated servers from YAML templates, optionally augments
|
|
30
|
+
* with servers from a remote JSON registry.
|
|
31
|
+
*/
|
|
32
|
+
export declare class DefaultMcpDiscoveryService implements McpDiscoveryService {
|
|
33
|
+
private readonly templatesDirOverride?;
|
|
34
|
+
private readonly extraDirs?;
|
|
35
|
+
/**
|
|
36
|
+
* @param templatesDirOverride - Override built-in templates directory (testing)
|
|
37
|
+
* @param extraDirs - Additional community template directories
|
|
38
|
+
*/
|
|
39
|
+
constructor(templatesDirOverride?: string, extraDirs?: string[]);
|
|
40
|
+
/**
|
|
41
|
+
* Discover MCP servers for the given tags.
|
|
42
|
+
*
|
|
43
|
+
* @param tags - Active project classification tags
|
|
44
|
+
* @param options - Discovery options
|
|
45
|
+
* @returns Deduplicated recommendations sorted by relevance
|
|
46
|
+
*/
|
|
47
|
+
discoverServers(tags: Tag[], options?: McpDiscoveryOptions): Promise<McpServerRecommendation[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Load MCP server entries from local YAML templates for the given tags.
|
|
50
|
+
* Collects from all matching tag template sets.
|
|
51
|
+
*/
|
|
52
|
+
private loadLocalServers;
|
|
53
|
+
/**
|
|
54
|
+
* Fetch MCP server entries from a remote JSON registry.
|
|
55
|
+
*
|
|
56
|
+
* Expected remote format:
|
|
57
|
+
* ```json
|
|
58
|
+
* {
|
|
59
|
+
* "servers": [
|
|
60
|
+
* {
|
|
61
|
+
* "name": "some-server",
|
|
62
|
+
* "description": "...",
|
|
63
|
+
* "command": "npx",
|
|
64
|
+
* "args": ["-y", "some-package"],
|
|
65
|
+
* "tags": ["API", "UNIVERSAL"],
|
|
66
|
+
* "category": "testing",
|
|
67
|
+
* "url": "https://..."
|
|
68
|
+
* }
|
|
69
|
+
* ]
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* Only servers whose tags overlap with the requested tags are returned.
|
|
74
|
+
*/
|
|
75
|
+
private fetchRemoteServers;
|
|
76
|
+
/**
|
|
77
|
+
* Deduplicate server lists. Local entries take priority over remote.
|
|
78
|
+
* Sorts by: number of matching tags (desc), then alphabetically.
|
|
79
|
+
*/
|
|
80
|
+
private deduplicateServers;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=mcp-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-discovery.d.ts","sourceRoot":"","sources":["../../src/registry/mcp-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EACV,GAAG,EACH,uBAAuB,EACvB,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAM5B;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,eAAe,CACb,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CACvC;AAaD;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IACpE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAW;IAEtC;;;OAGG;gBACS,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE;IAK/D;;;;;;OAMG;IACG,eAAe,CACnB,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAoCrC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;;;;;;;;;;;;;;;;;;;;OAqBG;YACW,kBAAkB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CA6B3B"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Discovery Service.
|
|
3
|
+
*
|
|
4
|
+
* Discovers recommended MCP servers for a set of project tags by:
|
|
5
|
+
* 1. Loading curated entries from mcp-servers.yaml template files (built-in + community).
|
|
6
|
+
* 2. Optionally fetching from a remote registry URL for dynamic recommendations.
|
|
7
|
+
*
|
|
8
|
+
* Results are deduplicated by server name, with local (built-in/community)
|
|
9
|
+
* entries taking priority over remote ones.
|
|
10
|
+
*/
|
|
11
|
+
import { createLogger } from "../shared/logger/index.js";
|
|
12
|
+
import { DiscoveryError } from "../shared/errors/index.js";
|
|
13
|
+
import { loadAllTemplatesWithExtras } from "./loader.js";
|
|
14
|
+
const logger = createLogger("registry/mcp-discovery");
|
|
15
|
+
// ── Constants ────────────────────────────────────────────────────────
|
|
16
|
+
/** Default remote registry URL. Configurable via FORGECRAFT_MCP_REGISTRY_URL. */
|
|
17
|
+
const DEFAULT_REMOTE_REGISTRY_URL = process.env["FORGECRAFT_MCP_REGISTRY_URL"] ?? "";
|
|
18
|
+
/** Default timeout for remote registry fetches in milliseconds. */
|
|
19
|
+
const DEFAULT_REMOTE_TIMEOUT_MS = 5_000;
|
|
20
|
+
// ── Implementation ───────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Default MCP discovery service.
|
|
23
|
+
*
|
|
24
|
+
* Loads curated servers from YAML templates, optionally augments
|
|
25
|
+
* with servers from a remote JSON registry.
|
|
26
|
+
*/
|
|
27
|
+
export class DefaultMcpDiscoveryService {
|
|
28
|
+
templatesDirOverride;
|
|
29
|
+
extraDirs;
|
|
30
|
+
/**
|
|
31
|
+
* @param templatesDirOverride - Override built-in templates directory (testing)
|
|
32
|
+
* @param extraDirs - Additional community template directories
|
|
33
|
+
*/
|
|
34
|
+
constructor(templatesDirOverride, extraDirs) {
|
|
35
|
+
this.templatesDirOverride = templatesDirOverride;
|
|
36
|
+
this.extraDirs = extraDirs;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Discover MCP servers for the given tags.
|
|
40
|
+
*
|
|
41
|
+
* @param tags - Active project classification tags
|
|
42
|
+
* @param options - Discovery options
|
|
43
|
+
* @returns Deduplicated recommendations sorted by relevance
|
|
44
|
+
*/
|
|
45
|
+
async discoverServers(tags, options) {
|
|
46
|
+
const localServers = this.loadLocalServers(tags);
|
|
47
|
+
logger.info("Loaded local MCP server recommendations", {
|
|
48
|
+
count: localServers.length,
|
|
49
|
+
tags,
|
|
50
|
+
});
|
|
51
|
+
let remoteServers = [];
|
|
52
|
+
if (options?.includeRemote) {
|
|
53
|
+
const registryUrl = options.remoteRegistryUrl ?? DEFAULT_REMOTE_REGISTRY_URL;
|
|
54
|
+
if (registryUrl) {
|
|
55
|
+
remoteServers = await this.fetchRemoteServers(tags, registryUrl, options.remoteTimeoutMs ?? DEFAULT_REMOTE_TIMEOUT_MS);
|
|
56
|
+
logger.info("Fetched remote MCP server recommendations", {
|
|
57
|
+
count: remoteServers.length,
|
|
58
|
+
url: registryUrl,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
logger.warn("Remote discovery requested but no registry URL configured. " +
|
|
63
|
+
"Set FORGECRAFT_MCP_REGISTRY_URL or pass remoteRegistryUrl.");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return this.deduplicateServers(localServers, remoteServers);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Load MCP server entries from local YAML templates for the given tags.
|
|
70
|
+
* Collects from all matching tag template sets.
|
|
71
|
+
*/
|
|
72
|
+
loadLocalServers(tags) {
|
|
73
|
+
const templates = loadAllTemplatesWithExtras(this.templatesDirOverride, this.extraDirs);
|
|
74
|
+
const seen = new Set();
|
|
75
|
+
const results = [];
|
|
76
|
+
for (const tag of tags) {
|
|
77
|
+
const templateSet = templates.get(tag);
|
|
78
|
+
if (!templateSet?.mcpServers) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
for (const entry of templateSet.mcpServers.servers) {
|
|
82
|
+
if (seen.has(entry.name)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
seen.add(entry.name);
|
|
86
|
+
results.push(entryToRecommendation(entry, "built-in"));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return results;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Fetch MCP server entries from a remote JSON registry.
|
|
93
|
+
*
|
|
94
|
+
* Expected remote format:
|
|
95
|
+
* ```json
|
|
96
|
+
* {
|
|
97
|
+
* "servers": [
|
|
98
|
+
* {
|
|
99
|
+
* "name": "some-server",
|
|
100
|
+
* "description": "...",
|
|
101
|
+
* "command": "npx",
|
|
102
|
+
* "args": ["-y", "some-package"],
|
|
103
|
+
* "tags": ["API", "UNIVERSAL"],
|
|
104
|
+
* "category": "testing",
|
|
105
|
+
* "url": "https://..."
|
|
106
|
+
* }
|
|
107
|
+
* ]
|
|
108
|
+
* }
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* Only servers whose tags overlap with the requested tags are returned.
|
|
112
|
+
*/
|
|
113
|
+
async fetchRemoteServers(tags, registryUrl, timeoutMs) {
|
|
114
|
+
try {
|
|
115
|
+
const controller = new AbortController();
|
|
116
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
117
|
+
const response = await fetch(registryUrl, {
|
|
118
|
+
signal: controller.signal,
|
|
119
|
+
headers: { Accept: "application/json" },
|
|
120
|
+
});
|
|
121
|
+
clearTimeout(timeoutId);
|
|
122
|
+
if (!response.ok) {
|
|
123
|
+
throw new DiscoveryError(`Remote registry returned HTTP ${response.status}`, registryUrl);
|
|
124
|
+
}
|
|
125
|
+
const data = (await response.json());
|
|
126
|
+
if (!Array.isArray(data.servers)) {
|
|
127
|
+
throw new DiscoveryError("Remote registry response missing 'servers' array", registryUrl);
|
|
128
|
+
}
|
|
129
|
+
const tagSet = new Set(tags);
|
|
130
|
+
return data.servers
|
|
131
|
+
.filter((entry) => entry.tags.some((t) => tagSet.has(t)))
|
|
132
|
+
.map((entry) => entryToRecommendation(entry, "remote"));
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error instanceof DiscoveryError) {
|
|
136
|
+
logger.warn("Remote MCP registry error", {
|
|
137
|
+
url: registryUrl,
|
|
138
|
+
error: error.message,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
143
|
+
logger.warn("Failed to fetch remote MCP registry", {
|
|
144
|
+
url: registryUrl,
|
|
145
|
+
error: message,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Remote failures are non-fatal — return empty and rely on local
|
|
149
|
+
return [];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Deduplicate server lists. Local entries take priority over remote.
|
|
154
|
+
* Sorts by: number of matching tags (desc), then alphabetically.
|
|
155
|
+
*/
|
|
156
|
+
deduplicateServers(local, remote) {
|
|
157
|
+
const seen = new Set();
|
|
158
|
+
const merged = [];
|
|
159
|
+
// Local first (higher priority)
|
|
160
|
+
for (const server of local) {
|
|
161
|
+
if (!seen.has(server.name)) {
|
|
162
|
+
seen.add(server.name);
|
|
163
|
+
merged.push(server);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Remote fills gaps
|
|
167
|
+
for (const server of remote) {
|
|
168
|
+
if (!seen.has(server.name)) {
|
|
169
|
+
seen.add(server.name);
|
|
170
|
+
merged.push(server);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return merged.sort((a, b) => {
|
|
174
|
+
const tagDiff = b.relevantTags.length - a.relevantTags.length;
|
|
175
|
+
if (tagDiff !== 0)
|
|
176
|
+
return tagDiff;
|
|
177
|
+
return a.name.localeCompare(b.name);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// ── Helpers ──────────────────────────────────────────────────────────
|
|
182
|
+
/**
|
|
183
|
+
* Convert a raw McpServerEntry to a McpServerRecommendation.
|
|
184
|
+
*
|
|
185
|
+
* @param entry - Raw entry from YAML or remote
|
|
186
|
+
* @param source - Where this entry was discovered
|
|
187
|
+
* @returns Normalized recommendation
|
|
188
|
+
*/
|
|
189
|
+
function entryToRecommendation(entry, source) {
|
|
190
|
+
return {
|
|
191
|
+
name: entry.name,
|
|
192
|
+
description: entry.description,
|
|
193
|
+
command: entry.command,
|
|
194
|
+
args: entry.args,
|
|
195
|
+
env: entry.env,
|
|
196
|
+
relevantTags: entry.tags,
|
|
197
|
+
category: entry.category,
|
|
198
|
+
url: entry.url,
|
|
199
|
+
source,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=mcp-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-discovery.js","sourceRoot":"","sources":["../../src/registry/mcp-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,4 +27,8 @@ export declare class AnalysisError extends ForgeError {
|
|
|
27
27
|
export declare class TemplateParseError extends ForgeError {
|
|
28
28
|
constructor(filePath: string, reason: string);
|
|
29
29
|
}
|
|
30
|
+
/** Remote MCP server discovery failed. */
|
|
31
|
+
export declare class DiscoveryError extends ForgeError {
|
|
32
|
+
constructor(message: string, url?: string);
|
|
33
|
+
}
|
|
30
34
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4CAA4C;AAC5C,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKnE;AAED,iEAAiE;AACjE,qBAAa,qBAAsB,SAAQ,UAAU;gBACvC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAM1C;AAED,+CAA+C;AAC/C,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAG5C;AAED,oCAAoC;AACpC,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAG9C;AAED,0CAA0C;AAC1C,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED,kDAAkD;AAClD,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG7C"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4CAA4C;AAC5C,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAErC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;CAKnE;AAED,iEAAiE;AACjE,qBAAa,qBAAsB,SAAQ,UAAU;gBACvC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAM1C;AAED,+CAA+C;AAC/C,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAG5C;AAED,oCAAoC;AACpC,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAG9C;AAED,0CAA0C;AAC1C,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAG/D;AAED,kDAAkD;AAClD,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG7C;AAED,0CAA0C;AAC1C,qBAAa,cAAe,SAAQ,UAAU;gBAChC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;CAG1C"}
|
|
@@ -41,4 +41,10 @@ export class TemplateParseError extends ForgeError {
|
|
|
41
41
|
super(`Failed to parse template: ${reason}`, { filePath, reason });
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
+
/** Remote MCP server discovery failed. */
|
|
45
|
+
export class DiscoveryError extends ForgeError {
|
|
46
|
+
constructor(message, url) {
|
|
47
|
+
super(message, { url });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
44
50
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4CAA4C;AAC5C,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,OAAO,CAA0B;IAEjD,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,iEAAiE;AACjE,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,YAAY,GAAW,EAAE,OAAgB;QACvC,KAAK,CACH,2BAA2B,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACxE,EAAE,GAAG,EAAE,OAAO,EAAE,CACjB,CAAC;IACJ,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,OAAe,EAAE,KAAc;QACzC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,oCAAoC;AACpC,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,OAAe,EAAE,QAAgB;QAC3C,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAED,kDAAkD;AAClD,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,6BAA6B,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,4CAA4C;AAC5C,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,OAAO,CAA0B;IAEjD,YAAY,OAAe,EAAE,UAAmC,EAAE;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,iEAAiE;AACjE,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD,YAAY,GAAW,EAAE,OAAgB;QACvC,KAAK,CACH,2BAA2B,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACxE,EAAE,GAAG,EAAE,OAAO,EAAE,CACjB,CAAC;IACJ,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,OAAe,EAAE,KAAc;QACzC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,oCAAoC;AACpC,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,OAAe,EAAE,QAAgB;QAC3C,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;CACF;AAED,kDAAkD;AAClD,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,6BAA6B,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,OAAe,EAAE,GAAY;QACvC,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1B,CAAC;CACF"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* structures are defined here as the single source of truth.
|
|
6
6
|
*/
|
|
7
7
|
/** All supported project classification tags. */
|
|
8
|
-
export declare const ALL_TAGS: readonly ["UNIVERSAL", "WEB-REACT", "WEB-STATIC", "API", "DATA-PIPELINE", "ML", "HEALTHCARE", "FINTECH", "WEB3", "REALTIME", "STATE-MACHINE", "GAME", "SOCIAL", "CLI", "LIBRARY", "INFRA", "MOBILE", "ANALYTICS"];
|
|
8
|
+
export declare const ALL_TAGS: readonly ["UNIVERSAL", "WEB-REACT", "WEB-STATIC", "API", "DATA-PIPELINE", "ML", "HEALTHCARE", "FINTECH", "WEB3", "REALTIME", "STATE-MACHINE", "GAME", "SOCIAL", "CLI", "LIBRARY", "INFRA", "MOBILE", "ANALYTICS", "HIPAA", "SOC2", "DATA-LINEAGE", "OBSERVABILITY-XRAY", "MEDALLION-ARCHITECTURE", "ZERO-TRUST"];
|
|
9
9
|
export type Tag = (typeof ALL_TAGS)[number];
|
|
10
10
|
/** Description metadata for a single tag. */
|
|
11
11
|
export interface TagInfo {
|
|
@@ -206,6 +206,7 @@ export interface TagTemplateSet {
|
|
|
206
206
|
readonly structure?: StructureTemplate;
|
|
207
207
|
readonly hooks?: HookTemplate[];
|
|
208
208
|
readonly review?: ReviewTemplate;
|
|
209
|
+
readonly mcpServers?: McpServersTemplate;
|
|
209
210
|
/**
|
|
210
211
|
* @deprecated Use `instructions` instead. Alias kept for backward compatibility.
|
|
211
212
|
*/
|
|
@@ -223,6 +224,48 @@ export interface McpServerConfig {
|
|
|
223
224
|
readonly args: string[];
|
|
224
225
|
readonly env?: Record<string, string>;
|
|
225
226
|
}
|
|
227
|
+
/** Category grouping for MCP server recommendations. */
|
|
228
|
+
export type McpServerCategory = "scaffolding" | "code-search" | "testing" | "debugging" | "devtools" | "deployment" | "database" | "documentation" | "game-engine" | "ai-ml" | "monitoring" | "general";
|
|
229
|
+
/** An MCP server entry in a curated registry YAML file. */
|
|
230
|
+
export interface McpServerEntry {
|
|
231
|
+
readonly name: string;
|
|
232
|
+
readonly description: string;
|
|
233
|
+
readonly command: string;
|
|
234
|
+
readonly args: string[];
|
|
235
|
+
readonly env?: Record<string, string>;
|
|
236
|
+
readonly tags: Tag[];
|
|
237
|
+
readonly category: McpServerCategory;
|
|
238
|
+
readonly url?: string;
|
|
239
|
+
}
|
|
240
|
+
/** Shape of the mcp-servers.yaml template file. */
|
|
241
|
+
export interface McpServersTemplate {
|
|
242
|
+
readonly tag: Tag;
|
|
243
|
+
readonly section: "mcp-servers";
|
|
244
|
+
readonly servers: McpServerEntry[];
|
|
245
|
+
}
|
|
246
|
+
/** Source of a discovered MCP server recommendation. */
|
|
247
|
+
export type McpServerSource = "built-in" | "community" | "remote";
|
|
248
|
+
/** A recommended MCP server with discovery metadata. */
|
|
249
|
+
export interface McpServerRecommendation {
|
|
250
|
+
readonly name: string;
|
|
251
|
+
readonly description: string;
|
|
252
|
+
readonly command: string;
|
|
253
|
+
readonly args: string[];
|
|
254
|
+
readonly env?: Record<string, string>;
|
|
255
|
+
readonly relevantTags: Tag[];
|
|
256
|
+
readonly category: McpServerCategory;
|
|
257
|
+
readonly url?: string;
|
|
258
|
+
readonly source: McpServerSource;
|
|
259
|
+
}
|
|
260
|
+
/** Options for controlling MCP server discovery behavior. */
|
|
261
|
+
export interface McpDiscoveryOptions {
|
|
262
|
+
/** Whether to also fetch from a remote registry. Defaults to false. */
|
|
263
|
+
readonly includeRemote?: boolean;
|
|
264
|
+
/** Override the default remote registry URL. */
|
|
265
|
+
readonly remoteRegistryUrl?: string;
|
|
266
|
+
/** Request timeout in milliseconds for remote fetches. Defaults to 5000. */
|
|
267
|
+
readonly remoteTimeoutMs?: number;
|
|
268
|
+
}
|
|
226
269
|
/** User override configuration from forgecraft.yaml / .forgecraft.json. */
|
|
227
270
|
export interface ForgeCraftConfig {
|
|
228
271
|
/** Human-readable project name. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iDAAiD;AACjD,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/types.js
CHANGED
|
@@ -24,6 +24,12 @@ export const ALL_TAGS = [
|
|
|
24
24
|
"INFRA",
|
|
25
25
|
"MOBILE",
|
|
26
26
|
"ANALYTICS",
|
|
27
|
+
"HIPAA",
|
|
28
|
+
"SOC2",
|
|
29
|
+
"DATA-LINEAGE",
|
|
30
|
+
"OBSERVABILITY-XRAY",
|
|
31
|
+
"MEDALLION-ARCHITECTURE",
|
|
32
|
+
"ZERO-TRUST",
|
|
27
33
|
];
|
|
28
34
|
/** All valid content tiers as a constant array for schema validation. */
|
|
29
35
|
export const CONTENT_TIERS = ["core", "recommended", "optional"];
|