@stacksfinder/mcp-server 1.0.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 (65) hide show
  1. package/README.md +262 -0
  2. package/dist/data/compatibility_matrix.json +230 -0
  3. package/dist/data/index.d.ts +109 -0
  4. package/dist/data/index.d.ts.map +1 -0
  5. package/dist/data/index.js +203 -0
  6. package/dist/data/index.js.map +1 -0
  7. package/dist/data/technology_scores.json +1031 -0
  8. 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
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +50 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/server.d.ts +6 -0
  14. package/dist/server.d.ts.map +1 -0
  15. package/dist/server.js +254 -0
  16. package/dist/server.js.map +1 -0
  17. package/dist/tools/analyze.d.ts +45 -0
  18. package/dist/tools/analyze.d.ts.map +1 -0
  19. package/dist/tools/analyze.js +110 -0
  20. package/dist/tools/analyze.js.map +1 -0
  21. package/dist/tools/api-keys.d.ts +78 -0
  22. package/dist/tools/api-keys.d.ts.map +1 -0
  23. package/dist/tools/api-keys.js +238 -0
  24. package/dist/tools/api-keys.js.map +1 -0
  25. package/dist/tools/blueprint.d.ts +129 -0
  26. package/dist/tools/blueprint.d.ts.map +1 -0
  27. package/dist/tools/blueprint.js +320 -0
  28. package/dist/tools/blueprint.js.map +1 -0
  29. package/dist/tools/compare.d.ts +50 -0
  30. package/dist/tools/compare.d.ts.map +1 -0
  31. package/dist/tools/compare.js +168 -0
  32. package/dist/tools/compare.js.map +1 -0
  33. package/dist/tools/list-techs.d.ts +34 -0
  34. package/dist/tools/list-techs.d.ts.map +1 -0
  35. package/dist/tools/list-techs.js +70 -0
  36. package/dist/tools/list-techs.js.map +1 -0
  37. package/dist/tools/recommend-demo.d.ts +46 -0
  38. package/dist/tools/recommend-demo.d.ts.map +1 -0
  39. package/dist/tools/recommend-demo.js +202 -0
  40. package/dist/tools/recommend-demo.js.map +1 -0
  41. package/dist/tools/recommend.d.ts +68 -0
  42. package/dist/tools/recommend.d.ts.map +1 -0
  43. package/dist/tools/recommend.js +135 -0
  44. package/dist/tools/recommend.js.map +1 -0
  45. package/dist/utils/api-client.d.ts +80 -0
  46. package/dist/utils/api-client.d.ts.map +1 -0
  47. package/dist/utils/api-client.js +197 -0
  48. package/dist/utils/api-client.js.map +1 -0
  49. package/dist/utils/config.d.ts +35 -0
  50. package/dist/utils/config.d.ts.map +1 -0
  51. package/dist/utils/config.js +45 -0
  52. package/dist/utils/config.js.map +1 -0
  53. package/dist/utils/device-id.d.ts +21 -0
  54. package/dist/utils/device-id.d.ts.map +1 -0
  55. package/dist/utils/device-id.js +101 -0
  56. package/dist/utils/device-id.js.map +1 -0
  57. package/dist/utils/errors.d.ts +46 -0
  58. package/dist/utils/errors.d.ts.map +1 -0
  59. package/dist/utils/errors.js +125 -0
  60. package/dist/utils/errors.js.map +1 -0
  61. package/dist/utils/logger.d.ts +37 -0
  62. package/dist/utils/logger.d.ts.map +1 -0
  63. package/dist/utils/logger.js +73 -0
  64. package/dist/utils/logger.js.map +1 -0
  65. package/package.json +63 -0
@@ -0,0 +1,203 @@
1
+ import { createRequire } from 'module';
2
+ import { findSimilar } from '../utils/errors.js';
3
+ const require = createRequire(import.meta.url);
4
+ // Load JSON data at module initialization
5
+ const techScoresData = require('./technology_scores.json');
6
+ const compatibilityData = require('./compatibility_matrix.json');
7
+ /**
8
+ * Data version - update when syncing from source.
9
+ */
10
+ export const DATA_VERSION = '2025.12.30';
11
+ /**
12
+ * Score dimensions.
13
+ */
14
+ export const SCORE_DIMENSIONS = ['perf', 'dx', 'ecosystem', 'maintain', 'cost', 'compliance'];
15
+ /**
16
+ * Human-readable dimension names.
17
+ */
18
+ export const DIMENSION_LABELS = {
19
+ perf: 'Performance',
20
+ dx: 'Developer Experience',
21
+ ecosystem: 'Ecosystem',
22
+ maintain: 'Maintainability',
23
+ cost: 'Cost Efficiency',
24
+ compliance: 'Compliance'
25
+ };
26
+ /**
27
+ * Technology categories.
28
+ */
29
+ export const CATEGORIES = [
30
+ 'frontend',
31
+ 'backend',
32
+ 'meta-framework',
33
+ 'database',
34
+ 'orm',
35
+ 'auth',
36
+ 'hosting',
37
+ 'payments'
38
+ ];
39
+ /**
40
+ * Score contexts.
41
+ */
42
+ export const CONTEXTS = ['default', 'mvp', 'enterprise'];
43
+ /**
44
+ * Get all technology IDs.
45
+ */
46
+ export function getAllTechIds() {
47
+ return Object.keys(techScoresData.technologies);
48
+ }
49
+ /**
50
+ * Get a technology by ID.
51
+ */
52
+ export function getTechnology(id) {
53
+ return techScoresData.technologies[id] || null;
54
+ }
55
+ /**
56
+ * Get all technologies.
57
+ */
58
+ export function getAllTechnologies() {
59
+ return Object.values(techScoresData.technologies);
60
+ }
61
+ /**
62
+ * Get technologies by category.
63
+ */
64
+ export function getTechnologiesByCategory(category) {
65
+ return getAllTechnologies().filter((tech) => tech.category === category);
66
+ }
67
+ /**
68
+ * Get technologies grouped by category.
69
+ */
70
+ export function getTechnologiesGroupedByCategory() {
71
+ const grouped = {
72
+ frontend: [],
73
+ backend: [],
74
+ 'meta-framework': [],
75
+ database: [],
76
+ orm: [],
77
+ auth: [],
78
+ hosting: [],
79
+ payments: []
80
+ };
81
+ for (const tech of getAllTechnologies()) {
82
+ if (tech.category in grouped) {
83
+ grouped[tech.category].push(tech);
84
+ }
85
+ }
86
+ return grouped;
87
+ }
88
+ /**
89
+ * Get scores for a technology in a specific context.
90
+ */
91
+ export function getScores(techId, context = 'default') {
92
+ const tech = getTechnology(techId);
93
+ if (!tech)
94
+ return null;
95
+ return tech.scores[context] || tech.scores.default;
96
+ }
97
+ /**
98
+ * Calculate overall score (average of all dimensions).
99
+ */
100
+ export function calculateOverallScore(scores) {
101
+ const sum = SCORE_DIMENSIONS.reduce((acc, dim) => acc + scores[dim], 0);
102
+ return Math.round(sum / SCORE_DIMENSIONS.length);
103
+ }
104
+ /**
105
+ * Get letter grade from score.
106
+ */
107
+ export function scoreToGrade(score) {
108
+ if (score >= 97)
109
+ return 'A+';
110
+ if (score >= 93)
111
+ return 'A';
112
+ if (score >= 90)
113
+ return 'A-';
114
+ if (score >= 87)
115
+ return 'B+';
116
+ if (score >= 83)
117
+ return 'B';
118
+ if (score >= 80)
119
+ return 'B-';
120
+ if (score >= 77)
121
+ return 'C+';
122
+ if (score >= 73)
123
+ return 'C';
124
+ if (score >= 70)
125
+ return 'C-';
126
+ if (score >= 67)
127
+ return 'D+';
128
+ if (score >= 63)
129
+ return 'D';
130
+ if (score >= 60)
131
+ return 'D-';
132
+ return 'F';
133
+ }
134
+ /**
135
+ * Get compatibility score between two technologies.
136
+ * Returns 50 (neutral) if no direct compatibility is defined.
137
+ */
138
+ export function getCompatibility(techA, techB) {
139
+ // Same tech is always compatible
140
+ if (techA === techB)
141
+ return 100;
142
+ // Check both directions
143
+ const scoreAB = compatibilityData.matrix[techA]?.[techB];
144
+ const scoreBA = compatibilityData.matrix[techB]?.[techA];
145
+ // Return defined score, preferring A→B
146
+ if (scoreAB !== undefined)
147
+ return scoreAB;
148
+ if (scoreBA !== undefined)
149
+ return scoreBA;
150
+ // Default to neutral
151
+ return 50;
152
+ }
153
+ /**
154
+ * Get compatibility verdict.
155
+ */
156
+ export function getCompatibilityVerdict(score) {
157
+ if (score === 0)
158
+ return 'Incompatible';
159
+ if (score < 50)
160
+ return 'Poor';
161
+ if (score < 80)
162
+ return 'Acceptable';
163
+ if (score < 95)
164
+ return 'Good';
165
+ return 'Excellent';
166
+ }
167
+ /**
168
+ * Find compatible technologies for a given tech.
169
+ * Returns sorted by compatibility score (descending).
170
+ */
171
+ export function findCompatibleTechs(techId, limit = 8) {
172
+ const allIds = getAllTechIds().filter((id) => id !== techId);
173
+ return allIds
174
+ .map((id) => ({
175
+ id,
176
+ score: getCompatibility(techId, id)
177
+ }))
178
+ .filter((item) => item.score > 50) // Only include acceptable+ compatibility
179
+ .sort((a, b) => b.score - a.score)
180
+ .slice(0, limit);
181
+ }
182
+ /**
183
+ * Find similar technology IDs using Levenshtein distance.
184
+ */
185
+ export function findSimilarTechIds(input, limit = 3) {
186
+ return findSimilar(input, getAllTechIds(), limit);
187
+ }
188
+ /**
189
+ * Check if a technology ID exists.
190
+ */
191
+ export function techExists(id) {
192
+ return id in techScoresData.technologies;
193
+ }
194
+ /**
195
+ * Get source data version from JSON files.
196
+ */
197
+ export function getSourceDataVersion() {
198
+ return {
199
+ scores: techScoresData.$version,
200
+ compatibility: compatibilityData.$version
201
+ };
202
+ }
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"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"}