@selentar/analitoly 0.1.1

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 (186) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/api/dist/dashboards/dash_1775220041958_v1r8io.json +829 -0
  4. package/api/dist/dashboards/dash_1775222037264_1rrsrd.json +309 -0
  5. package/api/dist/src/agent/agent.controller.d.ts +26 -0
  6. package/api/dist/src/agent/agent.controller.js +124 -0
  7. package/api/dist/src/agent/agent.controller.js.map +1 -0
  8. package/api/dist/src/agent/agent.module.d.ts +2 -0
  9. package/api/dist/src/agent/agent.module.js +23 -0
  10. package/api/dist/src/agent/agent.module.js.map +1 -0
  11. package/api/dist/src/agent/agent.service.d.ts +39 -0
  12. package/api/dist/src/agent/agent.service.js +389 -0
  13. package/api/dist/src/agent/agent.service.js.map +1 -0
  14. package/api/dist/src/agent/mcp-config.d.ts +9 -0
  15. package/api/dist/src/agent/mcp-config.js +51 -0
  16. package/api/dist/src/agent/mcp-config.js.map +1 -0
  17. package/api/dist/src/app.module.d.ts +2 -0
  18. package/api/dist/src/app.module.js +52 -0
  19. package/api/dist/src/app.module.js.map +1 -0
  20. package/api/dist/src/chart/chart.controller.d.ts +8 -0
  21. package/api/dist/src/chart/chart.controller.js +38 -0
  22. package/api/dist/src/chart/chart.controller.js.map +1 -0
  23. package/api/dist/src/chart/chart.module.d.ts +2 -0
  24. package/api/dist/src/chart/chart.module.js +24 -0
  25. package/api/dist/src/chart/chart.module.js.map +1 -0
  26. package/api/dist/src/chart/chart.service.d.ts +32 -0
  27. package/api/dist/src/chart/chart.service.js +106 -0
  28. package/api/dist/src/chart/chart.service.js.map +1 -0
  29. package/api/dist/src/chat/chat.controller.d.ts +14 -0
  30. package/api/dist/src/chat/chat.controller.js +73 -0
  31. package/api/dist/src/chat/chat.controller.js.map +1 -0
  32. package/api/dist/src/chat/chat.module.d.ts +2 -0
  33. package/api/dist/src/chat/chat.module.js +22 -0
  34. package/api/dist/src/chat/chat.module.js.map +1 -0
  35. package/api/dist/src/chat/chat.service.d.ts +25 -0
  36. package/api/dist/src/chat/chat.service.js +168 -0
  37. package/api/dist/src/chat/chat.service.js.map +1 -0
  38. package/api/dist/src/connection/connection.controller.d.ts +46 -0
  39. package/api/dist/src/connection/connection.controller.js +189 -0
  40. package/api/dist/src/connection/connection.controller.js.map +1 -0
  41. package/api/dist/src/connection/connection.model.d.ts +116 -0
  42. package/api/dist/src/connection/connection.model.js +23 -0
  43. package/api/dist/src/connection/connection.model.js.map +1 -0
  44. package/api/dist/src/connection/connection.module.d.ts +2 -0
  45. package/api/dist/src/connection/connection.module.js +31 -0
  46. package/api/dist/src/connection/connection.module.js.map +1 -0
  47. package/api/dist/src/connection/connection.repository.d.ts +16 -0
  48. package/api/dist/src/connection/connection.repository.js +195 -0
  49. package/api/dist/src/connection/connection.repository.js.map +1 -0
  50. package/api/dist/src/connection/connection.service.d.ts +50 -0
  51. package/api/dist/src/connection/connection.service.js +343 -0
  52. package/api/dist/src/connection/connection.service.js.map +1 -0
  53. package/api/dist/src/context/context.controller.d.ts +13 -0
  54. package/api/dist/src/context/context.controller.js +86 -0
  55. package/api/dist/src/context/context.controller.js.map +1 -0
  56. package/api/dist/src/context/context.module.d.ts +2 -0
  57. package/api/dist/src/context/context.module.js +39 -0
  58. package/api/dist/src/context/context.module.js.map +1 -0
  59. package/api/dist/src/context/context.service.d.ts +32 -0
  60. package/api/dist/src/context/context.service.js +177 -0
  61. package/api/dist/src/context/context.service.js.map +1 -0
  62. package/api/dist/src/dashboard/dashboard.controller.d.ts +21 -0
  63. package/api/dist/src/dashboard/dashboard.controller.js +109 -0
  64. package/api/dist/src/dashboard/dashboard.controller.js.map +1 -0
  65. package/api/dist/src/dashboard/dashboard.model.d.ts +15 -0
  66. package/api/dist/src/dashboard/dashboard.model.js +3 -0
  67. package/api/dist/src/dashboard/dashboard.model.js.map +1 -0
  68. package/api/dist/src/dashboard/dashboard.module.d.ts +2 -0
  69. package/api/dist/src/dashboard/dashboard.module.js +24 -0
  70. package/api/dist/src/dashboard/dashboard.module.js.map +1 -0
  71. package/api/dist/src/dashboard/dashboard.repository.d.ts +9 -0
  72. package/api/dist/src/dashboard/dashboard.repository.js +72 -0
  73. package/api/dist/src/dashboard/dashboard.repository.js.map +1 -0
  74. package/api/dist/src/dashboard/dashboard.service.d.ts +14 -0
  75. package/api/dist/src/dashboard/dashboard.service.js +87 -0
  76. package/api/dist/src/dashboard/dashboard.service.js.map +1 -0
  77. package/api/dist/src/datasource/connectors/connector.interface.d.ts +6 -0
  78. package/api/dist/src/datasource/connectors/connector.interface.js +3 -0
  79. package/api/dist/src/datasource/connectors/connector.interface.js.map +1 -0
  80. package/api/dist/src/datasource/connectors/mongo.connector.d.ts +30 -0
  81. package/api/dist/src/datasource/connectors/mongo.connector.js +167 -0
  82. package/api/dist/src/datasource/connectors/mongo.connector.js.map +1 -0
  83. package/api/dist/src/datasource/connectors/mongo.connector.test.d.ts +1 -0
  84. package/api/dist/src/datasource/connectors/mongo.connector.test.js +179 -0
  85. package/api/dist/src/datasource/connectors/mongo.connector.test.js.map +1 -0
  86. package/api/dist/src/datasource/connectors/postgres.connector.d.ts +50 -0
  87. package/api/dist/src/datasource/connectors/postgres.connector.js +213 -0
  88. package/api/dist/src/datasource/connectors/postgres.connector.js.map +1 -0
  89. package/api/dist/src/datasource/connectors/postgres.connector.test.d.ts +1 -0
  90. package/api/dist/src/datasource/connectors/postgres.connector.test.js +197 -0
  91. package/api/dist/src/datasource/connectors/postgres.connector.test.js.map +1 -0
  92. package/api/dist/src/datasource/datasource.controller.d.ts +16 -0
  93. package/api/dist/src/datasource/datasource.controller.js +79 -0
  94. package/api/dist/src/datasource/datasource.controller.js.map +1 -0
  95. package/api/dist/src/datasource/datasource.model.d.ts +26 -0
  96. package/api/dist/src/datasource/datasource.model.js +3 -0
  97. package/api/dist/src/datasource/datasource.model.js.map +1 -0
  98. package/api/dist/src/datasource/datasource.module.d.ts +2 -0
  99. package/api/dist/src/datasource/datasource.module.js +31 -0
  100. package/api/dist/src/datasource/datasource.module.js.map +1 -0
  101. package/api/dist/src/datasource/datasource.repository.d.ts +11 -0
  102. package/api/dist/src/datasource/datasource.repository.js +61 -0
  103. package/api/dist/src/datasource/datasource.repository.js.map +1 -0
  104. package/api/dist/src/datasource/datasource.service.d.ts +28 -0
  105. package/api/dist/src/datasource/datasource.service.js +95 -0
  106. package/api/dist/src/datasource/datasource.service.js.map +1 -0
  107. package/api/dist/src/example/example.controller.d.ts +10 -0
  108. package/api/dist/src/example/example.controller.js +43 -0
  109. package/api/dist/src/example/example.controller.js.map +1 -0
  110. package/api/dist/src/example/example.model.d.ts +6 -0
  111. package/api/dist/src/example/example.model.js +3 -0
  112. package/api/dist/src/example/example.model.js.map +1 -0
  113. package/api/dist/src/example/example.module.d.ts +2 -0
  114. package/api/dist/src/example/example.module.js +23 -0
  115. package/api/dist/src/example/example.module.js.map +1 -0
  116. package/api/dist/src/example/example.repository.d.ts +6 -0
  117. package/api/dist/src/example/example.repository.js +30 -0
  118. package/api/dist/src/example/example.repository.js.map +1 -0
  119. package/api/dist/src/example/example.service.d.ts +10 -0
  120. package/api/dist/src/example/example.service.js +31 -0
  121. package/api/dist/src/example/example.service.js.map +1 -0
  122. package/api/dist/src/integration/integration.controller.d.ts +15 -0
  123. package/api/dist/src/integration/integration.controller.js +69 -0
  124. package/api/dist/src/integration/integration.controller.js.map +1 -0
  125. package/api/dist/src/integration/integration.model.d.ts +17 -0
  126. package/api/dist/src/integration/integration.model.js +3 -0
  127. package/api/dist/src/integration/integration.model.js.map +1 -0
  128. package/api/dist/src/integration/integration.module.d.ts +2 -0
  129. package/api/dist/src/integration/integration.module.js +24 -0
  130. package/api/dist/src/integration/integration.module.js.map +1 -0
  131. package/api/dist/src/integration/integration.repository.d.ts +6 -0
  132. package/api/dist/src/integration/integration.repository.js +45 -0
  133. package/api/dist/src/integration/integration.repository.js.map +1 -0
  134. package/api/dist/src/integration/integration.service.d.ts +12 -0
  135. package/api/dist/src/integration/integration.service.js +78 -0
  136. package/api/dist/src/integration/integration.service.js.map +1 -0
  137. package/api/dist/src/main.d.ts +1 -0
  138. package/api/dist/src/main.js +19 -0
  139. package/api/dist/src/main.js.map +1 -0
  140. package/api/dist/src/mcp/grafana.mcp.d.ts +1 -0
  141. package/api/dist/src/mcp/grafana.mcp.js +95 -0
  142. package/api/dist/src/mcp/grafana.mcp.js.map +1 -0
  143. package/api/dist/src/mcp/graylog.mcp.d.ts +1 -0
  144. package/api/dist/src/mcp/graylog.mcp.js +241 -0
  145. package/api/dist/src/mcp/graylog.mcp.js.map +1 -0
  146. package/api/dist/src/mcp/mcp-server.d.ts +1 -0
  147. package/api/dist/src/mcp/mcp-server.js +336 -0
  148. package/api/dist/src/mcp/mcp-server.js.map +1 -0
  149. package/api/dist/src/paths.d.ts +8 -0
  150. package/api/dist/src/paths.js +50 -0
  151. package/api/dist/src/paths.js.map +1 -0
  152. package/api/dist/src/paths.test.d.ts +1 -0
  153. package/api/dist/src/paths.test.js +60 -0
  154. package/api/dist/src/paths.test.js.map +1 -0
  155. package/api/dist/src/project/project.controller.d.ts +44 -0
  156. package/api/dist/src/project/project.controller.js +79 -0
  157. package/api/dist/src/project/project.controller.js.map +1 -0
  158. package/api/dist/src/project/project.model.d.ts +19 -0
  159. package/api/dist/src/project/project.model.js +3 -0
  160. package/api/dist/src/project/project.model.js.map +1 -0
  161. package/api/dist/src/project/project.module.d.ts +2 -0
  162. package/api/dist/src/project/project.module.js +24 -0
  163. package/api/dist/src/project/project.module.js.map +1 -0
  164. package/api/dist/src/project/project.repository.d.ts +6 -0
  165. package/api/dist/src/project/project.repository.js +52 -0
  166. package/api/dist/src/project/project.repository.js.map +1 -0
  167. package/api/dist/src/project/project.service.d.ts +17 -0
  168. package/api/dist/src/project/project.service.js +163 -0
  169. package/api/dist/src/project/project.service.js.map +1 -0
  170. package/api/dist/tsconfig.tsbuildinfo +1 -0
  171. package/api/dist/vitest.config.d.ts +2 -0
  172. package/api/dist/vitest.config.js +10 -0
  173. package/api/dist/vitest.config.js.map +1 -0
  174. package/api/public/dist/Analitoly.png +0 -0
  175. package/api/public/dist/AnalitolyShort.png +0 -0
  176. package/api/public/dist/Gitlab.png +0 -0
  177. package/api/public/dist/Grafana.png +0 -0
  178. package/api/public/dist/Graylog.png +0 -0
  179. package/api/public/dist/Mongodb.png +0 -0
  180. package/api/public/dist/PostgreSQL.png +0 -0
  181. package/api/public/dist/assets/index-BPB3ckw4.js +222 -0
  182. package/api/public/dist/assets/index-CSAGa0SG.js +227 -0
  183. package/api/public/dist/index.html +12 -0
  184. package/bin/analitoly-mcp.js +18 -0
  185. package/bin/analitoly.js +38 -0
  186. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
4
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
5
+ const zod_1 = require("zod");
6
+ const GRAYLOG_URL = process.env.GRAYLOG_BASE_URL?.replace(/\/$/, '');
7
+ const GRAYLOG_USERNAME = process.env.GRAYLOG_USERNAME;
8
+ const GRAYLOG_PASSWORD = process.env.GRAYLOG_PASSWORD;
9
+ if (!GRAYLOG_URL || !GRAYLOG_USERNAME || !GRAYLOG_PASSWORD) {
10
+ console.error('GRAYLOG_BASE_URL, GRAYLOG_USERNAME, GRAYLOG_PASSWORD env vars are required');
11
+ process.exit(1);
12
+ }
13
+ const AUTH_HEADER = `Basic ${Buffer.from(`${GRAYLOG_USERNAME}:${GRAYLOG_PASSWORD}`).toString('base64')}`;
14
+ async function graylogGet(path, params) {
15
+ const qs = new URLSearchParams();
16
+ for (const [k, v] of Object.entries(params)) {
17
+ if (v !== undefined && v !== '')
18
+ qs.set(k, String(v));
19
+ }
20
+ const url = `${GRAYLOG_URL}/${path}?${qs}`;
21
+ const res = await fetch(url, {
22
+ headers: {
23
+ Authorization: AUTH_HEADER,
24
+ Accept: 'application/json',
25
+ },
26
+ });
27
+ if (!res.ok) {
28
+ const text = await res.text();
29
+ throw new Error(`Graylog ${res.status}: ${text}`);
30
+ }
31
+ return res.json();
32
+ }
33
+ const server = new mcp_js_1.McpServer({
34
+ name: 'graylog',
35
+ version: '2.0.0',
36
+ });
37
+ server.tool('search_logs', 'Search Graylog log messages within a relative timeframe. Returns actual log messages with all fields. Use Lucene syntax for queries (e.g. "level:ERROR AND source:payment-service").', {
38
+ query: zod_1.z.string().describe('Lucene query (e.g. "level:ERROR", "source:api AND exception", "*" for all)'),
39
+ range: zod_1.z.number().default(3600).describe('Seconds back from now (3600 = 1h, 86400 = 24h)'),
40
+ limit: zod_1.z.number().default(50).describe('Max messages to return (max 1000)'),
41
+ sort: zod_1.z.string().default('timestamp:desc').describe('Sort expression (e.g. "timestamp:desc")'),
42
+ fields: zod_1.z.string().optional().describe('Comma-separated fields to return (e.g. "timestamp,source,message,level")'),
43
+ filter: zod_1.z.string().optional().describe('Stream filter (e.g. "streams:<stream-id>")'),
44
+ }, async ({ query, range, limit, sort, fields, filter }) => {
45
+ const data = await graylogGet('api/search/universal/relative', {
46
+ query,
47
+ range,
48
+ limit: Math.min(limit, 1000),
49
+ sort,
50
+ fields,
51
+ filter,
52
+ decorate: 'true',
53
+ });
54
+ const result = {
55
+ query: data.query,
56
+ total_results: data.total_results,
57
+ took_ms: data.took_ms,
58
+ messages: data.messages?.slice(0, limit).map((e) => e.message) || [],
59
+ };
60
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
61
+ });
62
+ server.tool('top_values', 'Get the most common values of a field (e.g. top error sources, top log levels). Great for "top 10 X" queries and grouping.', {
63
+ field: zod_1.z.string().describe('Field to aggregate (e.g. "source", "level", "facility", "application_name")'),
64
+ query: zod_1.z.string().default('*').describe('Lucene query to filter before aggregating'),
65
+ range: zod_1.z.number().default(3600).describe('Seconds back from now'),
66
+ size: zod_1.z.number().default(10).describe('Number of top values to return'),
67
+ filter: zod_1.z.string().optional().describe('Stream filter'),
68
+ }, async ({ field, query, range, size, filter }) => {
69
+ try {
70
+ const data = await graylogGet('api/search/universal/relative/terms', {
71
+ field, query, range, size, filter,
72
+ });
73
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
74
+ }
75
+ catch {
76
+ }
77
+ const data = await graylogGet('api/search/universal/relative', {
78
+ query, range, limit: 1000, fields: field, filter, decorate: 'false',
79
+ });
80
+ const counts = {};
81
+ for (const entry of data.messages || []) {
82
+ const val = String(entry.message?.[field] ?? 'unknown');
83
+ counts[val] = (counts[val] || 0) + 1;
84
+ }
85
+ const sorted = Object.entries(counts)
86
+ .sort((a, b) => b[1] - a[1])
87
+ .slice(0, size);
88
+ const total = sorted.reduce((s, [, c]) => s + c, 0);
89
+ const terms = {};
90
+ for (const [val, count] of sorted)
91
+ terms[val] = count;
92
+ return {
93
+ content: [{
94
+ type: 'text',
95
+ text: JSON.stringify({
96
+ query: data.query,
97
+ total_results: data.total_results,
98
+ sampled: Math.min(1000, data.total_results),
99
+ terms,
100
+ total_in_sample: total,
101
+ note: 'Aggregated from sample of up to 1000 messages (native /terms API unavailable)',
102
+ }, null, 2),
103
+ }],
104
+ };
105
+ });
106
+ server.tool('field_stats', 'Compute statistics (count, min, max, mean, sum, std deviation, cardinality) for a numeric field. Use for response time analysis, payload sizes, etc.', {
107
+ field: zod_1.z.string().describe('Numeric field name (e.g. "took_ms", "response_time", "status")'),
108
+ query: zod_1.z.string().default('*').describe('Lucene query to filter'),
109
+ range: zod_1.z.number().default(3600).describe('Seconds back from now'),
110
+ filter: zod_1.z.string().optional().describe('Stream filter'),
111
+ }, async ({ field, query, range, filter }) => {
112
+ try {
113
+ const data = await graylogGet('api/search/universal/relative/stats', {
114
+ field, query, range, filter,
115
+ });
116
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
117
+ }
118
+ catch {
119
+ }
120
+ const data = await graylogGet('api/search/universal/relative', {
121
+ query, range, limit: 1000, fields: field, filter, decorate: 'false',
122
+ });
123
+ const values = [];
124
+ for (const entry of data.messages || []) {
125
+ const v = Number(entry.message?.[field]);
126
+ if (!isNaN(v))
127
+ values.push(v);
128
+ }
129
+ if (values.length === 0) {
130
+ return { content: [{ type: 'text', text: JSON.stringify({ error: `No numeric values for field "${field}"`, total_results: data.total_results }, null, 2) }] };
131
+ }
132
+ const sum = values.reduce((a, b) => a + b, 0);
133
+ const mean = sum / values.length;
134
+ const variance = values.reduce((a, v) => a + (v - mean) ** 2, 0) / values.length;
135
+ return {
136
+ content: [{
137
+ type: 'text',
138
+ text: JSON.stringify({
139
+ count: values.length,
140
+ total_results: data.total_results,
141
+ sampled: Math.min(1000, data.total_results),
142
+ sum, mean,
143
+ minimum: Math.min(...values),
144
+ maximum: Math.max(...values),
145
+ standard_deviation: Math.sqrt(variance),
146
+ cardinality: new Set(values).size,
147
+ note: 'Computed from sample of up to 1000 messages (native /stats API unavailable)',
148
+ }, null, 2),
149
+ }],
150
+ };
151
+ });
152
+ server.tool('histogram', 'Get message count distribution over time intervals. Perfect for error rate trends, traffic patterns, anomaly detection.', {
153
+ query: zod_1.z.string().default('*').describe('Lucene query'),
154
+ range: zod_1.z.number().default(86400).describe('Seconds back from now (86400 = 24h)'),
155
+ interval: zod_1.z.enum(['minute', 'hour', 'day', 'week', 'month']).default('hour').describe('Bucket size'),
156
+ filter: zod_1.z.string().optional().describe('Stream filter'),
157
+ }, async ({ query, range, interval, filter }) => {
158
+ try {
159
+ const data = await graylogGet('api/search/universal/relative/histogram', {
160
+ query, range, interval, filter,
161
+ });
162
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
163
+ }
164
+ catch {
165
+ }
166
+ const intervalMs = {
167
+ minute: 60_000, hour: 3_600_000, day: 86_400_000, week: 604_800_000, month: 2_592_000_000,
168
+ };
169
+ const bucketSize = intervalMs[interval] || 3_600_000;
170
+ const data = await graylogGet('api/search/universal/relative', {
171
+ query, range, limit: 1000, fields: 'timestamp', filter, decorate: 'false',
172
+ });
173
+ const buckets = {};
174
+ for (const entry of data.messages || []) {
175
+ const ts = new Date(entry.message?.timestamp).getTime();
176
+ const bucketKey = new Date(Math.floor(ts / bucketSize) * bucketSize).toISOString();
177
+ buckets[bucketKey] = (buckets[bucketKey] || 0) + 1;
178
+ }
179
+ const sorted = Object.entries(buckets).sort((a, b) => a[0].localeCompare(b[0]));
180
+ return {
181
+ content: [{
182
+ type: 'text',
183
+ text: JSON.stringify({
184
+ query: data.query,
185
+ total_results: data.total_results,
186
+ sampled: Math.min(1000, data.total_results),
187
+ interval,
188
+ buckets: Object.fromEntries(sorted),
189
+ note: 'Aggregated from sample of up to 1000 messages (native /histogram API unavailable)',
190
+ }, null, 2),
191
+ }],
192
+ };
193
+ });
194
+ server.tool('field_histogram', 'Distribution of a numeric field values over time intervals. Use for tracking response_time trends, payload size changes over time.', {
195
+ field: zod_1.z.string().describe('Numeric field to histogram'),
196
+ query: zod_1.z.string().default('*').describe('Lucene query'),
197
+ range: zod_1.z.number().default(86400).describe('Seconds back from now'),
198
+ interval: zod_1.z.enum(['minute', 'hour', 'day', 'week', 'month']).default('hour').describe('Bucket size'),
199
+ filter: zod_1.z.string().optional().describe('Stream filter'),
200
+ }, async ({ field, query, range, interval, filter }) => {
201
+ const data = await graylogGet('api/search/universal/relative/fieldhistogram', {
202
+ field,
203
+ query,
204
+ range,
205
+ interval,
206
+ filter,
207
+ });
208
+ return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
209
+ });
210
+ server.tool('list_streams', 'List all Graylog streams (log categories/sources). Use to discover available data sources and their stream IDs for filtering.', {}, async () => {
211
+ const data = await graylogGet('api/streams', {});
212
+ const streams = data.streams?.map((s) => ({
213
+ id: s.id,
214
+ title: s.title,
215
+ description: s.description,
216
+ disabled: s.disabled,
217
+ rules_count: s.rules?.length || 0,
218
+ })) || [];
219
+ return { content: [{ type: 'text', text: JSON.stringify({ total: data.total, streams }, null, 2) }] };
220
+ });
221
+ server.tool('count_logs', 'Count total log messages matching a query. Lightweight — does not return message bodies.', {
222
+ query: zod_1.z.string().describe('Lucene query'),
223
+ range: zod_1.z.number().default(3600).describe('Seconds back from now'),
224
+ filter: zod_1.z.string().optional().describe('Stream filter'),
225
+ }, async ({ query, range, filter }) => {
226
+ const data = await graylogGet('api/search/universal/relative', {
227
+ query,
228
+ range,
229
+ limit: 0,
230
+ filter,
231
+ });
232
+ return {
233
+ content: [{ type: 'text', text: JSON.stringify({ query: data.query, total_results: data.total_results, took_ms: data.took_ms }, null, 2) }],
234
+ };
235
+ });
236
+ const transport = new stdio_js_1.StdioServerTransport();
237
+ server.connect(transport).catch((err) => {
238
+ console.error('Graylog MCP server error:', err);
239
+ process.exit(1);
240
+ });
241
+ //# sourceMappingURL=graylog.mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graylog.mcp.js","sourceRoot":"","sources":["../../../src/mcp/graylog.mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const paths_1 = require("../paths");
4
+ const dotenv_1 = require("dotenv");
5
+ (0, dotenv_1.config)({ path: (0, paths_1.envFilePath)() });
6
+ const path = require("path");
7
+ const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
8
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
9
+ const zod_1 = require("zod");
10
+ const fs = require("fs");
11
+ const datasource_repository_1 = require("../datasource/datasource.repository");
12
+ const datasource_service_1 = require("../datasource/datasource.service");
13
+ const postgres_connector_1 = require("../datasource/connectors/postgres.connector");
14
+ const mongo_connector_1 = require("../datasource/connectors/mongo.connector");
15
+ const project_repository_1 = require("../project/project.repository");
16
+ const connection_repository_1 = require("../connection/connection.repository");
17
+ const crypto = require("crypto");
18
+ const repository = new datasource_repository_1.DataSourceRepository();
19
+ const service = new datasource_service_1.DataSourceService(repository, new postgres_connector_1.PostgresConnector(), new mongo_connector_1.MongoConnector());
20
+ const projectRepository = new project_repository_1.ProjectRepository();
21
+ const server = new mcp_js_1.McpServer({
22
+ name: 'analitoly',
23
+ version: '1.0.0',
24
+ });
25
+ server.tool('get_datasources', 'Get all configured datasources and their connection status (databases, log systems, metrics)', {}, async () => {
26
+ const results = {};
27
+ for (const type of ['postgresql', 'mongodb']) {
28
+ const connections = service.listConnections(type);
29
+ if (connections.length === 0) {
30
+ results[type] = { configured: false };
31
+ }
32
+ else {
33
+ const items = [];
34
+ for (const conn of connections) {
35
+ const connected = await service.testConnection(type, conn.name).catch(() => false);
36
+ items.push({ name: conn.name, database: conn.config.database, connected });
37
+ }
38
+ results[type] = { configured: true, connections: items };
39
+ }
40
+ }
41
+ const graylogConfigured = !!(process.env.GRAYLOG_BASE_URL && process.env.GRAYLOG_USERNAME && process.env.GRAYLOG_PASSWORD);
42
+ results.graylog = {
43
+ configured: graylogConfigured,
44
+ ...(graylogConfigured ? { url: process.env.GRAYLOG_BASE_URL } : {}),
45
+ };
46
+ const grafanaConfigured = !!(process.env.GRAFANA_URL && process.env.GRAFANA_SERVICE_ACCOUNT_TOKEN);
47
+ results.grafana = {
48
+ configured: grafanaConfigured,
49
+ ...(grafanaConfigured ? { url: process.env.GRAFANA_URL } : {}),
50
+ };
51
+ return {
52
+ content: [{ type: 'text', text: JSON.stringify(results, null, 2) }],
53
+ };
54
+ });
55
+ const connParam = zod_1.z.string().optional().describe('Connection name (if multiple connections of same type exist). Omit to use first active.');
56
+ server.tool('get_schema', 'Get database schema (tables/collections with fields and types)', {
57
+ type: zod_1.z.enum(['postgresql', 'mongodb']).describe('Database type'),
58
+ connection: connParam,
59
+ }, async ({ type, connection }) => {
60
+ const schema = await service.getSchema(type, connection);
61
+ return {
62
+ content: [{ type: 'text', text: JSON.stringify(schema, null, 2) }],
63
+ };
64
+ });
65
+ server.tool('execute_query', 'Execute a read-only query. For PostgreSQL: plain SQL SELECT. For MongoDB: JSON with either "filter" for simple queries { "collection": "name", "filter": {}, "limit": 100 } or "pipeline" for aggregations { "collection": "name", "pipeline": [{ "$group": ... }, ...] }', {
66
+ type: zod_1.z.enum(['postgresql', 'mongodb']).describe('Database type'),
67
+ query: zod_1.z.string().describe('SQL SELECT for PostgreSQL, or JSON for MongoDB'),
68
+ connection: connParam,
69
+ }, async ({ type, query, connection }) => {
70
+ const rows = await service.executeQuery(type, query, connection);
71
+ return {
72
+ content: [{ type: 'text', text: JSON.stringify(rows, null, 2) }],
73
+ };
74
+ });
75
+ server.tool('get_project_info', 'Get information about the connected project (code repository)', {}, async () => {
76
+ const project = projectRepository.read();
77
+ if (!project || project.status !== 'ready') {
78
+ return {
79
+ content: [{ type: 'text', text: JSON.stringify({ connected: false }) }],
80
+ };
81
+ }
82
+ const info = {
83
+ connected: true,
84
+ type: project.config.type,
85
+ localPath: project.localPath,
86
+ };
87
+ const claudeMdPath = path.join(project.localPath, 'CLAUDE.md');
88
+ try {
89
+ if (fs.existsSync(claudeMdPath)) {
90
+ info.claudeMd = fs.readFileSync(claudeMdPath, 'utf-8');
91
+ }
92
+ }
93
+ catch {
94
+ }
95
+ return {
96
+ content: [{ type: 'text', text: JSON.stringify(info, null, 2) }],
97
+ };
98
+ });
99
+ server.tool('pg_explain_query', 'Get the execution plan for a PostgreSQL SELECT query. Set analyze=true to get real timing (this actually executes the query).', {
100
+ sql: zod_1.z.string().describe('SELECT query to explain'),
101
+ analyze: zod_1.z.boolean().optional().describe('Run query for real timing and buffer stats (default: false)'),
102
+ connection: connParam,
103
+ }, async ({ sql, analyze, connection }) => {
104
+ const result = await service.explainQuery(sql, analyze, connection);
105
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
106
+ });
107
+ server.tool('pg_top_queries', 'Get the top slowest PostgreSQL queries using pg_stat_statements. Returns an error if the extension is not enabled.', {
108
+ limit: zod_1.z.number().optional().describe('Number of queries to return (default: 10)'),
109
+ sort_by: zod_1.z
110
+ .enum(['mean_exec_time', 'total_exec_time', 'calls'])
111
+ .optional()
112
+ .describe('Sort metric (default: mean_exec_time)'),
113
+ connection: connParam,
114
+ }, async ({ limit, sort_by, connection }) => {
115
+ const result = await service.getTopQueries(limit, sort_by, connection);
116
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
117
+ });
118
+ server.tool('pg_db_health', 'Check PostgreSQL database health: duplicate indexes, unused indexes, connection count, tables needing VACUUM, and invalid constraints.', {
119
+ connection: connParam,
120
+ }, async ({ connection }) => {
121
+ const result = await service.getDbHealth(connection);
122
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
123
+ });
124
+ server.tool('mongo_explain', 'Get the execution plan for a MongoDB query. Shows index usage, scan type, and optionally execution stats.', {
125
+ collection: zod_1.z.string().describe('Collection name'),
126
+ filter: zod_1.z.string().optional().describe('JSON filter object (default: {})'),
127
+ verbosity: zod_1.z
128
+ .enum(['queryPlanner', 'executionStats'])
129
+ .optional()
130
+ .describe('Detail level (default: queryPlanner)'),
131
+ connection: connParam,
132
+ }, async ({ collection, filter, verbosity, connection }) => {
133
+ const parsedFilter = filter ? JSON.parse(filter) : {};
134
+ const result = await service.mongoExplainQuery(collection, parsedFilter, verbosity, connection);
135
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
136
+ });
137
+ server.tool('mongo_count', 'Count documents in a MongoDB collection, optionally matching a filter.', {
138
+ collection: zod_1.z.string().describe('Collection name'),
139
+ filter: zod_1.z.string().optional().describe('JSON filter object (default: {})'),
140
+ connection: connParam,
141
+ }, async ({ collection, filter, connection }) => {
142
+ const parsedFilter = filter ? JSON.parse(filter) : {};
143
+ const result = await service.mongoCountDocuments(collection, parsedFilter, connection);
144
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
145
+ });
146
+ server.tool('mongo_stats', 'Get MongoDB database or collection statistics (size, document count, indexes).', {
147
+ collection: zod_1.z.string().optional().describe('Collection name (omit for database-level stats)'),
148
+ connection: connParam,
149
+ }, async ({ collection, connection }) => {
150
+ const result = await service.mongoGetStats(collection, connection);
151
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
152
+ });
153
+ server.tool('mongo_list_indexes', 'List all indexes on a MongoDB collection.', {
154
+ collection: zod_1.z.string().describe('Collection name'),
155
+ connection: connParam,
156
+ }, async ({ collection, connection }) => {
157
+ const result = await service.mongoListIndexes(collection, connection);
158
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
159
+ });
160
+ const contextConnectionRepo = new connection_repository_1.ConnectionRepository();
161
+ server.tool('initialize_context', 'Collect schemas, project info, and integration metadata from all active data sources. Returns raw data for analysis. After receiving the result, analyze it and save via write_context.', {}, async () => {
162
+ try {
163
+ const sections = [];
164
+ const connections = contextConnectionRepo.readAll(false).filter((c) => c.active);
165
+ for (const type of ['postgresql', 'mongodb']) {
166
+ const dbConns = connections.filter((c) => c.type === type);
167
+ for (const conn of dbConns) {
168
+ try {
169
+ const schema = await service.getSchema(type, conn.name);
170
+ sections.push(`## ${type === 'postgresql' ? 'PostgreSQL' : 'MongoDB'}: ${conn.name}\nБаза данных: ${conn.config.database}\n\nСхема:\n\`\`\`json\n${JSON.stringify(schema, null, 2)}\n\`\`\``);
171
+ }
172
+ catch (err) {
173
+ sections.push(`## ${type === 'postgresql' ? 'PostgreSQL' : 'MongoDB'}: ${conn.name}\nОшибка получения схемы: ${err instanceof Error ? err.message : String(err)}`);
174
+ }
175
+ }
176
+ }
177
+ const project = projectRepository.read();
178
+ if (project && project.status === 'ready') {
179
+ let projectSection = `## Проект: ${project.localPath}\nТип: ${project.config.type}`;
180
+ const claudeMdPath = path.join(project.localPath, 'CLAUDE.md');
181
+ try {
182
+ if (fs.existsSync(claudeMdPath)) {
183
+ projectSection += `\n\nCLAUDE.md:\n\`\`\`\n${fs.readFileSync(claudeMdPath, 'utf-8')}\n\`\`\``;
184
+ }
185
+ else {
186
+ projectSection += '\n\nCLAUDE.md: не найден';
187
+ }
188
+ }
189
+ catch {
190
+ projectSection += '\n\nCLAUDE.md: ошибка чтения';
191
+ }
192
+ sections.push(projectSection);
193
+ }
194
+ const graylogConn = connections.find((c) => c.type === 'graylog');
195
+ const grafanaConn = connections.find((c) => c.type === 'grafana');
196
+ if (graylogConn || grafanaConn) {
197
+ let integrations = '## Активные интеграции\n';
198
+ if (graylogConn) {
199
+ integrations += `- **Graylog**: подключён (${graylogConn.config.baseUrl}). Используй list_streams для получения списка стримов.\n`;
200
+ }
201
+ if (grafanaConn) {
202
+ integrations += `- **Grafana**: подключён (${grafanaConn.config.url}). Используй search_dashboards и list_datasources для деталей.\n`;
203
+ }
204
+ sections.push(integrations);
205
+ }
206
+ if (sections.length === 0) {
207
+ return { content: [{ type: 'text', text: 'Нет активных подключений. Сначала подключи источники данных.' }] };
208
+ }
209
+ return {
210
+ content: [{ type: 'text', text: sections.join('\n\n') }],
211
+ };
212
+ }
213
+ catch (err) {
214
+ return {
215
+ content: [{ type: 'text', text: `Ошибка сбора данных: ${err instanceof Error ? err.message : String(err)}` }],
216
+ isError: true,
217
+ };
218
+ }
219
+ });
220
+ function computeFingerprint() {
221
+ const connections = contextConnectionRepo.readAll(false);
222
+ const activeIds = connections
223
+ .filter((c) => c.active)
224
+ .map((c) => c.id)
225
+ .sort()
226
+ .join(',');
227
+ return crypto.createHash('md5').update(activeIds).digest('hex').slice(0, 12);
228
+ }
229
+ server.tool('write_context', 'Save the analyzed project context to persistent storage. The context will be injected into your system prompt on future messages, so write a comprehensive analysis of all connected data sources, their schemas, relationships, and business logic.', {
230
+ content: zod_1.z.string().describe('Full markdown context document to save. Include sections for each data source, schema descriptions, relationships, and business context.'),
231
+ }, async ({ content }) => {
232
+ try {
233
+ const fp = computeFingerprint();
234
+ const now = new Date().toISOString();
235
+ const file = `---\nfingerprint: ${fp}\nupdatedAt: ${now}\n---\n${content}`;
236
+ const dir = path.dirname((0, paths_1.contextPath)());
237
+ if (!fs.existsSync(dir))
238
+ fs.mkdirSync(dir, { recursive: true });
239
+ fs.writeFileSync((0, paths_1.contextPath)(), file, 'utf-8');
240
+ return {
241
+ content: [{ type: 'text', text: `✓ Контекст сохранён (${content.length} символов, fingerprint: ${fp})` }],
242
+ };
243
+ }
244
+ catch (err) {
245
+ return {
246
+ content: [{ type: 'text', text: `Ошибка сохранения контекста: ${err instanceof Error ? err.message : String(err)}` }],
247
+ isError: true,
248
+ };
249
+ }
250
+ });
251
+ function sanitizeEChartsOption(option) {
252
+ const json = JSON.stringify(option, (_key, value) => {
253
+ if (typeof value === 'function')
254
+ return undefined;
255
+ if (typeof value === 'string' && /^\s*(function|=>|\(\))/.test(value))
256
+ return undefined;
257
+ return value;
258
+ });
259
+ return JSON.parse(json);
260
+ }
261
+ server.tool('render_chart', 'Render an interactive chart. Pass a complete Apache ECharts 5.x option object. ' +
262
+ 'All ECharts chart types are supported: line, bar, pie, scatter, heatmap, radar, ' +
263
+ 'treemap, sankey, funnel, gauge, boxplot, candlestick, sunburst, parallel, etc. ' +
264
+ 'The chart will be rendered interactively with hover tooltips, zoom, and brush selection.', {
265
+ echartsOption: zod_1.z.record(zod_1.z.string(), zod_1.z.any()).describe('Complete ECharts option object. Must include at least "series". ' +
266
+ 'Use "dataset.source" or "series[].data" for data. ' +
267
+ 'Include tooltip, legend, xAxis/yAxis as needed.'),
268
+ title: zod_1.z.string().describe('Chart title displayed above the chart'),
269
+ description: zod_1.z.string().optional().describe('Brief text description of what the chart shows'),
270
+ sourceQuery: zod_1.z.string().optional().describe('Original query used to get the data (for context in brush-explain)'),
271
+ rebuildConfig: zod_1.z.object({
272
+ datasourceType: zod_1.z.enum(['postgresql', 'mongodb']),
273
+ connectionName: zod_1.z.string().optional(),
274
+ queryTemplate: zod_1.z.string().describe('Query with {{TIME_FROM}} and {{TIME_TO}} placeholders for time boundaries. ' +
275
+ 'For PostgreSQL: SQL with time placeholders in WHERE clause. ' +
276
+ 'For MongoDB: JSON query with time placeholders in $match stage.'),
277
+ timeColumn: zod_1.z.string().describe('Name of the time column/field, e.g. "created_at"'),
278
+ timeFormat: zod_1.z.enum(['iso', 'epoch_s', 'epoch_ms']).optional().describe('How to format time values. Default: iso'),
279
+ echartsMapping: zod_1.z.object({
280
+ xField: zod_1.z.string().describe('Result column that maps to xAxis data'),
281
+ series: zod_1.z.array(zod_1.z.object({
282
+ yField: zod_1.z.string().describe('Result column that maps to this series data'),
283
+ name: zod_1.z.string().optional().describe('Series name for legend'),
284
+ type: zod_1.z.string().describe('Chart type: line, bar, scatter, etc.'),
285
+ })),
286
+ }),
287
+ }).optional().describe('If chart is time-based (x-axis = time), provide rebuild config so the user can change the time range ' +
288
+ 'without re-asking. Include the original query as a template with {{TIME_FROM}} and {{TIME_TO}} placeholders.'),
289
+ addToDashboard: zod_1.z.boolean().optional().describe('Add chart directly to the main dashboard. Use when composing a full dashboard automatically.'),
290
+ }, async ({ echartsOption, title, description, sourceQuery, rebuildConfig, addToDashboard }) => {
291
+ const sanitized = sanitizeEChartsOption(echartsOption);
292
+ if (!sanitized.series && !sanitized.dataset) {
293
+ return {
294
+ content: [{ type: 'text', text: JSON.stringify({ error: 'echartsOption must contain "series" or "dataset"' }) }],
295
+ isError: true,
296
+ };
297
+ }
298
+ const chartPayload = {
299
+ type: 'chart',
300
+ chartId: `chart_${Date.now()}`,
301
+ echartsOption: sanitized,
302
+ title,
303
+ description: description ?? '',
304
+ sourceQuery: sourceQuery ?? '',
305
+ };
306
+ if (rebuildConfig) {
307
+ chartPayload.rebuildConfig = rebuildConfig;
308
+ }
309
+ if (addToDashboard) {
310
+ try {
311
+ const dashRepo = new connection_repository_1.ConnectionRepository();
312
+ const existing = dashRepo.readDashboard();
313
+ existing.push({
314
+ chartId: chartPayload.chartId,
315
+ title,
316
+ echartsOption: sanitized,
317
+ description: description ?? '',
318
+ sourceQuery: sourceQuery ?? '',
319
+ ...(rebuildConfig ? { rebuildConfig } : {}),
320
+ });
321
+ dashRepo.writeDashboard(existing);
322
+ }
323
+ catch (err) {
324
+ console.error('[render_chart] Failed to add to dashboard:', err);
325
+ }
326
+ }
327
+ return {
328
+ content: [{ type: 'text', text: JSON.stringify(chartPayload) }],
329
+ };
330
+ });
331
+ const transport = new stdio_js_1.StdioServerTransport();
332
+ server.connect(transport).catch((err) => {
333
+ console.error('MCP server error:', err);
334
+ process.exit(1);
335
+ });
336
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/mcp/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare function dataDir(): string;
2
+ export declare function configPath(): string;
3
+ export declare function dashboardsDir(): string;
4
+ export declare function contextPath(): string;
5
+ export declare function envFilePath(): string;
6
+ export declare function mcpScriptsDir(): string;
7
+ export declare function publicDir(): string;
8
+ export declare function serverPort(): number;