@stacksfinder/mcp-server 1.1.0 → 1.2.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/LICENSE +16 -16
- package/README.md +92 -3
- package/dist/compatibility/index.d.ts +11 -0
- package/dist/compatibility/index.d.ts.map +1 -0
- package/dist/compatibility/index.js +13 -0
- package/dist/compatibility/index.js.map +1 -0
- package/dist/compatibility/rules.d.ts +29 -0
- package/dist/compatibility/rules.d.ts.map +1 -0
- package/dist/compatibility/rules.js +419 -0
- package/dist/compatibility/rules.js.map +1 -0
- package/dist/compatibility/scoring.d.ts +54 -0
- package/dist/compatibility/scoring.d.ts.map +1 -0
- package/dist/compatibility/scoring.js +209 -0
- package/dist/compatibility/scoring.js.map +1 -0
- package/dist/compatibility/types.d.ts +176 -0
- package/dist/compatibility/types.d.ts.map +1 -0
- package/dist/compatibility/types.js +26 -0
- package/dist/compatibility/types.js.map +1 -0
- package/dist/compatibility/utils.d.ts +82 -0
- package/dist/compatibility/utils.d.ts.map +1 -0
- package/dist/compatibility/utils.js +269 -0
- package/dist/compatibility/utils.js.map +1 -0
- package/dist/data/357/200/242/357/200/212cp H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serversrcdatacompatibility_matrix.json H:bac_/303/240_guigui_v2stack_finderpackagesmcp-serverdistdata/357/200/242" +226 -0
- package/dist/http.d.ts +7 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +69 -0
- package/dist/http.js.map +1 -0
- package/dist/lib/mcp-compatibility/index.d.ts +33 -0
- package/dist/lib/mcp-compatibility/index.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/index.js +35 -0
- package/dist/lib/mcp-compatibility/index.js.map +1 -0
- package/dist/lib/mcp-compatibility/rules.d.ts +29 -0
- package/dist/lib/mcp-compatibility/rules.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/rules.js +419 -0
- package/dist/lib/mcp-compatibility/rules.js.map +1 -0
- package/dist/lib/mcp-compatibility/scoring.d.ts +54 -0
- package/dist/lib/mcp-compatibility/scoring.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/scoring.js +209 -0
- package/dist/lib/mcp-compatibility/scoring.js.map +1 -0
- package/dist/lib/mcp-compatibility/types.d.ts +176 -0
- package/dist/lib/mcp-compatibility/types.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/types.js +26 -0
- package/dist/lib/mcp-compatibility/types.js.map +1 -0
- package/dist/lib/mcp-compatibility/utils.d.ts +82 -0
- package/dist/lib/mcp-compatibility/utils.d.ts.map +1 -0
- package/dist/lib/mcp-compatibility/utils.js +269 -0
- package/dist/lib/mcp-compatibility/utils.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +296 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/check-compatibility.d.ts +43 -0
- package/dist/tools/check-compatibility.d.ts.map +1 -0
- package/dist/tools/check-compatibility.js +133 -0
- package/dist/tools/check-compatibility.js.map +1 -0
- package/dist/tools/project-kit/analyze-repo.d.ts +50 -0
- package/dist/tools/project-kit/analyze-repo.d.ts.map +1 -0
- package/dist/tools/project-kit/analyze-repo.js +456 -0
- package/dist/tools/project-kit/analyze-repo.js.map +1 -0
- package/dist/tools/project-kit/detect-stack.d.ts +16 -0
- package/dist/tools/project-kit/detect-stack.d.ts.map +1 -0
- package/dist/tools/project-kit/detect-stack.js +572 -0
- package/dist/tools/project-kit/detect-stack.js.map +1 -0
- package/dist/tools/project-kit/execute-installation.d.ts +50 -0
- package/dist/tools/project-kit/execute-installation.d.ts.map +1 -0
- package/dist/tools/project-kit/execute-installation.js +440 -0
- package/dist/tools/project-kit/execute-installation.js.map +1 -0
- package/dist/tools/project-kit/generate.d.ts +70 -0
- package/dist/tools/project-kit/generate.d.ts.map +1 -0
- package/dist/tools/project-kit/generate.js +455 -0
- package/dist/tools/project-kit/generate.js.map +1 -0
- package/dist/tools/project-kit/index.d.ts +18 -0
- package/dist/tools/project-kit/index.d.ts.map +1 -0
- package/dist/tools/project-kit/index.js +21 -0
- package/dist/tools/project-kit/index.js.map +1 -0
- package/dist/tools/project-kit/installation-types.d.ts +147 -0
- package/dist/tools/project-kit/installation-types.d.ts.map +1 -0
- package/dist/tools/project-kit/installation-types.js +491 -0
- package/dist/tools/project-kit/installation-types.js.map +1 -0
- package/dist/tools/project-kit/match-mcps.d.ts +67 -0
- package/dist/tools/project-kit/match-mcps.d.ts.map +1 -0
- package/dist/tools/project-kit/match-mcps.js +497 -0
- package/dist/tools/project-kit/match-mcps.js.map +1 -0
- package/dist/tools/project-kit/prepare-installation.d.ts +54 -0
- package/dist/tools/project-kit/prepare-installation.d.ts.map +1 -0
- package/dist/tools/project-kit/prepare-installation.js +382 -0
- package/dist/tools/project-kit/prepare-installation.js.map +1 -0
- package/dist/tools/project-kit/types.d.ts +200 -0
- package/dist/tools/project-kit/types.d.ts.map +1 -0
- package/dist/tools/project-kit/types.js +76 -0
- package/dist/tools/project-kit/types.js.map +1 -0
- package/dist/tools/recommend.d.ts.map +1 -1
- package/dist/tools/recommend.js +9 -4
- package/dist/tools/recommend.js.map +1 -1
- package/package.json +8 -3
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2025
|
|
3
|
+
Copyright (c) 2025 StacksFinder
|
|
4
4
|
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
11
|
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
14
|
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# @stacksfinder/mcp-server
|
|
2
2
|
|
|
3
|
+
[](https://smithery.ai/server/hoklims/stacksfinder-mcp)
|
|
3
4
|
[](https://www.npmjs.com/package/@stacksfinder/mcp-server)
|
|
4
5
|
[](https://opensource.org/licenses/MIT)
|
|
5
6
|
|
|
6
7
|
MCP (Model Context Protocol) server that brings **deterministic tech stack recommendations** to LLM clients like Claude, Cursor, Windsurf, and other MCP-compatible tools.
|
|
7
8
|
|
|
8
|
-
**Try it free** —
|
|
9
|
+
**Try it free** — 8 tools work without an account, including a daily demo recommendation and MCP project kit tools.
|
|
9
10
|
|
|
10
11
|
## Quick Start
|
|
11
12
|
|
|
@@ -86,7 +87,12 @@ Add to `.vscode/mcp.json`:
|
|
|
86
87
|
| `list_technologies` | List all 30+ tech IDs by category |
|
|
87
88
|
| `analyze_tech` | 6-dimension scores, strengths, weaknesses, compatible techs |
|
|
88
89
|
| `compare_techs` | Side-by-side comparison of 2-4 technologies |
|
|
89
|
-
| `
|
|
90
|
+
| `recommend_stack_demo` | **FREE 1x/day** — Full stack recommendation for any project type |
|
|
91
|
+
| `check_mcp_compatibility` | 🆕 Check conflicts, redundancies, and synergies between MCP servers |
|
|
92
|
+
| `generate_mcp_kit` | 🆕 Generate optimal stack + recommended MCPs from project description |
|
|
93
|
+
| `analyze_repo_mcps` | 🆕 Analyze your repository and recommend relevant MCP servers |
|
|
94
|
+
| `prepare_mcp_installation` | 🆕 Detect MCPs needed and generate `.env-mcp` template |
|
|
95
|
+
| `execute_mcp_installation` | 🆕 Parse `.env-mcp` and generate IDE install commands |
|
|
90
96
|
|
|
91
97
|
### Pro Tools (requires API key)
|
|
92
98
|
|
|
@@ -246,6 +252,89 @@ Express 4.17.0 is missing security patches
|
|
|
246
252
|
- ✅ High: outdated Node version
|
|
247
253
|
```
|
|
248
254
|
|
|
255
|
+
### check_mcp_compatibility 🆕
|
|
256
|
+
|
|
257
|
+
```
|
|
258
|
+
> check_mcp_compatibility mcps=["supabase-mcp", "neon-mcp", "prisma-mcp"]
|
|
259
|
+
|
|
260
|
+
## MCP Compatibility Check
|
|
261
|
+
|
|
262
|
+
**Health Score: 65/100** (Grade: C)
|
|
263
|
+
|
|
264
|
+
### ⚠️ Conflicts (1)
|
|
265
|
+
- **supabase-mcp** ↔ **neon-mcp**: Both provide database services
|
|
266
|
+
|
|
267
|
+
### 🔄 Redundancies (1)
|
|
268
|
+
- **prisma-mcp** + **supabase-mcp**: Supabase has built-in client
|
|
269
|
+
|
|
270
|
+
### ✅ Synergies (0)
|
|
271
|
+
None detected
|
|
272
|
+
|
|
273
|
+
### 💡 Suggestions
|
|
274
|
+
- Choose one database provider (Supabase OR Neon)
|
|
275
|
+
- If using Supabase, Prisma may be redundant
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### generate_mcp_kit 🆕
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
> generate_mcp_kit projectDescription="SaaS for project management with Supabase and Stripe"
|
|
282
|
+
|
|
283
|
+
## Recommended Stack
|
|
284
|
+
|
|
285
|
+
| Category | Technology | Score |
|
|
286
|
+
|----------|------------|-------|
|
|
287
|
+
| meta-framework | SvelteKit | 84 |
|
|
288
|
+
| database | Supabase | 82 |
|
|
289
|
+
| auth | Better Auth | 80 |
|
|
290
|
+
| payments | Stripe | 96 |
|
|
291
|
+
|
|
292
|
+
## Recommended MCPs
|
|
293
|
+
|
|
294
|
+
| MCP | Priority | Why |
|
|
295
|
+
|-----|----------|-----|
|
|
296
|
+
| supabase-mcp | High | Direct database access |
|
|
297
|
+
| stripe-mcp | High | Payment integration |
|
|
298
|
+
| github-mcp | Medium | Version control |
|
|
299
|
+
|
|
300
|
+
Install all with:
|
|
301
|
+
claude mcp add-json supabase-mcp '{"command":"npx","args":["-y","@supabase/mcp"]}'
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### prepare_mcp_installation 🆕
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
> prepare_mcp_installation
|
|
308
|
+
|
|
309
|
+
✅ Generated .env-mcp with 5 MCP(s) to install.
|
|
310
|
+
|
|
311
|
+
📋 Next steps:
|
|
312
|
+
1. Open .env-mcp
|
|
313
|
+
2. Fill in the 3 required environment variable(s)
|
|
314
|
+
3. Set INSTALL_xxx=false for any MCPs you want to skip
|
|
315
|
+
4. Run execute_mcp_installation to install the MCPs
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### execute_mcp_installation 🆕
|
|
319
|
+
|
|
320
|
+
```
|
|
321
|
+
> execute_mcp_installation targetClient="claude-code"
|
|
322
|
+
|
|
323
|
+
# MCP Installation Summary
|
|
324
|
+
|
|
325
|
+
- ✅ Ready to install: 3
|
|
326
|
+
- ⏳ Missing credentials: 1
|
|
327
|
+
- ⏭️ Skipped: 1
|
|
328
|
+
|
|
329
|
+
## Ready to Install
|
|
330
|
+
- ✅ **Supabase MCP** (`supabase-mcp`)
|
|
331
|
+
- ✅ **GitHub MCP** (`github-mcp`)
|
|
332
|
+
- ✅ **Context7 MCP** (`context7-mcp`)
|
|
333
|
+
|
|
334
|
+
## Installation Command
|
|
335
|
+
claude mcp add-json supabase-mcp '...' && claude mcp add-json github-mcp '...'
|
|
336
|
+
```
|
|
337
|
+
|
|
249
338
|
## Environment Variables
|
|
250
339
|
|
|
251
340
|
| Variable | Required | Default | Description |
|
|
@@ -322,4 +411,4 @@ bun test # Run tests
|
|
|
322
411
|
|
|
323
412
|
## License
|
|
324
413
|
|
|
325
|
-
MIT
|
|
414
|
+
MIT
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @stacksfinder/mcp-compatibility (bundled)
|
|
3
|
+
*
|
|
4
|
+
* MCP compatibility matrix - detect conflicts, redundancies, and synergies between MCP servers.
|
|
5
|
+
*/
|
|
6
|
+
export type { MCPCategory, CompatibilityStatus, Severity, CompatibilityRule, MatchedRule, Suggestion, Grade, CompatibilitySummary, CompatibilityReport, CompatibilityToolOutput, RecommendationConflict, ExcludedRecommendation, AnalyzeRepoCompatibility, } from './types.js';
|
|
7
|
+
export { MCP_CATEGORIES } from './types.js';
|
|
8
|
+
export { MCP_ALIASES, canonicalizeMcpId, pairKey, initRulesIndex, getRulesIndex, findRule, generatePairs, checkAllPairs, getSuggestions, } from './utils.js';
|
|
9
|
+
export { COMPATIBILITY_RULES, getAllRules, getRulesByCategory, getRulesByStatus, CURATED_MCPS, } from './rules.js';
|
|
10
|
+
export { calculateHealthScore, getGrade, generateReport, formatReportAsMarkdown, getReportSummaryLine, } from './scoring.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compatibility/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,KAAK,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @stacksfinder/mcp-compatibility (bundled)
|
|
3
|
+
*
|
|
4
|
+
* MCP compatibility matrix - detect conflicts, redundancies, and synergies between MCP servers.
|
|
5
|
+
*/
|
|
6
|
+
export { MCP_CATEGORIES } from './types.js';
|
|
7
|
+
// Utils
|
|
8
|
+
export { MCP_ALIASES, canonicalizeMcpId, pairKey, initRulesIndex, getRulesIndex, findRule, generatePairs, checkAllPairs, getSuggestions, } from './utils.js';
|
|
9
|
+
// Rules
|
|
10
|
+
export { COMPATIBILITY_RULES, getAllRules, getRulesByCategory, getRulesByStatus, CURATED_MCPS, } from './rules.js';
|
|
11
|
+
// Scoring
|
|
12
|
+
export { calculateHealthScore, getGrade, generateReport, formatReportAsMarkdown, getReportSummaryLine, } from './scoring.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compatibility/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,QAAQ;AACR,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,QAAQ;AACR,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,UAAU;AACV,OAAO,EACL,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Compatibility Rules
|
|
3
|
+
*
|
|
4
|
+
* 30 initial rules covering common conflicts, redundancies, and synergies.
|
|
5
|
+
* Rules are ordered alphabetically by pair key (mcpA < mcpB).
|
|
6
|
+
*/
|
|
7
|
+
import type { CompatibilityRule } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* All compatibility rules.
|
|
10
|
+
* Each rule has mcpA < mcpB (alphabetically) for consistent indexing.
|
|
11
|
+
*/
|
|
12
|
+
export declare const COMPATIBILITY_RULES: CompatibilityRule[];
|
|
13
|
+
/**
|
|
14
|
+
* Get all rules (for initialization)
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAllRules(): CompatibilityRule[];
|
|
17
|
+
/**
|
|
18
|
+
* Get rules by category
|
|
19
|
+
*/
|
|
20
|
+
export declare function getRulesByCategory(category: string): CompatibilityRule[];
|
|
21
|
+
/**
|
|
22
|
+
* Get rules by status
|
|
23
|
+
*/
|
|
24
|
+
export declare function getRulesByStatus(status: string): CompatibilityRule[];
|
|
25
|
+
/**
|
|
26
|
+
* List of curated popular MCPs for the matrix UI
|
|
27
|
+
*/
|
|
28
|
+
export declare const CURATED_MCPS: string[];
|
|
29
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/compatibility/rules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,EA8WlD,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAExE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAEpE;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,UAqCxB,CAAC"}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Compatibility Rules
|
|
3
|
+
*
|
|
4
|
+
* 30 initial rules covering common conflicts, redundancies, and synergies.
|
|
5
|
+
* Rules are ordered alphabetically by pair key (mcpA < mcpB).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* All compatibility rules.
|
|
9
|
+
* Each rule has mcpA < mcpB (alphabetically) for consistent indexing.
|
|
10
|
+
*/
|
|
11
|
+
export const COMPATIBILITY_RULES = [
|
|
12
|
+
// ============================================
|
|
13
|
+
// DATABASE CONFLICTS (4 rules)
|
|
14
|
+
// ============================================
|
|
15
|
+
{
|
|
16
|
+
id: 'db-001',
|
|
17
|
+
mcpA: 'neon-mcp',
|
|
18
|
+
mcpB: 'supabase-mcp',
|
|
19
|
+
status: 'conflict',
|
|
20
|
+
category: 'database',
|
|
21
|
+
severity: 'critical',
|
|
22
|
+
reason: 'Both provide managed PostgreSQL. Using multiple database providers increases complexity and cost.',
|
|
23
|
+
solution: 'Choose one database provider. Neon for serverless scale, Supabase for full BaaS features.',
|
|
24
|
+
recommendation: 'either',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'db-002',
|
|
28
|
+
mcpA: 'planetscale-mcp',
|
|
29
|
+
mcpB: 'supabase-mcp',
|
|
30
|
+
status: 'conflict',
|
|
31
|
+
category: 'database',
|
|
32
|
+
severity: 'critical',
|
|
33
|
+
reason: 'PlanetScale (MySQL) and Supabase (PostgreSQL) are different database paradigms.',
|
|
34
|
+
solution: 'Choose one database. Consider query patterns and team expertise.',
|
|
35
|
+
recommendation: 'either',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
id: 'db-003',
|
|
39
|
+
mcpA: 'neon-mcp',
|
|
40
|
+
mcpB: 'planetscale-mcp',
|
|
41
|
+
status: 'conflict',
|
|
42
|
+
category: 'database',
|
|
43
|
+
severity: 'critical',
|
|
44
|
+
reason: 'Neon (PostgreSQL) and PlanetScale (MySQL) are fundamentally different databases.',
|
|
45
|
+
solution: 'Pick one based on your ORM preference and team experience.',
|
|
46
|
+
recommendation: 'either',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 'db-004',
|
|
50
|
+
mcpA: 'neon-mcp',
|
|
51
|
+
mcpB: 'turso-mcp',
|
|
52
|
+
status: 'conflict',
|
|
53
|
+
category: 'database',
|
|
54
|
+
severity: 'warning',
|
|
55
|
+
reason: 'Both are serverless databases. Turso (SQLite) vs Neon (PostgreSQL) serve different use cases.',
|
|
56
|
+
solution: 'Use Turso for edge-first apps, Neon for traditional server workloads.',
|
|
57
|
+
recommendation: 'either',
|
|
58
|
+
},
|
|
59
|
+
// ============================================
|
|
60
|
+
// ORM REDUNDANCIES (3 rules)
|
|
61
|
+
// ============================================
|
|
62
|
+
{
|
|
63
|
+
id: 'orm-001',
|
|
64
|
+
mcpA: 'drizzle-mcp',
|
|
65
|
+
mcpB: 'prisma-mcp',
|
|
66
|
+
status: 'redundant',
|
|
67
|
+
category: 'orm',
|
|
68
|
+
severity: 'warning',
|
|
69
|
+
reason: 'Both are TypeScript ORMs. Having two ORMs creates inconsistent data access patterns.',
|
|
70
|
+
solution: 'Standardize on one ORM. Drizzle for SQL-first, Prisma for schema-first.',
|
|
71
|
+
recommendation: 'either',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 'orm-002',
|
|
75
|
+
mcpA: 'prisma-mcp',
|
|
76
|
+
mcpB: 'typeorm-mcp',
|
|
77
|
+
status: 'redundant',
|
|
78
|
+
category: 'orm',
|
|
79
|
+
severity: 'warning',
|
|
80
|
+
reason: 'Both are TypeScript ORMs with overlapping functionality.',
|
|
81
|
+
solution: 'Choose Prisma for better DX, TypeORM for decorator-based entities.',
|
|
82
|
+
recommendation: 'A',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: 'orm-003',
|
|
86
|
+
mcpA: 'drizzle-mcp',
|
|
87
|
+
mcpB: 'typeorm-mcp',
|
|
88
|
+
status: 'redundant',
|
|
89
|
+
category: 'orm',
|
|
90
|
+
severity: 'warning',
|
|
91
|
+
reason: 'Multiple ORMs add complexity without clear benefit.',
|
|
92
|
+
solution: 'Standardize on Drizzle for modern SQL-like syntax.',
|
|
93
|
+
recommendation: 'A',
|
|
94
|
+
},
|
|
95
|
+
// ============================================
|
|
96
|
+
// AUTH CONFLICTS (3 rules)
|
|
97
|
+
// ============================================
|
|
98
|
+
{
|
|
99
|
+
id: 'auth-001',
|
|
100
|
+
mcpA: 'auth0-mcp',
|
|
101
|
+
mcpB: 'clerk-mcp',
|
|
102
|
+
status: 'conflict',
|
|
103
|
+
category: 'auth',
|
|
104
|
+
severity: 'warning',
|
|
105
|
+
reason: 'Both are full auth providers. Using multiple auth systems is confusing for users.',
|
|
106
|
+
solution: 'Choose Clerk for faster setup, Auth0 for enterprise compliance.',
|
|
107
|
+
recommendation: 'either',
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
id: 'auth-002',
|
|
111
|
+
mcpA: 'clerk-mcp',
|
|
112
|
+
mcpB: 'supabase-auth-mcp',
|
|
113
|
+
status: 'redundant',
|
|
114
|
+
category: 'auth',
|
|
115
|
+
severity: 'info',
|
|
116
|
+
reason: 'Both provide auth. Supabase Auth is included with Supabase, Clerk is standalone.',
|
|
117
|
+
solution: 'Use Supabase Auth if using Supabase DB, Clerk if you need more auth features.',
|
|
118
|
+
recommendation: 'either',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: 'auth-003',
|
|
122
|
+
mcpA: 'auth0-mcp',
|
|
123
|
+
mcpB: 'lucia-mcp',
|
|
124
|
+
status: 'conflict',
|
|
125
|
+
category: 'auth',
|
|
126
|
+
severity: 'warning',
|
|
127
|
+
reason: 'Auth0 is hosted auth, Lucia is self-hosted. Different paradigms.',
|
|
128
|
+
solution: 'Use Auth0 for managed auth, Lucia for full control.',
|
|
129
|
+
recommendation: 'either',
|
|
130
|
+
},
|
|
131
|
+
// ============================================
|
|
132
|
+
// DATABASE + ORM SYNERGIES (4 rules)
|
|
133
|
+
// ============================================
|
|
134
|
+
{
|
|
135
|
+
id: 'syn-001',
|
|
136
|
+
mcpA: 'drizzle-mcp',
|
|
137
|
+
mcpB: 'neon-mcp',
|
|
138
|
+
status: 'synergy',
|
|
139
|
+
category: 'database',
|
|
140
|
+
severity: 'info',
|
|
141
|
+
reason: 'Drizzle + Neon is a powerful serverless stack with excellent TypeScript support.',
|
|
142
|
+
recommendation: 'both',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: 'syn-002',
|
|
146
|
+
mcpA: 'drizzle-mcp',
|
|
147
|
+
mcpB: 'turso-mcp',
|
|
148
|
+
status: 'synergy',
|
|
149
|
+
category: 'database',
|
|
150
|
+
severity: 'info',
|
|
151
|
+
reason: 'Drizzle has first-class Turso support for edge-first SQLite applications.',
|
|
152
|
+
recommendation: 'both',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: 'syn-003',
|
|
156
|
+
mcpA: 'prisma-mcp',
|
|
157
|
+
mcpB: 'supabase-mcp',
|
|
158
|
+
status: 'conditional',
|
|
159
|
+
category: 'database',
|
|
160
|
+
severity: 'info',
|
|
161
|
+
reason: 'Prisma works with Supabase but requires proper connection pooling setup.',
|
|
162
|
+
solution: 'Use Supabase connection pooler URL in Prisma schema.',
|
|
163
|
+
recommendation: 'both',
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
id: 'syn-004',
|
|
167
|
+
mcpA: 'planetscale-mcp',
|
|
168
|
+
mcpB: 'prisma-mcp',
|
|
169
|
+
status: 'synergy',
|
|
170
|
+
category: 'database',
|
|
171
|
+
severity: 'info',
|
|
172
|
+
reason: 'Prisma + PlanetScale is a well-documented, production-ready combination.',
|
|
173
|
+
recommendation: 'both',
|
|
174
|
+
},
|
|
175
|
+
// ============================================
|
|
176
|
+
// PLATFORM SYNERGIES (5 rules)
|
|
177
|
+
// ============================================
|
|
178
|
+
{
|
|
179
|
+
id: 'syn-005',
|
|
180
|
+
mcpA: 'github-mcp',
|
|
181
|
+
mcpB: 'vercel-mcp',
|
|
182
|
+
status: 'synergy',
|
|
183
|
+
category: 'deployment',
|
|
184
|
+
severity: 'info',
|
|
185
|
+
reason: 'Vercel has native GitHub integration for automatic deployments.',
|
|
186
|
+
recommendation: 'both',
|
|
187
|
+
suggestWhenMissing: ['vercel-mcp'],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
id: 'syn-006',
|
|
191
|
+
mcpA: 'cloudflare-mcp',
|
|
192
|
+
mcpB: 'r2-mcp',
|
|
193
|
+
status: 'synergy',
|
|
194
|
+
category: 'storage',
|
|
195
|
+
severity: 'info',
|
|
196
|
+
reason: 'R2 is Cloudflare\'s S3-compatible storage, tightly integrated with Workers.',
|
|
197
|
+
recommendation: 'both',
|
|
198
|
+
suggestWhenMissing: ['r2-mcp'],
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
id: 'syn-007',
|
|
202
|
+
mcpA: 'resend-mcp',
|
|
203
|
+
mcpB: 'stripe-mcp',
|
|
204
|
+
status: 'synergy',
|
|
205
|
+
category: 'payments',
|
|
206
|
+
severity: 'info',
|
|
207
|
+
reason: 'Stripe for payments + Resend for transactional emails (receipts, invoices).',
|
|
208
|
+
recommendation: 'both',
|
|
209
|
+
suggestWhenMissing: ['resend-mcp'],
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: 'syn-008',
|
|
213
|
+
mcpA: 'supabase-auth-mcp',
|
|
214
|
+
mcpB: 'supabase-mcp',
|
|
215
|
+
status: 'synergy',
|
|
216
|
+
category: 'auth',
|
|
217
|
+
severity: 'info',
|
|
218
|
+
reason: 'Supabase Auth is built into Supabase and shares the same user context.',
|
|
219
|
+
recommendation: 'both',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
id: 'syn-009',
|
|
223
|
+
mcpA: 'github-mcp',
|
|
224
|
+
mcpB: 'netlify-mcp',
|
|
225
|
+
status: 'synergy',
|
|
226
|
+
category: 'deployment',
|
|
227
|
+
severity: 'info',
|
|
228
|
+
reason: 'Netlify has native GitHub integration for CI/CD.',
|
|
229
|
+
recommendation: 'both',
|
|
230
|
+
},
|
|
231
|
+
// ============================================
|
|
232
|
+
// DEPLOYMENT REDUNDANCIES (3 rules)
|
|
233
|
+
// ============================================
|
|
234
|
+
{
|
|
235
|
+
id: 'deploy-001',
|
|
236
|
+
mcpA: 'netlify-mcp',
|
|
237
|
+
mcpB: 'vercel-mcp',
|
|
238
|
+
status: 'redundant',
|
|
239
|
+
category: 'deployment',
|
|
240
|
+
severity: 'warning',
|
|
241
|
+
reason: 'Both are frontend deployment platforms with similar features.',
|
|
242
|
+
solution: 'Choose Vercel for Next.js, Netlify for static sites and forms.',
|
|
243
|
+
recommendation: 'either',
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
id: 'deploy-002',
|
|
247
|
+
mcpA: 'fly-mcp',
|
|
248
|
+
mcpB: 'railway-mcp',
|
|
249
|
+
status: 'redundant',
|
|
250
|
+
category: 'deployment',
|
|
251
|
+
severity: 'info',
|
|
252
|
+
reason: 'Both are container deployment platforms targeting similar use cases.',
|
|
253
|
+
solution: 'Choose Railway for simpler DX, Fly for more control.',
|
|
254
|
+
recommendation: 'either',
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: 'deploy-003',
|
|
258
|
+
mcpA: 'cloudflare-mcp',
|
|
259
|
+
mcpB: 'vercel-mcp',
|
|
260
|
+
status: 'redundant',
|
|
261
|
+
category: 'deployment',
|
|
262
|
+
severity: 'info',
|
|
263
|
+
reason: 'Both offer edge computing. Consider your framework support needs.',
|
|
264
|
+
solution: 'Vercel for Next.js, Cloudflare for Workers/Pages.',
|
|
265
|
+
recommendation: 'either',
|
|
266
|
+
},
|
|
267
|
+
// ============================================
|
|
268
|
+
// PAYMENTS (2 rules)
|
|
269
|
+
// ============================================
|
|
270
|
+
{
|
|
271
|
+
id: 'pay-001',
|
|
272
|
+
mcpA: 'paddle-mcp',
|
|
273
|
+
mcpB: 'stripe-mcp',
|
|
274
|
+
status: 'conflict',
|
|
275
|
+
category: 'payments',
|
|
276
|
+
severity: 'warning',
|
|
277
|
+
reason: 'Both are payment processors. Using multiple adds complexity.',
|
|
278
|
+
solution: 'Paddle for MoR (handles taxes), Stripe for more control.',
|
|
279
|
+
recommendation: 'either',
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
id: 'pay-002',
|
|
283
|
+
mcpA: 'lemonsqueezy-mcp',
|
|
284
|
+
mcpB: 'paddle-mcp',
|
|
285
|
+
status: 'redundant',
|
|
286
|
+
category: 'payments',
|
|
287
|
+
severity: 'info',
|
|
288
|
+
reason: 'Both are Merchant of Record solutions with similar features.',
|
|
289
|
+
solution: 'LemonSqueezy for creators, Paddle for SaaS.',
|
|
290
|
+
recommendation: 'either',
|
|
291
|
+
},
|
|
292
|
+
// ============================================
|
|
293
|
+
// AI MCPs (3 rules)
|
|
294
|
+
// ============================================
|
|
295
|
+
{
|
|
296
|
+
id: 'ai-001',
|
|
297
|
+
mcpA: 'anthropic-mcp',
|
|
298
|
+
mcpB: 'openai-mcp',
|
|
299
|
+
status: 'compatible',
|
|
300
|
+
category: 'ai',
|
|
301
|
+
severity: 'info',
|
|
302
|
+
reason: 'Can use multiple AI providers for fallback or model comparison.',
|
|
303
|
+
recommendation: 'both',
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
id: 'ai-002',
|
|
307
|
+
mcpA: 'context7-mcp',
|
|
308
|
+
mcpB: 'perplexity-mcp',
|
|
309
|
+
status: 'synergy',
|
|
310
|
+
category: 'ai',
|
|
311
|
+
severity: 'info',
|
|
312
|
+
reason: 'Context7 for docs, Perplexity for web search - complementary capabilities.',
|
|
313
|
+
recommendation: 'both',
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
id: 'ai-003',
|
|
317
|
+
mcpA: 'brave-search-mcp',
|
|
318
|
+
mcpB: 'perplexity-mcp',
|
|
319
|
+
status: 'redundant',
|
|
320
|
+
category: 'ai',
|
|
321
|
+
severity: 'info',
|
|
322
|
+
reason: 'Both provide web search capabilities. Perplexity includes AI synthesis.',
|
|
323
|
+
solution: 'Choose Perplexity for AI answers, Brave for raw search results.',
|
|
324
|
+
recommendation: 'either',
|
|
325
|
+
},
|
|
326
|
+
// ============================================
|
|
327
|
+
// VERSION CONTROL (1 rule)
|
|
328
|
+
// ============================================
|
|
329
|
+
{
|
|
330
|
+
id: 'vcs-001',
|
|
331
|
+
mcpA: 'github-mcp',
|
|
332
|
+
mcpB: 'gitlab-mcp',
|
|
333
|
+
status: 'conflict',
|
|
334
|
+
category: 'version-control',
|
|
335
|
+
severity: 'warning',
|
|
336
|
+
reason: 'Using multiple Git platforms for the same project creates confusion.',
|
|
337
|
+
solution: 'Standardize on one platform for your organization.',
|
|
338
|
+
recommendation: 'either',
|
|
339
|
+
},
|
|
340
|
+
// ============================================
|
|
341
|
+
// MONITORING (1 rule)
|
|
342
|
+
// ============================================
|
|
343
|
+
{
|
|
344
|
+
id: 'mon-001',
|
|
345
|
+
mcpA: 'datadog-mcp',
|
|
346
|
+
mcpB: 'sentry-mcp',
|
|
347
|
+
status: 'synergy',
|
|
348
|
+
category: 'monitoring',
|
|
349
|
+
severity: 'info',
|
|
350
|
+
reason: 'Sentry for errors, Datadog for APM/metrics - different focus areas.',
|
|
351
|
+
recommendation: 'both',
|
|
352
|
+
},
|
|
353
|
+
// ============================================
|
|
354
|
+
// EMAIL (1 rule)
|
|
355
|
+
// ============================================
|
|
356
|
+
{
|
|
357
|
+
id: 'email-001',
|
|
358
|
+
mcpA: 'resend-mcp',
|
|
359
|
+
mcpB: 'sendgrid-mcp',
|
|
360
|
+
status: 'redundant',
|
|
361
|
+
category: 'email',
|
|
362
|
+
severity: 'info',
|
|
363
|
+
reason: 'Both are transactional email services with similar capabilities.',
|
|
364
|
+
solution: 'Choose Resend for modern DX, SendGrid for enterprise scale.',
|
|
365
|
+
recommendation: 'A',
|
|
366
|
+
},
|
|
367
|
+
];
|
|
368
|
+
/**
|
|
369
|
+
* Get all rules (for initialization)
|
|
370
|
+
*/
|
|
371
|
+
export function getAllRules() {
|
|
372
|
+
return COMPATIBILITY_RULES;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Get rules by category
|
|
376
|
+
*/
|
|
377
|
+
export function getRulesByCategory(category) {
|
|
378
|
+
return COMPATIBILITY_RULES.filter((rule) => rule.category === category);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get rules by status
|
|
382
|
+
*/
|
|
383
|
+
export function getRulesByStatus(status) {
|
|
384
|
+
return COMPATIBILITY_RULES.filter((rule) => rule.status === status);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* List of curated popular MCPs for the matrix UI
|
|
388
|
+
*/
|
|
389
|
+
export const CURATED_MCPS = [
|
|
390
|
+
// Database
|
|
391
|
+
'supabase-mcp',
|
|
392
|
+
'neon-mcp',
|
|
393
|
+
'planetscale-mcp',
|
|
394
|
+
'turso-mcp',
|
|
395
|
+
// ORM
|
|
396
|
+
'prisma-mcp',
|
|
397
|
+
'drizzle-mcp',
|
|
398
|
+
// Auth
|
|
399
|
+
'clerk-mcp',
|
|
400
|
+
'auth0-mcp',
|
|
401
|
+
// Payments
|
|
402
|
+
'stripe-mcp',
|
|
403
|
+
'paddle-mcp',
|
|
404
|
+
// Deployment
|
|
405
|
+
'vercel-mcp',
|
|
406
|
+
'netlify-mcp',
|
|
407
|
+
'cloudflare-mcp',
|
|
408
|
+
// AI
|
|
409
|
+
'openai-mcp',
|
|
410
|
+
'anthropic-mcp',
|
|
411
|
+
'context7-mcp',
|
|
412
|
+
// Version Control
|
|
413
|
+
'github-mcp',
|
|
414
|
+
// Email
|
|
415
|
+
'resend-mcp',
|
|
416
|
+
// Monitoring
|
|
417
|
+
'sentry-mcp',
|
|
418
|
+
];
|
|
419
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/compatibility/rules.ts"],"names":[],"mappings":"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"}
|