Skip to main content
Glama
ahmadbilal339

MCP Task Manager

MCP Task Manager

A beginner-friendly local task manager built with Python and the Model Context Protocol (MCP). It exposes five MCP tools for task management and one read-only resource for pending tasks. All data is persisted locally in tasks.json.

Features

  • Create, list, retrieve, complete, and delete tasks

  • Filter tasks by all, pending, or completed

  • Read pending tasks through an MCP resource

  • Persist task data in a local JSON file

  • Return friendly validation and storage errors

  • Verify behavior with automated pytest tests

Related MCP server: Task Manager MCP Server

MCP Capabilities

Type

Name

Purpose

Tool

add_task

Create and save a pending task

Tool

list_tasks

List tasks with an optional status filter

Tool

get_task

Retrieve one task by ID

Tool

complete_task

Mark a task as completed

Tool

delete_task

Delete a task

Resource

tasks://pending

Return pending tasks as read-only JSON

Project Structure

todo-mcp-server/
├── tests/
│   └── test_server.py
├── .gitignore
├── README.md
├── requirements.txt
├── server.py
└── tasks.json

Requirements

  • Python 3.11 recommended

  • Node.js and npm for MCP Inspector

  • uv for launching the server from Inspector

  • Git for version control

Installation on Windows

git clone https://github.com/YOUR-USERNAME/todo-mcp-server.git
cd todo-mcp-server
python -m venv .venv
.venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
python -m pip install uv

Verify the installation:

python --version
mcp version
uv --version

Run the Tests

python -m pytest tests -v
python -m py_compile server.py

The expected test result is 27 passed.

Run with MCP Inspector

From the activated virtual environment, run:

mcp dev server.py

Keep the terminal open. In the browser:

  1. Keep the transport type set to STDIO.

  2. Click Connect once.

  3. Open Tools to discover and run the five tools.

  4. Open Resources to read tasks://pending.

  5. Press Ctrl+C in the terminal when finished.

Example Demo Flow

  1. Call add_task:

    {
      "title": "Learn MCP",
      "description": "Complete the beginner MCP project"
    }
  2. Call list_tasks with {"status": "all"}.

  3. Call get_task with {"task_id": 1}.

  4. Call complete_task with {"task_id": 1}.

  5. Read tasks://pending; the completed task should be excluded.

  6. Call delete_task with {"task_id": 1}.

  7. Call get_task with {"task_id": 99} to demonstrate a friendly error.

Task Data Format

{
  "id": 1,
  "title": "Learn MCP",
  "description": "Complete the beginner MCP project",
  "completed": false,
  "created_at": "2026-09-12T10:00:00+00:00"
}

Troubleshooting

uv is not recognized

python -m pip install uv
uv --version

Inspector shows Request timed out

  • Confirm that uv --version works.

  • Keep the mcp dev server.py terminal running.

  • Do not repeatedly click Connect.

  • Check the terminal for a server startup error.

ModuleNotFoundError: No module named 'mcp'

.venv\Scripts\activate
python -m pip install -r requirements.txt

Tools do not appear

The Tools and Resources tabs appear only after a successful server connection.

MCP Concepts Demonstrated

  • An MCP client, such as Inspector, discovers and calls server capabilities.

  • A tool performs an operation and may change persisted data.

  • A resource provides read-only data.

  • The stdio transport exchanges MCP JSON-RPC messages through standard input and output.

  • Python type hints and docstrings help generate tool schemas.

Do not use print() for diagnostics in a stdio MCP server because stdout carries protocol messages. Use Python logging, which writes to stderr.

License

This project is intended for educational use.

Related MCP Connectors

Related MCP Servers