Advanced Trello MCP Server
# π Advanced Trello MCP Server
> **Enhanced Model Context Protocol Server for Trello integration with Cursor AI**
> Production-hardened API layer, batch tools, and attachment downloads
[TypeScript](https://www.typescriptlang.org/)
[Trello API](https://developer.atlassian.com/cloud/trello/rest/)
[MCP Protocol](https://modelcontextprotocol.io/)
[License](LICENSE)
## π Overview
This is an **enhanced version** of the Trello MCP Server that provides comprehensive integration between Trello and Cursor AI (and similar MCP clients). It includes **~35 tools** across boards, lists, cards, labels, and actions, plus a **reliable HTTP layer** suited to heavy or sequential API use.
## β¨ Features
### π‘οΈ **Reliability (production-tested)**
All Trello calls (MCP **resources** and **tools**) go through a shared client in `src/utils/api.ts`:
- **HTTPS keep-alive** β reuses TLS connections (helps avoid CloudFront / CDN connection churn on burst traffic)
- `**fetchWithRetry`** β ~60s timeout, exponential backoff with jitter (up to 7 attempts), retries on network errors and 5xx
- **Sliding-window rate limit** β ~80 requests / 10s (mutex-protected)
- **429 handling** β respects `Retry-After` when present
### π― **API coverage (current)**
| Area | Tools | Notes |
| ----------- | ----- | --------------------------------------------------- |
| **Lists** | 10 | Full list lifecycle, bulk card moves |
| **Cards** | 12 | Batch create/move/archive/comments, **attachments** |
| **Labels** | 8 | Including batch add |
| **Actions** | 4 | Get / update / delete action, list reactions |
| **Boards** | 1 | List accessible boards |
### π§ **Other**
- **TypeScript** + **Zod** validation on tool inputs
- **Batch operations** β fewer round-trips for agents (`create-cards`, `move-cards`, `archive-cards`, `add-comments`, etc.)
- **Attachment pipeline** β list metadata + optional download to disk (see below)
## π Quick Start
### Prerequisites
- Node.js 18+
- Trello API Key and Token
- Cursor (or any MCP client)
### Installation
1. **Clone the repository**
```bash
git clone https://github.com/adriangrahldev/advanced-trello-mcp-server.git
cd advanced-trello-mcp-server
```
2. **Install dependencies**
```bash
npm install
```
3. **Build the project**
```bash
npm run build
```
4. **Configure environment variables**
```bash
export TRELLO_API_KEY="your_api_key"
export TRELLO_API_TOKEN="your_api_token"
```
5. **Configure Cursor MCP**
Add to your `~/.cursor/mcp.json` (paths adjusted for your machine):
## π οΈ Available Tools
### π **Lists (10)**
- `get-lists` β Lists on a board
- `create-list` / `update-list` / `archive-list`
- `move-list-to-board`
- `get-list-actions` / `get-list-board` / `get-list-cards`
- `archive-all-cards-in-list` / `move-all-cards-in-list`
### π― **Cards (12)**
- `create-card` β Optional `**due`** and `**start**` (ISO 8601)
- `create-cards` β Batch create; each card may include `**due**` / `**start**`
- `update-card` β Name and/or description
- `move-card` / `move-cards`
- `add-comment` / `**add-comments**` (batch comments on multiple cards)
- `get-tickets-by-list`
- `archive-card` / `archive-cards`
- `**get-card-attachments**` β Metadata + `commentContext` (e.g. screenshots on comments)
- `**download-card-attachments**` β Downloads files to a folder (numbered files + `_manifest.json`). File URLs often require **OAuth-style `Authorization` header** (not query-string key/token); this tool handles that.
### π·οΈ **Labels (8)**
- `create-label` / `create-labels`
- `add-label` / `add-labels`
- `get-label` / `update-label` / `delete-label` / `update-label-field`
### π **Actions (4)**
- `get-action` β With optional display/entities/member params
- `update-action` / `delete-action`
- `get-action-reactions`
### π’ **Boards (1)**
- `get-boards`
## β Why is an old Pull Request still βopenβ on GitHub?
GitHub marks a PR as **Merged** only when you merge **that PR** (green βMerge pull requestβ button), or when the PR branch is merged in a way GitHub links to the PR.
If you **cherry-picked, copied files, or merged locally** into `main` and **pushed `main`**, the code is on the repo but **the PR stays open** until you:
1. **Close the PR** manually β add a comment such as: *βLanded on `main` via commit ** β thanks!β*
2. Or use **GitHubβs merge** flow next time so the PR closes automatically.
Conflicts on fork-based PRs are normal; resolving on your machine and pushing `main` is fine β just close the PR afterward so contributors know itβs done.
## π Roadmap
Broader Trello API coverage (checklists, members, webhooks, search, etc.) is planned. PRs welcome.
## π§ Development
### Project structure
```
advanced-trello-mcp-server/
βββ src/
β βββ index.ts
β βββ tools/ # boards, lists, cards, labels, actions
β βββ types/
β βββ utils/ # api.ts β fetchWithRetry, keep-alive, rate limit
βββ build/
βββ scripts/build.js
βββ package.json
βββ README.md
```
### Building
```bash
npm run build # TypeScript + shebang on build/index.js
npm run compile # tsc only
```
**Cross-platform build** (Windows / macOS / Linux): compiles TS, adds `#!/usr/bin/env node`, sets execute bit on Unix.
## π€ Contributing
1. Fork the repository
2. Branch (`git checkout -b feature/...`)
3. Commit ([Conventional Commits](https://www.conventionalcommits.org/) encouraged)
4. Open a Pull Request
If the maintainer merges your work outside the GitHub PR UI, they may close the PR with a link to the landing commit β that does **not** mean your contribution wasnβt accepted.
## π API documentation
Tools follow the [Trello REST API](https://developer.atlassian.com/cloud/trello/rest/). Inputs are validated with Zod.
## π Troubleshooting
| Issue | What to check |
| ------------------------- | ------------------------------------------------------------------------------ |
| Credentials | `TRELLO_API_KEY` + `TRELLO_API_TOKEN`; token scopes (`read` / `write`) |
| Tool not found | Rebuild (`npm run build`), restart MCP client |
| `fetch failed` / timeouts | Retry layer should help; sustained 429 β slow down workflows |
| Attachment download 401 | Use `download-card-attachments` (header auth), not raw URL with `?key=&token=` |
## π License
MIT β see [LICENSE](LICENSE).
## π Acknowledgments
- Original Trello MCP Server β [yairhaimo/trello-mcp-server](https://github.com/yairhaimo/trello-mcp-server)
- [Trello API](https://developer.atlassian.com/cloud/trello/rest/) Β· [MCP](https://modelcontextprotocol.io/) Β· [Cursor](https://cursor.com/)
---
**Built with β€οΈ for the Cursor AI community**TDQS
Scored across 32 tools
Multiple tools have unclear boundaries, such as add-comment vs add-comments, archive-card vs archive-cards, and create-card vs create-cards, which could cause confusion. While some tools target distinct resources (e.g., get-boards vs get-list-cards), the overlapping singular/plural pairs and vague purposes like delete-action vs update-action reduce clarity.
Tool names follow a mostly consistent verb_noun pattern with hyphens, such as create-card, get-boards, and update-label. However, there are minor deviations like get-tickets-by-list (which uses 'tickets' instead of 'cards') and inconsistent handling of plurals (e.g., add-comment vs add-comments), slightly affecting predictability.
With 32 tools, the count is too high for the Trello domain, leading to redundancy and bloat. Many tools could be consolidated (e.g., singular and plural versions), making the set feel heavy and overwhelming for typical agent workflows, despite covering a broad scope.
The tool set covers core CRUD operations for boards, lists, cards, labels, and actions, but there are notable gaps, such as missing tools for managing board settings or user permissions. The inclusion of redundant tools (e.g., multiple archive/move variants) does not fill these gaps, leaving the surface somewhat incomplete for advanced Trello management.