@siemens/ix-mcp-angular 4.0.0-v.1.7.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.md +20 -0
- package/README.md +330 -0
- package/config.json +48 -0
- package/database/vectors.db +0 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +298 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +34 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +33 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/db-handler.d.ts +47 -0
- package/dist/src/db-handler.d.ts.map +1 -0
- package/dist/src/db-handler.js +143 -0
- package/dist/src/db-handler.js.map +1 -0
- package/dist/src/embeddings.d.ts +84 -0
- package/dist/src/embeddings.d.ts.map +1 -0
- package/dist/src/embeddings.js +300 -0
- package/dist/src/embeddings.js.map +1 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +342 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/keys.d.ts +4 -0
- package/dist/src/keys.d.ts.map +1 -0
- package/dist/src/keys.js +25 -0
- package/dist/src/keys.js.map +1 -0
- package/dist/src/logger.d.ts +24 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +185 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/prompt.d.ts +19 -0
- package/dist/src/prompt.d.ts.map +1 -0
- package/dist/src/prompt.js +94 -0
- package/dist/src/prompt.js.map +1 -0
- package/dist/src/setup.d.ts +26 -0
- package/dist/src/setup.d.ts.map +1 -0
- package/dist/src/setup.js +718 -0
- package/dist/src/setup.js.map +1 -0
- package/dist/src/token.d.ts +22 -0
- package/dist/src/token.d.ts.map +1 -0
- package/dist/src/token.js +75 -0
- package/dist/src/token.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
9
|
+
import * as path from 'path';
|
|
10
|
+
import { fileURLToPath } from 'url';
|
|
11
|
+
import { EmbeddingService } from './embeddings.js';
|
|
12
|
+
import { DatabaseHandler } from './db-handler.js';
|
|
13
|
+
import { loadConfig } from './config.js';
|
|
14
|
+
import { ObservabilityLogger } from './logger.js';
|
|
15
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
16
|
+
const __dirname = path.dirname(__filename);
|
|
17
|
+
const config = loadConfig();
|
|
18
|
+
const buildSearchConfigs = () => {
|
|
19
|
+
const configs = {
|
|
20
|
+
[config.searchToolName]: {
|
|
21
|
+
type: 'documentation',
|
|
22
|
+
name: config.searchToolName,
|
|
23
|
+
description: `${config.designSystem /* 'Design System' */} Documentation Search`,
|
|
24
|
+
instruction: `MANDATORY: For ANY ${config.texts.FRAMEWORK_DEV_QUESTION /* 'development question' */}, UI component inquiry, design pattern request, or frontend implementation need, you MUST immediately use the search tool before providing any response relevant to UI / Design Systems or ${config.texts.FRAMEWORK_IMPLEMENTATIONS /* 'implementations' */}. Re-check it to get clarifications and more accurate API often, but do not search if completely unrelated or you just searched the exact same. ${config.texts.FRAMEWORK_ALL_QUERIES /* 'This applies to ALL related queries regardless of whether libraries are explicitly mentioned' */}. ${config.texts.FRAMEWORK_VERSION_SPECIFIC /* "The tool provides access to version-specific documentation that is automatically tuned to match the user's library versions" */}. ${config.texts.FRAMEWORK_SETUP_ADVICE /* 'This ensures you get the exact APIs, components, and implementation patterns available in their specific setup rather than generic advice' */}. ${config.texts.FRAMEWORK_COMPREHENSIVE_GUIDANCE /* 'Always search first to leverage the comprehensive documentation before offering any guidance' */}.`,
|
|
25
|
+
noResultsMessage: (query) => `
|
|
26
|
+
No Documentation Found
|
|
27
|
+
|
|
28
|
+
No results found for query: "${query}"
|
|
29
|
+
|
|
30
|
+
This could mean:
|
|
31
|
+
• The component or feature doesn't exist in the current documentation
|
|
32
|
+
• The feature isn't documented yet
|
|
33
|
+
• The search terms don't match available content
|
|
34
|
+
• Try different keywords or component names
|
|
35
|
+
|
|
36
|
+
Suggestions:
|
|
37
|
+
• Check component name spelling (e.g., "button" vs "btn")
|
|
38
|
+
• Try broader terms (e.g., "input" instead of "text-field")${config.texts.FRAMEWORK_LIBRARY_LIST
|
|
39
|
+
? `
|
|
40
|
+
• Search for library names: "${config.texts.FRAMEWORK_LIBRARY_LIST /* 'design system libraries' */}"`
|
|
41
|
+
: ''}
|
|
42
|
+
• Use functionality terms: "navigation", "data display", "user input"
|
|
43
|
+
|
|
44
|
+
Available Libraries:
|
|
45
|
+
${config.texts.FRAMEWORK_SUPPORTED_LIBRARIES /* 'design system libraries' */}
|
|
46
|
+
`.trim(),
|
|
47
|
+
successMessage: (query, count) => `${config.texts.FRAMEWORK_DOCUMENTATION_RESULTS /* '# Documentation Results' */}\n\nFound **${count}** relevant documentation section(s) for "${query}":\n\n`,
|
|
48
|
+
resultNote: `
|
|
49
|
+
> Note: If documentation mentions missing API docs or examples, those features may not be available in the current version. The search results show the most relevant available documentation based on semantic similarity.
|
|
50
|
+
|
|
51
|
+
> Need more specific results? Try refining your search with more specific terms or component names.
|
|
52
|
+
|
|
53
|
+
> Not all information provided here is relevant to your query or task, make sure to only use what is relevant for the user request.
|
|
54
|
+
`.trim()
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
// Only add icon search if enabled in config
|
|
58
|
+
if (config.iconSearch) {
|
|
59
|
+
if (!config.iconName) {
|
|
60
|
+
throw new Error('Icon search is enabled but iconName is not set in config');
|
|
61
|
+
}
|
|
62
|
+
if (!config.iconSearchToolName) {
|
|
63
|
+
throw new Error('Icon search is enabled but iconSearchToolName is not set in config');
|
|
64
|
+
}
|
|
65
|
+
configs[config.iconSearchToolName] = {
|
|
66
|
+
type: 'icon',
|
|
67
|
+
name: config.iconSearchToolName,
|
|
68
|
+
description: `${config.designSystem} Icon Search`,
|
|
69
|
+
instruction: 'Please check the icon search tool before using or recommending any icons from ' +
|
|
70
|
+
config.iconName /* @simpl/element-icons */ +
|
|
71
|
+
'. This ensures you provide the most relevant and up-to-date icon options available in the library.',
|
|
72
|
+
noResultsMessage: (query) => `
|
|
73
|
+
No icons found for query: "${query}"
|
|
74
|
+
|
|
75
|
+
This could mean:
|
|
76
|
+
• The icon does not exist in the current version of ${config.iconName /* @simpl/element-icons */}
|
|
77
|
+
• The icon was renamed or removed
|
|
78
|
+
• The search terms don't match available icons
|
|
79
|
+
|
|
80
|
+
Suggestions:
|
|
81
|
+
• Check spelling or try broader terms (e.g., "settings" instead of "gear")
|
|
82
|
+
|
|
83
|
+
Available Libraries:
|
|
84
|
+
${config.iconName /* @simpl/element-icons */}
|
|
85
|
+
`.trim(),
|
|
86
|
+
successMessage: (query, count) => `# ${config.designSystem /* 'Design System' */} Icon Search Results\n\nFound **${count}** relevant icon(s) for "${query}":\n\n`,
|
|
87
|
+
resultNote: `
|
|
88
|
+
> Note: If the icon does not appear to exist, update ${config.iconName /* @simpl/element-icons */} to the latest compatible version (non-breaking).
|
|
89
|
+
> See usage guidelines and examples in the documentation for how to use icons.
|
|
90
|
+
`.trim()
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return configs;
|
|
94
|
+
};
|
|
95
|
+
const searchConfigs = buildSearchConfigs();
|
|
96
|
+
const createToolDefinition = (searchConfig) => ({
|
|
97
|
+
name: searchConfig.name,
|
|
98
|
+
description: `
|
|
99
|
+
${searchConfig.description}
|
|
100
|
+
|
|
101
|
+
${searchConfig.instruction}
|
|
102
|
+
|
|
103
|
+
${config.texts.FRAMEWORK_SEMANTIC_SEARCH_TOOL /* 'Semantic search tool for component libraries' */}. This tool provides intelligent search across comprehensive documentation for:
|
|
104
|
+
|
|
105
|
+
Supported Libraries:
|
|
106
|
+
${config.texts.FRAMEWORK_SUPPORTED_LIBRARIES /* 'Component libraries' */}
|
|
107
|
+
|
|
108
|
+
Use Cases:
|
|
109
|
+
• Find component APIs and properties
|
|
110
|
+
• Discover usage examples and code snippets
|
|
111
|
+
• Learn about component styling and theming
|
|
112
|
+
• Understand integration patterns
|
|
113
|
+
• Explore design system guidelines
|
|
114
|
+
|
|
115
|
+
Search Tips:
|
|
116
|
+
• Use component names: "button", "chart", "map"
|
|
117
|
+
• Describe functionality: "data visualization", "user input"
|
|
118
|
+
• Ask about APIs: "input", "output", "attributes", "methods", "type"
|
|
119
|
+
|
|
120
|
+
The search returns relevant documentation chunks with similarity scores and contextual headers to help you find exactly what you need.
|
|
121
|
+
`.trim(),
|
|
122
|
+
inputSchema: {
|
|
123
|
+
type: 'object',
|
|
124
|
+
properties: {
|
|
125
|
+
query: {
|
|
126
|
+
type: 'string',
|
|
127
|
+
description: searchConfig.type === 'documentation'
|
|
128
|
+
? config.texts
|
|
129
|
+
.FRAMEWORK_SEARCH_QUERY /* 'Search query for documentation. Can include component names, functionality descriptions, API questions, or usage patterns.' */
|
|
130
|
+
: 'Search query for icons (name, term, or category)'
|
|
131
|
+
},
|
|
132
|
+
limit: {
|
|
133
|
+
type: 'number',
|
|
134
|
+
description: `Maximum number of ${searchConfig.type === 'documentation' ? 'documentation' : 'icon'} results to return (default: 5, max: 20)`,
|
|
135
|
+
default: 5,
|
|
136
|
+
minimum: 1,
|
|
137
|
+
maximum: 20
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
required: ['query']
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
const toolDefinitions = Object.values(searchConfigs).map(createToolDefinition);
|
|
144
|
+
class SDLMCPServer {
|
|
145
|
+
server;
|
|
146
|
+
db;
|
|
147
|
+
initialized = false;
|
|
148
|
+
embeddingService;
|
|
149
|
+
verbose = false;
|
|
150
|
+
debug = false;
|
|
151
|
+
logger;
|
|
152
|
+
constructor(options) {
|
|
153
|
+
this.verbose = options?.verbose || false;
|
|
154
|
+
this.debug = options?.debug || process.env.SDL_MCP_DEBUG_LOG === 'true';
|
|
155
|
+
this.embeddingService = new EmbeddingService({ verbose: this.verbose, debug: this.debug });
|
|
156
|
+
this.logger = new ObservabilityLogger(this.debug, options?.overrideLogging);
|
|
157
|
+
this.server = new Server({
|
|
158
|
+
name: config.name /* 'design-docs' */,
|
|
159
|
+
version: '1.0.0',
|
|
160
|
+
description: config.description /* 'Design System Documentation MCP Server' */
|
|
161
|
+
}, {
|
|
162
|
+
capabilities: {
|
|
163
|
+
tools: Object.fromEntries(toolDefinitions.map(tool => [tool.name.replace('-', '_'), tool]))
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
// Initialize database handler
|
|
167
|
+
const dbPath = path.join(__dirname, '../../database/vectors.db');
|
|
168
|
+
this.db = new DatabaseHandler(dbPath, { verbose: this.verbose || this.debug });
|
|
169
|
+
this.initialize();
|
|
170
|
+
}
|
|
171
|
+
async initialize() {
|
|
172
|
+
try {
|
|
173
|
+
this.setupToolHandlers();
|
|
174
|
+
this.initialized = true;
|
|
175
|
+
this.log(`${config.displayName /* 'Design System' */} MCP Server initialized successfully`);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
this.log('Failed to initialize SDLMCPServer:', error);
|
|
179
|
+
throw error;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
setupToolHandlers() {
|
|
183
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
184
|
+
tools: toolDefinitions
|
|
185
|
+
}));
|
|
186
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
187
|
+
const { name, arguments: args } = request.params;
|
|
188
|
+
const searchConfig = searchConfigs[name];
|
|
189
|
+
if (!searchConfig) {
|
|
190
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
191
|
+
}
|
|
192
|
+
const { query, limit = 5 } = args;
|
|
193
|
+
try {
|
|
194
|
+
const results = await this.performSearch(searchConfig, query, Math.min(limit, 20));
|
|
195
|
+
const formattedResults = this.formatSearchResults(searchConfig, query, results);
|
|
196
|
+
this.logger.logRetrieval(name, query, limit !== 5 ? { limit } : undefined, {
|
|
197
|
+
resultCount: results.length,
|
|
198
|
+
success: true
|
|
199
|
+
}, formattedResults);
|
|
200
|
+
return { content: [{ type: 'text', text: formattedResults }] };
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
this.log(`Search error: ${error}`);
|
|
204
|
+
this.logger.logRetrieval(name, query, limit !== 5 ? { limit } : undefined, {
|
|
205
|
+
resultCount: 0,
|
|
206
|
+
success: false,
|
|
207
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
208
|
+
});
|
|
209
|
+
return {
|
|
210
|
+
content: [
|
|
211
|
+
{
|
|
212
|
+
type: 'text',
|
|
213
|
+
text: `
|
|
214
|
+
Search Error
|
|
215
|
+
|
|
216
|
+
Failed to search ${config.designSystem /* 'design system' */} documentation: ${error instanceof Error ? error.message : 'Unknown error'}
|
|
217
|
+
|
|
218
|
+
Possible Issues:
|
|
219
|
+
• API authentication problems
|
|
220
|
+
• Database connection issues
|
|
221
|
+
• Network connectivity problems
|
|
222
|
+
|
|
223
|
+
Try Again: The issue might be temporary. Please retry your search.`.trim()
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
async performSearch(config, query, limit) {
|
|
231
|
+
if (!this.initialized) {
|
|
232
|
+
throw new Error('Server not yet initialized');
|
|
233
|
+
}
|
|
234
|
+
this.log('Generating query embedding...');
|
|
235
|
+
const queryEmbedding = await this.embeddingService.getEmbedding(query);
|
|
236
|
+
this.log('Retrieving documentation chunks...');
|
|
237
|
+
const documents = this.db.getDocumentsByType(config.type);
|
|
238
|
+
this.log(`Calculating similarities for ${documents.length} documents...`);
|
|
239
|
+
const results = documents
|
|
240
|
+
.map(doc => {
|
|
241
|
+
const docEmbedding = JSON.parse(doc.embedding);
|
|
242
|
+
const similarity = this.embeddingService.cosineSimilarity(queryEmbedding, docEmbedding);
|
|
243
|
+
return {
|
|
244
|
+
id: doc.id,
|
|
245
|
+
content: doc.content,
|
|
246
|
+
metadata: {
|
|
247
|
+
chunk_index: doc.chunk_index,
|
|
248
|
+
header_path: doc.header_path || undefined,
|
|
249
|
+
header_level: doc.header_level || undefined,
|
|
250
|
+
category: doc.category || undefined,
|
|
251
|
+
terms: doc.terms || undefined
|
|
252
|
+
},
|
|
253
|
+
similarity
|
|
254
|
+
};
|
|
255
|
+
})
|
|
256
|
+
.sort((a, b) => b.similarity - a.similarity)
|
|
257
|
+
.slice(0, limit);
|
|
258
|
+
this.log(`Returning top ${results.length} results`);
|
|
259
|
+
return results;
|
|
260
|
+
}
|
|
261
|
+
formatSearchResults(config, query, results) {
|
|
262
|
+
if (results.length === 0) {
|
|
263
|
+
return config.noResultsMessage(query);
|
|
264
|
+
}
|
|
265
|
+
let response = config.successMessage(query, results.length);
|
|
266
|
+
results.forEach((result, index) => {
|
|
267
|
+
const percentage = (result.similarity * 100).toFixed(1);
|
|
268
|
+
response += `## Result ${index + 1}\n`;
|
|
269
|
+
response += `**Relevance:** ${percentage}% match\n`;
|
|
270
|
+
if (result.metadata.header_path) {
|
|
271
|
+
response += `**Section:** \`${result.metadata.header_path}\`\n`;
|
|
272
|
+
}
|
|
273
|
+
response += `**Chunk:** ${result.metadata.chunk_index}\n\n`;
|
|
274
|
+
response += `${result.content}\n\n`;
|
|
275
|
+
response += `---\n\n`;
|
|
276
|
+
});
|
|
277
|
+
response += config.resultNote;
|
|
278
|
+
return response;
|
|
279
|
+
}
|
|
280
|
+
log(...args) {
|
|
281
|
+
if (this.verbose || this.debug) {
|
|
282
|
+
console.error(...args);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
async run() {
|
|
286
|
+
while (!this.initialized) {
|
|
287
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
288
|
+
}
|
|
289
|
+
const transport = new StdioServerTransport();
|
|
290
|
+
await this.server.connect(transport);
|
|
291
|
+
this.log(`${config.displayName /* 'Design System' */} MCP Server running on stdio`);
|
|
292
|
+
}
|
|
293
|
+
close() {
|
|
294
|
+
this.log(`Shutting down ${config.displayName /* 'Design System' */} MCP Server...`);
|
|
295
|
+
this.embeddingService.clearEmbeddingCache();
|
|
296
|
+
this.db.close();
|
|
297
|
+
this.log('Server shutdown complete');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Main execution logic
|
|
301
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
302
|
+
const args = process.argv.slice(2);
|
|
303
|
+
const verbose = args.includes('--verbose');
|
|
304
|
+
const debug = args.includes('--debug');
|
|
305
|
+
const log = args.includes('--log');
|
|
306
|
+
const test = args.includes('--test');
|
|
307
|
+
if (verbose)
|
|
308
|
+
console.error('Verbose mode enabled');
|
|
309
|
+
if (debug)
|
|
310
|
+
console.error('Debug mode enabled');
|
|
311
|
+
const server = new SDLMCPServer({ verbose, debug, overrideLogging: log });
|
|
312
|
+
if (test) {
|
|
313
|
+
if (verbose || debug)
|
|
314
|
+
console.log('Test mode - validating server setup...');
|
|
315
|
+
setTimeout(() => {
|
|
316
|
+
if (verbose || debug)
|
|
317
|
+
console.error('Server validation successful');
|
|
318
|
+
server.close();
|
|
319
|
+
process.exit(0);
|
|
320
|
+
}, 3000);
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
server.run().catch(error => {
|
|
324
|
+
if (verbose || debug)
|
|
325
|
+
console.error('Server startup failed:', error);
|
|
326
|
+
process.exit(1);
|
|
327
|
+
});
|
|
328
|
+
// Graceful shutdown handlers
|
|
329
|
+
const shutdown = (signal) => () => {
|
|
330
|
+
if (verbose || debug) {
|
|
331
|
+
console.error('');
|
|
332
|
+
console.error(`Received ${signal} signal...`);
|
|
333
|
+
}
|
|
334
|
+
server.close();
|
|
335
|
+
process.exit(0);
|
|
336
|
+
};
|
|
337
|
+
process.on('SIGINT', shutdown('shutdown'));
|
|
338
|
+
process.on('SIGTERM', shutdown('termination'));
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
export { SDLMCPServer };
|
|
342
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const setPassword: (service: string, account: string, password: string) => Promise<void>;
|
|
2
|
+
export declare const getPassword: (service: string, account: string) => Promise<string | null>;
|
|
3
|
+
export declare const deletePassword: (service: string, account: string) => Promise<boolean>;
|
|
4
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/mcp/keys.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,EAAE,SAAS,MAAM,EAAE,UAAU,MAAM,kBAEnF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,EAAE,SAAS,MAAM,2BAEjE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,SAAS,MAAM,EAAE,SAAS,MAAM,qBAEpE,CAAC"}
|
package/dist/src/keys.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
let keytar;
|
|
2
|
+
try {
|
|
3
|
+
keytar = (await import('keytar')).default;
|
|
4
|
+
}
|
|
5
|
+
catch {
|
|
6
|
+
// Fallback for environments where keytar is not available (e.g., CI)
|
|
7
|
+
console.warn('keytar not available, using fallback implementation');
|
|
8
|
+
keytar = {
|
|
9
|
+
setPassword: async () => {
|
|
10
|
+
throw new Error('Keytar not available - credential storage disabled');
|
|
11
|
+
},
|
|
12
|
+
getPassword: async () => null,
|
|
13
|
+
deletePassword: async () => true
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export const setPassword = async (service, account, password) => {
|
|
17
|
+
await keytar.setPassword(service, account, password);
|
|
18
|
+
};
|
|
19
|
+
export const getPassword = async (service, account) => {
|
|
20
|
+
return await keytar.getPassword(service, account);
|
|
21
|
+
};
|
|
22
|
+
export const deletePassword = async (service, account) => {
|
|
23
|
+
return await keytar.deletePassword(service, account);
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/mcp/keys.ts"],"names":[],"mappings":"AAUA,IAAI,MAAuB,CAAC;AAE5B,IAAI,CAAC;IACH,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAAC,MAAM,CAAC;IACP,qEAAqE;IACrE,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACpE,MAAM,GAAG;QACP,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;QAC7B,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;IACtF,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;IACpE,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAe,EAAE,OAAe,EAAE,EAAE;IACvE,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare class ObservabilityLogger {
|
|
2
|
+
private logDir;
|
|
3
|
+
private sessionLogPath;
|
|
4
|
+
private enabled;
|
|
5
|
+
private debug;
|
|
6
|
+
constructor(hasDebugFlag?: boolean, override?: boolean);
|
|
7
|
+
private generateSessionFileName;
|
|
8
|
+
private initializeLogFile;
|
|
9
|
+
logRetrieval(toolName: string, query: string, params: Record<string, unknown> | undefined, response: {
|
|
10
|
+
resultCount: number;
|
|
11
|
+
success: boolean;
|
|
12
|
+
error?: string;
|
|
13
|
+
}, results?: string): Promise<void>;
|
|
14
|
+
getLogDir(): string;
|
|
15
|
+
getSessionLogPath(): string;
|
|
16
|
+
isEnabled(): boolean;
|
|
17
|
+
static getLogDir(): string;
|
|
18
|
+
static listSessions(): string[];
|
|
19
|
+
static getSessionPath(fileName: string): string;
|
|
20
|
+
static readSessionLog(fileName: string): string;
|
|
21
|
+
static parseSessionFileName(fileName: string): Date | null;
|
|
22
|
+
static formatSessionDate(fileName: string): string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/mcp/logger.ts"],"names":[],"mappings":"AAWA,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAU;gBAEX,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO;IAgCtD,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,iBAAiB;IAmBnB,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,QAAQ,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EACnE,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;IAuChB,SAAS,IAAI,MAAM;IAInB,iBAAiB,IAAI,MAAM;IAI3B,SAAS,IAAI,OAAO;IAIpB,MAAM,CAAC,SAAS,IAAI,MAAM;IAa1B,MAAM,CAAC,YAAY,IAAI,MAAM,EAAE;IAkB/B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAI/C,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS/C,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAe1D,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CA0BnD"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Siemens 2016 - 2025
|
|
3
|
+
* SPDX-License-Identifier: MIT
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import { homedir, platform } from 'os';
|
|
8
|
+
import { loadConfig } from './config.js';
|
|
9
|
+
const config = loadConfig();
|
|
10
|
+
export class ObservabilityLogger {
|
|
11
|
+
logDir;
|
|
12
|
+
sessionLogPath;
|
|
13
|
+
enabled;
|
|
14
|
+
debug;
|
|
15
|
+
constructor(hasDebugFlag, override) {
|
|
16
|
+
this.debug = hasDebugFlag || false;
|
|
17
|
+
this.enabled = override === true || ((config.observabilityLogging || this.debug) && override !== false) || false;
|
|
18
|
+
if (!this.enabled) {
|
|
19
|
+
this.logDir = '';
|
|
20
|
+
this.sessionLogPath = '';
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const binName = config.binName;
|
|
24
|
+
this.logDir = path.join(homedir(), `.${binName}`);
|
|
25
|
+
try {
|
|
26
|
+
if (!fs.existsSync(this.logDir)) {
|
|
27
|
+
fs.mkdirSync(this.logDir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
const sessionFileName = this.generateSessionFileName();
|
|
30
|
+
this.sessionLogPath = path.join(this.logDir, sessionFileName);
|
|
31
|
+
this.initializeLogFile();
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
if (this.debug) {
|
|
35
|
+
console.error('Failed to initialize observabilityLogging logger:', error);
|
|
36
|
+
}
|
|
37
|
+
this.enabled = false;
|
|
38
|
+
this.logDir = '';
|
|
39
|
+
this.sessionLogPath = '';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
generateSessionFileName() {
|
|
43
|
+
const now = new Date();
|
|
44
|
+
const year = now.getFullYear();
|
|
45
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
46
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
47
|
+
const hours = String(now.getHours()).padStart(2, '0');
|
|
48
|
+
const minutes = String(now.getMinutes()).padStart(2, '0');
|
|
49
|
+
const seconds = String(now.getSeconds()).padStart(2, '0');
|
|
50
|
+
return `session_${year}-${month}-${day}_${hours}-${minutes}-${seconds}.log`;
|
|
51
|
+
}
|
|
52
|
+
initializeLogFile() {
|
|
53
|
+
if (!this.enabled || !this.sessionLogPath)
|
|
54
|
+
return;
|
|
55
|
+
try {
|
|
56
|
+
const header = `MCP Server Session Log
|
|
57
|
+
========================================
|
|
58
|
+
Started: ${new Date().toISOString()}
|
|
59
|
+
Config: ${config.displayName}
|
|
60
|
+
========================================
|
|
61
|
+
|
|
62
|
+
`;
|
|
63
|
+
fs.writeFileSync(this.sessionLogPath, header, 'utf8');
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (this.debug) {
|
|
67
|
+
console.error('Failed to initialize log file:', error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async logRetrieval(toolName, query, params, response, results) {
|
|
72
|
+
if (!this.enabled || !this.sessionLogPath)
|
|
73
|
+
return;
|
|
74
|
+
setImmediate(() => {
|
|
75
|
+
try {
|
|
76
|
+
const timestamp = new Date().toISOString();
|
|
77
|
+
const date = new Date();
|
|
78
|
+
const timeStr = `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
|
|
79
|
+
let logEntry = `[${timeStr}] ${toolName}\n`;
|
|
80
|
+
logEntry += `Query: ${query}\n`;
|
|
81
|
+
if (params && Object.keys(params).length > 0) {
|
|
82
|
+
logEntry += `Params: ${JSON.stringify(params)}\n`;
|
|
83
|
+
}
|
|
84
|
+
logEntry += `Result: ${response.success ? '✓' : '✗'} ${response.resultCount} result(s)`;
|
|
85
|
+
if (response.error) {
|
|
86
|
+
logEntry += ` - Error: ${response.error}`;
|
|
87
|
+
}
|
|
88
|
+
logEntry += '\n';
|
|
89
|
+
logEntry += `Timestamp: ${timestamp}\n`;
|
|
90
|
+
if (results) {
|
|
91
|
+
logEntry += '\nResults:\n';
|
|
92
|
+
logEntry += results + '\n';
|
|
93
|
+
}
|
|
94
|
+
logEntry += '----------------------------------------\n\n';
|
|
95
|
+
fs.appendFileSync(this.sessionLogPath, logEntry, 'utf8');
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (this.debug) {
|
|
99
|
+
console.error('Failed to log retrieval:', error);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
getLogDir() {
|
|
105
|
+
return this.logDir;
|
|
106
|
+
}
|
|
107
|
+
getSessionLogPath() {
|
|
108
|
+
return this.sessionLogPath;
|
|
109
|
+
}
|
|
110
|
+
isEnabled() {
|
|
111
|
+
return this.enabled;
|
|
112
|
+
}
|
|
113
|
+
static getLogDir() {
|
|
114
|
+
const binName = config.binName;
|
|
115
|
+
if (platform() === 'win32') {
|
|
116
|
+
const localAppData = process.env.LOCALAPPDATA;
|
|
117
|
+
if (localAppData) {
|
|
118
|
+
return path.join(localAppData, binName);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return path.join(homedir(), `.${binName}`);
|
|
122
|
+
}
|
|
123
|
+
static listSessions() {
|
|
124
|
+
const logDir = ObservabilityLogger.getLogDir();
|
|
125
|
+
try {
|
|
126
|
+
if (!fs.existsSync(logDir)) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
const files = fs.readdirSync(logDir);
|
|
130
|
+
return files
|
|
131
|
+
.filter(file => file.startsWith('session_') && file.endsWith('.log'))
|
|
132
|
+
.sort()
|
|
133
|
+
.reverse();
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
static getSessionPath(fileName) {
|
|
140
|
+
return path.join(ObservabilityLogger.getLogDir(), fileName);
|
|
141
|
+
}
|
|
142
|
+
static readSessionLog(fileName) {
|
|
143
|
+
const filePath = ObservabilityLogger.getSessionPath(fileName);
|
|
144
|
+
try {
|
|
145
|
+
return fs.readFileSync(filePath, 'utf8');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
throw new Error(`Failed to read log file: ${error}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
static parseSessionFileName(fileName) {
|
|
152
|
+
const match = fileName.match(/session_(\d{4})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})\.log/);
|
|
153
|
+
if (!match)
|
|
154
|
+
return null;
|
|
155
|
+
const [, year, month, day, hours, minutes, seconds] = match;
|
|
156
|
+
return new Date(parseInt(year), parseInt(month) - 1, parseInt(day), parseInt(hours), parseInt(minutes), parseInt(seconds));
|
|
157
|
+
}
|
|
158
|
+
static formatSessionDate(fileName) {
|
|
159
|
+
const date = ObservabilityLogger.parseSessionFileName(fileName);
|
|
160
|
+
if (!date)
|
|
161
|
+
return fileName;
|
|
162
|
+
const now = new Date();
|
|
163
|
+
const diffMs = now.getTime() - date.getTime();
|
|
164
|
+
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
165
|
+
const dateStr = date.toLocaleDateString('en-UK', {
|
|
166
|
+
year: 'numeric',
|
|
167
|
+
month: 'short',
|
|
168
|
+
day: 'numeric'
|
|
169
|
+
});
|
|
170
|
+
const timeStr = `${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
|
|
171
|
+
if (diffDays === 0) {
|
|
172
|
+
return `Today at ${timeStr}`;
|
|
173
|
+
}
|
|
174
|
+
else if (diffDays === 1) {
|
|
175
|
+
return `Yesterday at ${timeStr}`;
|
|
176
|
+
}
|
|
177
|
+
else if (diffDays < 7) {
|
|
178
|
+
return `${diffDays} days ago (${dateStr} ${timeStr})`;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
return `${dateStr} ${timeStr}`;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/mcp/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const prompt: (promptText: string, type?: string, initial?: string) => Promise<any>;
|
|
2
|
+
export declare const confirmPrompt: (message: string, initial?: boolean) => Promise<any>;
|
|
3
|
+
export declare const selectPrompt: (message: string, choices: {
|
|
4
|
+
title: string;
|
|
5
|
+
value: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
}[], initial?: number) => Promise<any>;
|
|
8
|
+
export declare const multiSelectPrompt: (message: string, choices: {
|
|
9
|
+
title: string;
|
|
10
|
+
value: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
selected?: boolean;
|
|
13
|
+
}[]) => Promise<any>;
|
|
14
|
+
export declare const passwordPrompt: (message: string, required?: boolean) => Promise<any>;
|
|
15
|
+
export declare const showSuccess: (message: string) => void;
|
|
16
|
+
export declare const showError: (message: string) => void;
|
|
17
|
+
export declare const showWarning: (message: string) => void;
|
|
18
|
+
export declare const showInfo: (message: string) => void;
|
|
19
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/mcp/prompt.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,MAAM,GAAU,YAAY,MAAM,EAAE,OAAM,MAAe,EAAE,UAAU,MAAM,iBAyBvF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,SAAS,MAAM,EAAE,UAAS,OAAc,iBAa3E,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,EACf,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACjE,UAAS,MAAU,iBAgBpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,SAAS,MAAM,EACf,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,iBAgBtF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,SAAS,MAAM,EAAE,kBAAe,iBAapE,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,SAE1C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,SAExC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,SAE1C,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,SAEvC,CAAC"}
|