@delorenj/mcp-server-trello 1.3.1 → 1.5.2

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.
@@ -0,0 +1,131 @@
1
+ import { TrelloClient } from '../trello-client.js';
2
+ /**
3
+ * Health endpoint result structure for MCP tools
4
+ */
5
+ interface HealthEndpointResult {
6
+ [x: string]: unknown;
7
+ content: Array<{
8
+ type: 'text';
9
+ text: string;
10
+ }>;
11
+ isError?: boolean;
12
+ }
13
+ /**
14
+ * THE MAGNIFICENT HEALTH ENDPOINTS COLLECTION! 🏥
15
+ *
16
+ * This class provides all the cardiovascular monitoring APIs that keep
17
+ * our Trello MCP organism in peak condition. It's like having a team of
18
+ * world-class physicians monitoring your API 24/7!
19
+ *
20
+ * Available endpoints:
21
+ * - /health - Quick health check
22
+ * - /health/detailed - Comprehensive diagnostic report
23
+ * - /health/metadata - Metadata consistency verification
24
+ * - /health/performance - Performance metrics analysis
25
+ * - /admin/repair - Automated repair capabilities (when available)
26
+ */
27
+ export declare class TrelloHealthEndpoints {
28
+ private healthMonitor;
29
+ private trelloClient;
30
+ constructor(trelloClient: TrelloClient);
31
+ /**
32
+ * GET /health
33
+ * Quick health status check - the digital pulse check!
34
+ * Perfect for load balancers and monitoring systems.
35
+ */
36
+ getBasicHealth(): Promise<HealthEndpointResult>;
37
+ /**
38
+ * GET /health/detailed
39
+ * Comprehensive health diagnostic - the full medical examination!
40
+ * Includes all subsystem checks, performance metrics, and recommendations.
41
+ */
42
+ getDetailedHealth(): Promise<HealthEndpointResult>;
43
+ /**
44
+ * GET /health/metadata
45
+ * Metadata consistency verification - the data integrity scanner!
46
+ * Checks for consistency between boards, lists, cards, and checklists.
47
+ */
48
+ getMetadataHealth(): Promise<HealthEndpointResult>;
49
+ /**
50
+ * GET /health/performance
51
+ * Performance metrics analysis - the cardiovascular stress test!
52
+ * Deep dive into response times, throughput, and system efficiency.
53
+ */
54
+ getPerformanceHealth(): Promise<HealthEndpointResult>;
55
+ /**
56
+ * POST /admin/repair
57
+ * Automated system repair - the digital emergency room!
58
+ * Attempts to automatically fix common issues when possible.
59
+ */
60
+ performRepair(): Promise<HealthEndpointResult>;
61
+ /**
62
+ * Perform comprehensive metadata consistency check
63
+ */
64
+ private performMetadataConsistencyCheck;
65
+ /**
66
+ * Generate metadata-specific recommendations
67
+ */
68
+ private generateMetadataRecommendations;
69
+ /**
70
+ * Analyze performance metrics in detail
71
+ */
72
+ private analyzePerformanceMetrics;
73
+ /**
74
+ * Calculate overall performance grade
75
+ */
76
+ private calculatePerformanceGrade;
77
+ /**
78
+ * Get performance status based on grade
79
+ */
80
+ private getPerformanceStatus;
81
+ /**
82
+ * Rate individual performance aspects
83
+ */
84
+ private rateResponseTime;
85
+ private rateSuccessRate;
86
+ private rateThroughput;
87
+ private rateRateLimitUtilization;
88
+ /**
89
+ * Generate performance-specific recommendations
90
+ */
91
+ private generatePerformanceRecommendations;
92
+ /**
93
+ * Attempt to repair common system issues
94
+ */
95
+ private attemptSystemRepair;
96
+ /**
97
+ * Create standardized error response
98
+ */
99
+ private createErrorResponse;
100
+ }
101
+ /**
102
+ * Zod schemas for health endpoint validation
103
+ */
104
+ export declare const HealthEndpointSchemas: {
105
+ basicHealth: {
106
+ title: string;
107
+ description: string;
108
+ inputSchema: {};
109
+ };
110
+ detailedHealth: {
111
+ title: string;
112
+ description: string;
113
+ inputSchema: {};
114
+ };
115
+ metadataHealth: {
116
+ title: string;
117
+ description: string;
118
+ inputSchema: {};
119
+ };
120
+ performanceHealth: {
121
+ title: string;
122
+ description: string;
123
+ inputSchema: {};
124
+ };
125
+ repair: {
126
+ title: string;
127
+ description: string;
128
+ inputSchema: {};
129
+ };
130
+ };
131
+ export {};
@@ -0,0 +1,476 @@
1
+ import { TrelloHealthMonitor, HealthStatus } from './health-monitor.js';
2
+ /**
3
+ * THE MAGNIFICENT HEALTH ENDPOINTS COLLECTION! 🏥
4
+ *
5
+ * This class provides all the cardiovascular monitoring APIs that keep
6
+ * our Trello MCP organism in peak condition. It's like having a team of
7
+ * world-class physicians monitoring your API 24/7!
8
+ *
9
+ * Available endpoints:
10
+ * - /health - Quick health check
11
+ * - /health/detailed - Comprehensive diagnostic report
12
+ * - /health/metadata - Metadata consistency verification
13
+ * - /health/performance - Performance metrics analysis
14
+ * - /admin/repair - Automated repair capabilities (when available)
15
+ */
16
+ export class TrelloHealthEndpoints {
17
+ constructor(trelloClient) {
18
+ this.trelloClient = trelloClient;
19
+ this.healthMonitor = new TrelloHealthMonitor(trelloClient);
20
+ }
21
+ /**
22
+ * GET /health
23
+ * Quick health status check - the digital pulse check!
24
+ * Perfect for load balancers and monitoring systems.
25
+ */
26
+ async getBasicHealth() {
27
+ try {
28
+ const healthReport = await this.healthMonitor.getSystemHealth(false);
29
+ const quickReport = {
30
+ status: healthReport.overall_status,
31
+ timestamp: healthReport.timestamp,
32
+ uptime_ms: healthReport.uptime_ms,
33
+ checks_passed: healthReport.checks.filter(c => c.status === HealthStatus.HEALTHY).length,
34
+ total_checks: healthReport.checks.length,
35
+ response_time_ms: Math.round(healthReport.performance_metrics.avg_response_time_ms),
36
+ success_rate: `${healthReport.performance_metrics.success_rate_percent}%`
37
+ };
38
+ return {
39
+ content: [{
40
+ type: 'text',
41
+ text: JSON.stringify(quickReport, null, 2)
42
+ }],
43
+ isError: healthReport.overall_status === HealthStatus.CRITICAL
44
+ };
45
+ }
46
+ catch (error) {
47
+ return this.createErrorResponse('Health check failed', error);
48
+ }
49
+ }
50
+ /**
51
+ * GET /health/detailed
52
+ * Comprehensive health diagnostic - the full medical examination!
53
+ * Includes all subsystem checks, performance metrics, and recommendations.
54
+ */
55
+ async getDetailedHealth() {
56
+ try {
57
+ const healthReport = await this.healthMonitor.getSystemHealth(true);
58
+ return {
59
+ content: [{
60
+ type: 'text',
61
+ text: JSON.stringify(healthReport, null, 2)
62
+ }],
63
+ isError: healthReport.overall_status === HealthStatus.CRITICAL
64
+ };
65
+ }
66
+ catch (error) {
67
+ return this.createErrorResponse('Detailed health check failed', error);
68
+ }
69
+ }
70
+ /**
71
+ * GET /health/metadata
72
+ * Metadata consistency verification - the data integrity scanner!
73
+ * Checks for consistency between boards, lists, cards, and checklists.
74
+ */
75
+ async getMetadataHealth() {
76
+ try {
77
+ const startTime = Date.now();
78
+ const metadataReport = await this.performMetadataConsistencyCheck();
79
+ const duration = Date.now() - startTime;
80
+ const result = {
81
+ status: metadataReport.consistent ? HealthStatus.HEALTHY : HealthStatus.DEGRADED,
82
+ timestamp: new Date().toISOString(),
83
+ duration_ms: duration,
84
+ metadata_consistency: metadataReport,
85
+ recommendations: this.generateMetadataRecommendations(metadataReport)
86
+ };
87
+ return {
88
+ content: [{
89
+ type: 'text',
90
+ text: JSON.stringify(result, null, 2)
91
+ }],
92
+ isError: !metadataReport.consistent
93
+ };
94
+ }
95
+ catch (error) {
96
+ return this.createErrorResponse('Metadata health check failed', error);
97
+ }
98
+ }
99
+ /**
100
+ * GET /health/performance
101
+ * Performance metrics analysis - the cardiovascular stress test!
102
+ * Deep dive into response times, throughput, and system efficiency.
103
+ */
104
+ async getPerformanceHealth() {
105
+ try {
106
+ const healthReport = await this.healthMonitor.getSystemHealth(false);
107
+ const performanceAnalysis = this.analyzePerformanceMetrics(healthReport);
108
+ return {
109
+ content: [{
110
+ type: 'text',
111
+ text: JSON.stringify(performanceAnalysis, null, 2)
112
+ }],
113
+ isError: performanceAnalysis.status === HealthStatus.CRITICAL
114
+ };
115
+ }
116
+ catch (error) {
117
+ return this.createErrorResponse('Performance health check failed', error);
118
+ }
119
+ }
120
+ /**
121
+ * POST /admin/repair
122
+ * Automated system repair - the digital emergency room!
123
+ * Attempts to automatically fix common issues when possible.
124
+ */
125
+ async performRepair() {
126
+ try {
127
+ const healthReport = await this.healthMonitor.getSystemHealth(true);
128
+ if (!healthReport.repair_available) {
129
+ return {
130
+ content: [{
131
+ type: 'text',
132
+ text: JSON.stringify({
133
+ repair_attempted: false,
134
+ reason: 'No repairable issues detected or system in critical state',
135
+ status: healthReport.overall_status,
136
+ recommendations: healthReport.recommendations
137
+ }, null, 2)
138
+ }]
139
+ };
140
+ }
141
+ const repairResult = await this.attemptSystemRepair(healthReport);
142
+ return {
143
+ content: [{
144
+ type: 'text',
145
+ text: JSON.stringify(repairResult, null, 2)
146
+ }],
147
+ isError: !repairResult.success
148
+ };
149
+ }
150
+ catch (error) {
151
+ return this.createErrorResponse('System repair failed', error);
152
+ }
153
+ }
154
+ /**
155
+ * Perform comprehensive metadata consistency check
156
+ */
157
+ async performMetadataConsistencyCheck() {
158
+ const results = {
159
+ consistent: true,
160
+ issues: [],
161
+ statistics: {},
162
+ last_check: new Date().toISOString()
163
+ };
164
+ try {
165
+ // Check if we have an active board
166
+ const boardId = this.trelloClient.activeBoardId;
167
+ if (!boardId) {
168
+ results.consistent = false;
169
+ results.issues.push('No active board configured');
170
+ return results;
171
+ }
172
+ // Get board information
173
+ const board = await this.trelloClient.getBoardById(boardId);
174
+ if (board.closed) {
175
+ results.consistent = false;
176
+ results.issues.push('Active board is closed/archived');
177
+ }
178
+ // Get lists and check consistency
179
+ const lists = await this.trelloClient.getLists();
180
+ results.statistics.total_lists = lists.length;
181
+ results.statistics.open_lists = lists.filter(l => !l.closed).length;
182
+ results.statistics.closed_lists = lists.filter(l => l.closed).length;
183
+ // Check for empty board
184
+ if (lists.length === 0) {
185
+ results.issues.push('Board has no lists');
186
+ }
187
+ // Get user cards for comparison
188
+ const myCards = await this.trelloClient.getMyCards();
189
+ results.statistics.total_user_cards = myCards.length;
190
+ results.statistics.open_user_cards = myCards.filter(c => !c.closed).length;
191
+ // Check workspace consistency
192
+ const workspaceId = this.trelloClient.activeWorkspaceId;
193
+ if (workspaceId) {
194
+ try {
195
+ const workspace = await this.trelloClient.getWorkspaceById(workspaceId);
196
+ results.statistics.active_workspace = workspace.displayName;
197
+ }
198
+ catch (error) {
199
+ results.consistent = false;
200
+ results.issues.push('Active workspace is inaccessible');
201
+ }
202
+ }
203
+ // Check checklist accessibility (non-critical)
204
+ try {
205
+ const acceptanceCriteria = await this.trelloClient.getAcceptanceCriteria();
206
+ results.statistics.acceptance_criteria_items = acceptanceCriteria.length;
207
+ }
208
+ catch (error) {
209
+ // This is not critical for consistency
210
+ results.statistics.checklist_note = 'Acceptance Criteria checklist not found (non-critical)';
211
+ }
212
+ }
213
+ catch (error) {
214
+ results.consistent = false;
215
+ results.issues.push(`Metadata check error: ${error instanceof Error ? error.message : 'Unknown error'}`);
216
+ }
217
+ return results;
218
+ }
219
+ /**
220
+ * Generate metadata-specific recommendations
221
+ */
222
+ generateMetadataRecommendations(metadataReport) {
223
+ const recommendations = [];
224
+ if (metadataReport.issues.some((issue) => issue.includes('No active board'))) {
225
+ recommendations.push('Use set_active_board tool to configure an active board');
226
+ }
227
+ if (metadataReport.issues.some((issue) => issue.includes('closed/archived'))) {
228
+ recommendations.push('Set a different active board that is not closed/archived');
229
+ }
230
+ if (metadataReport.issues.some((issue) => issue.includes('no lists'))) {
231
+ recommendations.push('Create lists in your board using add_list_to_board tool');
232
+ }
233
+ if (metadataReport.statistics.total_user_cards === 0) {
234
+ recommendations.push('Consider assigning yourself to some cards for better workflow tracking');
235
+ }
236
+ if (recommendations.length === 0) {
237
+ recommendations.push('Metadata consistency is excellent - no action required');
238
+ }
239
+ return recommendations;
240
+ }
241
+ /**
242
+ * Analyze performance metrics in detail
243
+ */
244
+ analyzePerformanceMetrics(healthReport) {
245
+ const metrics = healthReport.performance_metrics;
246
+ const performanceGrade = this.calculatePerformanceGrade(metrics);
247
+ return {
248
+ status: this.getPerformanceStatus(performanceGrade),
249
+ timestamp: healthReport.timestamp,
250
+ performance_grade: performanceGrade,
251
+ metrics: {
252
+ ...metrics,
253
+ uptime_hours: Math.round(healthReport.uptime_ms / (1000 * 60 * 60) * 100) / 100,
254
+ health_check_duration_ms: healthReport.checks.reduce((sum, c) => sum + c.duration_ms, 0)
255
+ },
256
+ analysis: {
257
+ response_time_rating: this.rateResponseTime(metrics.avg_response_time_ms),
258
+ success_rate_rating: this.rateSuccessRate(metrics.success_rate_percent),
259
+ throughput_rating: this.rateThroughput(metrics.requests_per_minute),
260
+ rate_limit_health: this.rateRateLimitUtilization(metrics.rate_limit_utilization_percent)
261
+ },
262
+ recommendations: this.generatePerformanceRecommendations(metrics)
263
+ };
264
+ }
265
+ /**
266
+ * Calculate overall performance grade
267
+ */
268
+ calculatePerformanceGrade(metrics) {
269
+ let score = 0;
270
+ // Response time scoring (40% weight)
271
+ if (metrics.avg_response_time_ms < 200)
272
+ score += 40;
273
+ else if (metrics.avg_response_time_ms < 500)
274
+ score += 35;
275
+ else if (metrics.avg_response_time_ms < 1000)
276
+ score += 25;
277
+ else if (metrics.avg_response_time_ms < 2000)
278
+ score += 15;
279
+ else
280
+ score += 5;
281
+ // Success rate scoring (35% weight)
282
+ if (metrics.success_rate_percent >= 99)
283
+ score += 35;
284
+ else if (metrics.success_rate_percent >= 95)
285
+ score += 30;
286
+ else if (metrics.success_rate_percent >= 90)
287
+ score += 20;
288
+ else if (metrics.success_rate_percent >= 80)
289
+ score += 10;
290
+ else
291
+ score += 5;
292
+ // Rate limit utilization scoring (25% weight)
293
+ if (metrics.rate_limit_utilization_percent < 50)
294
+ score += 25;
295
+ else if (metrics.rate_limit_utilization_percent < 70)
296
+ score += 20;
297
+ else if (metrics.rate_limit_utilization_percent < 85)
298
+ score += 15;
299
+ else if (metrics.rate_limit_utilization_percent < 95)
300
+ score += 10;
301
+ else
302
+ score += 5;
303
+ if (score >= 90)
304
+ return 'A+';
305
+ if (score >= 80)
306
+ return 'A';
307
+ if (score >= 70)
308
+ return 'B';
309
+ if (score >= 60)
310
+ return 'C';
311
+ if (score >= 50)
312
+ return 'D';
313
+ return 'F';
314
+ }
315
+ /**
316
+ * Get performance status based on grade
317
+ */
318
+ getPerformanceStatus(grade) {
319
+ if (['A+', 'A', 'B'].includes(grade))
320
+ return HealthStatus.HEALTHY;
321
+ if (['C', 'D'].includes(grade))
322
+ return HealthStatus.DEGRADED;
323
+ return HealthStatus.CRITICAL;
324
+ }
325
+ /**
326
+ * Rate individual performance aspects
327
+ */
328
+ rateResponseTime(avgMs) {
329
+ if (avgMs < 200)
330
+ return 'excellent';
331
+ if (avgMs < 500)
332
+ return 'good';
333
+ if (avgMs < 1000)
334
+ return 'fair';
335
+ if (avgMs < 2000)
336
+ return 'slow';
337
+ return 'very_slow';
338
+ }
339
+ rateSuccessRate(percent) {
340
+ if (percent >= 99)
341
+ return 'excellent';
342
+ if (percent >= 95)
343
+ return 'good';
344
+ if (percent >= 90)
345
+ return 'fair';
346
+ if (percent >= 80)
347
+ return 'poor';
348
+ return 'critical';
349
+ }
350
+ rateThroughput(requestsPerMin) {
351
+ if (requestsPerMin > 30)
352
+ return 'high';
353
+ if (requestsPerMin > 15)
354
+ return 'moderate';
355
+ if (requestsPerMin > 5)
356
+ return 'low';
357
+ return 'very_low';
358
+ }
359
+ rateRateLimitUtilization(percent) {
360
+ if (percent < 50)
361
+ return 'optimal';
362
+ if (percent < 70)
363
+ return 'moderate';
364
+ if (percent < 85)
365
+ return 'high';
366
+ if (percent < 95)
367
+ return 'near_limit';
368
+ return 'critical';
369
+ }
370
+ /**
371
+ * Generate performance-specific recommendations
372
+ */
373
+ generatePerformanceRecommendations(metrics) {
374
+ const recommendations = [];
375
+ if (metrics.avg_response_time_ms > 1000) {
376
+ recommendations.push('High response times detected - check network connectivity and Trello API status');
377
+ }
378
+ if (metrics.success_rate_percent < 95) {
379
+ recommendations.push('Low success rate - investigate error patterns and implement retry logic');
380
+ }
381
+ if (metrics.rate_limit_utilization_percent > 80) {
382
+ recommendations.push('High rate limit utilization - consider implementing request caching or batching');
383
+ }
384
+ if (metrics.requests_per_minute < 1) {
385
+ recommendations.push('Very low API usage - ensure the MCP server is being actively used');
386
+ }
387
+ if (recommendations.length === 0) {
388
+ recommendations.push('Performance is excellent - maintain current usage patterns');
389
+ }
390
+ return recommendations;
391
+ }
392
+ /**
393
+ * Attempt to repair common system issues
394
+ */
395
+ async attemptSystemRepair(healthReport) {
396
+ const result = {
397
+ attempted: true,
398
+ success: false,
399
+ actions_taken: [],
400
+ message: ''
401
+ };
402
+ try {
403
+ // Check for repairable issues
404
+ const boardCheck = healthReport.checks.find(c => c.name === 'board_access');
405
+ if (boardCheck?.status === HealthStatus.DEGRADED &&
406
+ boardCheck.message.includes('No active board configured')) {
407
+ // Attempt to set first available board as active
408
+ const boards = await this.trelloClient.listBoards();
409
+ const openBoards = boards.filter(b => !b.closed);
410
+ if (openBoards.length > 0) {
411
+ await this.trelloClient.setActiveBoard(openBoards[0].id);
412
+ result.actions_taken.push(`Set active board to "${openBoards[0].name}"`);
413
+ }
414
+ }
415
+ // Add more repair logic here as needed
416
+ result.success = result.actions_taken.length > 0;
417
+ result.message = result.success
418
+ ? 'System repair completed successfully'
419
+ : 'No repairable issues found';
420
+ }
421
+ catch (error) {
422
+ result.success = false;
423
+ result.message = `Repair failed: ${error instanceof Error ? error.message : 'Unknown error'}`;
424
+ }
425
+ return result;
426
+ }
427
+ /**
428
+ * Create standardized error response
429
+ */
430
+ createErrorResponse(message, error) {
431
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
432
+ return {
433
+ content: [{
434
+ type: 'text',
435
+ text: JSON.stringify({
436
+ error: message,
437
+ details: errorMessage,
438
+ timestamp: new Date().toISOString(),
439
+ status: HealthStatus.CRITICAL
440
+ }, null, 2)
441
+ }],
442
+ isError: true
443
+ };
444
+ }
445
+ }
446
+ /**
447
+ * Zod schemas for health endpoint validation
448
+ */
449
+ export const HealthEndpointSchemas = {
450
+ basicHealth: {
451
+ title: 'Get Basic Health',
452
+ description: 'Get quick system health status for monitoring and load balancing',
453
+ inputSchema: {}
454
+ },
455
+ detailedHealth: {
456
+ title: 'Get Detailed Health',
457
+ description: 'Get comprehensive system health diagnostic with all subsystem checks',
458
+ inputSchema: {}
459
+ },
460
+ metadataHealth: {
461
+ title: 'Get Metadata Health',
462
+ description: 'Verify metadata consistency between boards, lists, cards, and checklists',
463
+ inputSchema: {}
464
+ },
465
+ performanceHealth: {
466
+ title: 'Get Performance Health',
467
+ description: 'Get detailed performance metrics and analysis',
468
+ inputSchema: {}
469
+ },
470
+ repair: {
471
+ title: 'Perform System Repair',
472
+ description: 'Attempt to automatically repair common system issues',
473
+ inputSchema: {}
474
+ }
475
+ };
476
+ //# sourceMappingURL=health-endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-endpoints.js","sourceRoot":"","sources":["../../src/health/health-endpoints.ts"],"names":[],"mappings":"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"}