Skip to main content
Glama
README.md
# MCP Todo

A todo list server built with the Model Context Protocol (MCP) that supports both stdio and HTTP transports.

## Quick Start

```bash
npm install

# For HTTP server (easier testing)
npm run dev:http

# For MCP stdio (client integration)
MCP_STDIO=1 npm run dev
```

## Setup

```bash
npm install
npm run build
```

## Usage

### Stdio Transport (MCP Client Integration)

For use with MCP clients like Cursor:

```bash
MCP_STDIO=1 npm run dev
```

Configure in Cursor's `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "todo-mcp": {
      "command": "npx",
      "args": ["-y", "tsx", "src/server.ts"],
      "env": {
        "MCP_STDIO": "1"
      }
    }
  }
}
```

### HTTP Transport (Streamable HTTP)

For HTTP-based access with session management:

```bash
npm run dev MCP_STDIO=1 # Starts MCP stdio server
npm run dev:http  # Starts HTTP server on port 3000
# or directly: npx tsx src/http.ts
```

The server exposes endpoints at `http://localhost:3000/mcp`:
- `POST /mcp` - JSON-RPC requests
- `GET /mcp` - SSE stream for server notifications
- `DELETE /mcp` - End session

#### Authentication

Set `TODO_MCP_TOKEN` environment variable to enable bearer token authentication:

```bash
TODO_MCP_TOKEN=your-secret-token npm run dev
```

Then include in requests:
```
Authorization: Bearer your-secret-token
```

## Features

- Add todos with unique IDs
- List all todos with structured output
- Toggle todo completion status
- Remove todos by ID
- Persistent JSON storage in `~/.mcp-todos.json`
- Session-based HTTP transport with SSE support
- Optional bearer token authentication

## Available Tools

- `list_todos` - Get all todos in structured format
- `add_todo` - Add a new todo (requires title)
- `toggle_todo` - Toggle completion status (requires id)
- `remove_todo` - Delete a todo (requires id)

## Resources

- `todos://list` - JSON resource containing all todos

## Architecture

- `src/server.ts` - Core MCP server with todo logic and stdio transport
- `src/http.ts` - HTTP transport wrapper with Express and session management

TDQS

B3.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: add_todo creates items, list_todos retrieves them, remove_todo deletes by ID, and toggle_todo updates completion status. The actions (add, list, remove, toggle) and targets (todos) are unambiguous, making tool selection straightforward for an agent.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case naming: add_todo, list_todos, remove_todo, toggle_todo. The verbs are descriptive and aligned with CRUD operations, and the noun 'todo' is used consistently across all tools, providing a predictable and readable naming convention.

Tool Count5/5

With 4 tools, this server is well-scoped for a todo management domain. Each tool serves a distinct and essential function (create, read, update, delete), and there are no extraneous or missing tools. The count is appropriate for the simple but complete coverage of todo operations.

Completeness5/5

The tool set provides complete CRUD/lifecycle coverage for todo management: add_todo for creation, list_todos for retrieval, remove_todo for deletion, and toggle_todo for updating completion status. There are no obvious gaps, and agents can perform all core operations without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues