Skip to main content
Glama
akbarshaik2243

Trello Task Manager MCP Server

README.md
# Trello Task Manager MCP Server

A Python MCP server that allows AI applications to manage tasks on a real Trello board.

This project began as a local JSON Task Manager on Day 4. On Day 5, the storage layer was replaced with the Trello REST API while keeping the same MCP tool interface.

## Features

The server exposes four MCP tools:

| Tool | Action |
|---|---|
| `add_task` | Creates a Trello card in the **To Do** list |
| `list_tasks` | Lists active cards from the **To Do** list |
| `complete_task` | Moves a card to the **Done** list |
| `delete_task` | Safely archives a Trello card |

## Architecture

```text
User request
      ↓
AI application
      ↓
MCP client
      ↓
Trello Task Manager MCP Server
      ↓
Async HTTP client
      ↓
Trello REST API
      ↓
Trello board updated
      ↓
Structured MCP response
```

The MCP server defines the capabilities exposed to AI clients.

The Trello client handles:

- Authentication
- Asynchronous HTTP requests
- Timeouts
- HTTP errors
- Network failures
- Trello card operations

## Project structure

```text
task-manager-mcp/
├── .env.example
├── .gitignore
├── .python-version
├── README.md
├── get_trello_ids.py
├── main.py
├── pyproject.toml
├── trello_client.py
└── uv.lock
```

### Main files

- `main.py` — Defines the MCP server and its tools
- `trello_client.py` — Handles Trello REST API communication
- `get_trello_ids.py` — Discovers the Trello board and list IDs
- `.env.example` — Documents the required environment variables
- `.env` — Stores local credentials and is excluded from Git

## Requirements

- Python 3.11 or newer
- `uv`
- Node.js and `npx` for MCP Inspector
- A Trello account
- A Trello board with the required lists
- Trello API credentials

## Trello board structure

Create a board named:

```text
MCP Task Manager
```

Create these lists:

```text
To Do
In Progress
Done
```

Tasks are represented as Trello cards.

## Installation

Clone the repository:

```powershell
git clone YOUR_REPOSITORY_URL
cd task-manager-mcp
```

Install the dependencies:

```powershell
uv sync
```

## Environment configuration

Create your local `.env` file from the example:

```powershell
Copy-Item .env.example .env
```

Add your private configuration:

```text
TRELLO_API_KEY=your_api_key
TRELLO_TOKEN=your_token
TRELLO_BOARD_ID=your_board_id
TRELLO_TODO_LIST_ID=your_todo_list_id
TRELLO_IN_PROGRESS_LIST_ID=your_in_progress_list_id
TRELLO_DONE_LIST_ID=your_done_list_id
```

Never commit `.env`.

The public `.env.example` file must contain only empty values:

```text
TRELLO_API_KEY=
TRELLO_TOKEN=
TRELLO_BOARD_ID=
TRELLO_TODO_LIST_ID=
TRELLO_IN_PROGRESS_LIST_ID=
TRELLO_DONE_LIST_ID=
```

## Discovering Trello IDs

After adding `TRELLO_API_KEY` and `TRELLO_TOKEN` to `.env`, run:

```powershell
uv run python get_trello_ids.py
```

The script finds the board named `MCP Task Manager` and displays its board and list IDs.

Copy those IDs into `.env`.

Board and list IDs are configuration identifiers. The API token is the sensitive credential and must never be shared.

## Verify the configuration

Run:

```powershell
uv run python -c "from trello_client import validate_configuration; validate_configuration(); print('Trello configuration is valid')"
```

Expected output:

```text
Trello configuration is valid
```

## Test the Trello connection

Run:

```powershell
uv run python -c "import asyncio; from trello_client import trello_request; result = asyncio.run(trello_request('GET', '/members/me', params={'fields': 'username'})); print('Connected to Trello as:', result['username'])"
```

## Run with MCP Inspector

Start the server through MCP Inspector:

```powershell
uv run mcp dev main.py
```

Connect to the server and select **List Tools**.

The following tools should appear:

```text
add_task
list_tasks
complete_task
delete_task
```

## Tool examples

### Add a task

Tool:

```text
add_task
```

Input:

```json
{
  "title": "Prepare Day 6 MCP article",
  "description": "Add resources and reusable prompts"
}
```

The server creates a card in the Trello **To Do** list.

### List tasks

Tool:

```text
list_tasks
```

Input:

```json
{}
```

This returns the active cards from the configured **To Do** list.

### Complete a task

Tool:

```text
complete_task
```

Input:

```json
{
  "card_id": "your-trello-card-id"
}
```

The card moves from its current list to **Done**.

### Delete a task

Tool:

```text
delete_task
```

Input:

```json
{
  "card_id": "your-trello-card-id"
}
```

The server archives the card instead of permanently deleting it.

Archiving is safer because the card remains recoverable through Trello.

## Structured responses

Trello returns large card objects containing internal metadata.

The MCP server returns only the useful fields:

```json
{
  "id": "trello-card-id",
  "title": "Prepare Day 6 MCP article",
  "description": "Add resources and reusable prompts",
  "completed": false,
  "url": "https://trello.com/c/..."
}
```

This creates a stable boundary between Trello and MCP clients.

## Error handling

The server handles:

- Missing configuration
- Empty task titles
- Empty card IDs
- Invalid card IDs
- Trello HTTP errors
- Authentication failures
- Network failures
- Request timeouts

Expected failures are converted into clear MCP tool errors instead of exposing long internal tracebacks.

## Security

The following values must never be committed or published:

- Trello API token
- Real `.env` contents
- Credentials in screenshots
- Credentials in documentation
- Credentials in Git history

Before committing, verify that `.env` is ignored:

```powershell
git check-ignore -v .env
```

If a token is accidentally committed, revoke it immediately and generate a new one.

## Local storage versus Trello

### Day 4

```text
MCP tool
    ↓
Local Python function
    ↓
tasks.json
```

### Day 5

```text
MCP tool
    ↓
Trello API client
    ↓
Trello REST API
    ↓
Real Trello card
```

The public tool names remain familiar even though the backend implementation changed completely.

## Key lessons

This project demonstrates:

- Building MCP tools with FastMCP
- Connecting MCP to a real external platform
- REST API authentication
- Secure environment-variable configuration
- Asynchronous HTTP requests with `httpx`
- Request timeouts
- Controlled API error handling
- Structured MCP responses
- Separation between MCP logic and integration logic
- Safe deletion through archiving
- Keeping an external system as the source of truth

## Next step

Day 6 will extend this server with:

- MCP resources
- Resource URIs
- Board and card context
- Reusable prompts
- Daily planning workflows
- Weekly task-summary workflows

Day 5 gave the server the ability to act.

Day 6 will give it reusable context and guided workflows.

TDQS

B3.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct action on Trello cards: add, list, complete, and delete. There is no overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (complete_task, delete_task, add_task, list_tasks), making them predictable.

Tool Count5/5

With 4 tools, the server is well-scoped for a basic task manager, covering essential operations without unnecessary bloat.

Completeness3/5

The server lacks an update tool for modifying card details (e.g., description, due dates) and a get-single-card tool, which are notable gaps for a task manager.

Maintenance

ActivitySlowing
ResponsivenessNo issues