@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.
package/README.md CHANGED
@@ -1,163 +1,105 @@
1
1
  # MCP Server Trello
2
2
 
3
3
  [![Verified on MseeP](https://mseep.ai/badge.svg)](https://mseep.ai/app/27359682-7632-4ba7-981d-7dfecadf1c4b)
4
+ [![MCP Registry](https://img.shields.io/badge/MCP-Registry-blue)](https://registry.modelcontextprotocol.io/servers/io.github.delorenj/mcp-server-trello)
5
+ [![npm version](https://badge.fury.io/js/%40delorenj%2Fmcp-server-trello.svg)](https://badge.fury.io/js/%40delorenj%2Fmcp-server-trello)
4
6
 
5
7
  <a href="https://glama.ai/mcp/servers/klqkamy7wt"><img width="380" height="200" src="https://glama.ai/mcp/servers/klqkamy7wt/badge" alt="Server Trello MCP server" /></a>
6
8
 
7
9
  A Model Context Protocol (MCP) server that provides tools for interacting with Trello boards. This server enables seamless integration with Trello's API while handling rate limiting, type safety, and error handling automatically.
8
10
 
9
- ## 🎉 New in v1.2.0: Complete Checklist Management Suite!
11
+ ## 🎉 New in v1.5.0: Now Powered by Bun!
10
12
 
11
- **Comprehensive Checklist Tools are here!** 🚀 Now you can fully manage Trello checklists with 5 powerful new tools! Search, create, and track checklist items across your boards. Perfect for managing acceptance criteria, development tasks, and project milestones!
13
+ **This project is now powered by Bun!** 🚀 We've migrated the entire project to the Bun runtime, resulting in a 2.8-4.4x performance boost. All existing `npx`, `pnpx`, and `npm` commands will **continue to work perfectly**.
12
14
 
13
- ### ✨ New Checklist Tools:
14
- - 📋 **`get_checklist_items`** - Retrieve all items from any checklist by name
15
- - **`add_checklist_item`** - Add new items to existing checklists
16
- - 🔍 **`find_checklist_items_by_description`** - Search checklist items by text content
17
- - **`get_acceptance_criteria`** - Quick access to "Acceptance Criteria" checklists
18
- - 📊 **`get_checklist_by_name`** - Get complete checklist with completion percentage
15
+ ### ✨ New in This Release:
16
+
17
+ - 🚀 **Performance Boost**: Enjoy a faster, more responsive server.
18
+ - BUN **Bun-Powered**: The project now runs on the lightning-fast Bun runtime.
19
+ - 📖 **Comprehensive Examples**: A new `examples` directory with detailed implementations in JavaScript, Python, and TypeScript.
19
20
 
20
21
  **Plus:** Modern MCP SDK architecture, enhanced type safety, and comprehensive documentation!
21
22
 
22
23
  ## Changelog
23
24
 
24
- ### 1.2.0
25
-
26
- **🎊 Major Feature Release: Complete Checklist Management Suite**
27
-
28
- - **5 New Checklist Tools** for comprehensive checklist management:
29
- - `get_checklist_items(name)` - Retrieve all items from a checklist by name
30
- - `add_checklist_item(text, checkListName)` - Add new items to existing checklists
31
- - `find_checklist_items_by_description(description)` - Search checklist items by text content
32
- - `get_acceptance_criteria()` - Convenience method for "Acceptance Criteria" checklists
33
- - `get_checklist_by_name(name)` - Get complete checklist with completion percentage
34
- - **Modern MCP SDK Architecture:** Refactored to use latest MCP TypeScript SDK patterns with `registerTool()` and Zod validation
35
- - **Enhanced Type Safety:** Full TypeScript support with proper type conversions between Trello API and MCP types
36
- - **New Data Types:** `CheckList` and `CheckListItem` interfaces for structured checklist data
37
- - **Comprehensive Documentation:** Added `CHECKLIST_TOOLS.md` with examples and best practices
38
- - **Improved Error Handling:** Consistent error responses with descriptive messages
39
- - **Runtime Validation:** Zod schemas for all tool inputs with automatic validation
40
-
41
- ### 1.1.0
42
-
43
- **🎊 Major Feature Release: Complete Card Data Extraction**
44
-
45
- - Added powerful `get_card` tool for comprehensive single card data retrieval
46
- - **Enhanced Data Extraction:**
47
- - ✅ **Checklists** - Full checklist support with items, completion states, member assignments, and due dates
48
- - 📎 **Attachments** - Complete attachment data including images, previews, file metadata, and inline image detection
49
- - 🏷️ **Labels** - Full label details (names and colors, not just IDs)
50
- - 👥 **Members** - Card member assignments with full profile information
51
- - 💬 **Comments** - Card activity and comment history
52
- - 📊 **Badges** - Statistics including checklist progress, comment counts, and attachment counts
53
- - 🎨 **Cover Images** - Card cover image support
54
- - 📍 **Context** - Board and list information for complete context
55
- - 🔧 **Custom Fields** - Support for board-specific custom fields
56
- - **Markdown Formatting:** New `includeMarkdown` parameter returns beautifully formatted, human-readable card data
57
- - **Inline Image Parsing:** Automatically detects and extracts images embedded in card descriptions
58
- - **Comprehensive API Integration:** Single API call fetches all card data efficiently using optimized query parameters
59
- - **Type Safety:** Added new TypeScript interfaces for all enhanced data structures
60
- - **Human Parity:** Achieves complete parity with Trello UI - see everything a human sees
61
-
62
- ### 1.0.0
63
-
64
- - Fixed MCP protocol compatibility by removing all console output that interfered with JSON-RPC communication
65
- - Improved pnpx support - now works seamlessly with `pnpx @delorenj/mcp-server-trello`
66
- - Updated installation docs to feature pnpx as the primary installation method
67
- - Added mise installation instructions for convenient tool management
68
- - Production-ready release with stable API
69
-
70
- ### 0.3.0
71
-
72
- - Added multi-board support - all methods now accept optional `boardId` parameter (thanks @blackoutnet!)
73
- - `TRELLO_BOARD_ID` environment variable is now optional and serves as default board
74
- - Added board and workspace management capabilities:
75
- - `list_boards` - List all boards the user has access to
76
- - `set_active_board` - Set the active board for future operations
77
- - `list_workspaces` - List all workspaces the user has access to
78
- - `set_active_workspace` - Set the active workspace for future operations
79
- - `list_boards_in_workspace` - List all boards in a specific workspace
80
- - `get_active_board_info` - Get information about the currently active board
81
- - Added persistent configuration storage to remember active board/workspace
82
- - Improved error handling with MCP-specific error types
83
- - Full backward compatibility maintained
84
-
85
- ### 0.2.1
86
-
87
- - Added detailed JSDoc comments to rate limiter functions
88
- - Improved error handling for image attachment functionality
89
- - Updated documentation for attach_image_to_card tool
90
-
91
- ### 0.2.1
92
-
93
- - Added `attach_file_to_card` tool to attach any type of file (PDFs, documents, videos, etc.) to cards from URLs
94
- - Enhanced attachment support beyond just images
95
- - Kept `attach_image_to_card` for backward compatibility
96
-
97
- ### 0.2.0
98
-
99
- - Added `attach_image_to_card` tool to attach images to cards from URLs
100
- - Added Docker support with multi-stage build
101
- - Improved security by moving environment variables to `.env`
102
- - Added Docker Compose configuration
103
- - Added `.env.template` for easier setup
104
-
105
- ### 0.1.1
106
-
107
- - Added `move_card` tool to move cards between lists
108
- - Improved documentation
109
-
110
- ### 0.1.0
111
-
112
- - Initial release with basic Trello board management features
25
+ For a detailed list of changes, please refer to the [CHANGELOG.md](CHANGELOG.md) file.
113
26
 
114
27
  ## Features
115
28
 
116
- - **Full Trello Board Integration**: Interact with cards, lists, and board activities
117
- - **🆕 Complete Card Data Extraction**: Fetch all card details including checklists, attachments, labels, members, and comments
118
- - **File Attachments**: Attach any type of file to cards (PDFs, documents, videos, images, etc.) from URLs
119
- - **Built-in Rate Limiting**: Respects Trello's API limits (300 requests/10s per API key, 100 requests/10s per token)
120
- - **Type-Safe Implementation**: Written in TypeScript with comprehensive type definitions
121
- - **Input Validation**: Robust validation for all API inputs
122
- - **Error Handling**: Graceful error handling with informative messages
123
- - **Dynamic Board Selection**: Switch between boards and workspaces without restarting
124
- - **Markdown Formatting**: Export card data in human-readable markdown format
29
+ - **Full Trello Board Integration**: Interact with cards, lists, and board activities
30
+ - **🆕 Complete Card Data Extraction**: Fetch all card details including checklists, attachments, labels, members, and comments
31
+ - **File Attachments**: Attach any type of file to cards (PDFs, documents, videos, images, etc.) from URLs
32
+ - **Built-in Rate Limiting**: Respects Trello's API limits (300 requests/10s per API key, 100 requests/10s per token)
33
+ - **Type-Safe Implementation**: Written in TypeScript with comprehensive type definitions
34
+ - **Input Validation**: Robust validation for all API inputs
35
+ - **Error Handling**: Graceful error handling with informative messages
36
+ - **Dynamic Board Selection**: Switch between boards and workspaces without restarting
37
+ - **Markdown Formatting**: Export card data in human-readable markdown format
125
38
 
126
39
  ## Installation
127
40
 
128
- ### Quick Start with pnpx (Recommended)
41
+ ### 🚀 Install from MCP Registry (Recommended)
42
+
43
+ The MCP Server Trello is now available in the official MCP Registry\! MCP clients can automatically discover and install this server.
44
+
45
+ For clients that support the MCP Registry:
46
+
47
+ 1. Search for "mcp-server-trello" or "io.github.delorenj/mcp-server-trello"
48
+ 2. Install directly from the registry
49
+ 3. Configure with your Trello credentials
50
+
51
+ ### 🚀 Quick Start with Bun (Fastest)
52
+
53
+ If you have [Bun](https://bun.sh) installed, using `bunx` is the fastest way to run the server:
54
+
55
+ ```json
56
+ {
57
+   "mcpServers": {
58
+     "trello": {
59
+       "command": "bunx",
60
+       "args": ["@delorenj/mcp-server-trello"],
61
+       "env": {
62
+         "TRELLO_API_KEY": "your-api-key",
63
+         "TRELLO_TOKEN": "your-token"
64
+       }
65
+     }
66
+   }
67
+ }
68
+ ```
69
+
70
+ ### Quick Start with npx / pnpx / bunx
129
71
 
130
- The easiest way to use the Trello MCP server is with `pnpx`, which doesn't require a global install:
72
+ You can still use `npx` or `pnpx`. This doesn't require a global install and will work just fine, though `bunx` (above) is faster.
131
73
 
132
74
  ```json
133
75
  {
134
- "mcpServers": {
135
- "trello": {
136
- "command": "pnpx",
137
- "args": ["@delorenj/mcp-server-trello"],
138
- "env": {
139
- "TRELLO_API_KEY": "your-api-key",
140
- "TRELLO_TOKEN": "your-token"
141
- }
142
- }
143
- }
76
+   "mcpServers": {
77
+     "trello": {
78
+       "command": "bunx",
79
+       "args": ["@delorenj/mcp-server-trello"],
80
+       "env": {
81
+         "TRELLO_API_KEY": "your-api-key",
82
+         "TRELLO_TOKEN": "your-token"
83
+       }
84
+     }
85
+   }
144
86
  }
145
87
  ```
146
88
 
147
- Or if you're using mise:
89
+ Or if you're using mise, you can explicitly execute `bunx` with `mise exec`:
148
90
 
149
91
  ```json
150
92
  {
151
- "mcpServers": {
152
- "trello": {
153
- "command": "mise",
154
- "args": ["x", "--", "pnpx", "@delorenj/mcp-server-trello"],
155
- "env": {
156
- "TRELLO_API_KEY": "your-api-key",
157
- "TRELLO_TOKEN": "your-token"
158
- }
159
- }
160
- }
93
+   "mcpServers": {
94
+     "trello": {
95
+       "command": "mise",
96
+       "args": ["x", "--", "bunx", "@delorenj/mcp-server-trello"],
97
+       "env": {
98
+         "TRELLO_API_KEY": "your-api-key",
99
+         "TRELLO_TOKEN": "your-token"
100
+       }
101
+     }
102
+   }
161
103
  }
162
104
  ```
163
105
 
@@ -169,63 +111,78 @@ https://trello.com/1/authorize?expiration=never&name=YOUR_APP_NAME&scope=read,wr
169
111
 
170
112
  Replace:
171
113
 
172
- * `YOUR_APP_NAME` with a name for your application (e.g., "My Trello Integration"). This name is shown to the user on the Trello authorization screen.
173
- * `YOUR_API_KEY` with the API key for your Trello Power-Up
114
+ * `YOUR_APP_NAME` with a name for your application (e.g., "My Trello Integration"). This name is shown to the user on the Trello authorization screen.
115
+ * `YOUR_API_KEY` with the API key for your Trello Power-Up
174
116
 
175
117
  This will generate the token required for integration.
176
118
 
177
- > [!NOTE]
119
+ > [\!NOTE]
178
120
  > The `expiration=never` parameter creates a token that does not expire. For enhanced security, consider using `expiration=30days` and renewing the token periodically if your setup allows for it.
179
121
 
122
+ #### Don't have Bun?
180
123
 
181
- #### Don't have pnpm?
182
-
183
- The simplest way to get `pnpm` (and thus `pnpx`) is through [mise](https://mise.jdx.dev/):
124
+ The simplest way to get `bun` (and thus `bunx`) is through [mise](https://mise.jdx.dev/):
184
125
 
185
126
  ```bash
186
127
  # Install mise (if you don't have it)
187
128
  curl https://mise.run | sh
188
129
 
189
- # Install pnpm with mise
190
- mise install pnpm
130
+ # Install bun and make the @latest version your system default
131
+ mise use bun@latest -g
132
+
133
+ # Or just run `mise install` from the project directory to install Bun locally
134
+ cd /path/to/mcp-server-trello
135
+ mise install
191
136
  ```
192
137
 
193
138
  ### Installing via npm
194
139
 
195
- If you prefer using npm directly:
140
+ If you prefer using `npm` directly:
196
141
 
197
142
  ```bash
198
143
  npm install -g @delorenj/mcp-server-trello
199
144
  ```
200
145
 
201
- Then use `mcp-server-trello` as the command in your MCP configuration.
146
+ *(A fast alternative is `bun add -g @delorenj/mcp-server-trello`)*
147
+
148
+ Then use `npx mcp-server-trello` as the command in your MCP configuration.
202
149
 
203
150
  ### Installing via Smithery
204
151
 
205
- To install Trello Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@modelcontextprotocol/mcp-server-trello):
152
+ To install Trello Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@delorenj/mcp-server-trello):
206
153
 
207
154
  ```bash
208
- npx -y @smithery/cli install @modelcontextprotocol/mcp-server-trello --client claude
155
+ # Using bunx (recommended)
156
+ bunx -y @smithery/cli install @delorenj/mcp-server-trello --client claude
157
+
158
+ # Using npx
159
+ npx -y @smithery/cli install @delorenj/mcp-server-trello --client claude
209
160
  ```
210
161
 
211
162
  ### Docker Installation
212
163
 
213
164
  For containerized environments:
214
165
 
215
- 1. Clone the repository:
166
+ 1. Clone the repository:
167
+
168
+ <!-- end list -->
216
169
 
217
170
  ```bash
218
171
  git clone https://github.com/delorenj/mcp-server-trello
219
172
  cd mcp-server-trello
220
173
  ```
221
174
 
222
- 2. Copy the environment template and fill in your Trello credentials:
175
+ 2. Copy the environment template and fill in your Trello credentials:
176
+
177
+ <!-- end list -->
223
178
 
224
179
  ```bash
225
180
  cp .env.template .env
226
181
  ```
227
182
 
228
- 3. Build and run with Docker Compose:
183
+ 3. Build and run with Docker Compose:
184
+
185
+ <!-- end list -->
229
186
 
230
187
  ```bash
231
188
  docker compose up --build
@@ -251,75 +208,85 @@ TRELLO_WORKSPACE_ID=your-workspace-id
251
208
 
252
209
  You can get these values from:
253
210
 
254
- - API Key: <https://trello.com/app-key>
255
- - Token: Generate using your API key
256
- - Board ID (optional, deprecated): Found in the board URL (e.g., <https://trello.com/b/BOARD_ID/board-name>)
257
- - Workspace ID: Found in workspace settings or using `list_workspaces` tool
211
+ - API Key: [https://trello.com/app-key](https://trello.com/app-key)
212
+ - Token: Generate using your API key
213
+ - Board ID (optional, deprecated): Found in the board URL (e.g., [suspicious link removed])
214
+ - Workspace ID: Found in workspace settings or using `list_workspaces` tool
258
215
 
259
216
  ### Board and Workspace Management
260
217
 
261
218
  Starting with version 0.3.0, the MCP server supports multiple ways to work with boards:
262
219
 
263
- 1. **Multi-board support**: All methods now accept an optional `boardId` parameter
264
- - Omit `TRELLO_BOARD_ID` and provide `boardId` in each API call
265
- - Set `TRELLO_BOARD_ID` as default and optionally override with `boardId` parameter
220
+ 1. **Multi-board support**: All methods now accept an optional `boardId` parameter
221
+    - Omit `TRELLO_BOARD_ID` and provide `boardId` in each API call
222
+    - Set `TRELLO_BOARD_ID` as default and optionally override with `boardId` parameter
266
223
 
267
- 2. **Dynamic board selection**: Use workspace management tools
268
- - The `TRELLO_BOARD_ID` in your `.env` file is used as the initial/default board ID
269
- - You can change the active board at any time using the `set_active_board` tool
270
- - The selected board persists between server restarts (stored in `~/.trello-mcp/config.json`)
271
- - Similarly, you can set and persist an active workspace using `set_active_workspace`
224
+ 2. **Dynamic board selection**: Use workspace management tools
225
+    - The `TRELLO_BOARD_ID` in your `.env` file is used as the initial/default board ID
226
+    - You can change the active board at any time using the `set_active_board` tool
227
+    - The selected board persists between server restarts (stored in `~/.trello-mcp/config.json`)
228
+    - Similarly, you can set and persist an active workspace using `set_active_workspace`
272
229
 
273
230
  This allows you to work with multiple boards and workspaces without restarting the server.
274
231
 
275
232
  #### Example Workflow
276
233
 
277
- 1. Start by listing available boards:
234
+ 1. Start by listing available boards:
235
+
236
+ <!-- end list -->
278
237
 
279
238
  ```typescript
280
239
  {
281
- name: 'list_boards',
282
- arguments: {}
240
+   name: 'list_boards',
241
+   arguments: {}
283
242
  }
284
243
  ```
285
244
 
286
- 2. Set your active board:
245
+ 2. Set your active board:
246
+
247
+ <!-- end list -->
287
248
 
288
249
  ```typescript
289
250
  {
290
- name: 'set_active_board',
291
- arguments: {
292
- boardId: "abc123" // ID from list_boards response
293
- }
251
+   name: 'set_active_board',
252
+   arguments: {
253
+     boardId: "abc123"  // ID from list_boards response
254
+   }
294
255
  }
295
256
  ```
296
257
 
297
- 3. List workspaces if needed:
258
+ 3. List workspaces if needed:
259
+
260
+ <!-- end list -->
298
261
 
299
262
  ```typescript
300
263
  {
301
- name: 'list_workspaces',
302
- arguments: {}
264
+   name: 'list_workspaces',
265
+   arguments: {}
303
266
  }
304
267
  ```
305
268
 
306
- 4. Set active workspace if needed:
269
+ 4. Set active workspace if needed:
270
+
271
+ <!-- end list -->
307
272
 
308
273
  ```typescript
309
274
  {
310
- name: 'set_active_workspace',
311
- arguments: {
312
- workspaceId: "xyz789" // ID from list_workspaces response
313
- }
275
+   name: 'set_active_workspace',
276
+   arguments: {
277
+     workspaceId: "xyz789"  // ID from list_workspaces response
278
+   }
314
279
  }
315
280
  ```
316
281
 
317
- 5. Check current active board info:
282
+ 5. Check current active board info:
283
+
284
+ <!-- end list -->
318
285
 
319
286
  ```typescript
320
287
  {
321
- name: 'get_active_board_info',
322
- arguments: {}
288
+   name: 'get_active_board_info',
289
+   arguments: {}
323
290
  }
324
291
  ```
325
292
 
@@ -327,8 +294,8 @@ This allows you to work with multiple boards and workspaces without restarting t
327
294
 
328
295
  When working with dates in the Trello MCP server, please note the different format requirements:
329
296
 
330
- - **Due Date (`dueDate`)**: Accepts full ISO 8601 format with time (e.g., `2023-12-31T12:00:00Z`)
331
- - **Start Date (`start`)**: Accepts date only in YYYY-MM-DD format (e.g., `2025-08-05`)
297
+ - **Due Date (`dueDate`)**: Accepts full ISO 8601 format with time (e.g., `2023-12-31T12:00:00Z`)
298
+ - **Start Date (`start`)**: Accepts date only in YYYY-MM-DD format (e.g., `2025-08-05`)
332
299
 
333
300
  This distinction follows Trello's API conventions where start dates are day-based markers while due dates can include specific times.
334
301
 
@@ -336,355 +303,358 @@ This distinction follows Trello's API conventions where start dates are day-base
336
303
 
337
304
  ### Checklist Management Tools 🆕
338
305
 
339
- #### get_checklist_items
306
+ #### get\_checklist\_items
340
307
 
341
308
  Get all items from a checklist by name.
342
309
 
343
310
  ```typescript
344
311
  {
345
- name: 'get_checklist_items',
346
- arguments: {
347
- name: string, // Name of the checklist to retrieve items from
348
- boardId?: string // Optional: ID of the board (uses default if not provided)
349
- }
312
+   name: 'get_checklist_items',
313
+   arguments: {
314
+     name: string,        // Name of the checklist to retrieve items from
315
+     boardId?: string     // Optional: ID of the board (uses default if not provided)
316
+   }
350
317
  }
351
318
  ```
352
319
 
353
- #### add_checklist_item
320
+ #### add\_checklist\_item
354
321
 
355
322
  Add a new item to an existing checklist.
356
323
 
357
324
  ```typescript
358
325
  {
359
- name: 'add_checklist_item',
360
- arguments: {
361
- text: string, // Text content of the checklist item
362
- checkListName: string, // Name of the checklist to add the item to
363
- boardId?: string // Optional: ID of the board (uses default if not provided)
364
- }
326
+   name: 'add_checklist_item',
327
+   arguments: {
328
+     text: string,           // Text content of the checklist item
329
+     checkListName: string,  // Name of the checklist to add the item to
330
+     boardId?: string        // Optional: ID of the board (uses default if not provided)
331
+   }
365
332
  }
366
333
  ```
367
334
 
368
- #### find_checklist_items_by_description
335
+ #### find\_checklist\_items\_by\_description
369
336
 
370
337
  Search for checklist items containing specific text.
371
338
 
372
339
  ```typescript
373
340
  {
374
- name: 'find_checklist_items_by_description',
375
- arguments: {
376
- description: string, // Text to search for in checklist item descriptions
377
- boardId?: string // Optional: ID of the board (uses default if not provided)
378
- }
341
+ nbsp; name: 'find_checklist_items_by_description',
342
+   arguments: {
343
+     description: string,  // Text to search for in checklist item descriptions
344
+     boardId?: string      // Optional: ID of the board (uses default if not provided)
345
+ nbsp; }
379
346
  }
380
347
  ```
381
348
 
382
- #### get_acceptance_criteria
349
+ #### get\_acceptance\_criteria
383
350
 
384
351
  Get all items from the "Acceptance Criteria" checklist.
385
352
 
386
353
  ```typescript
387
354
  {
388
- name: 'get_acceptance_criteria',
389
- arguments: {
390
- boardId?: string // Optional: ID of the board (uses default if not provided)
391
- }
355
+   name: 'get_acceptance_criteria',
356
+   arguments: {
357
+     boardId?: string  // Optional: ID of the board (uses default if not provided)
358
+   }
392
359
  }
393
360
  ```
394
361
 
395
- #### get_checklist_by_name
362
+ #### get\_checklist\_by\_name
396
363
 
397
364
  Get a complete checklist with all items and completion percentage.
398
365
 
399
366
  ```typescript
400
367
  {
401
- name: 'get_checklist_by_name',
402
- arguments: {
403
- name: string, // Name of the checklist to retrieve
404
- boardId?: string // Optional: ID of the board (uses default if not provided)
405
- }
368
+   name: 'get_checklist_by_name',
369
+   arguments: {
370
+     name: string,     // Name of the checklist to retrieve
371
+     boardId?: string  // Optional: ID of the board (uses default if not provided)
372
+   }
406
373
  }
407
374
  ```
408
375
 
409
376
  **Returns:** `CheckList` object with:
410
- - `id`: Checklist identifier
411
- - `name`: Checklist name
412
- - `items`: Array of `CheckListItem` objects
413
- - `percentComplete`: Completion percentage (0-100)
414
377
 
415
- ### get_card 🆕
378
+ - `id`: Checklist identifier
379
+ - `name`: Checklist name
380
+ - `items`: Array of `CheckListItem` objects
381
+ - `percentComplete`: Completion percentage (0-100)
382
+
383
+ ### get\_card 🆕
416
384
 
417
385
  Get comprehensive details of a specific Trello card with human-level parity.
418
386
 
419
387
  ```typescript
420
388
  {
421
- name: 'get_card',
422
- arguments: {
423
- cardId: string, // ID of the Trello card (short ID like 'FdhbArbK' or full ID)
424
- includeMarkdown?: boolean // Return formatted markdown instead of JSON (default: false)
425
- }
389
+   name: 'get_card',
390
+   arguments: {
391
+     cardId: string,          // ID of the Trello card (short ID like 'FdhbArbK' or full ID)
392
+     includeMarkdown?: boolean // Return formatted markdown instead of JSON (default: false)
393
+   }
426
394
  }
427
395
  ```
428
396
 
429
397
  **Returns:** Complete card data including:
430
- - ✅ Checklists with item states and assignments
431
- - 📎 Attachments with previews and metadata
432
- - 🏷️ Labels with names and colors
433
- - 👥 Assigned members
434
- - 💬 Comments and activity
435
- - 📊 Statistics (badges)
436
- - 🎨 Cover images
437
- - 📍 Board and list context
438
398
 
439
- ### get_cards_by_list_id
399
+ - ✅ Checklists with item states and assignments
400
+ - 📎 Attachments with previews and metadata
401
+ - 🏷️ Labels with names and colors
402
+ - 👥 Assigned members
403
+ - 💬 Comments and activity
404
+ - 📊 Statistics (badges)
405
+ - 🎨 Cover images
406
+ - 📍 Board and list context
407
+
408
+ ### get\_cards\_by\_list\_id
440
409
 
441
410
  Fetch all cards from a specific list.
442
411
 
443
412
  ```typescript
444
413
  {
445
- name: 'get_cards_by_list_id',
446
- arguments: {
447
- boardId?: string, // Optional: ID of the board (uses default if not provided)
448
- listId: string // ID of the Trello list
449
- }
414
+   name: 'get_cards_by_list_id',
415
+   arguments: {
416
+     boardId?: string, // Optional: ID of the board (uses default if not provided)
417
+     listId: string    // ID of the Trello list
418
+   }
450
419
  }
451
420
  ```
452
421
 
453
- ### get_lists
422
+ ### get\_lists
454
423
 
455
424
  Retrieve all lists from a board.
456
425
 
457
426
  ```typescript
458
427
  {
459
- name: 'get_lists',
460
- arguments: {
461
- boardId?: string // Optional: ID of the board (uses default if not provided)
462
- }
428
+   name: 'get_lists',
429
+   arguments: {
430
+     boardId?: string  // Optional: ID of the board (uses default if not provided)
431
+   }
463
432
  }
464
433
  ```
465
434
 
466
- ### get_recent_activity
435
+ ### get\_recent\_activity
467
436
 
468
437
  Fetch recent activity on a board.
469
438
 
470
439
  ```typescript
471
440
  {
472
- name: 'get_recent_activity',
473
- arguments: {
474
- boardId?: string, // Optional: ID of the board (uses default if not provided)
475
- limit?: number // Optional: Number of activities to fetch (default: 10)
476
- }
441
+   name: 'get_recent_activity',
442
+   arguments: {
443
+     boardId?: string, // Optional: ID of the board (uses default if not provided)
444
+     limit?: number    // Optional: Number of activities to fetch (default: 10)
445
+   }
477
446
  }
478
447
  ```
479
448
 
480
- ### add_card_to_list
449
+ ### add\_card\_to\_list
481
450
 
482
451
  Add a new card to a specified list.
483
452
 
484
453
  ```typescript
485
454
  {
486
- name: 'add_card_to_list',
487
- arguments: {
488
- boardId?: string, // Optional: ID of the board (uses default if not provided)
489
- listId: string, // ID of the list to add the card to
490
- name: string, // Name of the card
491
- description?: string, // Optional: Description of the card
492
- dueDate?: string, // Optional: Due date (ISO 8601 format with time)
493
- start?: string, // Optional: Start date (YYYY-MM-DD format, date only)
494
- labels?: string[] // Optional: Array of label IDs
495
- }
455
+   name: 'add_card_to_list',
456
+   arguments: {
457
+     boardId?: string,     // Optional: ID of the board (uses default if not provided)
458
+     listId: string,       // ID of the list to add the card to
459
+     name: string,         // Name of the card
460
+     description?: string, // Optional: Description of the card
461
+   mbs; dueDate?: string,     // Optional: Due date (ISO 8601 format with time)
462
+     start?: string,       // Optional: Start date (YYYY-MM-DD format, date only)
463
+     labels?: string[]     // Optional: Array of label IDs
464
+   }
496
465
  }
497
466
  ```
498
467
 
499
- ### update_card_details
468
+ ### update\_card\_details
500
469
 
501
470
  Update an existing card's details.
502
471
 
503
472
  ```typescript
504
473
  {
505
- name: 'update_card_details',
506
- arguments: {
507
- boardId?: string, // Optional: ID of the board (uses default if not provided)
508
- cardId: string, // ID of the card to update
509
- name?: string, // Optional: New name for the card
510
- description?: string, // Optional: New description
511
- dueDate?: string, // Optional: New due date (ISO 8601 format with time)
512
- start?: string, // Optional: New start date (YYYY-MM-DD format, date only)
513
- dueComplete?: boolean,// Optional: Mark the due date as complete (true) or incomplete (false)
514
- labels?: string[] // Optional: New array of label IDs
515
- }
474
+   name: 'update_card_details',
475
+   arguments: {
476
+     boardId?: string,     // Optional: ID of the board (uses default if not provided)
477
+     cardId: string,       // ID of the card to update
478
+     name?: string,        // Optional: New name for the card
479
+     description?: string, // Optional: New description
480
+     dueDate?: string,     // Optional: New due date (ISO 8601 format with time)
481
+     start?: string,       // Optional: New start date (YYYY-MM-DD format, date only)
482
+     dueComplete?: boolean,// Optional: Mark the due date as complete (true) or incomplete (false)
483
+     labels?: string[]     // Optional: New array of label IDs
484
+   }
516
485
  }
517
486
  ```
518
487
 
519
- ### archive_card
488
+ ### archive\_card
520
489
 
521
490
  Send a card to the archive.
522
491
 
523
492
  ```typescript
524
493
  {
525
- name: 'archive_card',
526
- arguments: {
527
- boardId?: string, // Optional: ID of the board (uses default if not provided)
528
- cardId: string // ID of the card to archive
529
- }
494
+   name: 'archive_card',
495
+   arguments: {
496
+     boardId?: string, // Optional: ID of the board (uses default if not provided)
497
+     cardId: string    // ID of the card to archive
498
+   }
530
499
  }
531
500
  ```
532
501
 
533
- ### add_list_to_board
502
+ ### add\_list\_to\_board
534
503
 
535
504
  Add a new list to a board.
536
505
 
537
506
  ```typescript
538
507
  {
539
- name: 'add_list_to_board',
540
- arguments: {
541
- boardId?: string, // Optional: ID of the board (uses default if not provided)
542
- name: string // Name of the new list
543
- }
508
+ nbsp; name: 'add_list_to_board',
509
+   arguments: {
510
+     boardId?: string, // Optional: ID of the board (uses default if not provided)
511
+     name: string      // Name of the new list
512
+   }
544
513
  }
545
514
  ```
546
515
 
547
- ### archive_list
516
+ ### archive\_list
548
517
 
549
518
  Send a list to the archive.
550
519
 
551
520
  ```typescript
552
521
  {
553
- name: 'archive_list',
554
- arguments: {
555
- boardId?: string, // Optional: ID of the board (uses default if not provided)
556
- listId: string // ID of the list to archive
557
- }
522
+   name: 'archive_list',
523
+   arguments: {
524
+     boardId?: string, // Optional: ID of the board (uses default if not provided)
525
+     listId: string    // ID of the list to archive
526
+   }
558
527
  }
559
528
  ```
560
529
 
561
- ### get_my_cards
530
+ ### get\_my\_cards
562
531
 
563
532
  Fetch all cards assigned to the current user.
564
533
 
565
534
  ```typescript
566
535
  {
567
- name: 'get_my_cards',
568
- arguments: {}
536
+   name: 'get_my_cards',
537
+   arguments: {}
569
538
  }
570
539
  ```
571
540
 
572
- ### move_card
541
+ ### move\_card
573
542
 
574
543
  Move a card to a different list.
575
544
 
576
545
  ```typescript
577
546
  {
578
- name: 'move_card',
579
- arguments: {
580
- boardId?: string, // Optional: ID of the target board (uses default if not provided)
581
- cardId: string, // ID of the card to move
582
- listId: string // ID of the target list
583
- }
547
+   name: 'move_card',
548
+   arguments: {
549
+     boardId?: string,  // Optional: ID of the target board (uses default if not provided)
550
+ s;   cardId: string,    // ID of the card to move
551
+     listId: string     // ID of the target list
552
+   }
584
553
  }
585
554
  ```
586
555
 
587
- ### attach_image_to_card
556
+ ### attach\_image\_to\_card
588
557
 
589
558
  Attach an image to a card directly from a URL.
590
559
 
591
560
  ```typescript
592
561
  {
593
- name: 'attach_image_to_card',
594
- arguments: {
595
- boardId?: string, // Optional: ID of the board (uses default if not provided)
596
- cardId: string, // ID of the card to attach the image to
597
- imageUrl: string, // URL of the image to attach
598
- name?: string // Optional: Name for the attachment (defaults to "Image Attachment")
599
- }
562
+   name: 'attach_image_to_card',
563
+   arguments: {
564
+     boardId?: string, // Optional: ID of the board (uses default if not provided)
565
+     cardId: string,  nbsp; // ID of the card to attach the image to
566
+     imageUrl: string, // URL of the image to attach
567
+     name?: string     // Optional: Name for the attachment (defaults to "Image Attachment")
568
+   }
600
569
  }
601
570
  ```
602
571
 
603
- ### attach_file_to_card
572
+ ### attach\_file\_to\_card
604
573
 
605
574
  Attach any type of file to a card from a URL or a local file path (e.g., `file:///path/to/your/file.pdf`).
606
575
 
607
576
  ```typescript
608
577
  {
609
- name: 'attach_file_to_card',
610
- arguments: {
611
- boardId?: string, // Optional: ID of the board (uses default if not provided)
612
- cardId: string, // ID of the card to attach the file to
613
- fileUrl: string, // URL or local file path (using the file:// protocol) of the file to attach
614
- name?: string, // Optional: Name for the attachment (defaults to the file name for local files)
615
- mimeType?: string // Optional: MIME type (e.g., "application/pdf", "text/plain", "video/mp4")
616
- }
578
+   name: 'attach_file_to_card',
579
+ nbsp; arguments: {
580
+     boardId?: string,  // Optional: ID of the board (uses default if not provided)
581
+     cardId: string,s;   // ID of the card to attach the file to
582
+     fileUrl: string,   // URL or local file path (using the file:// protocol) of the file to attach
583
+     name?: string,     // Optional: Name for the attachment (defaults to the file name for local files)
584
+     mimeType?: string  // Optional: MIME type (e.g., "application/pdf", "text/plain", "video/mp4")
585
+   }
617
586
  }
587
+ ```
618
588
 
619
- ### list_boards
589
+ ### list\_boards
620
590
 
621
591
  List all boards the user has access to.
622
592
 
623
593
  ```typescript
624
594
  {
625
- name: 'list_boards',
626
- arguments: {}
595
+   name: 'list_boards',
596
+   arguments: {}
627
597
  }
628
598
  ```
629
599
 
630
- ### set_active_board
600
+ ### set\_active\_board
631
601
 
632
602
  Set the active board for future operations.
633
603
 
634
604
  ```typescript
635
605
  {
636
- name: 'set_active_board',
637
- arguments: {
638
- boardId: string // ID of the board to set as active
639
- }
606
+   name: 'set_active_board',
607
+   arguments: {
608
+     boardId: string  // ID of the board to set as active
609
+   }
640
610
  }
641
611
  ```
642
612
 
643
- ### list_workspaces
613
+ ### list\_workspaces
644
614
 
645
615
  List all workspaces the user has access to.
646
616
 
647
617
  ```typescript
648
618
  {
649
- name: 'list_workspaces',
650
- arguments: {}
619
+ s; name: 'list_workspaces',
620
+   arguments: {}
651
621
  }
652
622
  ```
653
623
 
654
- ### set_active_workspace
624
+ ### set\_active\_workspace
655
625
 
656
626
  Set the active workspace for future operations.
657
627
 
658
628
  ```typescript
659
629
  {
660
- name: 'set_active_workspace',
661
- arguments: {
662
- workspaceId: string // ID of the workspace to set as active
663
- }
630
+   name: 'set_active_workspace',
631
+   arguments: {
632
+     workspaceId: string  // ID of the workspace to set as active
633
+   }
664
634
  }
665
635
  ```
666
636
 
667
- ### list_boards_in_workspace
637
+ ### list\_boards\_in\_workspace
668
638
 
669
639
  List all boards in a specific workspace.
670
640
 
671
641
  ```typescript
672
642
  {
673
- name: 'list_boards_in_workspace',
674
- arguments: {
675
- workspaceId: string // ID of the workspace to list boards from
676
- }
643
+   name: 'list_boards_in_workspace',
644
+   arguments: {
645
+     workspaceId: string  // ID of the workspace to list boards from
646
+   }
677
647
  }
678
648
  ```
679
649
 
680
- ### get_active_board_info
650
+ ### get\_active\_board\_info
681
651
 
682
652
  Get information about the currently active board.
683
653
 
684
654
  ```typescript
685
655
  {
686
- name: 'get_active_board_info',
687
- arguments: {}
656
+ s; name: 'get_active_board_info',
657
+   arguments: {}
688
658
  }
689
659
  ```
690
660
 
@@ -692,72 +662,76 @@ Get information about the currently active board.
692
662
 
693
663
  ### 🎨 Pairing with Ideogram MCP Server
694
664
 
695
- The Trello MCP server pairs beautifully with [@flowluap/ideogram-mcp-server](https://github.com/flowluap/ideogram-mcp-server) for AI-powered visual content creation. Generate images with Ideogram and attach them directly to your Trello cards!
696
-
697
- ![Ideogram + Trello Integration Example](https://ss.delo.sh/hosted/20250717-0619.png)
665
+ The Trello MCP server pairs beautifully with [@flowluap/ideogram-mcp-server](https://github.com/flowluap/ideogram-mcp-server) for AI-powered visual content creation. Generate images with Ideogram and attach them directly to your Trello cards\!
698
666
 
699
667
  #### Example Workflow
700
668
 
701
- 1. **Generate an image with Ideogram:**
669
+ 1. **Generate an image with Ideogram:**
670
+
671
+ <!-- end list -->
672
+
702
673
  ```typescript
703
674
  // Using ideogram-mcp-server
704
675
  {
705
- name: 'generate_image',
706
- arguments: {
707
- prompt: "A futuristic dashboard design with neon accents",
708
- aspect_ratio: "16:9"
709
- }
676
+   name: 'generate_image',
677
+   arguments: {
678
+     prompt: "A futuristic dashboard design with neon accents",
679
+     aspect_ratio: "16:9"
680
+   }
710
681
  }
711
682
  // Returns: { image_url: "https://..." }
712
683
  ```
713
684
 
714
- 2. **Attach the generated image to a Trello card:**
685
+ 2. **Attach the generated image to a Trello card:**
686
+
687
+ <!-- end list -->
688
+
715
689
  ```typescript
716
690
  // Using trello-mcp-server
717
691
  {
718
- name: 'attach_image_to_card',
719
- arguments: {
720
- cardId: "your-card-id",
721
- imageUrl: "https://...", // URL from Ideogram
722
- name: "Dashboard Mockup v1"
723
- }
692
+   name: 'attach_image_to_card',
693
+   arguments: {
694
+     cardId: "your-card-id",
695
+     imageUrl: "https://...", // URL from Ideogram
696
+     name: "Dashboard Mockup v1"
697
+   }
724
698
  }
725
699
  ```
726
700
 
727
701
  #### Setting up both servers
728
702
 
729
- Add both servers to your Claude Desktop configuration:
703
+ Add both servers to your Claude Desktop configuration. Use `bunx` for the fastest startup.
730
704
 
731
705
  ```json
732
706
  {
733
- "mcpServers": {
734
- "trello": {
735
- "command": "pnpx",
736
- "args": ["@delorenj/mcp-server-trello"],
737
- "env": {
738
- "TRELLO_API_KEY": "your-trello-api-key",
739
- "TRELLO_TOKEN": "your-trello-token"
740
- }
741
- },
742
- "ideogram": {
743
- "command": "pnpx",
744
- "args": ["@flowluap/ideogram-mcp-server"],
745
- "env": {
746
- "IDEOGRAM_API_KEY": "your-ideogram-api-key"
747
- }
748
- }
749
- }
707
+   "mcpServers": {
708
+     "trello": {
709
+       "command": "bunx",
710
+       "args": ["@delorenj/mcp-server-trello"],
711
+ nbsp;   "env": {
712
+         "TRELLO_API_KEY": "your-trello-api-key",
713
+         "TRELLO_TOKEN": "your-trello-token"
714
+       }
715
+     },
716
+     "ideogram": {
717
+       "command": "bunx",
718
+       "args": ["@flowluap/ideogram-mcp-server"],
719
+       "env": {
720
+         "IDEOGRAM_API_KEY": "your-ideogram-api-key"
721
+       }
722
+     }
723
+   }
750
724
  }
751
725
  ```
752
726
 
753
- Now you can seamlessly create visual content and organize it in Trello, all within Claude!
727
+ Now you can seamlessly create visual content and organize it in Trello, all within Claude\!
754
728
 
755
729
  ## Rate Limiting
756
730
 
757
731
  The server implements a token bucket algorithm for rate limiting to comply with Trello's API limits:
758
732
 
759
- - 300 requests per 10 seconds per API key
760
- - 100 requests per 10 seconds per token
733
+ - 300 requests per 10 seconds per API key
734
+ - 100 requests per 10 seconds per token
761
735
 
762
736
  Rate limiting is handled automatically, and requests will be queued if limits are reached.
763
737
 
@@ -765,57 +739,70 @@ Rate limiting is handled automatically, and requests will be queued if limits ar
765
739
 
766
740
  The server provides detailed error messages for various scenarios:
767
741
 
768
- - Invalid input parameters
769
- - Rate limit exceeded
770
- - API authentication errors
771
- - Network issues
772
- - Invalid board/list/card IDs
742
+ - Invalid input parameters
743
+ - Rate limit exceeded
744
+ - API authentication errors
745
+ - Network issues
746
+ - Invalid board/list/card IDs
773
747
 
774
748
  ## Development
775
749
 
776
750
  ### Prerequisites
777
751
 
778
- - Node.js 16 or higher
779
- - npm or yarn
752
+ - [Bun](https://bun.sh) (v1.0.0 or higher)
780
753
 
781
754
  ### Setup
782
755
 
783
- 1. Clone the repository
756
+ 1. Clone the repository
757
+
758
+ <!-- end list -->
784
759
 
785
760
  ```bash
786
761
  git clone https://github.com/delorenj/mcp-server-trello
787
762
  cd mcp-server-trello
788
763
  ```
789
764
 
790
- 2. Install dependencies
765
+ 2. Install dependencies
766
+
767
+ <!-- end list -->
768
+
769
+ ```bash
770
+ bun install
771
+ ```
772
+
773
+ 3. Build the project
774
+
775
+ <!-- end list -->
791
776
 
792
777
  ```bash
793
- npm install
778
+ bun run build
794
779
  ```
795
780
 
796
- 3. Build the project
781
+ ## Running tests
782
+
783
+ To run the tests, run the following command:
797
784
 
798
785
  ```bash
799
- npm run build
786
+ bun test
800
787
  ```
801
788
 
802
789
  ## Running evals
803
790
 
804
- The evals package loads an mcp client that then runs the index.ts file, so there is no need to rebuild between tests. You can load environment variables by prefixing the npx command. Full documentation can be found [here](https://www.mcpevals.io/docs).
791
+ The evals package loads an mcp client that then runs the index.ts file, so there is no need to rebuild between tests. You can load environment variables by prefixing the `bunx` command. Full documentation can be found [here](https://www.mcpevals.io/docs).
805
792
 
806
793
  ```bash
807
- OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/index.ts
794
+ OPENAI_API_KEY=your-key bunx mcp-eval src/evals/evals.ts src/index.ts
808
795
  ```
809
796
 
810
797
  ## Contributing
811
798
 
812
- Contributions are welcome!
799
+ Contributions are welcome\!
813
800
 
814
801
  ## License
815
802
 
816
- This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
803
+ This project is licensed under the MIT License - see the [LICENSE](https://www.google.com/search?q=LICENSE) file for details.
817
804
 
818
805
  ## Acknowledgments
819
806
 
820
- - Built with the [Model Context Protocol SDK](https://github.com/modelcontextprotocol/sdk)
821
- - Uses the [Trello REST API](https://developer.atlassian.com/cloud/trello/rest/)
807
+ - Built with the [Model Context Protocol SDK](https://github.com/modelcontextprotocol/typescript-sdk)
808
+ - Uses the [Trello REST API](https://developer.atlassian.com/cloud/trello/rest/)