Skip to main content
Glama
README.md
# MCP Todo Server

A distributed task management server built on the Model Context Protocol (MCP). Uses TypeScript, Redis for shared state, and OpenAI for smart task analysis.

## Features

- MCP protocol implementation with 6 custom tools
- Multi-node setup with load balancing via Caddy
- Redis for distributed state (works across nodes)
- AI task prioritization using OpenAI
- Docker Compose for easy deployment
- Health monitoring and graceful shutdown

## Available Tools

- `todo_add` - Add new tasks with priority levels
- `todo_list` - List todos with status filtering
- `todo_remove` - Remove specific tasks
- `todo_clear` - Clear all tasks
- `todo_mark_done` - Mark tasks as completed
- `todo_analyze` - Get AI-powered task prioritization

## Architecture

```
┌─────────────┐
│   Caddy     │  Load Balancer
│  Port 3000  │
└──────┬──────┘
       │
       ├────────────┬────────────┐
       ▼            ▼            ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│  Node 1  │ │  Node 2  │ │  Node N  │
│ Port 3001│ │ Port 3002│ │ Port 300N│
└────┬─────┘ └────┬─────┘ └────┬─────┘
     │            │            │
     └────────────┴────────────┘
                  │
            ┌─────▼──────┐
            │   Redis    │  Shared State
            │  Port 6379 │
            └────────────┘
```

## Getting Started

### Prerequisites

- Docker and Docker Compose
- Node.js 18+ (for local dev)
- OpenAI API key

### Installation

1. **Clone the repository**
   ```bash
   git clone https://github.com/yourusername/mcp-todo-server.git
   cd mcp-todo-server
   ```

2. **Set up environment variables**
   ```bash
   cp .env.example .env
   # Edit .env and add your OPENAI_API_KEY
   ```

3. **Start with Docker Compose**
   ```bash
   docker compose up --build
   ```

   This starts:
   - Redis on port 6379
   - MCP Server Node 1 on port 3001
   - MCP Server Node 2 on port 3002
   - Caddy load balancer on port 3000

4. **Verify the deployment**
   ```bash
   curl http://localhost:3000/health
   ```

## API Endpoints

### Health Check
```bash
GET http://localhost:3000/health
```

### MCP Endpoint
```bash
GET/POST http://localhost:3000/mcp
```

Uses Server-Sent Events (SSE) for communication.

## Development

### Running Locally (without Docker)

```bash
# Install dependencies
npm install

# Start Redis
docker run -d -p 6379:6379 redis:7-alpine

# Set environment variables
export REDIS_URL=redis://localhost:6379
export OPENAI_API_KEY=your_key_here
export NODE_ID=dev-node

# Run development server
npm run dev
```

### Build for Production

```bash
npm run build
npm start
```

## Testing

Run the test suite:
```bash
./test.sh
```

Or try the example client:
```bash
npm run test:client
```

## Using with MCP Clients

### VS Code / Cursor

Add to your MCP config:
```json
{
  "mcpServers": {
    "todo": {
      "url": "http://localhost:3000/mcp",
      "transport": "sse"
    }
  }
}
```

### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
  "mcpServers": {
    "todo": {
      "command": "node",
      "args": ["/path/to/mcp-todo-server/dist/main.js"],
      "env": {
        "REDIS_URL": "redis://localhost:6379",
        "OPENAI_API_KEY": "your-key-here"
      }
    }
  }
}
```

## Project Structure

```
.
├── src/
│   ├── main.ts           # Express server & MCP transport
│   ├── mcp-tools.ts      # MCP tool implementations
│   ├── redis-client.ts   # State management
│   └── ai-service.ts     # OpenAI integration
├── docker-compose.yml    # Multi-node orchestration
├── Dockerfile            # Container definition
├── package.json          # Dependencies
├── tsconfig.json         # TypeScript config
├── test.sh              # Automated testing
└── example-client.js    # MCP client example
```

## Security Notes

For production, add:
- Authentication
- HTTPS
- Redis password
- Input validation
- Rate limiting

## Resources

- [Model Context Protocol Docs](https://modelcontextprotocol.io/)
- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)

## License

MIT