@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 @@
1
+ {"version":3,"file":"list-techs.js","sourceRoot":"","sources":["../../src/tools/list-techs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACN,UAAU,EAEV,YAAY,EACZ,yBAAyB,EACzB,gCAAgC,EAChC,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,CAAC;SACT,IAAI,CAAC,UAAU,CAAC;SAChB,QAAQ,EAAE;SACV,QAAQ,CAAC,oDAAoD,CAAC;CAChE,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACtC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACV,sHAAsH;IACvH,WAAW,EAAE;QACZ,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACX,QAAQ,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,+BAA+B;aAC5C;SACD;KACD;CACD,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CAAC,QAAkB,EAAE,KAA0C;IACrF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACxD,OAAO,MAAM,QAAQ,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACrD,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAE3B,IAAI,QAAQ,EAAE,CAAC;QACd,8BAA8B;QAC9B,MAAM,KAAK,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,cAAc,CAC/B,QAAQ,EACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAC9C,CAAC;QAEF,OAAO,8BAA8B,QAAQ,MAAM,KAAK,CAAC,MAAM;;EAE/D,SAAS;;gBAEK,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED,4CAA4C;IAC5C,MAAM,OAAO,GAAG,gCAAgC,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CACZ,cAAc,CACb,GAAG,EACH,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAC9C,CACD,CAAC;YACF,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,CAAC;IACF,CAAC;IAED,OAAO,2BAA2B,KAAK;;EAEtC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;;gBAEP,YAAY,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Input schema for recommend_stack_demo tool.
4
+ */
5
+ export declare const RecommendStackDemoInputSchema: z.ZodObject<{
6
+ projectType: z.ZodEnum<["web-app", "mobile-app", "api", "desktop", "cli", "library", "e-commerce", "saas", "marketplace"]>;
7
+ scale: z.ZodDefault<z.ZodOptional<z.ZodEnum<["mvp", "startup", "growth", "enterprise"]>>>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ projectType: "web-app" | "mobile-app" | "api" | "desktop" | "cli" | "library" | "e-commerce" | "saas" | "marketplace";
10
+ scale: "mvp" | "enterprise" | "startup" | "growth";
11
+ }, {
12
+ projectType: "web-app" | "mobile-app" | "api" | "desktop" | "cli" | "library" | "e-commerce" | "saas" | "marketplace";
13
+ scale?: "mvp" | "enterprise" | "startup" | "growth" | undefined;
14
+ }>;
15
+ export type RecommendStackDemoInput = z.infer<typeof RecommendStackDemoInputSchema>;
16
+ /**
17
+ * Tool definition for MCP registration.
18
+ */
19
+ export declare const recommendStackDemoToolDefinition: {
20
+ name: string;
21
+ description: string;
22
+ inputSchema: {
23
+ type: "object";
24
+ properties: {
25
+ projectType: {
26
+ type: string;
27
+ enum: readonly ["web-app", "mobile-app", "api", "desktop", "cli", "library", "e-commerce", "saas", "marketplace"];
28
+ description: string;
29
+ };
30
+ scale: {
31
+ type: string;
32
+ enum: readonly ["mvp", "startup", "growth", "enterprise"];
33
+ description: string;
34
+ };
35
+ };
36
+ required: string[];
37
+ };
38
+ };
39
+ /**
40
+ * Execute recommend_stack_demo tool.
41
+ */
42
+ export declare function executeRecommendStackDemo(input: RecommendStackDemoInput): {
43
+ text: string;
44
+ isError?: boolean;
45
+ };
46
+ //# sourceMappingURL=recommend-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend-demo.d.ts","sourceRoot":"","sources":["../../src/tools/recommend-demo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiCxB;;GAEG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;CAsB5C,CAAC;AA0FF;;GAEG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,uBAAuB,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CA8ErC"}
@@ -0,0 +1,202 @@
1
+ import { z } from 'zod';
2
+ import { DATA_VERSION, calculateOverallScore, getScores, getTechnologiesByCategory, scoreToGrade } from '../data/index.js';
3
+ import { wasDemoUsedToday, recordDemoUsage, getDeviceId } from '../utils/device-id.js';
4
+ import { debug } from '../utils/logger.js';
5
+ /**
6
+ * Project types supported.
7
+ */
8
+ const PROJECT_TYPES = [
9
+ 'web-app',
10
+ 'mobile-app',
11
+ 'api',
12
+ 'desktop',
13
+ 'cli',
14
+ 'library',
15
+ 'e-commerce',
16
+ 'saas',
17
+ 'marketplace'
18
+ ];
19
+ /**
20
+ * Scale options.
21
+ */
22
+ const SCALES = ['mvp', 'startup', 'growth', 'enterprise'];
23
+ /**
24
+ * Input schema for recommend_stack_demo tool.
25
+ */
26
+ export const RecommendStackDemoInputSchema = z.object({
27
+ projectType: z.enum(PROJECT_TYPES).describe('Type of project'),
28
+ scale: z.enum(SCALES).optional().default('mvp').describe('Project scale')
29
+ });
30
+ /**
31
+ * Tool definition for MCP registration.
32
+ */
33
+ export const recommendStackDemoToolDefinition = {
34
+ name: 'recommend_stack_demo',
35
+ description: `Try StacksFinder's tech stack recommendations for FREE - once per day, no account required.
36
+
37
+ Returns the optimal technology for each category based on deterministic scoring.
38
+ For unlimited access, priorities, constraints, and AI-generated narratives, upgrade to Pro at https://stacksfinder.com/pricing`,
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ projectType: {
43
+ type: 'string',
44
+ enum: PROJECT_TYPES,
45
+ description: 'Type of project (e.g., saas, web-app, api)'
46
+ },
47
+ scale: {
48
+ type: 'string',
49
+ enum: SCALES,
50
+ description: 'Project scale (mvp, startup, growth, enterprise)'
51
+ }
52
+ },
53
+ required: ['projectType']
54
+ }
55
+ };
56
+ /**
57
+ * Map scale to scoring context.
58
+ */
59
+ function scaleToContext(scale) {
60
+ if (scale === 'enterprise' || scale === 'growth')
61
+ return 'enterprise';
62
+ if (scale === 'mvp' || scale === 'startup')
63
+ return 'mvp';
64
+ return 'default';
65
+ }
66
+ /**
67
+ * Category weights for different project types.
68
+ * Higher weight = more important for this project type.
69
+ */
70
+ const PROJECT_TYPE_WEIGHTS = {
71
+ 'web-app': { 'meta-framework': 1.2, frontend: 1.1, database: 1.0 },
72
+ 'saas': { 'meta-framework': 1.2, database: 1.1, auth: 1.2, payments: 1.3 },
73
+ 'e-commerce': { 'meta-framework': 1.1, database: 1.1, payments: 1.4 },
74
+ 'api': { backend: 1.3, database: 1.2, hosting: 1.1 },
75
+ 'mobile-app': { backend: 1.2, database: 1.1, auth: 1.2 },
76
+ 'marketplace': { 'meta-framework': 1.1, database: 1.2, auth: 1.1, payments: 1.3 },
77
+ 'cli': { backend: 1.0 },
78
+ 'library': { backend: 1.0 },
79
+ 'desktop': { frontend: 1.1, backend: 1.1, database: 1.0 }
80
+ };
81
+ /**
82
+ * Categories to include based on project type.
83
+ */
84
+ const PROJECT_TYPE_CATEGORIES = {
85
+ 'web-app': ['meta-framework', 'database', 'orm', 'auth', 'hosting'],
86
+ 'saas': ['meta-framework', 'database', 'orm', 'auth', 'hosting', 'payments'],
87
+ 'e-commerce': ['meta-framework', 'database', 'orm', 'auth', 'hosting', 'payments'],
88
+ 'api': ['backend', 'database', 'orm', 'auth', 'hosting'],
89
+ 'mobile-app': ['backend', 'database', 'orm', 'auth', 'hosting'],
90
+ 'marketplace': ['meta-framework', 'database', 'orm', 'auth', 'hosting', 'payments'],
91
+ 'cli': ['backend'],
92
+ 'library': ['backend'],
93
+ 'desktop': ['frontend', 'backend', 'database', 'orm']
94
+ };
95
+ /**
96
+ * Select best tech for each category based on scores.
97
+ */
98
+ function selectBestTechPerCategory(categories, context, projectType) {
99
+ const results = [];
100
+ const weights = PROJECT_TYPE_WEIGHTS[projectType] || {};
101
+ for (const category of categories) {
102
+ const techs = getTechnologiesByCategory(category);
103
+ if (techs.length === 0)
104
+ continue;
105
+ let bestTech = techs[0];
106
+ let bestScore = 0;
107
+ for (const tech of techs) {
108
+ const scores = getScores(tech.id, context);
109
+ if (!scores)
110
+ continue;
111
+ let overall = calculateOverallScore(scores);
112
+ // Apply project-type specific weight
113
+ const weight = weights[category] || 1.0;
114
+ overall = Math.round(overall * weight);
115
+ if (overall > bestScore) {
116
+ bestScore = overall;
117
+ bestTech = tech;
118
+ }
119
+ }
120
+ const finalScores = getScores(bestTech.id, context);
121
+ const finalScore = finalScores ? calculateOverallScore(finalScores) : 0;
122
+ results.push({
123
+ category,
124
+ technology: bestTech.name,
125
+ score: finalScore,
126
+ grade: scoreToGrade(finalScore)
127
+ });
128
+ }
129
+ return results;
130
+ }
131
+ /**
132
+ * Execute recommend_stack_demo tool.
133
+ */
134
+ export function executeRecommendStackDemo(input) {
135
+ const { projectType, scale = 'mvp' } = input;
136
+ debug('recommend_stack_demo called', { projectType, scale });
137
+ // Check rate limit
138
+ if (wasDemoUsedToday()) {
139
+ const deviceId = getDeviceId();
140
+ return {
141
+ text: `## Daily Demo Limit Reached
142
+
143
+ You've already used your free demo today.
144
+
145
+ **Options:**
146
+ 1. Come back tomorrow for another free demo
147
+ 2. Create a free account at https://stacksfinder.com/register
148
+ 3. Upgrade to Pro for unlimited recommendations: https://stacksfinder.com/pricing
149
+
150
+ **Pro benefits:**
151
+ - Unlimited stack recommendations
152
+ - Custom priorities (time-to-market, scalability, security, etc.)
153
+ - Technology constraints
154
+ - AI-generated implementation narratives
155
+ - API access for automation
156
+ - MCP integration with full features
157
+
158
+ ---
159
+ *Device ID: ${deviceId.slice(0, 8)}...*`,
160
+ isError: true
161
+ };
162
+ }
163
+ // Get categories for this project type
164
+ const categories = PROJECT_TYPE_CATEGORIES[projectType] || ['meta-framework', 'database', 'auth', 'hosting'];
165
+ // Get scoring context
166
+ const context = scaleToContext(scale);
167
+ // Select best tech per category
168
+ const recommendations = selectBestTechPerCategory(categories, context, projectType);
169
+ // Record usage
170
+ recordDemoUsage();
171
+ // Format response
172
+ const projectLabel = projectType.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
173
+ let text = `## Recommended Stack for ${projectLabel} (${scale})
174
+
175
+ | Category | Technology | Score | Grade |
176
+ |----------|------------|-------|-------|
177
+ `;
178
+ for (const rec of recommendations) {
179
+ text += `| ${rec.category} | ${rec.technology} | ${rec.score} | ${rec.grade} |\n`;
180
+ }
181
+ text += `
182
+ **Confidence**: medium (demo mode - no priorities/constraints applied)
183
+
184
+ ---
185
+
186
+ ### Want More?
187
+
188
+ This is a **simplified demo**. The full version includes:
189
+ - Custom priorities (time-to-market, scalability, security, etc.)
190
+ - Technology constraints ("must use PostgreSQL", "no AWS")
191
+ - Compatibility scoring between all selected technologies
192
+ - AI-generated implementation narrative with setup guides
193
+ - Confidence scoring (high/medium/low) based on your inputs
194
+
195
+ **Upgrade to Pro**: https://stacksfinder.com/pricing
196
+ **Create free account**: https://stacksfinder.com/register
197
+
198
+ ---
199
+ *Data version: ${DATA_VERSION} | Demo (1/day limit)*`;
200
+ return { text };
201
+ }
202
+ //# sourceMappingURL=recommend-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend-demo.js","sourceRoot":"","sources":["../../src/tools/recommend-demo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Input schema for recommend_stack tool.
4
+ */
5
+ export declare const RecommendStackInputSchema: z.ZodObject<{
6
+ projectType: z.ZodEnum<["web-app", "mobile-app", "api", "desktop", "cli", "library", "e-commerce", "saas", "marketplace"]>;
7
+ scale: z.ZodDefault<z.ZodOptional<z.ZodEnum<["mvp", "startup", "growth", "enterprise"]>>>;
8
+ priorities: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodEnum<["time-to-market", "scalability", "developer-experience", "cost-efficiency", "performance", "security", "maintainability"]>, "many">>>;
9
+ constraints: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ projectType: "web-app" | "mobile-app" | "api" | "desktop" | "cli" | "library" | "e-commerce" | "saas" | "marketplace";
12
+ scale: "mvp" | "enterprise" | "startup" | "growth";
13
+ priorities: ("time-to-market" | "scalability" | "developer-experience" | "cost-efficiency" | "performance" | "security" | "maintainability")[];
14
+ constraints: string[];
15
+ }, {
16
+ projectType: "web-app" | "mobile-app" | "api" | "desktop" | "cli" | "library" | "e-commerce" | "saas" | "marketplace";
17
+ scale?: "mvp" | "enterprise" | "startup" | "growth" | undefined;
18
+ priorities?: ("time-to-market" | "scalability" | "developer-experience" | "cost-efficiency" | "performance" | "security" | "maintainability")[] | undefined;
19
+ constraints?: string[] | undefined;
20
+ }>;
21
+ export type RecommendStackInput = z.infer<typeof RecommendStackInputSchema>;
22
+ /**
23
+ * Tool definition for MCP registration.
24
+ */
25
+ export declare const recommendStackToolDefinition: {
26
+ name: string;
27
+ description: string;
28
+ inputSchema: {
29
+ type: "object";
30
+ properties: {
31
+ projectType: {
32
+ type: string;
33
+ enum: readonly ["web-app", "mobile-app", "api", "desktop", "cli", "library", "e-commerce", "saas", "marketplace"];
34
+ description: string;
35
+ };
36
+ scale: {
37
+ type: string;
38
+ enum: readonly ["mvp", "startup", "growth", "enterprise"];
39
+ description: string;
40
+ };
41
+ priorities: {
42
+ type: string;
43
+ items: {
44
+ type: string;
45
+ enum: readonly ["time-to-market", "scalability", "developer-experience", "cost-efficiency", "performance", "security", "maintainability"];
46
+ };
47
+ maxItems: number;
48
+ description: string;
49
+ };
50
+ constraints: {
51
+ type: string;
52
+ items: {
53
+ type: string;
54
+ };
55
+ description: string;
56
+ };
57
+ };
58
+ required: string[];
59
+ };
60
+ };
61
+ /**
62
+ * Execute recommend_stack tool.
63
+ */
64
+ export declare function executeRecommendStack(input: RecommendStackInput): Promise<{
65
+ text: string;
66
+ isError?: boolean;
67
+ }>;
68
+ //# sourceMappingURL=recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/tools/recommend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsCxB;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAUpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BxC,CAAC;AAiDF;;GAEG;AACH,wBAAsB,qBAAqB,CAC1C,KAAK,EAAE,mBAAmB,GACxB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA6B9C"}
@@ -0,0 +1,135 @@
1
+ import { z } from 'zod';
2
+ import { scoreRequest } from '../utils/api-client.js';
3
+ import { McpError, ErrorCode } from '../utils/errors.js';
4
+ import { debug } from '../utils/logger.js';
5
+ /**
6
+ * Project types supported by the API.
7
+ */
8
+ const PROJECT_TYPES = [
9
+ 'web-app',
10
+ 'mobile-app',
11
+ 'api',
12
+ 'desktop',
13
+ 'cli',
14
+ 'library',
15
+ 'e-commerce',
16
+ 'saas',
17
+ 'marketplace'
18
+ ];
19
+ /**
20
+ * Scale options.
21
+ */
22
+ const SCALES = ['mvp', 'startup', 'growth', 'enterprise'];
23
+ /**
24
+ * Priority options.
25
+ */
26
+ const PRIORITIES = [
27
+ 'time-to-market',
28
+ 'scalability',
29
+ 'developer-experience',
30
+ 'cost-efficiency',
31
+ 'performance',
32
+ 'security',
33
+ 'maintainability'
34
+ ];
35
+ /**
36
+ * Input schema for recommend_stack tool.
37
+ */
38
+ export const RecommendStackInputSchema = z.object({
39
+ projectType: z.enum(PROJECT_TYPES).describe('Type of project'),
40
+ scale: z.enum(SCALES).optional().default('mvp').describe('Project scale'),
41
+ priorities: z
42
+ .array(z.enum(PRIORITIES))
43
+ .max(3)
44
+ .optional()
45
+ .default([])
46
+ .describe('Top priorities (max 3)'),
47
+ constraints: z.array(z.string()).optional().default([]).describe('Project constraints')
48
+ });
49
+ /**
50
+ * Tool definition for MCP registration.
51
+ */
52
+ export const recommendStackToolDefinition = {
53
+ name: 'recommend_stack',
54
+ description: 'Recommends the best tech stack for a project using real-time scoring with context adjustments. Requires API key.',
55
+ inputSchema: {
56
+ type: 'object',
57
+ properties: {
58
+ projectType: {
59
+ type: 'string',
60
+ enum: PROJECT_TYPES,
61
+ description: 'Type of project (e.g., saas, web-app, api)'
62
+ },
63
+ scale: {
64
+ type: 'string',
65
+ enum: SCALES,
66
+ description: 'Project scale (mvp, startup, growth, enterprise)'
67
+ },
68
+ priorities: {
69
+ type: 'array',
70
+ items: { type: 'string', enum: PRIORITIES },
71
+ maxItems: 3,
72
+ description: 'Top priorities (max 3)'
73
+ },
74
+ constraints: {
75
+ type: 'array',
76
+ items: { type: 'string' },
77
+ description: 'Project constraints (e.g., real-time, multi-tenant)'
78
+ }
79
+ },
80
+ required: ['projectType']
81
+ }
82
+ };
83
+ /**
84
+ * Format API response for MCP output.
85
+ */
86
+ function formatResponse(response, projectType, scale) {
87
+ let text = `## Recommended Stack for ${projectType.replace('-', ' ').replace(/\b\w/g, (c) => c.toUpperCase())} (${scale})
88
+
89
+ | Category | Technology | Score | Grade |
90
+ |----------|------------|-------|-------|
91
+ `;
92
+ for (const stack of response.stacks) {
93
+ text += `| ${stack.category} | ${stack.technology} | ${stack.score} | ${stack.grade} |\n`;
94
+ }
95
+ text += `
96
+ **Confidence**: ${response.confidence}`;
97
+ if (response.requestId) {
98
+ text += `
99
+ **Request ID**: ${response.requestId}`;
100
+ }
101
+ // Include raw JSON for programmatic access
102
+ text += `
103
+
104
+ <json>
105
+ ${JSON.stringify({ stacks: response.stacks, confidence: response.confidence, inputsNormalized: response.inputsNormalized })}
106
+ </json>`;
107
+ return text;
108
+ }
109
+ /**
110
+ * Execute recommend_stack tool.
111
+ */
112
+ export async function executeRecommendStack(input) {
113
+ const { projectType, scale = 'mvp', priorities = [], constraints = [] } = input;
114
+ // Deduplicate priorities
115
+ const uniquePriorities = [...new Set(priorities)].slice(0, 3);
116
+ debug('Calling score API', { projectType, scale, priorities: uniquePriorities, constraints });
117
+ try {
118
+ const response = await scoreRequest({
119
+ projectType,
120
+ scale,
121
+ priorities: uniquePriorities,
122
+ constraints
123
+ });
124
+ const text = formatResponse(response, projectType, scale);
125
+ return { text };
126
+ }
127
+ catch (err) {
128
+ if (err instanceof McpError) {
129
+ return { text: err.toResponseText(), isError: true };
130
+ }
131
+ const error = new McpError(ErrorCode.API_ERROR, err instanceof Error ? err.message : 'Failed to get recommendations');
132
+ return { text: error.toResponseText(), isError: true };
133
+ }
134
+ }
135
+ //# sourceMappingURL=recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommend.js","sourceRoot":"","sources":["../../src/tools/recommend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Make an authenticated API request with concurrency limiting and caching.
3
+ */
4
+ export declare function apiRequest<T>(path: string, options?: {
5
+ method?: 'GET' | 'POST';
6
+ body?: Record<string, unknown>;
7
+ timeoutMs?: number;
8
+ useCache?: boolean;
9
+ }): Promise<T>;
10
+ /**
11
+ * POST to the score API with caching.
12
+ */
13
+ export declare function scoreRequest<T>(body: Record<string, unknown>): Promise<T>;
14
+ /**
15
+ * GET a blueprint by ID.
16
+ */
17
+ export declare function getBlueprintRequest<T>(blueprintId: string): Promise<T>;
18
+ /**
19
+ * Create blueprint request body.
20
+ */
21
+ export interface CreateBlueprintRequest {
22
+ projectName?: string;
23
+ projectContext: {
24
+ projectName?: string;
25
+ projectType: string;
26
+ projectDescription?: string;
27
+ scale: string;
28
+ teamSize?: string;
29
+ budget?: string;
30
+ timeline?: string;
31
+ constraints?: Array<{
32
+ type: string;
33
+ value: string;
34
+ mandatory?: boolean;
35
+ }>;
36
+ constraintIds?: string[];
37
+ priorities?: string[];
38
+ };
39
+ source: 'mcp';
40
+ mcpToolName: string;
41
+ }
42
+ /**
43
+ * Create blueprint response.
44
+ */
45
+ export interface CreateBlueprintResponse {
46
+ jobId: string;
47
+ projectId: string;
48
+ status: 'pending' | 'running' | 'completed';
49
+ progress: number;
50
+ resultRef?: string;
51
+ _links: {
52
+ job: string;
53
+ blueprint: string | null;
54
+ };
55
+ }
56
+ /**
57
+ * POST to create a new blueprint.
58
+ * This creates a project and queues a job for blueprint generation.
59
+ */
60
+ export declare function createBlueprintRequest(body: CreateBlueprintRequest): Promise<CreateBlueprintResponse>;
61
+ /**
62
+ * Poll job status.
63
+ */
64
+ export interface JobStatusResponse {
65
+ id: string;
66
+ status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
67
+ progress: number;
68
+ resultRef?: string;
69
+ errorCode?: string;
70
+ errorMessage?: string;
71
+ }
72
+ /**
73
+ * GET job status by ID.
74
+ */
75
+ export declare function getJobStatusRequest(jobId: string): Promise<JobStatusResponse>;
76
+ /**
77
+ * Clear the score cache (useful for testing).
78
+ */
79
+ export declare function clearScoreCache(): void;
80
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAqGA;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACR,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACd,GACJ,OAAO,CAAC,CAAC,CAAC,CAmGZ;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAM/E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE5E;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QAC1E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,MAAM,EAAE,KAAK,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC;CACF;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAM3G;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAEnF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}