@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.
- package/README.md +262 -0
- package/dist/data/compatibility_matrix.json +230 -0
- package/dist/data/index.d.ts +109 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +203 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/technology_scores.json +1031 -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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +254 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analyze.d.ts +45 -0
- package/dist/tools/analyze.d.ts.map +1 -0
- package/dist/tools/analyze.js +110 -0
- package/dist/tools/analyze.js.map +1 -0
- package/dist/tools/api-keys.d.ts +78 -0
- package/dist/tools/api-keys.d.ts.map +1 -0
- package/dist/tools/api-keys.js +238 -0
- package/dist/tools/api-keys.js.map +1 -0
- package/dist/tools/blueprint.d.ts +129 -0
- package/dist/tools/blueprint.d.ts.map +1 -0
- package/dist/tools/blueprint.js +320 -0
- package/dist/tools/blueprint.js.map +1 -0
- package/dist/tools/compare.d.ts +50 -0
- package/dist/tools/compare.d.ts.map +1 -0
- package/dist/tools/compare.js +168 -0
- package/dist/tools/compare.js.map +1 -0
- package/dist/tools/list-techs.d.ts +34 -0
- package/dist/tools/list-techs.d.ts.map +1 -0
- package/dist/tools/list-techs.js +70 -0
- package/dist/tools/list-techs.js.map +1 -0
- package/dist/tools/recommend-demo.d.ts +46 -0
- package/dist/tools/recommend-demo.d.ts.map +1 -0
- package/dist/tools/recommend-demo.js +202 -0
- package/dist/tools/recommend-demo.js.map +1 -0
- package/dist/tools/recommend.d.ts +68 -0
- package/dist/tools/recommend.d.ts.map +1 -0
- package/dist/tools/recommend.js +135 -0
- package/dist/tools/recommend.js.map +1 -0
- package/dist/utils/api-client.d.ts +80 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +197 -0
- package/dist/utils/api-client.js.map +1 -0
- package/dist/utils/config.d.ts +35 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +45 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/device-id.d.ts +21 -0
- package/dist/utils/device-id.d.ts.map +1 -0
- package/dist/utils/device-id.js +101 -0
- package/dist/utils/device-id.js.map +1 -0
- package/dist/utils/errors.d.ts +46 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +125 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +37 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +73 -0
- package/dist/utils/logger.js.map +1 -0
- 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"}
|