claudex-setup 1.9.0 → 1.10.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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.10.0] - 2026-04-01
4
+
5
+ ### Added
6
+ - 11 new MCP packs (15→26): sequential-thinking, jira-confluence, ga4-analytics, search-console, n8n-workflows, zendesk, infisical-secrets, shopify, huggingface, blender, wordpress
7
+ - 7 new domain packs (10→17→16 final): ecommerce, ai-ml, devops-cicd, design-system, docs-content, security-focused
8
+ - Smart recommendation for all new packs based on detected stack and domain
9
+ - Detection logic: Storybook, Docusaurus, Stripe, LangChain, GitHub Actions, auth deps
10
+
3
11
  ## [1.9.0] - 2026-03-31
4
12
 
5
13
  ### Added
package/README.md CHANGED
@@ -148,16 +148,16 @@ It exposes:
148
148
  - permission profiles: `read-only`, `suggest-only`, `safe-write`, `power-user`, `internal-research`
149
149
  - hook registry with trigger point, purpose, side effects, risk, and rollback path
150
150
  - policy packs for baseline engineering, security-sensitive repos, OSS, and regulated-lite teams
151
- - domain packs for backend, frontend, data, infra, OSS, and enterprise-governed repos
152
- - MCP packs for live docs and framework-aware tooling such as Context7 and Next.js devtools
151
+ - 16 domain packs: backend-api, frontend-ui, data-pipeline, infra-platform, oss-library, enterprise-governed, monorepo, mobile, regulated-lite, ecommerce, ai-ml, devops-cicd, design-system, docs-content, security-focused, baseline-general
152
+ - 26 MCP packs: Context7, Next.js devtools, GitHub, PostgreSQL, Playwright, Docker, Notion, Linear, Sentry, Slack, Stripe, Figma, Shopify, Hugging Face, Blender, WordPress, Jira/Confluence, GA4, Search Console, n8n, Zendesk, Infisical, Composio, memory, sequential-thinking, mcp-security
153
153
  - a pilot rollout kit with scope, approvals, success metrics, and rollback expectations
154
154
 
155
155
  ## Domain Packs And MCP Packs
156
156
 
157
157
  `augment` and `suggest-only` now recommend repo-shaped guidance instead of giving every project the same advice.
158
158
 
159
- - domain packs identify the repo shape: `backend-api`, `frontend-ui`, `data-pipeline`, `infra-platform`, `oss-library`, `enterprise-governed`
160
- - MCP packs recommend current-tooling companions: `context7-docs` for live docs, `next-devtools` for Next.js repos
159
+ - 16 domain packs identify repo shape and recommend relevant modules
160
+ - 26 MCP packs recommend tooling companions matched to your detected domain and stack
161
161
  - write-capable flows can merge MCP packs directly into `.claude/settings.json`
162
162
 
163
163
  ```bash
@@ -227,7 +227,7 @@ jobs:
227
227
  runs-on: ubuntu-latest
228
228
  steps:
229
229
  - uses: actions/checkout@v4
230
- - uses: DnaFin/claudex-setup@v1.9.0
230
+ - uses: DnaFin/claudex-setup@v1.10.0
231
231
  with:
232
232
  threshold: 50
233
233
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudex-setup",
3
- "version": "1.9.0",
3
+ "version": "1.10.1",
4
4
  "description": "Audit and improve Claude Code readiness with discover, plan, apply, governance, and benchmark workflows.",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -4,8 +4,8 @@
4
4
  "total_items": 1107,
5
5
  "tested": 948,
6
6
  "last_id": 1157,
7
- "domain_packs": 10,
8
- "mcp_packs": 5,
7
+ "domain_packs": 16,
8
+ "mcp_packs": 26,
9
9
  "anti_patterns": 53,
10
10
  "contract_version": "1.0.0"
11
11
  }
@@ -79,6 +79,54 @@ const DOMAIN_PACKS = [
79
79
  recommendedMcpPacks: ['context7-docs'],
80
80
  benchmarkFocus: ['audit trail completeness', 'change traceability', 'policy compliance readiness'],
81
81
  },
82
+ {
83
+ key: 'ecommerce',
84
+ label: 'E-Commerce',
85
+ useWhen: 'Shopify, WooCommerce, Stripe, or storefront repos with payment, catalog, and analytics workflows.',
86
+ recommendedModules: ['verification', 'security workflow', 'commands', 'rules'],
87
+ recommendedMcpPacks: ['context7-docs', 'stripe-mcp'],
88
+ benchmarkFocus: ['payment safety', 'catalog workflow quality', 'analytics integration'],
89
+ },
90
+ {
91
+ key: 'ai-ml',
92
+ label: 'AI / ML',
93
+ useWhen: 'Repos with LLM chains, ML pipelines, model training, or AI agent workflows.',
94
+ recommendedModules: ['verification', 'agents', 'commands', 'benchmark'],
95
+ recommendedMcpPacks: ['context7-docs'],
96
+ benchmarkFocus: ['pipeline reproducibility', 'model workflow safety', 'experiment tracking'],
97
+ },
98
+ {
99
+ key: 'devops-cicd',
100
+ label: 'DevOps / CI/CD',
101
+ useWhen: 'Repos focused on CI/CD pipelines, GitHub Actions, deployment automation, or release engineering.',
102
+ recommendedModules: ['ci-devops', 'commands', 'hooks', 'governance'],
103
+ recommendedMcpPacks: ['context7-docs', 'github-mcp', 'docker-mcp'],
104
+ benchmarkFocus: ['pipeline safety', 'release workflow quality', 'deployment verification'],
105
+ },
106
+ {
107
+ key: 'design-system',
108
+ label: 'Design System',
109
+ useWhen: 'Component libraries, design token repos, or Storybook-driven projects with visual QA needs.',
110
+ recommendedModules: ['frontend rules', 'commands', 'verification', 'benchmark'],
111
+ recommendedMcpPacks: ['context7-docs', 'figma-mcp', 'playwright-mcp'],
112
+ benchmarkFocus: ['component quality', 'visual regression', 'token consistency'],
113
+ },
114
+ {
115
+ key: 'docs-content',
116
+ label: 'Docs / Content',
117
+ useWhen: 'Documentation sites, knowledge bases, or content-heavy repos (Docusaurus, GitBook, MDX).',
118
+ recommendedModules: ['commands', 'rules', 'verification'],
119
+ recommendedMcpPacks: ['context7-docs'],
120
+ benchmarkFocus: ['content quality', 'link integrity', 'build verification'],
121
+ },
122
+ {
123
+ key: 'security-focused',
124
+ label: 'Security-Focused',
125
+ useWhen: 'Repos handling auth, payments, PII, or secrets that need strict Claude guardrails.',
126
+ recommendedModules: ['governance', 'suggest-only profile', 'hooks', 'audit logging'],
127
+ recommendedMcpPacks: ['context7-docs', 'mcp-security'],
128
+ benchmarkFocus: ['permission posture', 'secrets protection', 'audit trail quality'],
129
+ },
82
130
  ];
83
131
 
84
132
  function uniqueByKey(items) {
@@ -207,6 +255,76 @@ function detectDomainPacks(ctx, stacks, assets = null) {
207
255
  ]);
208
256
  }
209
257
 
258
+ // E-commerce detection
259
+ const isEcommerce = deps.stripe || deps['@stripe/stripe-js'] || deps.shopify || deps['@shopify/shopify-api'] ||
260
+ deps.woocommerce || ctx.hasDir('products') || ctx.hasDir('checkout') || ctx.hasDir('cart');
261
+ if (isEcommerce) {
262
+ addMatch('ecommerce', [
263
+ 'Detected e-commerce dependencies or storefront structure.',
264
+ deps.stripe ? 'Stripe dependency detected.' : null,
265
+ ctx.hasDir('checkout') ? 'Checkout directory detected.' : null,
266
+ ]);
267
+ }
268
+
269
+ // AI/ML detection
270
+ const isAiMl = deps.langchain || deps['@langchain/core'] || deps.openai || deps.anthropic ||
271
+ deps['@anthropic-ai/sdk'] || deps.transformers || deps.torch || deps.tensorflow ||
272
+ ctx.hasDir('chains') || ctx.hasDir('agents') || ctx.hasDir('models') || ctx.hasDir('prompts');
273
+ if (isAiMl && !hasData) {
274
+ addMatch('ai-ml', [
275
+ 'Detected AI/ML dependencies or agent structure.',
276
+ deps.langchain ? 'LangChain detected.' : null,
277
+ ctx.hasDir('chains') ? 'Chain directory detected.' : null,
278
+ ]);
279
+ }
280
+
281
+ // DevOps/CI detection
282
+ const isDevopsCicd = ctx.hasDir('.github/workflows') || ctx.hasDir('.circleci') ||
283
+ ctx.files.includes('Jenkinsfile') || ctx.files.includes('.gitlab-ci.yml') ||
284
+ ctx.hasDir('deploy') || ctx.hasDir('scripts/deploy');
285
+ if (isDevopsCicd && !hasInfra) {
286
+ addMatch('devops-cicd', [
287
+ 'Detected CI/CD pipelines or deployment scripts.',
288
+ ctx.hasDir('.github/workflows') ? 'GitHub Actions detected.' : null,
289
+ ctx.hasDir('deploy') ? 'Deploy directory detected.' : null,
290
+ ]);
291
+ }
292
+
293
+ // Design system detection
294
+ const isDesignSystem = deps.storybook || deps['@storybook/react'] || deps['@storybook/vue3'] ||
295
+ ctx.hasDir('tokens') || ctx.hasDir('design-tokens') ||
296
+ (ctx.hasDir('components') && ctx.files.includes('.storybook'));
297
+ if (isDesignSystem) {
298
+ addMatch('design-system', [
299
+ 'Detected design system or component library signals.',
300
+ deps.storybook ? 'Storybook detected.' : null,
301
+ ctx.hasDir('tokens') ? 'Design tokens detected.' : null,
302
+ ]);
303
+ }
304
+
305
+ // Docs/content detection
306
+ const isDocsContent = deps.docusaurus || deps['@docusaurus/core'] || deps.nextra || deps.vitepress ||
307
+ deps.gitbook || ctx.files.includes('docusaurus.config.js') || ctx.files.includes('mkdocs.yml') ||
308
+ (ctx.hasDir('docs') && ctx.hasDir('content'));
309
+ if (isDocsContent) {
310
+ addMatch('docs-content', [
311
+ 'Detected documentation site or content-heavy structure.',
312
+ deps.docusaurus ? 'Docusaurus detected.' : null,
313
+ ctx.files.includes('mkdocs.yml') ? 'MkDocs detected.' : null,
314
+ ]);
315
+ }
316
+
317
+ // Security-focused detection
318
+ const isSecurityFocused = ctx.files.includes('SECURITY.md') &&
319
+ (hasBackend || deps.bcrypt || deps.jsonwebtoken || deps.passport || deps['next-auth']);
320
+ if (isSecurityFocused && !isRegulated) {
321
+ addMatch('security-focused', [
322
+ 'Detected security-sensitive backend with auth dependencies.',
323
+ deps.jsonwebtoken ? 'JWT auth detected.' : null,
324
+ deps.passport ? 'Passport auth detected.' : null,
325
+ ]);
326
+ }
327
+
210
328
  const deduped = uniqueByKey(matches);
211
329
  if (deduped.length === 0) {
212
330
  return [{
package/src/mcp-packs.js CHANGED
@@ -61,6 +61,274 @@ const MCP_PACKS = [
61
61
  },
62
62
  },
63
63
  },
64
+ {
65
+ key: 'playwright-mcp',
66
+ label: 'Playwright Browser',
67
+ useWhen: 'Frontend repos that need browser automation, E2E testing, or visual QA during Claude sessions.',
68
+ adoption: 'Recommended for frontend-ui repos with E2E tests. No auth required.',
69
+ servers: {
70
+ playwright: {
71
+ command: 'npx',
72
+ args: ['-y', '@playwright/mcp@latest'],
73
+ },
74
+ },
75
+ },
76
+ {
77
+ key: 'docker-mcp',
78
+ label: 'Docker',
79
+ useWhen: 'Repos with containerized workflows that benefit from container management during Claude sessions.',
80
+ adoption: 'Useful for infra-platform and backend repos. Requires Docker running locally.',
81
+ servers: {
82
+ docker: {
83
+ command: 'npx',
84
+ args: ['-y', '@modelcontextprotocol/server-docker'],
85
+ },
86
+ },
87
+ },
88
+ {
89
+ key: 'notion-mcp',
90
+ label: 'Notion',
91
+ useWhen: 'Teams using Notion for documentation, wikis, or knowledge bases that Claude should reference.',
92
+ adoption: 'Useful for teams with Notion-based docs. Requires NOTION_API_KEY env var.',
93
+ servers: {
94
+ notion: {
95
+ command: 'npx',
96
+ args: ['-y', '@notionhq/notion-mcp-server'],
97
+ env: { NOTION_API_KEY: '${NOTION_API_KEY}' },
98
+ },
99
+ },
100
+ },
101
+ {
102
+ key: 'linear-mcp',
103
+ label: 'Linear',
104
+ useWhen: 'Teams using Linear for issue tracking that want Claude to read and create issues.',
105
+ adoption: 'Useful for teams managing sprints in Linear. Requires LINEAR_API_KEY env var.',
106
+ servers: {
107
+ linear: {
108
+ command: 'npx',
109
+ args: ['-y', '@linear/mcp-server'],
110
+ env: { LINEAR_API_KEY: '${LINEAR_API_KEY}' },
111
+ },
112
+ },
113
+ },
114
+ {
115
+ key: 'sentry-mcp',
116
+ label: 'Sentry',
117
+ useWhen: 'Repos with Sentry error tracking that benefit from error context during debugging sessions.',
118
+ adoption: 'Useful for production repos. Requires SENTRY_AUTH_TOKEN env var.',
119
+ servers: {
120
+ sentry: {
121
+ command: 'npx',
122
+ args: ['-y', '@sentry/mcp-server'],
123
+ env: { SENTRY_AUTH_TOKEN: '${SENTRY_AUTH_TOKEN}' },
124
+ },
125
+ },
126
+ },
127
+ {
128
+ key: 'slack-mcp',
129
+ label: 'Slack',
130
+ useWhen: 'Teams using Slack that want Claude to draft, preview, or post messages.',
131
+ adoption: 'Useful for team workflows. Requires SLACK_BOT_TOKEN env var.',
132
+ servers: {
133
+ slack: {
134
+ command: 'npx',
135
+ args: ['-y', '@anthropic/slack-mcp-server'],
136
+ env: { SLACK_BOT_TOKEN: '${SLACK_BOT_TOKEN}' },
137
+ },
138
+ },
139
+ },
140
+ {
141
+ key: 'stripe-mcp',
142
+ label: 'Stripe',
143
+ useWhen: 'Repos with Stripe integration for payments, subscriptions, or billing workflows.',
144
+ adoption: 'Useful for e-commerce and SaaS repos. Requires STRIPE_API_KEY env var.',
145
+ servers: {
146
+ stripe: {
147
+ command: 'npx',
148
+ args: ['-y', '@stripe/mcp-server'],
149
+ env: { STRIPE_API_KEY: '${STRIPE_API_KEY}' },
150
+ },
151
+ },
152
+ },
153
+ {
154
+ key: 'figma-mcp',
155
+ label: 'Figma',
156
+ useWhen: 'Design-heavy repos where Claude needs access to Figma designs and components.',
157
+ adoption: 'Useful for frontend-ui repos with design systems. Requires FIGMA_ACCESS_TOKEN env var.',
158
+ servers: {
159
+ figma: {
160
+ command: 'npx',
161
+ args: ['-y', '@anthropic/figma-mcp-server'],
162
+ env: { FIGMA_ACCESS_TOKEN: '${FIGMA_ACCESS_TOKEN}' },
163
+ },
164
+ },
165
+ },
166
+ {
167
+ key: 'mcp-security',
168
+ label: 'MCP Security Scanner',
169
+ useWhen: 'Any repo using MCP servers that should be scanned for tool poisoning and prompt injection.',
170
+ adoption: 'Recommended as a safety companion for any repo with 2+ MCP servers.',
171
+ servers: {
172
+ 'mcp-scan': {
173
+ command: 'npx',
174
+ args: ['-y', 'mcp-scan@latest'],
175
+ },
176
+ },
177
+ },
178
+ {
179
+ key: 'composio-mcp',
180
+ label: 'Composio Universal',
181
+ useWhen: 'Teams needing 500+ integrations through a single MCP gateway with centralized OAuth.',
182
+ adoption: 'Useful for enterprise or integration-heavy repos. Requires COMPOSIO_API_KEY env var.',
183
+ servers: {
184
+ composio: {
185
+ command: 'npx',
186
+ args: ['-y', 'composio-mcp@latest'],
187
+ env: { COMPOSIO_API_KEY: '${COMPOSIO_API_KEY}' },
188
+ },
189
+ },
190
+ },
191
+ {
192
+ key: 'sequential-thinking',
193
+ label: 'Sequential Thinking',
194
+ useWhen: 'Complex problem-solving sessions that benefit from structured step-by-step reasoning.',
195
+ adoption: 'Safe default for any repo. No auth required.',
196
+ servers: {
197
+ 'sequential-thinking': {
198
+ command: 'npx',
199
+ args: ['-y', '@modelcontextprotocol/server-sequential-thinking'],
200
+ },
201
+ },
202
+ },
203
+ {
204
+ key: 'jira-confluence',
205
+ label: 'Jira + Confluence',
206
+ useWhen: 'Teams using Atlassian for issue tracking and documentation.',
207
+ adoption: 'Requires ATLASSIAN_API_TOKEN and ATLASSIAN_EMAIL env vars.',
208
+ servers: {
209
+ jira: {
210
+ command: 'npx',
211
+ args: ['-y', '@anthropic/jira-mcp-server'],
212
+ env: { ATLASSIAN_API_TOKEN: '${ATLASSIAN_API_TOKEN}', ATLASSIAN_EMAIL: '${ATLASSIAN_EMAIL}' },
213
+ },
214
+ },
215
+ },
216
+ {
217
+ key: 'ga4-analytics',
218
+ label: 'Google Analytics 4',
219
+ useWhen: 'Repos with web analytics needs — live GA4 data, attribution, and audience insights.',
220
+ adoption: 'Requires GA4 credentials. 1,641 stars.',
221
+ servers: {
222
+ ga4: {
223
+ command: 'npx',
224
+ args: ['-y', '@anthropic/ga4-mcp-server'],
225
+ env: { GA4_PROPERTY_ID: '${GA4_PROPERTY_ID}' },
226
+ },
227
+ },
228
+ },
229
+ {
230
+ key: 'search-console',
231
+ label: 'Google Search Console',
232
+ useWhen: 'SEO-focused repos that need search performance data, indexing status, and sitemap insights.',
233
+ adoption: 'Requires GSC credentials. 595 stars.',
234
+ servers: {
235
+ gsc: {
236
+ command: 'npx',
237
+ args: ['-y', 'mcp-gsc@latest'],
238
+ env: { GSC_CREDENTIALS: '${GSC_CREDENTIALS}' },
239
+ },
240
+ },
241
+ },
242
+ {
243
+ key: 'n8n-workflows',
244
+ label: 'n8n Workflow Automation',
245
+ useWhen: 'Teams using n8n for workflow automation with 1,396 integration nodes.',
246
+ adoption: 'Requires n8n instance URL. 17,092 stars.',
247
+ servers: {
248
+ n8n: {
249
+ command: 'npx',
250
+ args: ['-y', 'n8n-mcp-server@latest'],
251
+ env: { N8N_URL: '${N8N_URL}', N8N_API_KEY: '${N8N_API_KEY}' },
252
+ },
253
+ },
254
+ },
255
+ {
256
+ key: 'zendesk-mcp',
257
+ label: 'Zendesk',
258
+ useWhen: 'Support teams using Zendesk for ticket management and help center content.',
259
+ adoption: 'Requires ZENDESK_API_TOKEN env var. 79 stars.',
260
+ servers: {
261
+ zendesk: {
262
+ command: 'npx',
263
+ args: ['-y', 'zendesk-mcp-server@latest'],
264
+ env: { ZENDESK_API_TOKEN: '${ZENDESK_API_TOKEN}', ZENDESK_SUBDOMAIN: '${ZENDESK_SUBDOMAIN}' },
265
+ },
266
+ },
267
+ },
268
+ {
269
+ key: 'infisical-secrets',
270
+ label: 'Infisical Secrets',
271
+ useWhen: 'Repos using Infisical for secrets management with auto-rotation.',
272
+ adoption: 'Requires INFISICAL_TOKEN env var. 25,629 stars.',
273
+ servers: {
274
+ infisical: {
275
+ command: 'npx',
276
+ args: ['-y', '@infisical/mcp-server'],
277
+ env: { INFISICAL_TOKEN: '${INFISICAL_TOKEN}' },
278
+ },
279
+ },
280
+ },
281
+ {
282
+ key: 'shopify-mcp',
283
+ label: 'Shopify',
284
+ useWhen: 'Shopify stores and apps that need API schema access and deployment tooling.',
285
+ adoption: 'Official Shopify dev MCP. Requires SHOPIFY_ACCESS_TOKEN env var.',
286
+ servers: {
287
+ shopify: {
288
+ command: 'npx',
289
+ args: ['-y', '@shopify/dev-mcp-server'],
290
+ env: { SHOPIFY_ACCESS_TOKEN: '${SHOPIFY_ACCESS_TOKEN}' },
291
+ },
292
+ },
293
+ },
294
+ {
295
+ key: 'huggingface-mcp',
296
+ label: 'Hugging Face',
297
+ useWhen: 'AI/ML repos that need model search, dataset discovery, and Spaces integration.',
298
+ adoption: 'Useful for ai-ml domain repos. Requires HF_TOKEN env var.',
299
+ servers: {
300
+ huggingface: {
301
+ command: 'npx',
302
+ args: ['-y', '@huggingface/mcp-server'],
303
+ env: { HF_TOKEN: '${HF_TOKEN}' },
304
+ },
305
+ },
306
+ },
307
+ {
308
+ key: 'blender-mcp',
309
+ label: 'Blender 3D',
310
+ useWhen: '3D modeling, animation, or rendering repos that use Blender. 18,219 stars.',
311
+ adoption: 'Requires Blender installed locally. Python bridge.',
312
+ servers: {
313
+ blender: {
314
+ command: 'npx',
315
+ args: ['-y', 'blender-mcp@latest'],
316
+ },
317
+ },
318
+ },
319
+ {
320
+ key: 'wordpress-mcp',
321
+ label: 'WordPress',
322
+ useWhen: 'WordPress sites needing content management, site ops, and plugin workflows.',
323
+ adoption: 'Requires WP_URL and WP_AUTH_TOKEN env vars. 115 stars.',
324
+ servers: {
325
+ wordpress: {
326
+ command: 'npx',
327
+ args: ['-y', 'wordpress-mcp-server@latest'],
328
+ env: { WP_URL: '${WP_URL}', WP_AUTH_TOKEN: '${WP_AUTH_TOKEN}' },
329
+ },
330
+ },
331
+ },
64
332
  ];
65
333
 
66
334
  function clone(value) {
@@ -109,9 +377,10 @@ function recommendMcpPacks(stacks = [], domainPacks = []) {
109
377
  recommended.add('context7-docs');
110
378
  }
111
379
 
112
- // GitHub MCP for repos with .github directory
113
380
  const domainKeys = new Set(domainPacks.map(p => p.key));
114
- if (domainKeys.has('oss-library') || domainKeys.has('enterprise-governed')) {
381
+
382
+ // GitHub MCP for collaborative repos
383
+ if (domainKeys.has('oss-library') || domainKeys.has('enterprise-governed') || domainKeys.has('monorepo')) {
115
384
  recommended.add('github-mcp');
116
385
  }
117
386
 
@@ -120,11 +389,72 @@ function recommendMcpPacks(stacks = [], domainPacks = []) {
120
389
  recommended.add('postgres-mcp');
121
390
  }
122
391
 
123
- // Memory MCP for complex/monorepo projects
392
+ // Memory MCP for complex projects
124
393
  if (domainKeys.has('monorepo') || domainKeys.has('enterprise-governed')) {
125
394
  recommended.add('memory-mcp');
126
395
  }
127
396
 
397
+ // Playwright for frontend repos
398
+ if (domainKeys.has('frontend-ui') || stackKeys.has('react') || stackKeys.has('vue') || stackKeys.has('angular') || stackKeys.has('svelte')) {
399
+ recommended.add('playwright-mcp');
400
+ }
401
+
402
+ // Docker for infra repos
403
+ if (domainKeys.has('infra-platform') || stackKeys.has('docker')) {
404
+ recommended.add('docker-mcp');
405
+ }
406
+
407
+ // Sentry for production backend/frontend
408
+ if (domainKeys.has('backend-api') || domainKeys.has('frontend-ui')) {
409
+ recommended.add('sentry-mcp');
410
+ }
411
+
412
+ // Figma for frontend-ui with design systems
413
+ if (domainKeys.has('frontend-ui')) {
414
+ recommended.add('figma-mcp');
415
+ }
416
+
417
+ // Stripe for e-commerce
418
+ if (domainKeys.has('ecommerce')) {
419
+ recommended.add('stripe-mcp');
420
+ }
421
+
422
+ // Jira for enterprise teams
423
+ if (domainKeys.has('enterprise-governed')) {
424
+ recommended.add('jira-confluence');
425
+ }
426
+
427
+ // Analytics for ecommerce and marketing
428
+ if (domainKeys.has('ecommerce') || domainKeys.has('docs-content')) {
429
+ recommended.add('ga4-analytics');
430
+ recommended.add('search-console');
431
+ }
432
+
433
+ // Shopify for ecommerce
434
+ if (domainKeys.has('ecommerce')) {
435
+ recommended.add('shopify-mcp');
436
+ }
437
+
438
+ // HuggingFace for AI/ML
439
+ if (domainKeys.has('ai-ml')) {
440
+ recommended.add('huggingface-mcp');
441
+ }
442
+
443
+ // Zendesk for support
444
+ if (domainKeys.has('enterprise-governed')) {
445
+ recommended.add('zendesk-mcp');
446
+ }
447
+
448
+ // Infisical for security-focused
449
+ if (domainKeys.has('security-focused') || domainKeys.has('regulated-lite')) {
450
+ recommended.add('infisical-secrets');
451
+ }
452
+
453
+ // Security scanner when 2+ MCP servers recommended
454
+ if (recommended.size >= 2) {
455
+ recommended.add('mcp-security');
456
+ }
457
+
128
458
  return MCP_PACKS
129
459
  .filter(pack => recommended.has(pack.key))
130
460
  .map(pack => clone(pack));
package/src/techniques.js CHANGED
@@ -696,8 +696,12 @@ const TECHNIQUES = {
696
696
  id: 1801,
697
697
  name: '2+ MCP servers for rich tooling',
698
698
  check: (ctx) => {
699
+ let count = 0;
699
700
  const settings = ctx.jsonFile('.claude/settings.local.json') || ctx.jsonFile('.claude/settings.json');
700
- return !!(settings && settings.mcpServers && Object.keys(settings.mcpServers).length >= 2);
701
+ if (settings && settings.mcpServers) count += Object.keys(settings.mcpServers).length;
702
+ const mcpJson = ctx.jsonFile('.mcp.json');
703
+ if (mcpJson && mcpJson.mcpServers) count += Object.keys(mcpJson.mcpServers).length;
704
+ return count >= 2;
701
705
  },
702
706
  impact: 'medium',
703
707
  rating: 4,