@stacksfinder/mcp-server 1.2.1 → 1.3.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 +126 -65
- package/dist/__tests__/mcp-tools.test.d.ts +8 -0
- package/dist/__tests__/mcp-tools.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-tools.test.js +345 -0
- package/dist/__tests__/mcp-tools.test.js.map +1 -0
- package/dist/annotations.d.ts +63 -0
- package/dist/annotations.d.ts.map +1 -0
- package/dist/annotations.js +215 -0
- package/dist/annotations.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +93 -22
- package/dist/server.js.map +1 -1
- package/dist/tools/audit.d.ts +4 -4
- package/dist/tools/audit.js +42 -42
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/check-compatibility.d.ts +1 -1
- package/dist/tools/check-compatibility.d.ts.map +1 -1
- package/dist/tools/check-compatibility.js +17 -17
- package/dist/tools/check-compatibility.js.map +1 -1
- package/dist/tools/estimator.d.ts +85 -0
- package/dist/tools/estimator.d.ts.map +1 -0
- package/dist/tools/estimator.js +326 -0
- package/dist/tools/estimator.js.map +1 -0
- package/dist/tools/project-kit/analyze-repo.js +12 -12
- package/dist/tools/project-kit/analyze-repo.js.map +1 -1
- package/package.json +4 -8
- package/dist/compatibility/index.d.ts +0 -11
- package/dist/compatibility/index.d.ts.map +0 -1
- package/dist/compatibility/index.js +0 -13
- package/dist/compatibility/index.js.map +0 -1
- package/dist/compatibility/rules.d.ts +0 -29
- package/dist/compatibility/rules.d.ts.map +0 -1
- package/dist/compatibility/rules.js +0 -419
- package/dist/compatibility/rules.js.map +0 -1
- package/dist/compatibility/scoring.d.ts +0 -54
- package/dist/compatibility/scoring.d.ts.map +0 -1
- package/dist/compatibility/scoring.js +0 -209
- package/dist/compatibility/scoring.js.map +0 -1
- package/dist/compatibility/types.d.ts +0 -176
- package/dist/compatibility/types.d.ts.map +0 -1
- package/dist/compatibility/types.js +0 -26
- package/dist/compatibility/types.js.map +0 -1
- package/dist/compatibility/utils.d.ts +0 -82
- package/dist/compatibility/utils.d.ts.map +0 -1
- package/dist/compatibility/utils.js +0 -269
- package/dist/compatibility/utils.js.map +0 -1
- 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" +0 -226
- package/dist/http.d.ts +0 -7
- package/dist/http.d.ts.map +0 -1
- package/dist/http.js +0 -69
- package/dist/http.js.map +0 -1
- package/dist/lib/mcp-compatibility/index.d.ts +0 -33
- package/dist/lib/mcp-compatibility/index.d.ts.map +0 -1
- package/dist/lib/mcp-compatibility/index.js +0 -35
- package/dist/lib/mcp-compatibility/index.js.map +0 -1
- package/dist/lib/mcp-compatibility/rules.d.ts +0 -29
- package/dist/lib/mcp-compatibility/rules.d.ts.map +0 -1
- package/dist/lib/mcp-compatibility/rules.js +0 -419
- package/dist/lib/mcp-compatibility/rules.js.map +0 -1
- package/dist/lib/mcp-compatibility/scoring.d.ts +0 -54
- package/dist/lib/mcp-compatibility/scoring.d.ts.map +0 -1
- package/dist/lib/mcp-compatibility/scoring.js +0 -209
- package/dist/lib/mcp-compatibility/scoring.js.map +0 -1
- package/dist/lib/mcp-compatibility/types.d.ts +0 -176
- package/dist/lib/mcp-compatibility/types.d.ts.map +0 -1
- package/dist/lib/mcp-compatibility/types.js +0 -26
- package/dist/lib/mcp-compatibility/types.js.map +0 -1
- package/dist/lib/mcp-compatibility/utils.d.ts +0 -82
- package/dist/lib/mcp-compatibility/utils.d.ts.map +0 -1
- package/dist/lib/mcp-compatibility/utils.js +0 -269
- package/dist/lib/mcp-compatibility/utils.js.map +0 -1
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Integration Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests all 21 MCP tools to ensure they are functional.
|
|
5
|
+
* Run with: npm test or vitest
|
|
6
|
+
*/
|
|
7
|
+
import { describe, test, expect, beforeAll } from 'vitest';
|
|
8
|
+
import { createServer } from '../server.js';
|
|
9
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
10
|
+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
|
|
11
|
+
import { ListToolsResultSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// TEST SETUP
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Helper to extract text from tool result
|
|
16
|
+
function getResultText(result) {
|
|
17
|
+
const content = result.content;
|
|
18
|
+
const textContent = content.find((c) => c.type === 'text');
|
|
19
|
+
return textContent?.text || '';
|
|
20
|
+
}
|
|
21
|
+
let client;
|
|
22
|
+
let server;
|
|
23
|
+
beforeAll(async () => {
|
|
24
|
+
server = createServer();
|
|
25
|
+
client = new Client({ name: 'test-client', version: '1.0.0' });
|
|
26
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
27
|
+
await Promise.all([client.connect(clientTransport), server.connect(serverTransport)]);
|
|
28
|
+
});
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// TOOL DISCOVERY TESTS
|
|
31
|
+
// ============================================================================
|
|
32
|
+
describe('MCP Server Tool Discovery', () => {
|
|
33
|
+
test('should list all 21 registered tools', async () => {
|
|
34
|
+
const result = await client.request({ method: 'tools/list' }, ListToolsResultSchema);
|
|
35
|
+
expect(result.tools).toBeDefined();
|
|
36
|
+
expect(result.tools.length).toBe(21);
|
|
37
|
+
const toolNames = result.tools.map((t) => t.name);
|
|
38
|
+
expect(toolNames).toContain('list_technologies');
|
|
39
|
+
expect(toolNames).toContain('analyze_tech');
|
|
40
|
+
expect(toolNames).toContain('compare_techs');
|
|
41
|
+
expect(toolNames).toContain('recommend_stack_demo');
|
|
42
|
+
expect(toolNames).toContain('recommend_stack');
|
|
43
|
+
expect(toolNames).toContain('get_blueprint');
|
|
44
|
+
expect(toolNames).toContain('create_blueprint');
|
|
45
|
+
expect(toolNames).toContain('setup_api_key');
|
|
46
|
+
expect(toolNames).toContain('list_api_keys');
|
|
47
|
+
expect(toolNames).toContain('revoke_api_key');
|
|
48
|
+
expect(toolNames).toContain('create_audit');
|
|
49
|
+
expect(toolNames).toContain('get_audit');
|
|
50
|
+
expect(toolNames).toContain('list_audits');
|
|
51
|
+
expect(toolNames).toContain('compare_audits');
|
|
52
|
+
expect(toolNames).toContain('get_audit_quota');
|
|
53
|
+
expect(toolNames).toContain('get_migration_recommendation');
|
|
54
|
+
expect(toolNames).toContain('generate_mcp_kit');
|
|
55
|
+
expect(toolNames).toContain('analyze_repo_mcps');
|
|
56
|
+
expect(toolNames).toContain('prepare_mcp_installation');
|
|
57
|
+
expect(toolNames).toContain('execute_mcp_installation');
|
|
58
|
+
expect(toolNames).toContain('check_mcp_compatibility');
|
|
59
|
+
});
|
|
60
|
+
test('all tools should have annotations', async () => {
|
|
61
|
+
const result = await client.request({ method: 'tools/list' }, ListToolsResultSchema);
|
|
62
|
+
for (const tool of result.tools) {
|
|
63
|
+
expect(tool.annotations).toBeDefined();
|
|
64
|
+
expect(tool.annotations?.readOnlyHint).toBeDefined();
|
|
65
|
+
expect(tool.annotations?.openWorldHint).toBeDefined();
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
test('local tools should have openWorldHint=false', async () => {
|
|
69
|
+
const result = await client.request({ method: 'tools/list' }, ListToolsResultSchema);
|
|
70
|
+
const localTools = [
|
|
71
|
+
'list_technologies',
|
|
72
|
+
'analyze_tech',
|
|
73
|
+
'compare_techs',
|
|
74
|
+
'recommend_stack_demo',
|
|
75
|
+
'generate_mcp_kit',
|
|
76
|
+
'check_mcp_compatibility',
|
|
77
|
+
'analyze_repo_mcps',
|
|
78
|
+
'execute_mcp_installation'
|
|
79
|
+
];
|
|
80
|
+
for (const toolName of localTools) {
|
|
81
|
+
const tool = result.tools.find((t) => t.name === toolName);
|
|
82
|
+
expect(tool).toBeDefined();
|
|
83
|
+
expect(tool?.annotations?.openWorldHint).toBe(false);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
test('API tools should have openWorldHint=true', async () => {
|
|
87
|
+
const result = await client.request({ method: 'tools/list' }, ListToolsResultSchema);
|
|
88
|
+
const apiTools = [
|
|
89
|
+
'recommend_stack',
|
|
90
|
+
'get_blueprint',
|
|
91
|
+
'create_blueprint',
|
|
92
|
+
'setup_api_key',
|
|
93
|
+
'list_api_keys',
|
|
94
|
+
'revoke_api_key',
|
|
95
|
+
'create_audit',
|
|
96
|
+
'get_audit',
|
|
97
|
+
'list_audits',
|
|
98
|
+
'compare_audits',
|
|
99
|
+
'get_audit_quota',
|
|
100
|
+
'get_migration_recommendation'
|
|
101
|
+
];
|
|
102
|
+
for (const toolName of apiTools) {
|
|
103
|
+
const tool = result.tools.find((t) => t.name === toolName);
|
|
104
|
+
expect(tool).toBeDefined();
|
|
105
|
+
expect(tool?.annotations?.openWorldHint).toBe(true);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
// ============================================================================
|
|
110
|
+
// LOCAL TOOL TESTS (no API key required)
|
|
111
|
+
// ============================================================================
|
|
112
|
+
describe('Local Tools (No API Key)', () => {
|
|
113
|
+
test('list_technologies should return technologies', async () => {
|
|
114
|
+
const result = (await client.callTool({
|
|
115
|
+
name: 'list_technologies',
|
|
116
|
+
arguments: {}
|
|
117
|
+
}));
|
|
118
|
+
expect(result.content).toBeDefined();
|
|
119
|
+
const text = getResultText(result);
|
|
120
|
+
expect(text).toContain('Technologies');
|
|
121
|
+
expect(text).toContain('frontend');
|
|
122
|
+
});
|
|
123
|
+
test('list_technologies should filter by category', async () => {
|
|
124
|
+
const result = (await client.callTool({
|
|
125
|
+
name: 'list_technologies',
|
|
126
|
+
arguments: { category: 'database' }
|
|
127
|
+
}));
|
|
128
|
+
const text = getResultText(result);
|
|
129
|
+
expect(text).toContain('database');
|
|
130
|
+
});
|
|
131
|
+
test('analyze_tech should analyze nextjs', async () => {
|
|
132
|
+
const result = (await client.callTool({
|
|
133
|
+
name: 'analyze_tech',
|
|
134
|
+
arguments: { technology: 'nextjs' }
|
|
135
|
+
}));
|
|
136
|
+
const text = getResultText(result);
|
|
137
|
+
expect(text).toContain('Next.js');
|
|
138
|
+
expect(text).toContain('Score');
|
|
139
|
+
});
|
|
140
|
+
test('analyze_tech should return error for unknown tech', async () => {
|
|
141
|
+
const result = (await client.callTool({
|
|
142
|
+
name: 'analyze_tech',
|
|
143
|
+
arguments: { technology: 'unknown-tech-xyz' }
|
|
144
|
+
}));
|
|
145
|
+
expect(result.isError).toBe(true);
|
|
146
|
+
const text = getResultText(result);
|
|
147
|
+
expect(text).toContain('not found');
|
|
148
|
+
});
|
|
149
|
+
test('compare_techs should compare frameworks', async () => {
|
|
150
|
+
const result = (await client.callTool({
|
|
151
|
+
name: 'compare_techs',
|
|
152
|
+
arguments: { technologies: ['nextjs', 'sveltekit'] }
|
|
153
|
+
}));
|
|
154
|
+
const text = getResultText(result);
|
|
155
|
+
expect(text).toContain('Comparison');
|
|
156
|
+
expect(text).toContain('Next.js');
|
|
157
|
+
expect(text).toContain('SvelteKit');
|
|
158
|
+
});
|
|
159
|
+
test('compare_techs should handle different contexts', async () => {
|
|
160
|
+
const result = (await client.callTool({
|
|
161
|
+
name: 'compare_techs',
|
|
162
|
+
arguments: { technologies: ['postgresql', 'mysql'], context: 'enterprise' }
|
|
163
|
+
}));
|
|
164
|
+
const text = getResultText(result);
|
|
165
|
+
expect(text).toContain('enterprise');
|
|
166
|
+
});
|
|
167
|
+
test('recommend_stack_demo should return recommendations', async () => {
|
|
168
|
+
const result = (await client.callTool({
|
|
169
|
+
name: 'recommend_stack_demo',
|
|
170
|
+
arguments: { projectType: 'saas' }
|
|
171
|
+
}));
|
|
172
|
+
// May return rate limit error, that's fine
|
|
173
|
+
const text = getResultText(result);
|
|
174
|
+
expect(text.length).toBeGreaterThan(0);
|
|
175
|
+
});
|
|
176
|
+
test('generate_mcp_kit should generate recommendations', async () => {
|
|
177
|
+
const result = (await client.callTool({
|
|
178
|
+
name: 'generate_mcp_kit',
|
|
179
|
+
arguments: {
|
|
180
|
+
projectDescription: 'A SaaS application for managing customer subscriptions with Stripe payments, PostgreSQL database, and Next.js frontend'
|
|
181
|
+
}
|
|
182
|
+
}));
|
|
183
|
+
const text = getResultText(result);
|
|
184
|
+
const parsed = JSON.parse(text);
|
|
185
|
+
expect(parsed).toHaveProperty('detectedTechnologies');
|
|
186
|
+
expect(parsed).toHaveProperty('recommendedMcps');
|
|
187
|
+
});
|
|
188
|
+
test('check_mcp_compatibility should detect conflicts', async () => {
|
|
189
|
+
const result = (await client.callTool({
|
|
190
|
+
name: 'check_mcp_compatibility',
|
|
191
|
+
arguments: { mcps: ['supabase-mcp', 'neon-mcp'] }
|
|
192
|
+
}));
|
|
193
|
+
const text = getResultText(result);
|
|
194
|
+
expect(text.toLowerCase()).toContain('conflict');
|
|
195
|
+
});
|
|
196
|
+
test('check_mcp_compatibility should detect synergies', async () => {
|
|
197
|
+
const result = (await client.callTool({
|
|
198
|
+
name: 'check_mcp_compatibility',
|
|
199
|
+
arguments: { mcps: ['stripe-mcp', 'resend-mcp'] }
|
|
200
|
+
}));
|
|
201
|
+
const text = getResultText(result);
|
|
202
|
+
expect(text.toLowerCase()).toContain('synerg');
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// API TOOL TESTS (require API key - test error handling)
|
|
207
|
+
// ============================================================================
|
|
208
|
+
describe('API Tools (Error Handling Without API Key)', () => {
|
|
209
|
+
test('recommend_stack should require API key', async () => {
|
|
210
|
+
const result = (await client.callTool({
|
|
211
|
+
name: 'recommend_stack',
|
|
212
|
+
arguments: { projectType: 'saas' }
|
|
213
|
+
}));
|
|
214
|
+
// Should fail without API key
|
|
215
|
+
expect(result.isError).toBe(true);
|
|
216
|
+
const text = getResultText(result);
|
|
217
|
+
expect(text.toLowerCase()).toMatch(/api.?key|auth|unauthorized/i);
|
|
218
|
+
});
|
|
219
|
+
test('get_blueprint should handle invalid UUID', async () => {
|
|
220
|
+
// This tests input validation
|
|
221
|
+
try {
|
|
222
|
+
await client.callTool({
|
|
223
|
+
name: 'get_blueprint',
|
|
224
|
+
arguments: { blueprintId: 'not-a-uuid' }
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
// Expected to fail validation
|
|
229
|
+
expect(error).toBeDefined();
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
test('list_api_keys should require API key', async () => {
|
|
233
|
+
const result = (await client.callTool({
|
|
234
|
+
name: 'list_api_keys',
|
|
235
|
+
arguments: {}
|
|
236
|
+
}));
|
|
237
|
+
expect(result.isError).toBe(true);
|
|
238
|
+
});
|
|
239
|
+
test('get_audit_quota should require API key', async () => {
|
|
240
|
+
const result = (await client.callTool({
|
|
241
|
+
name: 'get_audit_quota',
|
|
242
|
+
arguments: {}
|
|
243
|
+
}));
|
|
244
|
+
expect(result.isError).toBe(true);
|
|
245
|
+
});
|
|
246
|
+
test('create_audit should require API key', async () => {
|
|
247
|
+
const result = (await client.callTool({
|
|
248
|
+
name: 'create_audit',
|
|
249
|
+
arguments: {
|
|
250
|
+
name: 'Test Audit',
|
|
251
|
+
technologies: [{ name: 'React', version: '18.0.0' }]
|
|
252
|
+
}
|
|
253
|
+
}));
|
|
254
|
+
expect(result.isError).toBe(true);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
// ============================================================================
|
|
258
|
+
// INPUT VALIDATION TESTS
|
|
259
|
+
// ============================================================================
|
|
260
|
+
describe('Input Validation', () => {
|
|
261
|
+
test('analyze_tech should require technology parameter', async () => {
|
|
262
|
+
try {
|
|
263
|
+
await client.callTool({
|
|
264
|
+
name: 'analyze_tech',
|
|
265
|
+
arguments: {}
|
|
266
|
+
});
|
|
267
|
+
expect(true).toBe(false); // Should not reach here
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
expect(error).toBeDefined();
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
test('compare_techs should require at least 2 technologies', async () => {
|
|
274
|
+
try {
|
|
275
|
+
await client.callTool({
|
|
276
|
+
name: 'compare_techs',
|
|
277
|
+
arguments: { technologies: ['nextjs'] }
|
|
278
|
+
});
|
|
279
|
+
expect(true).toBe(false);
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
expect(error).toBeDefined();
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
test('compare_techs should reject more than 4 technologies', async () => {
|
|
286
|
+
try {
|
|
287
|
+
await client.callTool({
|
|
288
|
+
name: 'compare_techs',
|
|
289
|
+
arguments: { technologies: ['nextjs', 'sveltekit', 'remix', 'nuxt', 'astro'] }
|
|
290
|
+
});
|
|
291
|
+
expect(true).toBe(false);
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
expect(error).toBeDefined();
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
test('generate_mcp_kit should require minimum description length', async () => {
|
|
298
|
+
try {
|
|
299
|
+
await client.callTool({
|
|
300
|
+
name: 'generate_mcp_kit',
|
|
301
|
+
arguments: { projectDescription: 'Too short' }
|
|
302
|
+
});
|
|
303
|
+
expect(true).toBe(false);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
expect(error).toBeDefined();
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
test('check_mcp_compatibility should require at least 1 MCP', async () => {
|
|
310
|
+
try {
|
|
311
|
+
await client.callTool({
|
|
312
|
+
name: 'check_mcp_compatibility',
|
|
313
|
+
arguments: { mcps: [] }
|
|
314
|
+
});
|
|
315
|
+
expect(true).toBe(false);
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
expect(error).toBeDefined();
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
// ============================================================================
|
|
323
|
+
// PROJECT-KIT TOOL TESTS
|
|
324
|
+
// ============================================================================
|
|
325
|
+
describe('Project-Kit Tools', () => {
|
|
326
|
+
test('analyze_repo_mcps should work without workspace', async () => {
|
|
327
|
+
const result = (await client.callTool({
|
|
328
|
+
name: 'analyze_repo_mcps',
|
|
329
|
+
arguments: { workspaceRoot: '/nonexistent/path' }
|
|
330
|
+
}));
|
|
331
|
+
// Should return empty analysis, not error
|
|
332
|
+
const text = getResultText(result);
|
|
333
|
+
expect(text).toContain('Repository Analysis');
|
|
334
|
+
});
|
|
335
|
+
test('execute_mcp_installation should handle missing .env-mcp', async () => {
|
|
336
|
+
const result = (await client.callTool({
|
|
337
|
+
name: 'execute_mcp_installation',
|
|
338
|
+
arguments: { envMcpPath: '/nonexistent/.env-mcp' }
|
|
339
|
+
}));
|
|
340
|
+
const text = getResultText(result);
|
|
341
|
+
// Should handle gracefully
|
|
342
|
+
expect(text.length).toBeGreaterThan(0);
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
//# sourceMappingURL=mcp-tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/mcp-tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Annotations
|
|
3
|
+
*
|
|
4
|
+
* These annotations help MCP clients (VS Code, Cursor, etc.) understand
|
|
5
|
+
* the behavior of each tool and make informed decisions about enabling them.
|
|
6
|
+
*
|
|
7
|
+
* @see https://modelcontextprotocol.io/specification/2025-06-18/server/tools
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolAnnotations } from '@modelcontextprotocol/sdk/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Tool behavior hints:
|
|
12
|
+
* - readOnlyHint: true = tool doesn't modify anything (safe)
|
|
13
|
+
* - destructiveHint: true = tool can delete/destroy data
|
|
14
|
+
* - idempotentHint: true = calling multiple times = same result
|
|
15
|
+
* - openWorldHint: true = interacts with external APIs/services
|
|
16
|
+
*/
|
|
17
|
+
/** List technologies - local lookup, read-only */
|
|
18
|
+
export declare const listTechnologiesAnnotations: ToolAnnotations;
|
|
19
|
+
/** Analyze technology - local scoring, read-only */
|
|
20
|
+
export declare const analyzeTechAnnotations: ToolAnnotations;
|
|
21
|
+
/** Compare technologies - local scoring, read-only */
|
|
22
|
+
export declare const compareTechsAnnotations: ToolAnnotations;
|
|
23
|
+
/** Recommend stack demo - local scoring with rate limit, read-only */
|
|
24
|
+
export declare const recommendStackDemoAnnotations: ToolAnnotations;
|
|
25
|
+
/** Generate MCP kit - local analysis, read-only */
|
|
26
|
+
export declare const generateMcpKitAnnotations: ToolAnnotations;
|
|
27
|
+
/** Check MCP compatibility - local rule checking, read-only */
|
|
28
|
+
export declare const checkCompatibilityAnnotations: ToolAnnotations;
|
|
29
|
+
/** Analyze repo MCPs - reads local files, no modifications */
|
|
30
|
+
export declare const analyzeRepoMcpsAnnotations: ToolAnnotations;
|
|
31
|
+
/** Prepare MCP installation - creates .env-mcp file */
|
|
32
|
+
export declare const prepareMcpInstallationAnnotations: ToolAnnotations;
|
|
33
|
+
/** Execute MCP installation - generates commands only, no execution */
|
|
34
|
+
export declare const executeMcpInstallationAnnotations: ToolAnnotations;
|
|
35
|
+
/** Recommend stack - calls StacksFinder API */
|
|
36
|
+
export declare const recommendStackAnnotations: ToolAnnotations;
|
|
37
|
+
/** Get blueprint - fetches from API */
|
|
38
|
+
export declare const getBlueprintAnnotations: ToolAnnotations;
|
|
39
|
+
/** Create blueprint - creates resource via API */
|
|
40
|
+
export declare const createBlueprintAnnotations: ToolAnnotations;
|
|
41
|
+
/** Setup API key - authenticates and creates key */
|
|
42
|
+
export declare const setupApiKeyAnnotations: ToolAnnotations;
|
|
43
|
+
/** List API keys - fetches from API */
|
|
44
|
+
export declare const listApiKeysAnnotations: ToolAnnotations;
|
|
45
|
+
/** Revoke API key - deletes resource */
|
|
46
|
+
export declare const revokeApiKeyAnnotations: ToolAnnotations;
|
|
47
|
+
/** Create audit - creates resource */
|
|
48
|
+
export declare const createAuditAnnotations: ToolAnnotations;
|
|
49
|
+
/** Get audit - fetches from API */
|
|
50
|
+
export declare const getAuditAnnotations: ToolAnnotations;
|
|
51
|
+
/** List audits - fetches from API */
|
|
52
|
+
export declare const listAuditsAnnotations: ToolAnnotations;
|
|
53
|
+
/** Compare audits - fetches and compares */
|
|
54
|
+
export declare const compareAuditsAnnotations: ToolAnnotations;
|
|
55
|
+
/** Get audit quota - fetches from API */
|
|
56
|
+
export declare const getAuditQuotaAnnotations: ToolAnnotations;
|
|
57
|
+
/** Get migration recommendation - analyzes audit */
|
|
58
|
+
export declare const getMigrationRecommendationAnnotations: ToolAnnotations;
|
|
59
|
+
/** Estimate project - creates estimate via LLM + optional market analysis */
|
|
60
|
+
export declare const estimateProjectAnnotations: ToolAnnotations;
|
|
61
|
+
/** Get estimate quota - fetches quota status */
|
|
62
|
+
export declare const getEstimateQuotaAnnotations: ToolAnnotations;
|
|
63
|
+
//# sourceMappingURL=annotations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;;;;GAMG;AAMH,kDAAkD;AAClD,eAAO,MAAM,2BAA2B,EAAE,eAMzC,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,EAAE,eAMpC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,6BAA6B,EAAE,eAM3C,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,yBAAyB,EAAE,eAMvC,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,6BAA6B,EAAE,eAM3C,CAAC;AAMF,8DAA8D;AAC9D,eAAO,MAAM,0BAA0B,EAAE,eAMxC,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,iCAAiC,EAAE,eAM/C,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,iCAAiC,EAAE,eAM/C,CAAC;AAMF,+CAA+C;AAC/C,eAAO,MAAM,yBAAyB,EAAE,eAMvC,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,0BAA0B,EAAE,eAMxC,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,EAAE,eAMpC,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,sBAAsB,EAAE,eAMpC,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,uBAAuB,EAAE,eAMrC,CAAC;AAMF,sCAAsC;AACtC,eAAO,MAAM,sBAAsB,EAAE,eAMpC,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,mBAAmB,EAAE,eAMjC,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,qBAAqB,EAAE,eAMnC,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,EAAE,eAMtC,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,wBAAwB,EAAE,eAMtC,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,qCAAqC,EAAE,eAMnD,CAAC;AAMF,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,EAAE,eAMxC,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,2BAA2B,EAAE,eAMzC,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Annotations
|
|
3
|
+
*
|
|
4
|
+
* These annotations help MCP clients (VS Code, Cursor, etc.) understand
|
|
5
|
+
* the behavior of each tool and make informed decisions about enabling them.
|
|
6
|
+
*
|
|
7
|
+
* @see https://modelcontextprotocol.io/specification/2025-06-18/server/tools
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Tool behavior hints:
|
|
11
|
+
* - readOnlyHint: true = tool doesn't modify anything (safe)
|
|
12
|
+
* - destructiveHint: true = tool can delete/destroy data
|
|
13
|
+
* - idempotentHint: true = calling multiple times = same result
|
|
14
|
+
* - openWorldHint: true = interacts with external APIs/services
|
|
15
|
+
*/
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// LOCAL TOOLS (no API calls, fully offline)
|
|
18
|
+
// ============================================================================
|
|
19
|
+
/** List technologies - local lookup, read-only */
|
|
20
|
+
export const listTechnologiesAnnotations = {
|
|
21
|
+
title: 'List Technologies',
|
|
22
|
+
readOnlyHint: true,
|
|
23
|
+
destructiveHint: false,
|
|
24
|
+
idempotentHint: true,
|
|
25
|
+
openWorldHint: false
|
|
26
|
+
};
|
|
27
|
+
/** Analyze technology - local scoring, read-only */
|
|
28
|
+
export const analyzeTechAnnotations = {
|
|
29
|
+
title: 'Analyze Technology',
|
|
30
|
+
readOnlyHint: true,
|
|
31
|
+
destructiveHint: false,
|
|
32
|
+
idempotentHint: true,
|
|
33
|
+
openWorldHint: false
|
|
34
|
+
};
|
|
35
|
+
/** Compare technologies - local scoring, read-only */
|
|
36
|
+
export const compareTechsAnnotations = {
|
|
37
|
+
title: 'Compare Technologies',
|
|
38
|
+
readOnlyHint: true,
|
|
39
|
+
destructiveHint: false,
|
|
40
|
+
idempotentHint: true,
|
|
41
|
+
openWorldHint: false
|
|
42
|
+
};
|
|
43
|
+
/** Recommend stack demo - local scoring with rate limit, read-only */
|
|
44
|
+
export const recommendStackDemoAnnotations = {
|
|
45
|
+
title: 'Recommend Stack (Demo)',
|
|
46
|
+
readOnlyHint: true,
|
|
47
|
+
destructiveHint: false,
|
|
48
|
+
idempotentHint: true,
|
|
49
|
+
openWorldHint: false
|
|
50
|
+
};
|
|
51
|
+
/** Generate MCP kit - local analysis, read-only */
|
|
52
|
+
export const generateMcpKitAnnotations = {
|
|
53
|
+
title: 'Generate MCP Kit',
|
|
54
|
+
readOnlyHint: true,
|
|
55
|
+
destructiveHint: false,
|
|
56
|
+
idempotentHint: true,
|
|
57
|
+
openWorldHint: false
|
|
58
|
+
};
|
|
59
|
+
/** Check MCP compatibility - local rule checking, read-only */
|
|
60
|
+
export const checkCompatibilityAnnotations = {
|
|
61
|
+
title: 'Check MCP Compatibility',
|
|
62
|
+
readOnlyHint: true,
|
|
63
|
+
destructiveHint: false,
|
|
64
|
+
idempotentHint: true,
|
|
65
|
+
openWorldHint: false
|
|
66
|
+
};
|
|
67
|
+
// ============================================================================
|
|
68
|
+
// LOCAL TOOLS WITH FILE SYSTEM ACCESS
|
|
69
|
+
// ============================================================================
|
|
70
|
+
/** Analyze repo MCPs - reads local files, no modifications */
|
|
71
|
+
export const analyzeRepoMcpsAnnotations = {
|
|
72
|
+
title: 'Analyze Repository MCPs',
|
|
73
|
+
readOnlyHint: true,
|
|
74
|
+
destructiveHint: false,
|
|
75
|
+
idempotentHint: true,
|
|
76
|
+
openWorldHint: false
|
|
77
|
+
};
|
|
78
|
+
/** Prepare MCP installation - creates .env-mcp file */
|
|
79
|
+
export const prepareMcpInstallationAnnotations = {
|
|
80
|
+
title: 'Prepare MCP Installation',
|
|
81
|
+
readOnlyHint: false, // Creates files
|
|
82
|
+
destructiveHint: false, // Doesn't delete anything
|
|
83
|
+
idempotentHint: true, // Same input = same file
|
|
84
|
+
openWorldHint: false
|
|
85
|
+
};
|
|
86
|
+
/** Execute MCP installation - generates commands only, no execution */
|
|
87
|
+
export const executeMcpInstallationAnnotations = {
|
|
88
|
+
title: 'Execute MCP Installation',
|
|
89
|
+
readOnlyHint: true, // Only generates commands, doesn't execute
|
|
90
|
+
destructiveHint: false,
|
|
91
|
+
idempotentHint: true,
|
|
92
|
+
openWorldHint: false
|
|
93
|
+
};
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// API-BASED TOOLS (require network access)
|
|
96
|
+
// ============================================================================
|
|
97
|
+
/** Recommend stack - calls StacksFinder API */
|
|
98
|
+
export const recommendStackAnnotations = {
|
|
99
|
+
title: 'Recommend Stack',
|
|
100
|
+
readOnlyHint: true, // API is read-only
|
|
101
|
+
destructiveHint: false,
|
|
102
|
+
idempotentHint: true, // Same request = same response
|
|
103
|
+
openWorldHint: true // External API call
|
|
104
|
+
};
|
|
105
|
+
/** Get blueprint - fetches from API */
|
|
106
|
+
export const getBlueprintAnnotations = {
|
|
107
|
+
title: 'Get Blueprint',
|
|
108
|
+
readOnlyHint: true,
|
|
109
|
+
destructiveHint: false,
|
|
110
|
+
idempotentHint: true,
|
|
111
|
+
openWorldHint: true
|
|
112
|
+
};
|
|
113
|
+
/** Create blueprint - creates resource via API */
|
|
114
|
+
export const createBlueprintAnnotations = {
|
|
115
|
+
title: 'Create Blueprint',
|
|
116
|
+
readOnlyHint: false, // Creates a resource
|
|
117
|
+
destructiveHint: false,
|
|
118
|
+
idempotentHint: false, // Creates new resource each time
|
|
119
|
+
openWorldHint: true
|
|
120
|
+
};
|
|
121
|
+
/** Setup API key - authenticates and creates key */
|
|
122
|
+
export const setupApiKeyAnnotations = {
|
|
123
|
+
title: 'Setup API Key',
|
|
124
|
+
readOnlyHint: false, // Creates API key
|
|
125
|
+
destructiveHint: false,
|
|
126
|
+
idempotentHint: false, // Creates new key each time
|
|
127
|
+
openWorldHint: true
|
|
128
|
+
};
|
|
129
|
+
/** List API keys - fetches from API */
|
|
130
|
+
export const listApiKeysAnnotations = {
|
|
131
|
+
title: 'List API Keys',
|
|
132
|
+
readOnlyHint: true,
|
|
133
|
+
destructiveHint: false,
|
|
134
|
+
idempotentHint: true,
|
|
135
|
+
openWorldHint: true
|
|
136
|
+
};
|
|
137
|
+
/** Revoke API key - deletes resource */
|
|
138
|
+
export const revokeApiKeyAnnotations = {
|
|
139
|
+
title: 'Revoke API Key',
|
|
140
|
+
readOnlyHint: false,
|
|
141
|
+
destructiveHint: true, // Permanently revokes key
|
|
142
|
+
idempotentHint: true, // Revoking twice = same result
|
|
143
|
+
openWorldHint: true
|
|
144
|
+
};
|
|
145
|
+
// ============================================================================
|
|
146
|
+
// AUDIT TOOLS (API-based)
|
|
147
|
+
// ============================================================================
|
|
148
|
+
/** Create audit - creates resource */
|
|
149
|
+
export const createAuditAnnotations = {
|
|
150
|
+
title: 'Create Technical Debt Audit',
|
|
151
|
+
readOnlyHint: false,
|
|
152
|
+
destructiveHint: false,
|
|
153
|
+
idempotentHint: false, // Creates new audit each time
|
|
154
|
+
openWorldHint: true
|
|
155
|
+
};
|
|
156
|
+
/** Get audit - fetches from API */
|
|
157
|
+
export const getAuditAnnotations = {
|
|
158
|
+
title: 'Get Audit Report',
|
|
159
|
+
readOnlyHint: true,
|
|
160
|
+
destructiveHint: false,
|
|
161
|
+
idempotentHint: true,
|
|
162
|
+
openWorldHint: true
|
|
163
|
+
};
|
|
164
|
+
/** List audits - fetches from API */
|
|
165
|
+
export const listAuditsAnnotations = {
|
|
166
|
+
title: 'List Audit Reports',
|
|
167
|
+
readOnlyHint: true,
|
|
168
|
+
destructiveHint: false,
|
|
169
|
+
idempotentHint: true,
|
|
170
|
+
openWorldHint: true
|
|
171
|
+
};
|
|
172
|
+
/** Compare audits - fetches and compares */
|
|
173
|
+
export const compareAuditsAnnotations = {
|
|
174
|
+
title: 'Compare Audit Reports',
|
|
175
|
+
readOnlyHint: true,
|
|
176
|
+
destructiveHint: false,
|
|
177
|
+
idempotentHint: true,
|
|
178
|
+
openWorldHint: true
|
|
179
|
+
};
|
|
180
|
+
/** Get audit quota - fetches from API */
|
|
181
|
+
export const getAuditQuotaAnnotations = {
|
|
182
|
+
title: 'Get Audit Quota',
|
|
183
|
+
readOnlyHint: true,
|
|
184
|
+
destructiveHint: false,
|
|
185
|
+
idempotentHint: true,
|
|
186
|
+
openWorldHint: true
|
|
187
|
+
};
|
|
188
|
+
/** Get migration recommendation - analyzes audit */
|
|
189
|
+
export const getMigrationRecommendationAnnotations = {
|
|
190
|
+
title: 'Get Migration Recommendation',
|
|
191
|
+
readOnlyHint: true,
|
|
192
|
+
destructiveHint: false,
|
|
193
|
+
idempotentHint: true,
|
|
194
|
+
openWorldHint: true
|
|
195
|
+
};
|
|
196
|
+
// ============================================================================
|
|
197
|
+
// ESTIMATOR TOOLS (API-based, LLM + Perplexity)
|
|
198
|
+
// ============================================================================
|
|
199
|
+
/** Estimate project - creates estimate via LLM + optional market analysis */
|
|
200
|
+
export const estimateProjectAnnotations = {
|
|
201
|
+
title: 'Estimate Project',
|
|
202
|
+
readOnlyHint: false, // Creates estimate, consumes quota
|
|
203
|
+
destructiveHint: false,
|
|
204
|
+
idempotentHint: false, // LLM responses can vary
|
|
205
|
+
openWorldHint: true // Calls Claude + optional Perplexity
|
|
206
|
+
};
|
|
207
|
+
/** Get estimate quota - fetches quota status */
|
|
208
|
+
export const getEstimateQuotaAnnotations = {
|
|
209
|
+
title: 'Get Estimate Quota',
|
|
210
|
+
readOnlyHint: true,
|
|
211
|
+
destructiveHint: false,
|
|
212
|
+
idempotentHint: true,
|
|
213
|
+
openWorldHint: true
|
|
214
|
+
};
|
|
215
|
+
//# sourceMappingURL=annotations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../src/annotations.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiHpE;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAsoBxC"}
|