qorrelate-mcp-server 0.1.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.
Files changed (50) hide show
  1. package/README.md +197 -0
  2. package/dist/client.d.ts +293 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +358 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/index.d.ts +26 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +242 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/alerts.d.ts +14 -0
  11. package/dist/tools/alerts.d.ts.map +1 -0
  12. package/dist/tools/alerts.js +381 -0
  13. package/dist/tools/alerts.js.map +1 -0
  14. package/dist/tools/dashboards.d.ts +14 -0
  15. package/dist/tools/dashboards.d.ts.map +1 -0
  16. package/dist/tools/dashboards.js +409 -0
  17. package/dist/tools/dashboards.js.map +1 -0
  18. package/dist/tools/data-control.d.ts +19 -0
  19. package/dist/tools/data-control.d.ts.map +1 -0
  20. package/dist/tools/data-control.js +213 -0
  21. package/dist/tools/data-control.js.map +1 -0
  22. package/dist/tools/logs.d.ts +14 -0
  23. package/dist/tools/logs.d.ts.map +1 -0
  24. package/dist/tools/logs.js +191 -0
  25. package/dist/tools/logs.js.map +1 -0
  26. package/dist/tools/metrics.d.ts +14 -0
  27. package/dist/tools/metrics.d.ts.map +1 -0
  28. package/dist/tools/metrics.js +217 -0
  29. package/dist/tools/metrics.js.map +1 -0
  30. package/dist/tools/organizations.d.ts +16 -0
  31. package/dist/tools/organizations.d.ts.map +1 -0
  32. package/dist/tools/organizations.js +378 -0
  33. package/dist/tools/organizations.js.map +1 -0
  34. package/dist/tools/services.d.ts +14 -0
  35. package/dist/tools/services.d.ts.map +1 -0
  36. package/dist/tools/services.js +218 -0
  37. package/dist/tools/services.js.map +1 -0
  38. package/dist/tools/sessions.d.ts +14 -0
  39. package/dist/tools/sessions.d.ts.map +1 -0
  40. package/dist/tools/sessions.js +221 -0
  41. package/dist/tools/sessions.js.map +1 -0
  42. package/dist/tools/setup.d.ts +17 -0
  43. package/dist/tools/setup.d.ts.map +1 -0
  44. package/dist/tools/setup.js +304 -0
  45. package/dist/tools/setup.js.map +1 -0
  46. package/dist/tools/traces.d.ts +14 -0
  47. package/dist/tools/traces.d.ts.map +1 -0
  48. package/dist/tools/traces.js +350 -0
  49. package/dist/tools/traces.js.map +1 -0
  50. package/package.json +48 -0
package/dist/client.js ADDED
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ /**
3
+ * Qorrelate API Client
4
+ *
5
+ * HTTP client for communicating with the Qorrelate backend API.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.QorrelateClient = void 0;
9
+ class QorrelateClient {
10
+ endpoint;
11
+ apiKey;
12
+ constructor(endpoint, apiKey) {
13
+ this.endpoint = endpoint.replace(/\/$/, ''); // Remove trailing slash
14
+ this.apiKey = apiKey;
15
+ }
16
+ async request(path, options = {}) {
17
+ const url = `${this.endpoint}${path}`;
18
+ const response = await fetch(url, {
19
+ ...options,
20
+ headers: {
21
+ 'Content-Type': 'application/json',
22
+ 'X-API-Key': this.apiKey,
23
+ ...options.headers,
24
+ },
25
+ });
26
+ if (!response.ok) {
27
+ const text = await response.text();
28
+ throw new Error(`API request failed: ${response.status} ${response.statusText} - ${text}`);
29
+ }
30
+ return response.json();
31
+ }
32
+ // ==================== LOGS ====================
33
+ async searchLogs(params) {
34
+ const searchParams = new URLSearchParams();
35
+ if (params.query)
36
+ searchParams.set('query', params.query);
37
+ if (params.start_time)
38
+ searchParams.set('start_time', params.start_time);
39
+ if (params.end_time)
40
+ searchParams.set('end_time', params.end_time);
41
+ if (params.limit)
42
+ searchParams.set('limit', String(params.limit));
43
+ if (params.severity)
44
+ searchParams.set('severity', params.severity);
45
+ if (params.service)
46
+ searchParams.set('service', params.service);
47
+ return this.request(`/v1/logs/search?${searchParams}`);
48
+ }
49
+ async getLogHistogram(params) {
50
+ const searchParams = new URLSearchParams();
51
+ if (params.start_time)
52
+ searchParams.set('start_time', params.start_time);
53
+ if (params.end_time)
54
+ searchParams.set('end_time', params.end_time);
55
+ if (params.query)
56
+ searchParams.set('query', params.query);
57
+ return this.request(`/v1/logs/histogram?${searchParams}`);
58
+ }
59
+ // ==================== TRACES ====================
60
+ async searchTraces(params) {
61
+ const searchParams = new URLSearchParams();
62
+ if (params.start_time)
63
+ searchParams.set('start_time', params.start_time);
64
+ if (params.end_time)
65
+ searchParams.set('end_time', params.end_time);
66
+ if (params.limit)
67
+ searchParams.set('limit', String(params.limit));
68
+ if (params.service)
69
+ searchParams.set('service', params.service);
70
+ if (params.min_duration_ms)
71
+ searchParams.set('min_duration_ms', String(params.min_duration_ms));
72
+ if (params.has_error !== undefined)
73
+ searchParams.set('has_error', String(params.has_error));
74
+ return this.request(`/v1/traces/search?${searchParams}`);
75
+ }
76
+ async getTrace(traceId) {
77
+ return this.request(`/v1/traces/${traceId}`);
78
+ }
79
+ // ==================== METRICS ====================
80
+ async queryMetrics(params) {
81
+ const searchParams = new URLSearchParams();
82
+ searchParams.set('metric_name', params.metric_name);
83
+ if (params.start_time)
84
+ searchParams.set('start_time', params.start_time);
85
+ if (params.end_time)
86
+ searchParams.set('end_time', params.end_time);
87
+ if (params.aggregation)
88
+ searchParams.set('aggregation', params.aggregation);
89
+ if (params.group_by)
90
+ searchParams.set('group_by', params.group_by);
91
+ return this.request(`/v1/metrics/query?${searchParams}`);
92
+ }
93
+ async listMetrics(params) {
94
+ const searchParams = new URLSearchParams();
95
+ if (params?.prefix)
96
+ searchParams.set('prefix', params.prefix);
97
+ if (params?.limit)
98
+ searchParams.set('limit', String(params.limit));
99
+ return this.request(`/v1/metrics/list?${searchParams}`);
100
+ }
101
+ // ==================== ALERTS ====================
102
+ async listAlerts(params) {
103
+ const searchParams = new URLSearchParams();
104
+ if (params?.active !== undefined)
105
+ searchParams.set('active', String(params.active));
106
+ if (params?.severity)
107
+ searchParams.set('severity', params.severity);
108
+ if (params?.service)
109
+ searchParams.set('service', params.service);
110
+ return this.request(`/v1/alerts?${searchParams}`);
111
+ }
112
+ async getAlert(alertId) {
113
+ return this.request(`/v1/alerts/${alertId}`);
114
+ }
115
+ async acknowledgeAlert(alertId, message) {
116
+ return this.request(`/v1/alerts/${alertId}/acknowledge`, {
117
+ method: 'POST',
118
+ body: JSON.stringify({ message }),
119
+ });
120
+ }
121
+ async getAlertHistory(alertId) {
122
+ return this.request(`/v1/alerts/${alertId}/history`);
123
+ }
124
+ // ==================== SESSIONS ====================
125
+ async listSessions(params) {
126
+ const searchParams = new URLSearchParams();
127
+ if (params?.start_time)
128
+ searchParams.set('start_time', params.start_time);
129
+ if (params?.end_time)
130
+ searchParams.set('end_time', params.end_time);
131
+ if (params?.limit)
132
+ searchParams.set('limit', String(params.limit));
133
+ if (params?.has_errors !== undefined)
134
+ searchParams.set('has_errors', String(params.has_errors));
135
+ if (params?.user_id)
136
+ searchParams.set('user_id', params.user_id);
137
+ return this.request(`/v1/replay?${searchParams}`);
138
+ }
139
+ async getSession(sessionId) {
140
+ return this.request(`/v1/replay/${sessionId}`);
141
+ }
142
+ // ==================== SERVICES ====================
143
+ async listServices() {
144
+ return this.request('/v1/logs/services');
145
+ }
146
+ async getServiceHealth(serviceName) {
147
+ const searchParams = new URLSearchParams();
148
+ searchParams.set('service', serviceName);
149
+ // Get traces for the service to calculate health metrics
150
+ const now = new Date();
151
+ const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
152
+ const traces = await this.searchTraces({
153
+ service: serviceName,
154
+ start_time: oneHourAgo.toISOString(),
155
+ end_time: now.toISOString(),
156
+ limit: 1000,
157
+ });
158
+ // Calculate health metrics from traces
159
+ const totalTraces = traces.traces.length;
160
+ const errorTraces = traces.traces.filter(t => t.has_error).length;
161
+ const durations = traces.traces.map(t => t.duration_ms).sort((a, b) => a - b);
162
+ const errorRate = totalTraces > 0 ? (errorTraces / totalTraces) * 100 : 0;
163
+ const avgLatency = totalTraces > 0
164
+ ? durations.reduce((a, b) => a + b, 0) / totalTraces
165
+ : 0;
166
+ const p95Index = Math.floor(durations.length * 0.95);
167
+ const p95Latency = durations[p95Index] || 0;
168
+ let status = 'unknown';
169
+ if (totalTraces > 0) {
170
+ if (errorRate < 1 && avgLatency < 500)
171
+ status = 'healthy';
172
+ else if (errorRate < 5 && avgLatency < 1000)
173
+ status = 'degraded';
174
+ else
175
+ status = 'unhealthy';
176
+ }
177
+ const lastErrorTrace = traces.traces.find(t => t.has_error);
178
+ return {
179
+ service: serviceName,
180
+ status,
181
+ error_rate: Math.round(errorRate * 100) / 100,
182
+ avg_latency_ms: Math.round(avgLatency),
183
+ p95_latency_ms: Math.round(p95Latency),
184
+ request_count: totalTraces,
185
+ last_error: lastErrorTrace?.root_span_name,
186
+ last_error_time: lastErrorTrace?.start_time,
187
+ };
188
+ }
189
+ // ==================== SETUP ENDPOINTS ====================
190
+ async getSetupOtelPython(params) {
191
+ return this.request(`/v1/setup/otel/python?${params}`);
192
+ }
193
+ async getSetupOtelNode(params) {
194
+ return this.request(`/v1/setup/otel/node?${params}`);
195
+ }
196
+ async getSetupOtelGo(params) {
197
+ return this.request(`/v1/setup/otel/go?${params}`);
198
+ }
199
+ async getSetupCollector(params) {
200
+ return this.request(`/v1/setup/collector?${params}`);
201
+ }
202
+ async getSetupSessionReplay() {
203
+ return this.request('/v1/setup/session-replay');
204
+ }
205
+ async getSetupValidate() {
206
+ return this.request('/v1/setup/validate');
207
+ }
208
+ async getSetupStatus() {
209
+ return this.request('/v1/setup/status');
210
+ }
211
+ // ==================== ORGANIZATION ENDPOINTS ====================
212
+ async listOrganizations() {
213
+ return this.request('/v1/organizations');
214
+ }
215
+ async getOrganizationMembers(orgId) {
216
+ return this.request(`/v1/organizations/${orgId}/members`);
217
+ }
218
+ async inviteUser(orgId, email) {
219
+ return this.request(`/v1/organizations/${orgId}/invitations`, {
220
+ method: 'POST',
221
+ body: JSON.stringify({ email }),
222
+ });
223
+ }
224
+ async listInvitations(orgId) {
225
+ return this.request(`/v1/organizations/${orgId}/invitations`);
226
+ }
227
+ async createApiKey(orgId, name, expiresDays = 365) {
228
+ return this.request(`/v1/organizations/${orgId}/api-keys`, {
229
+ method: 'POST',
230
+ body: JSON.stringify({ name, expires_days: expiresDays }),
231
+ });
232
+ }
233
+ async listApiKeys(orgId) {
234
+ return this.request(`/v1/organizations/${orgId}/api-keys`);
235
+ }
236
+ async revokeApiKey(orgId, keyName) {
237
+ return this.request(`/v1/organizations/${orgId}/api-keys/${encodeURIComponent(keyName)}`, {
238
+ method: 'DELETE',
239
+ });
240
+ }
241
+ async getOrganizationUsage(orgId, params) {
242
+ const searchParams = new URLSearchParams();
243
+ if (params?.start_date)
244
+ searchParams.set('start_date', params.start_date);
245
+ if (params?.end_date)
246
+ searchParams.set('end_date', params.end_date);
247
+ const query = searchParams.toString() ? `?${searchParams}` : '';
248
+ return this.request(`/v1/organizations/${orgId}/usage${query}`);
249
+ }
250
+ async getOrganizationBilling(orgId, month) {
251
+ const searchParams = new URLSearchParams();
252
+ if (month)
253
+ searchParams.set('month', month);
254
+ const query = searchParams.toString() ? `?${searchParams}` : '';
255
+ return this.request(`/v1/organizations/${orgId}/billing${query}`);
256
+ }
257
+ async getDataUsageSummary(orgId, days) {
258
+ const searchParams = new URLSearchParams();
259
+ if (days)
260
+ searchParams.set('days', String(days));
261
+ const query = searchParams.toString() ? `?${searchParams}` : '';
262
+ return this.request(`/v1/organizations/${orgId}/data-usage/summary${query}`);
263
+ }
264
+ async getUnusedMetrics(orgId, days) {
265
+ const searchParams = new URLSearchParams();
266
+ if (days)
267
+ searchParams.set('days', String(days));
268
+ const query = searchParams.toString() ? `?${searchParams}` : '';
269
+ return this.request(`/v1/organizations/${orgId}/data-usage/unused-metrics${query}`);
270
+ }
271
+ // ==================== DROP FILTERS ====================
272
+ async listDropFilters(orgId, filterType) {
273
+ const searchParams = new URLSearchParams();
274
+ if (filterType)
275
+ searchParams.set('filter_type', filterType);
276
+ const query = searchParams.toString() ? `?${searchParams}` : '';
277
+ return this.request(`/v1/organizations/${orgId}/drop-filters${query}`);
278
+ }
279
+ async createDropFilter(orgId, params) {
280
+ return this.request(`/v1/organizations/${orgId}/drop-filters`, {
281
+ method: 'POST',
282
+ body: JSON.stringify(params),
283
+ });
284
+ }
285
+ async deleteDropFilter(orgId, filterId) {
286
+ return this.request(`/v1/organizations/${orgId}/drop-filters/${filterId}`, {
287
+ method: 'DELETE',
288
+ });
289
+ }
290
+ async getDropFilterStats(orgId) {
291
+ return this.request(`/v1/organizations/${orgId}/drop-filters/stats`);
292
+ }
293
+ // ==================== DASHBOARDS ====================
294
+ async listDashboards(search) {
295
+ const searchParams = new URLSearchParams();
296
+ if (search)
297
+ searchParams.set('search', search);
298
+ const query = searchParams.toString() ? `?${searchParams}` : '';
299
+ return this.request(`/v1/dashboards${query}`);
300
+ }
301
+ async getDashboard(dashboardId) {
302
+ return this.request(`/v1/dashboards/${dashboardId}`);
303
+ }
304
+ async createDashboard(params) {
305
+ return this.request('/v1/dashboards', {
306
+ method: 'POST',
307
+ body: JSON.stringify(params),
308
+ });
309
+ }
310
+ async updateDashboard(dashboardId, params) {
311
+ return this.request(`/v1/dashboards/${dashboardId}`, {
312
+ method: 'PUT',
313
+ body: JSON.stringify(params),
314
+ });
315
+ }
316
+ async deleteDashboard(dashboardId) {
317
+ return this.request(`/v1/dashboards/${dashboardId}`, {
318
+ method: 'DELETE',
319
+ });
320
+ }
321
+ async addPanel(dashboardId, params) {
322
+ return this.request(`/v1/dashboards/${dashboardId}/panels`, {
323
+ method: 'POST',
324
+ body: JSON.stringify(params),
325
+ });
326
+ }
327
+ async updatePanel(dashboardId, panelId, params) {
328
+ return this.request(`/v1/dashboards/${dashboardId}/panels/${panelId}`, {
329
+ method: 'PUT',
330
+ body: JSON.stringify(params),
331
+ });
332
+ }
333
+ async deletePanel(dashboardId, panelId) {
334
+ return this.request(`/v1/dashboards/${dashboardId}/panels/${panelId}`, {
335
+ method: 'DELETE',
336
+ });
337
+ }
338
+ // ==================== ALERTS (Extended) ====================
339
+ async createAlert(params) {
340
+ return this.request('/v1/alerts', {
341
+ method: 'POST',
342
+ body: JSON.stringify(params),
343
+ });
344
+ }
345
+ async updateAlert(alertId, params) {
346
+ return this.request(`/v1/alerts/${alertId}`, {
347
+ method: 'PUT',
348
+ body: JSON.stringify(params),
349
+ });
350
+ }
351
+ async deleteAlert(alertId) {
352
+ return this.request(`/v1/alerts/${alertId}`, {
353
+ method: 'DELETE',
354
+ });
355
+ }
356
+ }
357
+ exports.QorrelateClient = QorrelateClient;
358
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AA0GH,MAAa,eAAe;IAClB,QAAQ,CAAS;IACjB,MAAM,CAAS;IAEvB,YAAY,QAAgB,EAAE,MAAc;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB;QACrE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,UAAuB,EAAE;QAC9D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,IAAI,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED,iDAAiD;IAEjD,KAAK,CAAC,UAAU,CAAC,MAOhB;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,OAAO;YAAE,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEhE,OAAO,IAAI,CAAC,OAAO,CAAkB,mBAAmB,YAAY,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAIrB;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,mDAAmD;IAEnD,KAAK,CAAC,YAAY,CAAC,MAOlB;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,OAAO;YAAE,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,eAAe;YAAE,YAAY,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;QAChG,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAE5F,OAAO,IAAI,CAAC,OAAO,CAAoB,qBAAqB,YAAY,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAQ,cAAc,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,oDAAoD;IAEpD,KAAK,CAAC,YAAY,CAAC,MAMlB;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,MAAM,CAAC,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,WAAW;YAAE,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEnE,OAAO,IAAI,CAAC,OAAO,CAAoB,qBAAqB,YAAY,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAGjB;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM,EAAE,MAAM;YAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,MAAM,EAAE,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAEnE,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,YAAY,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,mDAAmD;IAEnD,KAAK,CAAC,UAAU,CAAC,MAIhB;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;YAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,IAAI,MAAM,EAAE,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,MAAM,EAAE,OAAO;YAAE,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAQ,cAAc,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe,EAAE,OAAgB;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,OAAO,cAAc,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,OAAO,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,qDAAqD;IAErD,KAAK,CAAC,YAAY,CAAC,MAMlB;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM,EAAE,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,MAAM,EAAE,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,MAAM,EAAE,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,IAAI,MAAM,EAAE,UAAU,KAAK,SAAS;YAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAChG,IAAI,MAAM,EAAE,OAAO;YAAE,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAEjE,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,qDAAqD;IAErD,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACxC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEzC,yDAAyD;QACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACrC,OAAO,EAAE,WAAW;YACpB,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE;YACpC,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE;YAC3B,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAClE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE9E,MAAM,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,WAAW,GAAG,CAAC;YAChC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,WAAW;YACpD,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,MAAM,GAA4B,SAAS,CAAC;QAChD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG;gBAAE,MAAM,GAAG,SAAS,CAAC;iBACrD,IAAI,SAAS,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI;gBAAE,MAAM,GAAG,UAAU,CAAC;;gBAC5D,MAAM,GAAG,WAAW,CAAC;QAC5B,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE5D,OAAO;YACL,OAAO,EAAE,WAAW;YACpB,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG;YAC7C,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACtC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACtC,aAAa,EAAE,WAAW;YAC1B,UAAU,EAAE,cAAc,EAAE,cAAc;YAC1C,eAAe,EAAE,cAAc,EAAE,UAAU;SAC5C,CAAC;IACJ,CAAC;IAED,4DAA4D;IAE5D,KAAK,CAAC,kBAAkB,CAAC,MAAuB;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAuB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAuB;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAuB;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IAED,mEAAmE;IAEnE,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAa;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAa;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,cAAc,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,IAAY,EAAE,WAAW,GAAG,GAAG;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,WAAW,EAAE;YACzD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,OAAe;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,aAAa,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE;YACxF,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,KAAa,EAAE,MAGzC;QACC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM,EAAE,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,MAAM,EAAE,QAAQ;YAAE,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,SAAS,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAa,EAAE,KAAc;QACxD,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,KAAK;YAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,WAAW,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAa,EAAE,IAAa;QACpD,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,IAAI;YAAE,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,sBAAsB,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,IAAa;QACjD,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,IAAI;YAAE,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,6BAA6B,KAAK,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,yDAAyD;IAEzD,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,UAAmB;QACtD,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,UAAU;YAAE,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,gBAAgB,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,MAQrC;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,eAAe,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,QAAgB;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,iBAAiB,QAAQ,EAAE,EAAE;YACzE,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAa;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,KAAK,qBAAqB,CAAC,CAAC;IACvE,CAAC;IAED,uDAAuD;IAEvD,KAAK,CAAC,cAAc,CAAC,MAAe;QAClC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,IAAI,MAAM;YAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAmB;QACpC,OAAO,IAAI,CAAC,OAAO,CAAY,kBAAkB,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAUrB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB,EAAE,MAG1C;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,WAAW,EAAE,EAAE;YACnD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAmB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,WAAW,EAAE,EAAE;YACnD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,WAAmB,EAAE,MAQnC;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,WAAW,SAAS,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,WAAmB,EAAE,OAAe,EAAE,MAKvD;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,WAAW,WAAW,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,WAAmB,EAAE,OAAe;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,WAAW,WAAW,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IAED,8DAA8D;IAE9D,KAAK,CAAC,WAAW,CAAC,MAQjB;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,MAMlC;QACC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,OAAO,EAAE,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,OAAO,EAAE,EAAE;YAC3C,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;CACF;AAzdD,0CAydC"}
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Qorrelate MCP Server
4
+ *
5
+ * Model Context Protocol server that exposes Qorrelate observability tools
6
+ * for AI agents to query logs, traces, metrics, alerts, and session replays.
7
+ *
8
+ * Usage:
9
+ * QORRELATE_API_KEY=xxx QORRELATE_ENDPOINT=https://qorrelate.io npx @qorrelate/mcp-server
10
+ *
11
+ * Or configure in Claude Desktop / Cursor:
12
+ * {
13
+ * "mcpServers": {
14
+ * "qorrelate": {
15
+ * "command": "npx",
16
+ * "args": ["@qorrelate/mcp-server"],
17
+ * "env": {
18
+ * "QORRELATE_API_KEY": "your-api-key",
19
+ * "QORRELATE_ENDPOINT": "https://qorrelate.io"
20
+ * }
21
+ * }
22
+ * }
23
+ * }
24
+ */
25
+ export {};
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
package/dist/index.js ADDED
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Qorrelate MCP Server
5
+ *
6
+ * Model Context Protocol server that exposes Qorrelate observability tools
7
+ * for AI agents to query logs, traces, metrics, alerts, and session replays.
8
+ *
9
+ * Usage:
10
+ * QORRELATE_API_KEY=xxx QORRELATE_ENDPOINT=https://qorrelate.io npx @qorrelate/mcp-server
11
+ *
12
+ * Or configure in Claude Desktop / Cursor:
13
+ * {
14
+ * "mcpServers": {
15
+ * "qorrelate": {
16
+ * "command": "npx",
17
+ * "args": ["@qorrelate/mcp-server"],
18
+ * "env": {
19
+ * "QORRELATE_API_KEY": "your-api-key",
20
+ * "QORRELATE_ENDPOINT": "https://qorrelate.io"
21
+ * }
22
+ * }
23
+ * }
24
+ * }
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
28
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
29
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
30
+ const client_js_1 = require("./client.js");
31
+ const logs_js_1 = require("./tools/logs.js");
32
+ const traces_js_1 = require("./tools/traces.js");
33
+ const metrics_js_1 = require("./tools/metrics.js");
34
+ const alerts_js_1 = require("./tools/alerts.js");
35
+ const sessions_js_1 = require("./tools/sessions.js");
36
+ const services_js_1 = require("./tools/services.js");
37
+ const organizations_js_1 = require("./tools/organizations.js");
38
+ const setup_js_1 = require("./tools/setup.js");
39
+ const dashboards_js_1 = require("./tools/dashboards.js");
40
+ const data_control_js_1 = require("./tools/data-control.js");
41
+ // Configuration from environment
42
+ const QORRELATE_ENDPOINT = process.env.QORRELATE_ENDPOINT || "https://qorrelate.io";
43
+ const QORRELATE_API_KEY = process.env.QORRELATE_API_KEY;
44
+ if (!QORRELATE_API_KEY) {
45
+ console.error("Error: QORRELATE_API_KEY environment variable is required");
46
+ console.error("Get your API key from https://qorrelate.io/settings → API Keys");
47
+ process.exit(1);
48
+ }
49
+ // Initialize the Qorrelate API client
50
+ const client = new client_js_1.QorrelateClient(QORRELATE_ENDPOINT, QORRELATE_API_KEY);
51
+ // Create MCP server
52
+ const server = new index_js_1.Server({
53
+ name: "qorrelate",
54
+ version: "0.1.0",
55
+ }, {
56
+ capabilities: {
57
+ tools: {},
58
+ resources: {},
59
+ },
60
+ });
61
+ // Collect all tools from modules
62
+ const allTools = [
63
+ ...(0, logs_js_1.registerLogTools)(),
64
+ ...(0, traces_js_1.registerTraceTools)(),
65
+ ...(0, metrics_js_1.registerMetricTools)(),
66
+ ...(0, alerts_js_1.registerAlertTools)(),
67
+ ...(0, sessions_js_1.registerSessionTools)(),
68
+ ...(0, services_js_1.registerServiceTools)(),
69
+ ...(0, organizations_js_1.registerOrganizationTools)(),
70
+ ...(0, setup_js_1.registerSetupTools)(),
71
+ ...(0, dashboards_js_1.registerDashboardTools)(),
72
+ ...(0, data_control_js_1.registerDataControlTools)(),
73
+ ];
74
+ // Handle tool listing
75
+ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
76
+ return { tools: allTools };
77
+ });
78
+ // Handle tool execution
79
+ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
80
+ const { name, arguments: args } = request.params;
81
+ try {
82
+ // Route to appropriate handler based on tool prefix
83
+ if (name.startsWith("logs_") || name === "query_logs") {
84
+ return await (0, logs_js_1.handleLogTool)(client, name, args);
85
+ }
86
+ if (name.startsWith("traces_") || name === "search_traces" || name === "get_trace") {
87
+ return await (0, traces_js_1.handleTraceTool)(client, name, args);
88
+ }
89
+ if (name.startsWith("metrics_") || name === "query_metrics") {
90
+ return await (0, metrics_js_1.handleMetricTool)(client, name, args);
91
+ }
92
+ if (name.startsWith("alerts_") || name === "list_alerts" || name === "acknowledge_alert" ||
93
+ name === "create_alert" || name === "update_alert" || name === "delete_alert") {
94
+ return await (0, alerts_js_1.handleAlertTool)(client, name, args);
95
+ }
96
+ if (name.startsWith("dashboard") || name === "list_dashboards" || name === "get_dashboard" ||
97
+ name === "create_dashboard" || name === "update_dashboard" || name === "delete_dashboard" ||
98
+ name === "add_panel" || name === "update_panel" || name === "delete_panel") {
99
+ return await (0, dashboards_js_1.handleDashboardTool)(client, name, args || {});
100
+ }
101
+ if (name.startsWith("sessions_") || name === "list_sessions" || name === "get_session") {
102
+ return await (0, sessions_js_1.handleSessionTool)(client, name, args);
103
+ }
104
+ if (name.startsWith("services_") || name === "get_service_health" || name === "list_services") {
105
+ return await (0, services_js_1.handleServiceTool)(client, name, args);
106
+ }
107
+ // Organization management tools (including billing)
108
+ if (name.startsWith("list_organizations") || name.startsWith("get_organization") ||
109
+ name.startsWith("invite_user") || name.startsWith("list_invitations") ||
110
+ name.startsWith("create_api_key") || name.startsWith("list_api_keys") ||
111
+ name.startsWith("revoke_api_key") || name.startsWith("get_usage") ||
112
+ name.startsWith("get_billing") || name.startsWith("get_data_usage") ||
113
+ name.startsWith("get_unused_metrics")) {
114
+ return await (0, organizations_js_1.handleOrganizationTool)(client, name, args || {});
115
+ }
116
+ // Data control tools (drop filters)
117
+ if (name.startsWith("list_drop_filters") || name.startsWith("create_drop_filter") ||
118
+ name.startsWith("delete_drop_filter") || name.startsWith("get_drop_filter")) {
119
+ return await (0, data_control_js_1.handleDataControlTool)(client, name, args || {});
120
+ }
121
+ // Setup and instrumentation tools
122
+ if (name.startsWith("generate_") || name === "validate_ingestion" || name === "get_onboarding_status") {
123
+ return await (0, setup_js_1.handleSetupTool)(client, name, args || {});
124
+ }
125
+ return {
126
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
127
+ isError: true,
128
+ };
129
+ }
130
+ catch (error) {
131
+ const message = error instanceof Error ? error.message : String(error);
132
+ return {
133
+ content: [{ type: "text", text: `Error executing ${name}: ${message}` }],
134
+ isError: true,
135
+ };
136
+ }
137
+ });
138
+ // Handle resource listing (for context/reference data)
139
+ server.setRequestHandler(types_js_1.ListResourcesRequestSchema, async () => {
140
+ return {
141
+ resources: [
142
+ {
143
+ uri: "qorrelate://services",
144
+ name: "Available Services",
145
+ description: "List of services sending telemetry to Qorrelate",
146
+ mimeType: "application/json",
147
+ },
148
+ {
149
+ uri: "qorrelate://alerts/active",
150
+ name: "Active Alerts",
151
+ description: "Currently firing alerts",
152
+ mimeType: "application/json",
153
+ },
154
+ {
155
+ uri: "qorrelate://onboarding",
156
+ name: "Onboarding Status",
157
+ description: "Organization setup progress and next steps",
158
+ mimeType: "application/json",
159
+ },
160
+ {
161
+ uri: "qorrelate://ingestion",
162
+ name: "Ingestion Status",
163
+ description: "Current telemetry ingestion status",
164
+ mimeType: "application/json",
165
+ },
166
+ {
167
+ uri: "qorrelate://billing",
168
+ name: "Current Billing",
169
+ description: "Current month billing and usage summary",
170
+ mimeType: "application/json",
171
+ },
172
+ {
173
+ uri: "qorrelate://drop-filters",
174
+ name: "Drop Filters",
175
+ description: "Active data drop filters for cost control",
176
+ mimeType: "application/json",
177
+ },
178
+ ],
179
+ };
180
+ });
181
+ // Handle resource reading
182
+ server.setRequestHandler(types_js_1.ReadResourceRequestSchema, async (request) => {
183
+ const { uri } = request.params;
184
+ try {
185
+ if (uri === "qorrelate://services") {
186
+ const services = await client.listServices();
187
+ return {
188
+ contents: [{
189
+ uri,
190
+ mimeType: "application/json",
191
+ text: JSON.stringify(services, null, 2),
192
+ }],
193
+ };
194
+ }
195
+ if (uri === "qorrelate://alerts/active") {
196
+ const alerts = await client.listAlerts({ active: true });
197
+ return {
198
+ contents: [{
199
+ uri,
200
+ mimeType: "application/json",
201
+ text: JSON.stringify(alerts, null, 2),
202
+ }],
203
+ };
204
+ }
205
+ if (uri === "qorrelate://onboarding") {
206
+ const status = await client.getSetupStatus();
207
+ return {
208
+ contents: [{
209
+ uri,
210
+ mimeType: "application/json",
211
+ text: JSON.stringify(status, null, 2),
212
+ }],
213
+ };
214
+ }
215
+ if (uri === "qorrelate://ingestion") {
216
+ const status = await client.getSetupValidate();
217
+ return {
218
+ contents: [{
219
+ uri,
220
+ mimeType: "application/json",
221
+ text: JSON.stringify(status, null, 2),
222
+ }],
223
+ };
224
+ }
225
+ throw new Error(`Unknown resource: ${uri}`);
226
+ }
227
+ catch (error) {
228
+ const message = error instanceof Error ? error.message : String(error);
229
+ throw new Error(`Failed to read resource ${uri}: ${message}`);
230
+ }
231
+ });
232
+ // Start the server
233
+ async function main() {
234
+ const transport = new stdio_js_1.StdioServerTransport();
235
+ await server.connect(transport);
236
+ console.error("Qorrelate MCP server running on stdio");
237
+ }
238
+ main().catch((error) => {
239
+ console.error("Fatal error:", error);
240
+ process.exit(1);
241
+ });
242
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}