@delorenj/mcp-server-trello 1.6.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@delorenj/mcp-server-trello",
3
3
  "mcpName": "io.github.delorenj/mcp-server-trello",
4
- "version": "1.6.2",
4
+ "version": "1.7.0",
5
5
  "description": "An MCP server for Trello boards, powered by Bun for maximum performance.",
6
6
  "keywords": [
7
7
  "mcp",
@@ -24,29 +24,29 @@
24
24
  },
25
25
  "homepage": "https://github.com/delorenj/mcp-server-trello#readme",
26
26
  "dependencies": {
27
- "@modelcontextprotocol/sdk": "^1.0.4",
28
- "axios": "^1.6.2",
29
- "form-data": "^4.0.4",
27
+ "@modelcontextprotocol/sdk": "^1.24.3",
28
+ "axios": "^1.13.2",
29
+ "form-data": "^4.0.5",
30
30
  "mcp-evals": "^1.0.18",
31
- "zod": "^3.22.4"
31
+ "zod": "^3.25.76"
32
32
  },
33
33
  "devDependencies": {
34
- "@ai-sdk/openai": "^1.3.23",
34
+ "@ai-sdk/openai": "^1.3.24",
35
35
  "bun-types": "latest",
36
- "@typescript-eslint/eslint-plugin": "^6.12.0",
37
- "@typescript-eslint/parser": "^6.12.0",
38
- "eslint": "^8.54.0",
39
- "eslint-config-prettier": "^9.0.0",
40
- "eslint-plugin-prettier": "^5.0.1",
41
- "prettier": "^3.1.0",
42
- "terser": "^5.24.0",
43
- "typescript": "^5.3.2"
36
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
37
+ "@typescript-eslint/parser": "^6.21.0",
38
+ "eslint": "^8.57.1",
39
+ "eslint-config-prettier": "^9.1.2",
40
+ "eslint-plugin-prettier": "^5.5.4",
41
+ "prettier": "^3.7.4",
42
+ "terser": "^5.44.1",
43
+ "typescript": "^5.9.3"
44
44
  },
45
45
  "files": [
46
46
  "build/**/*"
47
47
  ],
48
48
  "bin": {
49
- "mcp-server-trello": "./build/index.js"
49
+ "mcp-server-trello": "build/index.js"
50
50
  },
51
51
  "type": "module",
52
52
  "engines": {
@@ -56,6 +56,14 @@
56
56
  "access": "public"
57
57
  },
58
58
  "scripts": {
59
- "build": "bunx tsc"
59
+ "build": "bun build src/index.ts --outdir ./build --target node --format esm",
60
+ "build:types": "tsc --emitDeclarationOnly || echo 'Warning: Type declarations generation failed, but build succeeded'",
61
+ "build:prod": "npm run build",
62
+ "dev": "bun --watch src/index.ts",
63
+ "versionbump": "bun ./scripts/versionbump.js",
64
+ "versionbump:patch": "bun run versionbump --patch",
65
+ "versionbump:minor": "bun run versionbump --minor",
66
+ "versionbump:major": "bun run versionbump --major",
67
+ "publish": "bun run build && npm publish"
60
68
  }
61
69
  }
@@ -1,5 +0,0 @@
1
- import { EvalConfig } from 'mcp-evals';
2
- import { EvalFunction } from 'mcp-evals';
3
- declare const config: EvalConfig;
4
- export default config;
5
- export declare const evals: EvalFunction[];
@@ -1,72 +0,0 @@
1
- //evals.ts
2
- import { openai } from '@ai-sdk/openai';
3
- import { grade } from 'mcp-evals';
4
- const get_cards_by_list_idEval = {
5
- name: 'get_cards_by_list_id Tool Evaluation',
6
- description: 'Evaluates the get_cards_by_list_id tool functionality',
7
- run: async () => {
8
- const result = await grade(openai('gpt-4'), 'Can you fetch all cards from the Trello list with ID abc123?');
9
- return JSON.parse(result);
10
- },
11
- };
12
- const get_listsEval = {
13
- name: 'get_lists Tool Evaluation',
14
- description: 'Evaluates the get_lists tool by retrieving all lists from a specified board',
15
- run: async () => {
16
- const result = await grade(openai('gpt-4'), 'Please retrieve all lists from the board with ID 12345 and provide their names.');
17
- return JSON.parse(result);
18
- },
19
- };
20
- const get_recent_activityEvalFunction = {
21
- name: 'get_recent_activity Tool Evaluation',
22
- description: 'Evaluates the ability to fetch recent activity on the Trello board',
23
- run: async () => {
24
- const result = await grade(openai('gpt-4'), 'Fetch the recent activity on the Trello board, limit it to 5 items');
25
- return JSON.parse(result);
26
- },
27
- };
28
- const add_card_to_listEval = {
29
- name: 'add_card_to_listEval',
30
- description: 'Evaluates the add_card_to_list tool',
31
- run: async () => {
32
- const result = await grade(openai('gpt-4'), "Please add a new card named 'Demo Card' to the list with ID 'abc123', with a description of 'This is a test card', due date '2023-12-31T12:00:00Z', start date '2025-08-05', and a label 'priority'.");
33
- return JSON.parse(result);
34
- },
35
- };
36
- const update_card_detailsEval = {
37
- name: 'update_card_details Evaluation',
38
- description: 'Evaluates the update_card_details tool functionality',
39
- run: async () => {
40
- const result = await grade(openai('gpt-4'), "Please update the card with ID 'abc123' to have the name 'Updated Card Name', the description 'New description for the card', a due date of '2024-01-01T10:00:00Z', start date '2025-08-05', and labels ['priority','review'].");
41
- return JSON.parse(result);
42
- },
43
- };
44
- const mark_card_completeEval = {
45
- name: 'mark_card_complete Evaluation',
46
- description: 'Evaluates the ability to mark a card as complete using dueComplete',
47
- run: async () => {
48
- const result = await grade(openai('gpt-4'), "Please mark the card with ID 'xyz789' as complete by setting dueComplete to true.");
49
- return JSON.parse(result);
50
- },
51
- };
52
- const config = {
53
- model: openai('gpt-4'),
54
- evals: [
55
- get_cards_by_list_idEval,
56
- get_listsEval,
57
- get_recent_activityEvalFunction,
58
- add_card_to_listEval,
59
- update_card_detailsEval,
60
- mark_card_completeEval,
61
- ],
62
- };
63
- export default config;
64
- export const evals = [
65
- get_cards_by_list_idEval,
66
- get_listsEval,
67
- get_recent_activityEvalFunction,
68
- add_card_to_listEval,
69
- update_card_detailsEval,
70
- mark_card_completeEval,
71
- ];
72
- //# sourceMappingURL=evals.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evals.js","sourceRoot":"","sources":["../../src/evals/evals.ts"],"names":[],"mappings":"AAAA,UAAU;AAGV,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAgB,MAAM,WAAW,CAAC;AAEhD,MAAM,wBAAwB,GAAiB;IAC7C,IAAI,EAAE,sCAAsC;IAC5C,WAAW,EAAE,uDAAuD;IACpE,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,8DAA8D,CAC/D,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAiB;IAClC,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,6EAA6E;IAC1F,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,iFAAiF,CAClF,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,+BAA+B,GAAiB;IACpD,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EAAE,oEAAoE;IACjF,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,oEAAoE,CACrE,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,oBAAoB,GAAiB;IACzC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,qCAAqC;IAClD,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,sMAAsM,CACvM,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,uBAAuB,GAAiB;IAC5C,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,sDAAsD;IACnE,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,gOAAgO,CACjO,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAiB;IAC3C,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,oEAAoE;IACjF,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,mFAAmF,CACpF,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,GAAe;IACzB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,KAAK,EAAE;QACL,wBAAwB;QACxB,aAAa;QACb,+BAA+B;QAC/B,oBAAoB;QACpB,uBAAuB;QACvB,sBAAsB;KACvB;CACF,CAAC;AAEF,eAAe,MAAM,CAAC;AAEtB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,wBAAwB;IACxB,aAAa;IACb,+BAA+B;IAC/B,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;CACvB,CAAC"}
@@ -1,122 +0,0 @@
1
- export interface TrelloCheckItem {
2
- id: string;
3
- name: string;
4
- state: 'complete' | 'incomplete';
5
- pos: number;
6
- due?: string | null;
7
- dueReminder?: number | null;
8
- idMember?: string | null;
9
- }
10
- export interface TrelloChecklist {
11
- id: string;
12
- name: string;
13
- idCard: string;
14
- pos: number;
15
- checkItems: TrelloCheckItem[];
16
- }
17
- export interface TrelloLabelDetails {
18
- id: string;
19
- idBoard: string;
20
- name: string;
21
- color: string;
22
- }
23
- export interface TrelloComment {
24
- id: string;
25
- date: string;
26
- data: {
27
- text: string;
28
- card?: {
29
- id: string;
30
- name: string;
31
- };
32
- };
33
- memberCreator: {
34
- id: string;
35
- fullName: string;
36
- username: string;
37
- avatarUrl?: string;
38
- };
39
- }
40
- export interface TrelloCustomField {
41
- id: string;
42
- name: string;
43
- type: string;
44
- value?: any;
45
- }
46
- export interface TrelloBadges {
47
- attachmentsByType?: {
48
- trello?: {
49
- board: number;
50
- card: number;
51
- };
52
- };
53
- location: boolean;
54
- votes: number;
55
- viewingMemberVoted: boolean;
56
- subscribed: boolean;
57
- fogbugz: string;
58
- checkItems: number;
59
- checkItemsChecked: number;
60
- checkItemsEarliestDue?: string | null;
61
- comments: number;
62
- attachments: number;
63
- description: boolean;
64
- due?: string | null;
65
- dueComplete: boolean;
66
- start?: string | null;
67
- }
68
- export interface TrelloCover {
69
- idAttachment?: string | null;
70
- color?: string | null;
71
- idUploadedBackground?: string | null;
72
- size: 'normal' | 'full';
73
- brightness: 'light' | 'dark';
74
- isTemplate: boolean;
75
- }
76
- export interface EnhancedTrelloCard {
77
- id: string;
78
- name: string;
79
- desc: string;
80
- descData?: {
81
- emoji?: Record<string, any>;
82
- };
83
- due: string | null;
84
- dueComplete: boolean;
85
- dueReminder: number | null;
86
- start: string | null;
87
- idList: string;
88
- idBoard: string;
89
- closed: boolean;
90
- url: string;
91
- shortUrl: string;
92
- dateLastActivity: string;
93
- pos: number;
94
- labels: TrelloLabelDetails[];
95
- idLabels: string[];
96
- attachments: TrelloAttachment[];
97
- checklists: TrelloChecklist[];
98
- members: TrelloMember[];
99
- idMembers: string[];
100
- comments: TrelloComment[];
101
- customFieldItems?: TrelloCustomField[];
102
- badges: TrelloBadges;
103
- cover: TrelloCover;
104
- list?: {
105
- id: string;
106
- name: string;
107
- };
108
- board?: {
109
- id: string;
110
- name: string;
111
- url: string;
112
- };
113
- }
114
- export declare class EnhancedTrelloClient {
115
- getCard(cardId: string, includeMarkdown?: boolean): Promise<EnhancedTrelloCard | string>;
116
- private formatCardAsMarkdown;
117
- private formatFileSize;
118
- }
119
- export declare function validateGetCardRequest(args: Record<string, unknown>): {
120
- cardId: string;
121
- includeMarkdown?: boolean;
122
- };
@@ -1,225 +0,0 @@
1
- // Enhanced get_card implementation for comprehensive data extraction
2
- // Add to TrelloClient class
3
- export class EnhancedTrelloClient {
4
- async getCard(cardId, includeMarkdown = false) {
5
- return this.handleRequest(async () => {
6
- const response = await this.axiosInstance.get(`/cards/${cardId}`, {
7
- params: {
8
- attachments: true,
9
- checklists: 'all',
10
- checkItemStates: true,
11
- members: true,
12
- membersVoted: true,
13
- labels: true,
14
- actions: 'commentCard',
15
- actions_limit: 100,
16
- fields: 'all',
17
- customFieldItems: true,
18
- list: true,
19
- board: true,
20
- stickers: true,
21
- pluginData: true
22
- }
23
- });
24
- const cardData = response.data;
25
- if (includeMarkdown) {
26
- return this.formatCardAsMarkdown(cardData);
27
- }
28
- return cardData;
29
- });
30
- }
31
- formatCardAsMarkdown(card) {
32
- let markdown = '';
33
- // Title and basic info
34
- markdown += `# ${card.name}\n\n`;
35
- // Board and List context
36
- if (card.board && card.list) {
37
- markdown += `📍 **Board**: [${card.board.name}](${card.board.url}) > **List**: ${card.list.name}\n\n`;
38
- }
39
- // Labels
40
- if (card.labels && card.labels.length > 0) {
41
- markdown += `## 🏷️ Labels\n`;
42
- card.labels.forEach(label => {
43
- markdown += `- \`${label.color}\` ${label.name || '(no name)'}\n`;
44
- });
45
- markdown += '\n';
46
- }
47
- // Due date
48
- if (card.due) {
49
- const dueDate = new Date(card.due);
50
- const status = card.dueComplete ? '✅ Complete' : '⏰ Due';
51
- markdown += `## 📅 Due Date\n${status}: ${dueDate.toLocaleString()}\n\n`;
52
- }
53
- // Members
54
- if (card.members && card.members.length > 0) {
55
- markdown += `## 👥 Members\n`;
56
- card.members.forEach(member => {
57
- markdown += `- @${member.username} (${member.fullName})\n`;
58
- });
59
- markdown += '\n';
60
- }
61
- // Description
62
- if (card.desc) {
63
- markdown += `## 📝 Description\n`;
64
- markdown += `${card.desc}\n\n`;
65
- // Parse for inline images (Trello uses markdown-like syntax)
66
- // Look for patterns like ![alt text](image url)
67
- const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g;
68
- const images = card.desc.match(imageRegex);
69
- if (images) {
70
- markdown += `### Inline Images in Description\n`;
71
- images.forEach((img, index) => {
72
- const match = img.match(/!\[([^\]]*)\]\(([^)]+)\)/);
73
- if (match) {
74
- markdown += `${index + 1}. ${match[1] || 'Image'}: ${match[2]}\n`;
75
- }
76
- });
77
- markdown += '\n';
78
- }
79
- }
80
- // Checklists
81
- if (card.checklists && card.checklists.length > 0) {
82
- markdown += `## ✅ Checklists\n`;
83
- card.checklists.forEach(checklist => {
84
- const completed = checklist.checkItems.filter(item => item.state === 'complete').length;
85
- const total = checklist.checkItems.length;
86
- markdown += `### ${checklist.name} (${completed}/${total})\n`;
87
- // Sort by position
88
- const sortedItems = [...checklist.checkItems].sort((a, b) => a.pos - b.pos);
89
- sortedItems.forEach(item => {
90
- const checkbox = item.state === 'complete' ? '[x]' : '[ ]';
91
- markdown += `- ${checkbox} ${item.name}`;
92
- if (item.due) {
93
- const itemDue = new Date(item.due);
94
- markdown += ` (Due: ${itemDue.toLocaleDateString()})`;
95
- }
96
- if (item.idMember) {
97
- const member = card.members?.find(m => m.id === item.idMember);
98
- if (member) {
99
- markdown += ` - @${member.username}`;
100
- }
101
- }
102
- markdown += '\n';
103
- });
104
- markdown += '\n';
105
- });
106
- }
107
- // Attachments
108
- if (card.attachments && card.attachments.length > 0) {
109
- markdown += `## 📎 Attachments (${card.attachments.length})\n`;
110
- card.attachments.forEach((attachment, index) => {
111
- markdown += `### ${index + 1}. ${attachment.name}\n`;
112
- markdown += `- **URL**: ${attachment.url}\n`;
113
- if (attachment.fileName) {
114
- markdown += `- **File**: ${attachment.fileName}`;
115
- if (attachment.bytes) {
116
- const size = this.formatFileSize(attachment.bytes);
117
- markdown += ` (${size})`;
118
- }
119
- markdown += '\n';
120
- }
121
- if (attachment.mimeType) {
122
- markdown += `- **Type**: ${attachment.mimeType}\n`;
123
- }
124
- markdown += `- **Added**: ${new Date(attachment.date).toLocaleString()}\n`;
125
- // Image preview
126
- if (attachment.previews && attachment.previews.length > 0) {
127
- const preview = attachment.previews[0];
128
- markdown += `- **Preview**: ![${attachment.name}](${preview.url})\n`;
129
- }
130
- markdown += '\n';
131
- });
132
- }
133
- // Comments
134
- if (card.comments && card.comments.length > 0) {
135
- markdown += `## 💬 Comments (${card.comments.length})\n`;
136
- card.comments.forEach(comment => {
137
- const date = new Date(comment.date);
138
- markdown += `### ${comment.memberCreator.fullName} (@${comment.memberCreator.username}) - ${date.toLocaleString()}\n`;
139
- markdown += `${comment.data.text}\n\n`;
140
- });
141
- }
142
- // Statistics
143
- if (card.badges) {
144
- markdown += `## 📊 Statistics\n`;
145
- if (card.badges.checkItems > 0) {
146
- markdown += `- **Checklist Items**: ${card.badges.checkItemsChecked}/${card.badges.checkItems} completed\n`;
147
- }
148
- if (card.badges.comments > 0) {
149
- markdown += `- **Comments**: ${card.badges.comments}\n`;
150
- }
151
- if (card.badges.attachments > 0) {
152
- markdown += `- **Attachments**: ${card.badges.attachments}\n`;
153
- }
154
- if (card.badges.votes > 0) {
155
- markdown += `- **Votes**: ${card.badges.votes}\n`;
156
- }
157
- markdown += '\n';
158
- }
159
- // Links
160
- markdown += `## 🔗 Links\n`;
161
- markdown += `- **Card URL**: ${card.url}\n`;
162
- markdown += `- **Short URL**: ${card.shortUrl}\n\n`;
163
- // Metadata
164
- markdown += `---\n`;
165
- markdown += `*Last Activity: ${new Date(card.dateLastActivity).toLocaleString()}*\n`;
166
- markdown += `*Card ID: ${card.id}*\n`;
167
- return markdown;
168
- }
169
- formatFileSize(bytes) {
170
- const sizes = ['Bytes', 'KB', 'MB', 'GB'];
171
- if (bytes === 0)
172
- return '0 Bytes';
173
- const i = Math.floor(Math.log(bytes) / Math.log(1024));
174
- return Math.round(bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i];
175
- }
176
- }
177
- // Validator for the get_card request
178
- export function validateGetCardRequest(args) {
179
- if (!args.cardId || typeof args.cardId !== 'string') {
180
- throw new Error('cardId is required and must be a string');
181
- }
182
- const includeMarkdown = args.includeMarkdown === true || args.includeMarkdown === 'true';
183
- return {
184
- cardId: args.cardId,
185
- includeMarkdown
186
- };
187
- }
188
- // Add to index.ts tool list
189
- const getCardTool = {
190
- name: 'get_card',
191
- description: 'Get comprehensive details of a specific Trello card including checklists, attachments, labels, members, and comments',
192
- inputSchema: {
193
- type: 'object',
194
- properties: {
195
- cardId: {
196
- type: 'string',
197
- description: 'ID of the Trello card (can be short ID or full ID)',
198
- },
199
- includeMarkdown: {
200
- type: 'boolean',
201
- description: 'Return the card data formatted as markdown (default: false)',
202
- },
203
- },
204
- required: ['cardId'],
205
- },
206
- };
207
- // Add to the switch statement in index.ts
208
- /*
209
- case 'get_card': {
210
- const validArgs = validateGetCardRequest(args);
211
- const cardData = await this.trelloClient.getCard(
212
- validArgs.cardId,
213
- validArgs.includeMarkdown
214
- );
215
- return {
216
- content: [{
217
- type: 'text',
218
- text: typeof cardData === 'string'
219
- ? cardData
220
- : JSON.stringify(cardData, null, 2)
221
- }],
222
- };
223
- }
224
- */
225
- //# sourceMappingURL=get-card-implementation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-card-implementation.js","sourceRoot":"","sources":["../src/get-card-implementation.ts"],"names":[],"mappings":"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"}
@@ -1,131 +0,0 @@
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 {};