@mcp-shark/mcp-shark 1.5.4 → 1.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +32 -96
  2. package/bin/mcp-shark.js +1 -1
  3. package/core/configs/codex.js +68 -0
  4. package/core/configs/environment.js +51 -0
  5. package/{lib/common → core}/configs/index.js +16 -1
  6. package/core/constants/Defaults.js +15 -0
  7. package/core/constants/HttpStatus.js +14 -0
  8. package/core/constants/Server.js +20 -0
  9. package/core/constants/StatusCodes.js +25 -0
  10. package/core/constants/index.js +7 -0
  11. package/core/container/DependencyContainer.js +179 -0
  12. package/core/db/init.js +33 -0
  13. package/core/index.js +10 -0
  14. package/{mcp-server/lib/common/error.js → core/libraries/ErrorLibrary.js} +4 -0
  15. package/core/libraries/LoggerLibrary.js +91 -0
  16. package/core/libraries/SerializationLibrary.js +32 -0
  17. package/core/libraries/bootstrap-logger.js +19 -0
  18. package/core/libraries/errors/ApplicationError.js +97 -0
  19. package/core/libraries/index.js +17 -0
  20. package/{mcp-server/lib → core/mcp-server}/auditor/audit.js +77 -53
  21. package/core/mcp-server/index.js +192 -0
  22. package/{mcp-server/lib → core/mcp-server}/server/external/all.js +1 -1
  23. package/core/mcp-server/server/external/config.js +75 -0
  24. package/{mcp-server/lib → core/mcp-server}/server/external/single/client.js +1 -1
  25. package/{mcp-server/lib → core/mcp-server}/server/external/single/request.js +1 -1
  26. package/{mcp-server/lib → core/mcp-server}/server/external/single/run.js +20 -11
  27. package/{mcp-server/lib → core/mcp-server}/server/external/single/transport.js +1 -1
  28. package/{mcp-server/lib → core/mcp-server}/server/internal/handlers/error.js +1 -1
  29. package/core/mcp-server/server/internal/handlers/prompts-get.js +28 -0
  30. package/core/mcp-server/server/internal/handlers/prompts-list.js +21 -0
  31. package/core/mcp-server/server/internal/handlers/resources-list.js +21 -0
  32. package/core/mcp-server/server/internal/handlers/resources-read.js +28 -0
  33. package/core/mcp-server/server/internal/handlers/tools-call.js +44 -0
  34. package/core/mcp-server/server/internal/handlers/tools-list.js +23 -0
  35. package/core/mcp-server/server/internal/run.js +53 -0
  36. package/{mcp-server/lib → core/mcp-server}/server/internal/server.js +11 -1
  37. package/core/models/ConversationFilters.js +31 -0
  38. package/core/models/ExportFormat.js +8 -0
  39. package/core/models/RequestFilters.js +43 -0
  40. package/core/models/SessionFilters.js +23 -0
  41. package/core/models/index.js +8 -0
  42. package/core/repositories/AuditRepository.js +233 -0
  43. package/core/repositories/ConversationRepository.js +182 -0
  44. package/core/repositories/PacketRepository.js +237 -0
  45. package/core/repositories/SchemaRepository.js +107 -0
  46. package/core/repositories/SessionRepository.js +59 -0
  47. package/core/repositories/StatisticsRepository.js +54 -0
  48. package/core/repositories/index.js +10 -0
  49. package/core/services/AuditService.js +144 -0
  50. package/core/services/BackupService.js +222 -0
  51. package/core/services/ConfigDetectionService.js +89 -0
  52. package/core/services/ConfigFileService.js +210 -0
  53. package/core/services/ConfigPatchingService.js +137 -0
  54. package/core/services/ConfigService.js +250 -0
  55. package/core/services/ConfigTransformService.js +178 -0
  56. package/core/services/ConversationService.js +19 -0
  57. package/core/services/ExportService.js +117 -0
  58. package/core/services/LogService.js +64 -0
  59. package/core/services/McpClientService.js +235 -0
  60. package/core/services/McpDiscoveryService.js +107 -0
  61. package/core/services/RequestService.js +56 -0
  62. package/core/services/ScanCacheService.js +242 -0
  63. package/core/services/ScanService.js +167 -0
  64. package/core/services/ServerManagementService.js +206 -0
  65. package/core/services/SessionService.js +34 -0
  66. package/core/services/SettingsService.js +163 -0
  67. package/core/services/StatisticsService.js +64 -0
  68. package/core/services/TokenService.js +94 -0
  69. package/core/services/index.js +25 -0
  70. package/core/services/parsers/ConfigParserFactory.js +113 -0
  71. package/core/services/parsers/JsonConfigParser.js +66 -0
  72. package/core/services/parsers/LegacyJsonConfigParser.js +71 -0
  73. package/core/services/parsers/TomlConfigParser.js +87 -0
  74. package/core/services/parsers/index.js +4 -0
  75. package/{ui/server → core}/utils/scan-cache/directory.js +1 -1
  76. package/core/utils/validation.js +77 -0
  77. package/package.json +14 -11
  78. package/ui/dist/assets/index-CArYxKxS.js +35 -0
  79. package/ui/dist/index.html +1 -1
  80. package/ui/server/controllers/BackupController.js +129 -0
  81. package/ui/server/controllers/ConfigController.js +92 -0
  82. package/ui/server/controllers/ConversationController.js +41 -0
  83. package/ui/server/controllers/LogController.js +44 -0
  84. package/ui/server/controllers/McpClientController.js +60 -0
  85. package/ui/server/controllers/McpDiscoveryController.js +44 -0
  86. package/ui/server/controllers/RequestController.js +129 -0
  87. package/ui/server/controllers/ScanController.js +122 -0
  88. package/ui/server/controllers/ServerManagementController.js +134 -0
  89. package/ui/server/controllers/SessionController.js +57 -0
  90. package/ui/server/controllers/SettingsController.js +24 -0
  91. package/ui/server/controllers/StatisticsController.js +54 -0
  92. package/ui/server/controllers/TokenController.js +58 -0
  93. package/ui/server/controllers/index.js +17 -0
  94. package/ui/server/routes/backups/index.js +15 -9
  95. package/ui/server/routes/composite/index.js +62 -32
  96. package/ui/server/routes/composite/servers.js +20 -15
  97. package/ui/server/routes/config.js +13 -172
  98. package/ui/server/routes/conversations.js +9 -19
  99. package/ui/server/routes/help.js +4 -3
  100. package/ui/server/routes/logs.js +14 -26
  101. package/ui/server/routes/playground.js +11 -174
  102. package/ui/server/routes/requests.js +12 -232
  103. package/ui/server/routes/sessions.js +10 -21
  104. package/ui/server/routes/settings.js +10 -192
  105. package/ui/server/routes/smartscan.js +26 -15
  106. package/ui/server/routes/statistics.js +8 -79
  107. package/ui/server/setup.js +162 -0
  108. package/ui/server/swagger/paths/backups.js +151 -0
  109. package/ui/server/swagger/paths/components.js +76 -0
  110. package/ui/server/swagger/paths/config.js +117 -0
  111. package/ui/server/swagger/paths/conversations.js +29 -0
  112. package/ui/server/swagger/paths/help.js +82 -0
  113. package/ui/server/swagger/paths/logs.js +87 -0
  114. package/ui/server/swagger/paths/playground.js +49 -0
  115. package/ui/server/swagger/paths/requests.js +178 -0
  116. package/ui/server/swagger/paths/serverManagement.js +169 -0
  117. package/ui/server/swagger/paths/sessions.js +61 -0
  118. package/ui/server/swagger/paths/settings.js +31 -0
  119. package/ui/server/swagger/paths/smartScan/discovery.js +97 -0
  120. package/ui/server/swagger/paths/smartScan/index.js +13 -0
  121. package/ui/server/swagger/paths/smartScan/scans.js +151 -0
  122. package/ui/server/swagger/paths/smartScan/token.js +71 -0
  123. package/ui/server/swagger/paths/statistics.js +40 -0
  124. package/ui/server/swagger/paths.js +38 -0
  125. package/ui/server/swagger/swagger.js +37 -0
  126. package/ui/server/utils/cleanup.js +99 -0
  127. package/ui/server/utils/config.js +18 -96
  128. package/ui/server/utils/errorHandler.js +43 -0
  129. package/ui/server/utils/logger.js +2 -2
  130. package/ui/server/utils/paths.js +27 -30
  131. package/ui/server/utils/port.js +21 -21
  132. package/ui/server/utils/process.js +18 -10
  133. package/ui/server/utils/processState.js +17 -0
  134. package/ui/server/utils/signals.js +34 -0
  135. package/ui/server/websocket/broadcast.js +33 -0
  136. package/ui/server/websocket/handler.js +52 -0
  137. package/ui/server.js +51 -230
  138. package/ui/src/App.jsx +2 -0
  139. package/ui/src/CompositeSetup.jsx +23 -9
  140. package/ui/src/PacketFilters.jsx +17 -3
  141. package/ui/src/components/AlertModal.jsx +116 -0
  142. package/ui/src/components/App/ApiDocsButton.jsx +57 -0
  143. package/ui/src/components/App/useAppState.js +43 -1
  144. package/ui/src/components/BackupList.jsx +27 -3
  145. package/ui/src/utils/requestPairing.js +35 -36
  146. package/ui/src/utils/requestUtils.js +1 -0
  147. package/lib/common/db/init.js +0 -132
  148. package/lib/common/db/logger.js +0 -349
  149. package/lib/common/db/query.js +0 -403
  150. package/lib/common/logger.js +0 -90
  151. package/mcp-server/index.js +0 -138
  152. package/mcp-server/lib/server/external/config.js +0 -57
  153. package/mcp-server/lib/server/internal/handlers/prompts-get.js +0 -20
  154. package/mcp-server/lib/server/internal/handlers/prompts-list.js +0 -13
  155. package/mcp-server/lib/server/internal/handlers/resources-list.js +0 -13
  156. package/mcp-server/lib/server/internal/handlers/resources-read.js +0 -20
  157. package/mcp-server/lib/server/internal/handlers/tools-call.js +0 -35
  158. package/mcp-server/lib/server/internal/handlers/tools-list.js +0 -15
  159. package/mcp-server/lib/server/internal/run.js +0 -37
  160. package/mcp-server/mcp-shark.js +0 -22
  161. package/ui/dist/assets/index-CFHeMNwd.js +0 -35
  162. package/ui/server/routes/backups/deleteBackup.js +0 -54
  163. package/ui/server/routes/backups/listBackups.js +0 -75
  164. package/ui/server/routes/backups/restoreBackup.js +0 -83
  165. package/ui/server/routes/backups/viewBackup.js +0 -47
  166. package/ui/server/routes/composite/setup.js +0 -129
  167. package/ui/server/routes/composite/status.js +0 -7
  168. package/ui/server/routes/composite/stop.js +0 -39
  169. package/ui/server/routes/composite/utils.js +0 -45
  170. package/ui/server/routes/smartscan/discover.js +0 -118
  171. package/ui/server/routes/smartscan/scans/clearCache.js +0 -23
  172. package/ui/server/routes/smartscan/scans/createBatchScans.js +0 -124
  173. package/ui/server/routes/smartscan/scans/createScan.js +0 -43
  174. package/ui/server/routes/smartscan/scans/getCachedResults.js +0 -52
  175. package/ui/server/routes/smartscan/scans/getScan.js +0 -42
  176. package/ui/server/routes/smartscan/scans/listScans.js +0 -25
  177. package/ui/server/routes/smartscan/scans.js +0 -13
  178. package/ui/server/routes/smartscan/token.js +0 -57
  179. package/ui/server/utils/config-update.js +0 -240
  180. package/ui/server/utils/scan-cache/all-results.js +0 -197
  181. package/ui/server/utils/scan-cache/file-operations.js +0 -107
  182. package/ui/server/utils/scan-cache/hash.js +0 -47
  183. package/ui/server/utils/scan-cache/server-operations.js +0 -85
  184. package/ui/server/utils/scan-cache.js +0 -12
  185. package/ui/server/utils/smartscan-token.js +0 -43
  186. /package/{mcp-server/lib → core/mcp-server}/server/external/kv.js +0 -0
  187. /package/{mcp-server/lib → core/mcp-server}/server/internal/handlers/common.js +0 -0
  188. /package/{mcp-server/lib → core/mcp-server}/server/internal/session.js +0 -0
@@ -0,0 +1,162 @@
1
+ import { createServer } from 'node:http';
2
+ import * as path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import express from 'express';
5
+ import swaggerUi from 'swagger-ui-express';
6
+ import { WebSocketServer } from 'ws';
7
+
8
+ import { DependencyContainer } from '#core';
9
+ import { getDatabaseFile, prepareAppDataSpaces } from '#core/configs/index.js';
10
+ import { Server as ServerConstants } from '#core/constants/Server.js';
11
+ import { openDb } from '#core/db/init.js';
12
+
13
+ import { createBackupRoutes } from './routes/backups/index.js';
14
+ import { createCompositeRoutes } from './routes/composite/index.js';
15
+ import { createConfigRoutes } from './routes/config.js';
16
+ import { createConversationsRoutes } from './routes/conversations.js';
17
+ import { createHelpRoutes } from './routes/help.js';
18
+ import { createLogsRoutes } from './routes/logs.js';
19
+ import { createPlaygroundRoutes } from './routes/playground.js';
20
+ import { createRequestsRoutes } from './routes/requests.js';
21
+ import { createSessionsRoutes } from './routes/sessions.js';
22
+ import { createSettingsRoutes } from './routes/settings.js';
23
+ import { createSmartScanRoutes } from './routes/smartscan.js';
24
+ import { createStatisticsRoutes } from './routes/statistics.js';
25
+ import { swaggerSpec } from './swagger/swagger.js';
26
+ import { performCleanup } from './utils/cleanup.js';
27
+ import { restoreConfig } from './utils/config.js';
28
+ import { getMcpSharkProcess, setMcpSharkProcess } from './utils/processState.js';
29
+ import { broadcastLogUpdate, notifyClients } from './websocket/broadcast.js';
30
+ import { handleWebSocketConnection } from './websocket/handler.js';
31
+
32
+ const __filename = fileURLToPath(import.meta.url);
33
+ const __dirname = path.dirname(__filename);
34
+
35
+ /**
36
+ * Create and configure UI server
37
+ * @returns {{server: object, cleanup: Function, logger: object}}
38
+ */
39
+ export function createUIServer() {
40
+ prepareAppDataSpaces();
41
+
42
+ const db = openDb(getDatabaseFile());
43
+ const container = new DependencyContainer(db);
44
+ const app = express();
45
+ const server = createServer(app);
46
+ const wss = new WebSocketServer({ server });
47
+
48
+ app.use(express.json());
49
+
50
+ // Swagger/OpenAPI documentation
51
+ app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
52
+
53
+ const clients = new Set();
54
+ const mcpSharkLogs = [];
55
+ const processState = { mcpSharkServer: null };
56
+ const logger = container.getLibrary('logger');
57
+
58
+ wss.on('connection', (ws) => handleWebSocketConnection(clients, ws, logger));
59
+
60
+ const requestsRoutes = createRequestsRoutes(container);
61
+ const conversationsRoutes = createConversationsRoutes(container);
62
+ const sessionsRoutes = createSessionsRoutes(container);
63
+ const statisticsRoutes = createStatisticsRoutes(container);
64
+ const logsRoutes = createLogsRoutes(container, mcpSharkLogs);
65
+ const configRoutes = createConfigRoutes(container);
66
+ const backupRoutes = createBackupRoutes(container);
67
+
68
+ const cleanup = async () => {
69
+ return performCleanup(intervalId, processState, clients, wss, server, container, logger);
70
+ };
71
+
72
+ const compositeRoutes = createCompositeRoutes(
73
+ container,
74
+ () => getMcpSharkProcess(processState),
75
+ (server) => setMcpSharkProcess(processState, server),
76
+ mcpSharkLogs,
77
+ (logEntry) => broadcastLogUpdate(clients, logEntry),
78
+ cleanup
79
+ );
80
+ const helpRoutes = createHelpRoutes();
81
+ const playgroundRoutes = createPlaygroundRoutes(container);
82
+ const smartScanRoutes = createSmartScanRoutes(container);
83
+ const settingsRoutes = createSettingsRoutes(container);
84
+
85
+ app.get('/api/requests', requestsRoutes.getRequests);
86
+ app.get('/api/packets', requestsRoutes.getRequests);
87
+ app.get('/api/requests/:frameNumber', requestsRoutes.getRequest);
88
+ app.get('/api/packets/:frameNumber', requestsRoutes.getRequest);
89
+ app.get('/api/requests/export', requestsRoutes.exportRequests);
90
+ app.post('/api/requests/clear', requestsRoutes.clearRequests);
91
+
92
+ app.get('/api/conversations', conversationsRoutes.getConversations);
93
+
94
+ app.get('/api/sessions', sessionsRoutes.getSessions);
95
+ app.get('/api/sessions/:sessionId/requests', sessionsRoutes.getSessionRequests);
96
+ app.get('/api/sessions/:sessionId/packets', sessionsRoutes.getSessionRequests);
97
+
98
+ app.get('/api/statistics', statisticsRoutes.getStatistics);
99
+
100
+ app.get('/api/composite/logs', logsRoutes.getLogs);
101
+ app.post('/api/composite/logs/clear', logsRoutes.clearLogs);
102
+ app.get('/api/composite/logs/export', logsRoutes.exportLogs);
103
+
104
+ app.post('/api/config/services', configRoutes.extractServices);
105
+ app.get('/api/config/read', configRoutes.readConfig);
106
+ app.get('/api/config/detect', configRoutes.detectConfig);
107
+ app.get('/api/config/backups', backupRoutes.listBackups);
108
+ app.get('/api/config/backup/view', backupRoutes.viewBackup);
109
+ app.post('/api/config/restore', backupRoutes.restoreBackup);
110
+ app.post('/api/config/backup/delete', backupRoutes.deleteBackup);
111
+
112
+ app.post('/api/composite/setup', compositeRoutes.setup);
113
+ app.post('/api/composite/stop', (req, res) => {
114
+ compositeRoutes.stop(req, res, () => restoreConfig(container));
115
+ });
116
+ app.get('/api/composite/status', compositeRoutes.getStatus);
117
+ app.post('/api/composite/shutdown', compositeRoutes.shutdown);
118
+ app.get('/api/composite/servers', compositeRoutes.getServers);
119
+
120
+ app.get('/api/help/state', helpRoutes.getState);
121
+ app.post('/api/help/dismiss', helpRoutes.dismiss);
122
+ app.post('/api/help/reset', helpRoutes.reset);
123
+
124
+ app.post('/api/playground/proxy', playgroundRoutes.proxyRequest);
125
+
126
+ app.post('/api/smartscan/scans', smartScanRoutes.createScan);
127
+ app.get('/api/smartscan/scans', smartScanRoutes.listScans);
128
+ app.get('/api/smartscan/scans/:scanId', smartScanRoutes.getScan);
129
+ app.get('/api/smartscan/token', smartScanRoutes.getToken);
130
+ app.post('/api/smartscan/token', smartScanRoutes.saveToken);
131
+ app.get('/api/smartscan/discover', smartScanRoutes.discoverServers);
132
+ app.post('/api/smartscan/scans/batch', smartScanRoutes.createBatchScans);
133
+ app.post('/api/smartscan/cached-results', smartScanRoutes.getCachedResults);
134
+ app.post('/api/smartscan/cache/clear', smartScanRoutes.clearCache);
135
+
136
+ app.get('/api/settings', settingsRoutes.getSettings);
137
+
138
+ const staticPath = path.join(__dirname, '..', 'dist');
139
+ app.use(express.static(staticPath));
140
+
141
+ app.get('*', (_req, res) => {
142
+ res.sendFile(path.join(staticPath, 'index.html'));
143
+ });
144
+
145
+ const requestService = container.getService('request');
146
+ const serializationLib = container.getLibrary('serialization');
147
+ const packetRepository = container.getRepository('packet');
148
+
149
+ const timestampState = { lastTs: 0 };
150
+
151
+ function checkTimestampAndNotify() {
152
+ const lastCheck = packetRepository.getMaxTimestamp();
153
+ if (lastCheck && lastCheck.max_ts > timestampState.lastTs) {
154
+ timestampState.lastTs = lastCheck.max_ts;
155
+ notifyClients(clients, requestService, serializationLib);
156
+ }
157
+ }
158
+
159
+ const intervalId = setInterval(checkTimestampAndNotify, ServerConstants.PACKET_CHECK_INTERVAL_MS);
160
+
161
+ return { server, cleanup, logger, wss };
162
+ }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Backups endpoints - Configuration backup management
3
+ */
4
+
5
+ export const backupsPaths = {
6
+ '/api/config/backups': {
7
+ get: {
8
+ tags: ['Backups'],
9
+ summary: 'List backups',
10
+ description: 'Get a list of all configuration backups',
11
+ responses: {
12
+ 200: {
13
+ description: 'List of backups',
14
+ content: {
15
+ 'application/json': {
16
+ schema: {
17
+ type: 'array',
18
+ items: { $ref: '#/components/schemas/Backup' },
19
+ },
20
+ },
21
+ },
22
+ },
23
+ 500: {
24
+ description: 'Internal server error',
25
+ },
26
+ },
27
+ },
28
+ },
29
+ '/api/config/backup/view': {
30
+ get: {
31
+ tags: ['Backups'],
32
+ summary: 'View backup',
33
+ description: 'View the contents of a backup file',
34
+ parameters: [
35
+ {
36
+ name: 'backupPath',
37
+ in: 'query',
38
+ required: true,
39
+ description: 'Path to backup file',
40
+ schema: { type: 'string' },
41
+ },
42
+ ],
43
+ responses: {
44
+ 200: {
45
+ description: 'Backup file content',
46
+ content: {
47
+ 'application/json': {
48
+ schema: { type: 'object' },
49
+ },
50
+ },
51
+ },
52
+ 404: {
53
+ description: 'Backup not found',
54
+ },
55
+ 500: {
56
+ description: 'Internal server error',
57
+ },
58
+ },
59
+ },
60
+ },
61
+ '/api/config/restore': {
62
+ post: {
63
+ tags: ['Backups'],
64
+ summary: 'Restore backup',
65
+ description: 'Restore a configuration file from a backup',
66
+ requestBody: {
67
+ required: true,
68
+ content: {
69
+ 'application/json': {
70
+ schema: {
71
+ type: 'object',
72
+ required: ['backupPath'],
73
+ properties: {
74
+ backupPath: { type: 'string', description: 'Path to backup file' },
75
+ originalPath: { type: 'string', description: 'Path to original file (optional)' },
76
+ },
77
+ },
78
+ },
79
+ },
80
+ },
81
+ responses: {
82
+ 200: {
83
+ description: 'Backup restored successfully',
84
+ content: {
85
+ 'application/json': {
86
+ schema: {
87
+ type: 'object',
88
+ properties: {
89
+ success: { type: 'boolean' },
90
+ message: { type: 'string' },
91
+ originalPath: { type: 'string' },
92
+ wasPatched: { type: 'boolean' },
93
+ repatched: { type: 'boolean' },
94
+ },
95
+ },
96
+ },
97
+ },
98
+ },
99
+ 400: {
100
+ description: 'Bad request',
101
+ },
102
+ 500: {
103
+ description: 'Internal server error',
104
+ },
105
+ },
106
+ },
107
+ },
108
+ '/api/config/backup/delete': {
109
+ post: {
110
+ tags: ['Backups'],
111
+ summary: 'Delete backup',
112
+ description: 'Delete a configuration backup',
113
+ requestBody: {
114
+ required: true,
115
+ content: {
116
+ 'application/json': {
117
+ schema: {
118
+ type: 'object',
119
+ required: ['backupPath'],
120
+ properties: {
121
+ backupPath: { type: 'string', description: 'Path to backup file' },
122
+ },
123
+ },
124
+ },
125
+ },
126
+ },
127
+ responses: {
128
+ 200: {
129
+ description: 'Backup deleted successfully',
130
+ content: {
131
+ 'application/json': {
132
+ schema: {
133
+ type: 'object',
134
+ properties: {
135
+ success: { type: 'boolean' },
136
+ message: { type: 'string' },
137
+ },
138
+ },
139
+ },
140
+ },
141
+ },
142
+ 404: {
143
+ description: 'Backup not found',
144
+ },
145
+ 500: {
146
+ description: 'Internal server error',
147
+ },
148
+ },
149
+ },
150
+ },
151
+ };
@@ -0,0 +1,76 @@
1
+ /**
2
+ * OpenAPI component schemas
3
+ */
4
+
5
+ export const components = {
6
+ schemas: {
7
+ Request: {
8
+ type: 'object',
9
+ properties: {
10
+ frame_number: { type: 'integer' },
11
+ timestamp_iso: { type: 'string' },
12
+ session_id: { type: 'string' },
13
+ server_name: { type: 'string' },
14
+ direction: { type: 'string' },
15
+ request: { type: 'object' },
16
+ response: { type: 'object' },
17
+ jsonrpc_method: { type: 'string' },
18
+ jsonrpc_id: { type: 'string' },
19
+ length: { type: 'integer' },
20
+ },
21
+ },
22
+ Session: {
23
+ type: 'object',
24
+ properties: {
25
+ session_id: { type: 'string' },
26
+ server_name: { type: 'string' },
27
+ created_at: { type: 'string' },
28
+ last_request_at: { type: 'string' },
29
+ },
30
+ },
31
+ Conversation: {
32
+ type: 'object',
33
+ properties: {
34
+ conversation_id: { type: 'string' },
35
+ session_id: { type: 'string' },
36
+ created_at: { type: 'string' },
37
+ },
38
+ },
39
+ Statistics: {
40
+ type: 'object',
41
+ properties: {
42
+ totalRequests: { type: 'integer' },
43
+ totalSessions: { type: 'integer' },
44
+ totalConversations: { type: 'integer' },
45
+ requestsByMethod: { type: 'object' },
46
+ requestsByStatus: { type: 'object' },
47
+ },
48
+ },
49
+ LogEntry: {
50
+ type: 'object',
51
+ properties: {
52
+ timestamp: { type: 'string' },
53
+ type: { type: 'string' },
54
+ line: { type: 'string' },
55
+ },
56
+ },
57
+ Backup: {
58
+ type: 'object',
59
+ properties: {
60
+ backupPath: { type: 'string' },
61
+ originalPath: { type: 'string' },
62
+ createdAt: { type: 'string' },
63
+ },
64
+ },
65
+ Scan: {
66
+ type: 'object',
67
+ properties: {
68
+ scanId: { type: 'string' },
69
+ serverName: { type: 'string' },
70
+ status: { type: 'string' },
71
+ createdAt: { type: 'string' },
72
+ results: { type: 'object' },
73
+ },
74
+ },
75
+ },
76
+ };
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Config endpoints - Configuration file management
3
+ */
4
+
5
+ export const configPaths = {
6
+ '/api/config/services': {
7
+ post: {
8
+ tags: ['Config'],
9
+ summary: 'Extract services from config',
10
+ description: 'Extract MCP server configurations from a config file',
11
+ requestBody: {
12
+ required: true,
13
+ content: {
14
+ 'application/json': {
15
+ schema: {
16
+ type: 'object',
17
+ properties: {
18
+ filePath: { type: 'string', description: 'Path to config file' },
19
+ fileContent: { type: 'string', description: 'Config file content' },
20
+ },
21
+ },
22
+ },
23
+ },
24
+ },
25
+ responses: {
26
+ 200: {
27
+ description: 'Extracted services',
28
+ content: {
29
+ 'application/json': {
30
+ schema: {
31
+ type: 'object',
32
+ properties: {
33
+ services: {
34
+ type: 'array',
35
+ items: { type: 'string' },
36
+ },
37
+ },
38
+ },
39
+ },
40
+ },
41
+ },
42
+ 400: {
43
+ description: 'Bad request',
44
+ },
45
+ 500: {
46
+ description: 'Internal server error',
47
+ },
48
+ },
49
+ },
50
+ },
51
+ '/api/config/read': {
52
+ get: {
53
+ tags: ['Config'],
54
+ summary: 'Read config file',
55
+ description: 'Read and parse a configuration file',
56
+ parameters: [
57
+ {
58
+ name: 'filePath',
59
+ in: 'query',
60
+ required: true,
61
+ description: 'Path to config file',
62
+ schema: { type: 'string' },
63
+ },
64
+ ],
65
+ responses: {
66
+ 200: {
67
+ description: 'Config file content',
68
+ content: {
69
+ 'application/json': {
70
+ schema: { type: 'object' },
71
+ },
72
+ },
73
+ },
74
+ 404: {
75
+ description: 'File not found',
76
+ },
77
+ 500: {
78
+ description: 'Internal server error',
79
+ },
80
+ },
81
+ },
82
+ },
83
+ '/api/config/detect': {
84
+ get: {
85
+ tags: ['Config'],
86
+ summary: 'Detect config files',
87
+ description: 'Detect MCP configuration files in common locations',
88
+ responses: {
89
+ 200: {
90
+ description: 'List of detected config files',
91
+ content: {
92
+ 'application/json': {
93
+ schema: {
94
+ type: 'object',
95
+ properties: {
96
+ configs: {
97
+ type: 'array',
98
+ items: {
99
+ type: 'object',
100
+ properties: {
101
+ path: { type: 'string' },
102
+ editor: { type: 'string' },
103
+ },
104
+ },
105
+ },
106
+ },
107
+ },
108
+ },
109
+ },
110
+ },
111
+ 500: {
112
+ description: 'Internal server error',
113
+ },
114
+ },
115
+ },
116
+ },
117
+ };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Conversations endpoints - Conversation tracking and analysis
3
+ */
4
+
5
+ export const conversationsPaths = {
6
+ '/api/conversations': {
7
+ get: {
8
+ tags: ['Conversations'],
9
+ summary: 'Get all conversations',
10
+ description: 'Retrieve a list of all tracked conversations',
11
+ responses: {
12
+ 200: {
13
+ description: 'List of conversations',
14
+ content: {
15
+ 'application/json': {
16
+ schema: {
17
+ type: 'array',
18
+ items: { $ref: '#/components/schemas/Conversation' },
19
+ },
20
+ },
21
+ },
22
+ },
23
+ 500: {
24
+ description: 'Internal server error',
25
+ },
26
+ },
27
+ },
28
+ },
29
+ };
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Help endpoints - Help and tour management
3
+ */
4
+
5
+ export const helpPaths = {
6
+ '/api/help/state': {
7
+ get: {
8
+ tags: ['Help'],
9
+ summary: 'Get help tour state',
10
+ description: 'Get the current state of the help tour (dismissed/completed)',
11
+ responses: {
12
+ 200: {
13
+ description: 'Tour state',
14
+ content: {
15
+ 'application/json': {
16
+ schema: {
17
+ type: 'object',
18
+ properties: {
19
+ dismissed: { type: 'boolean' },
20
+ tourCompleted: { type: 'boolean' },
21
+ },
22
+ },
23
+ },
24
+ },
25
+ },
26
+ 500: {
27
+ description: 'Internal server error',
28
+ },
29
+ },
30
+ },
31
+ },
32
+ '/api/help/dismiss': {
33
+ post: {
34
+ tags: ['Help'],
35
+ summary: 'Dismiss help tour',
36
+ description: 'Mark the help tour as dismissed',
37
+ responses: {
38
+ 200: {
39
+ description: 'Tour dismissed',
40
+ content: {
41
+ 'application/json': {
42
+ schema: {
43
+ type: 'object',
44
+ properties: {
45
+ success: { type: 'boolean' },
46
+ },
47
+ },
48
+ },
49
+ },
50
+ },
51
+ 500: {
52
+ description: 'Internal server error',
53
+ },
54
+ },
55
+ },
56
+ },
57
+ '/api/help/reset': {
58
+ post: {
59
+ tags: ['Help'],
60
+ summary: 'Reset help tour',
61
+ description: 'Reset the help tour state to show it again',
62
+ responses: {
63
+ 200: {
64
+ description: 'Tour reset',
65
+ content: {
66
+ 'application/json': {
67
+ schema: {
68
+ type: 'object',
69
+ properties: {
70
+ success: { type: 'boolean' },
71
+ },
72
+ },
73
+ },
74
+ },
75
+ },
76
+ 500: {
77
+ description: 'Internal server error',
78
+ },
79
+ },
80
+ },
81
+ },
82
+ };